Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .claude/commands/check.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ cargo build 2>&1 && cargo clippy -- -D warnings 2>&1 && cargo fmt --check 2>&1 &

All four must pass. Expected test result: 56 pass, 14 skipped (`#[ignore]`).

Also run the vscode-ail quality gate (requires Node 24):
Also run the vscode-ail-chat quality gate (requires Node 24):

```bash
source ~/.nvm/nvm.sh && nvm use 24 && cd vscode-ail && npm run compile && npm test
source ~/.nvm/nvm.sh && nvm use 24 && cd vscode-ail-chat && npm run check
```

Expected: 0 TypeScript errors, 162 tests passing.
Expected: 0 TypeScript errors, lint clean, all vitest tests passing.

If anything fails, stop and fix before reporting success.
17 changes: 10 additions & 7 deletions .github/workflows/ci-extension.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ jobs:
- name: Format check
run: cargo fmt --check

# ── Extension: TypeScript compile + unit tests ────────────────────────────
# ── Extension: TypeScript compile + lint + vitest ─────────────────────────
extension:
name: Extension
runs-on: ubuntu-latest
defaults:
run:
working-directory: vscode-ail
working-directory: vscode-ail-chat
steps:
- uses: actions/checkout@v4

Expand All @@ -63,16 +63,19 @@ jobs:
with:
node-version: "24"
cache: "npm"
cache-dependency-path: vscode-ail/package-lock.json
cache-dependency-path: vscode-ail-chat/package-lock.json

- name: Install dependencies
run: npm ci

- name: Test (with coverage)
run: npm test
- name: Type-check
run: npm run compile

- name: Lint
run: npm run lint

- name: Enforce coverage thresholds
run: node node_modules/.bin/c8 check-coverage --lines 60 --branches 50 --functions 55 node_modules/.bin/mocha "out/src/test/suite/*.test.js"
- name: Test
run: npm test

# ── Integration: run --output-format json with built binary ───────────────
integration:
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/release-extension.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ jobs:
runs-on: ubuntu-latest
defaults:
run:
working-directory: vscode-ail
working-directory: vscode-ail-chat
steps:
- uses: actions/checkout@v4

Expand All @@ -85,7 +85,7 @@ jobs:
with:
node-version: "22"
cache: "npm"
cache-dependency-path: vscode-ail/package-lock.json
cache-dependency-path: vscode-ail-chat/package-lock.json

- name: Install dependencies
run: npm ci
Expand All @@ -96,7 +96,7 @@ jobs:
- name: Download all binaries
uses: actions/download-artifact@v4
with:
path: vscode-ail/dist
path: vscode-ail-chat/dist
merge-multiple: true

- name: Make binaries executable (Unix)
Expand Down Expand Up @@ -135,12 +135,12 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: vsix-packages
path: vscode-ail/*.vsix
path: vscode-ail-chat/*.vsix

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: vscode-ail/*.vsix
files: vscode-ail-chat/*.vsix
name: "VSCode Extension ${{ steps.version.outputs.version }}"
body: |
## ail VSCode Extension v${{ steps.version.outputs.version }}
Expand Down Expand Up @@ -169,7 +169,7 @@ jobs:
if: vars.PUBLISH_TO_MARKETPLACE == 'true'
defaults:
run:
working-directory: vscode-ail
working-directory: vscode-ail-chat
steps:
- uses: actions/checkout@v4

Expand All @@ -185,7 +185,7 @@ jobs:
uses: actions/download-artifact@v4
with:
name: vsix-packages
path: vscode-ail/
path: vscode-ail-chat/

- name: Publish all platforms
env:
Expand Down
10 changes: 5 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ target
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
vscode-ail/node_modules/
vscode-ail/out/
vscode-ail/dist/
vscode-ail/*.vsix
vscode-ail/coverage/
vscode-ail-chat/node_modules/
vscode-ail-chat/out/
vscode-ail-chat/dist/
vscode-ail-chat/*.vsix
vscode-ail-chat/coverage/

# Claude Code agent worktrees (isolated checkouts for background agents)
.claude/worktrees/
4 changes: 2 additions & 2 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

# Fail fast: TypeScript compile check for vscode-ail
cd vscode-ail && npm run compile
# Fail fast: TypeScript compile check for vscode-ail-chat
cd vscode-ail-chat && npm run compile
71 changes: 71 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
ail — Multi-License Overview
============================

This repository contains several artifacts that serve different roles and are
released under different licenses. Each top-level directory listed below
carries its own LICENSE file with the full text of the applicable license.
This file is a navigation aid and does not itself grant any rights beyond
those granted by the per-directory LICENSE files.

| Artifact | License | Full text |
|---------------------|-----------------|-----------------------------------|
| `spec/` | CC BY-SA 4.0 | `spec/LICENSE` |
| `ail-core/` | MPL 2.0 | `ail-core/LICENSE` |
| `ail/` (CLI binary) | AGPL-3.0-only | `ail/LICENSE` |
| `stub-llm/` | MPL 2.0 | `stub-llm/LICENSE` |
| `demo/` | CC0 1.0 | `demo/LICENSE` |
| `vscode-ail-chat/` | MIT | `vscode-ail-chat/LICENSE` |

Rationale
---------

- `spec/` — CC BY-SA 4.0. The specifications are standards documents. Anyone
can implement against them; derivative specs must remain open under the
same share-alike terms.

- `ail-core/` — MPL 2.0. A library intended to be embedded in other software,
including proprietary software. Modifications to `ail-core` files
themselves must be published; combining with other code does not require
relicensing the combined work.

- `ail/` (the CLI binary) — AGPL-3.0-only. The binary is the end-user
application. Running `ail serve` as a network service requires publishing
any modifications, preserving user freedom when the tool is used behind a
network boundary.

- `stub-llm/` — MPL 2.0. A test helper crate; same embeddable treatment as
`ail-core`.

- `demo/` — CC0 1.0. Example pipelines released into the public domain. Copy
freely into any project without attribution.

- `vscode-ail-chat/` — MIT. The VS Code extension. Permissive license matches
marketplace convention so anyone can fork, repackage, or embed the UI code
into other editors and tools with minimal friction.

Other directories
-----------------

The `vscode-ail-legacy/` directory is an archived copy of the previous
extension retained for code reference only. It is not actively developed,
distributed, or packaged. Its `package.json` carries a legacy license
declaration that will be resolved when the directory is deleted.

Contributor License Agreement (CLA)
-----------------------------------

All contributors must sign the `ail` CLA before their pull requests can be
merged. The CLA assigns copyright in contributions to the project maintainer,
preserving the ability to relicense any part of the project in the future.

SPDX identifiers
----------------

Each per-directory LICENSE file corresponds to a standard SPDX identifier:

- spec/ CC-BY-SA-4.0
- ail-core/ MPL-2.0
- ail/ AGPL-3.0-only
- stub-llm/ MPL-2.0
- demo/ CC0-1.0
- vscode-ail-chat/ MIT
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,7 @@ pipeline:
- `--output-format json` — NDJSON event stream for programmatic consumers

**Tooling:**
- [VS Code extension](vscode-ail/) — syntax highlighting and language support for `.ail.yaml` files
- [VS Code chat extension](vscode-ail-chat/) — pipeline graph visualization with collapse/expand for sub-pipelines
- [VS Code extension](vscode-ail-chat/) — chat interface, pipeline graph visualization, and language support for `.ail.yaml` files

**Architecture:**
- Two-crate Rust workspace (`ail-core` library + `ail` binary)
Expand Down Expand Up @@ -359,6 +358,8 @@ Either outcome is useful. The experiment can be designed. If you work in model e
| `ail-core/` | [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/) | Usable in proprietary software; modifications to `ail-core` files themselves must be published. |
| `ail/` (the CLI binary) | [AGPL v3](https://www.gnu.org/licenses/agpl-3.0.html) | Running `ail serve` as a network service requires publishing modifications. |
| `demo/` | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | Examples released into the public domain. Copy freely into any project. |
| `stub-llm/` | [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/) | Test helper treated like `ail-core` — embeddable with share-alike on the crate itself. |
| `vscode-ail-chat/` | [MIT](https://opensource.org/license/mit) | VS Code extension. Permissive license matches marketplace convention so anyone can fork, repackage, or embed the UI code. |

**Contributor License Agreement (CLA):** All contributors must sign the `ail` CLA before their pull requests can be merged. The CLA assigns copyright in your contributions to the project maintainer, preserving the ability to relicense any part of the project in the future.

Expand Down
1 change: 1 addition & 0 deletions ail-core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
name = "ail-core"
version = "0.0.1"
edition = "2021"
license = "MPL-2.0"

[dependencies]
thiserror = "1"
Expand Down
Loading
Loading