@felixdotgo/aidlc-kit 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -6
- package/dist/assets/.agents/aidlc/schemas/manifest.schema.json +1 -1
- package/dist/assets/.agents/aidlc/scripts/lib/context-runtime.mjs +5 -0
- package/dist/assets/.agents/aidlc/scripts/lib/loop-drivers.mjs +6 -1
- package/dist/assets/.agents/aidlc/scripts/lib/loop-fleet.mjs +6 -0
- package/dist/assets/.agents/aidlc/scripts/lib/loop-git.mjs +8 -3
- package/dist/assets/.agents/aidlc/scripts/lib/loop-local-workers.mjs +1 -0
- package/dist/assets/.agents/aidlc/scripts/lib/loop-runtime.mjs +7 -1
- package/dist/assets/.agents/aidlc/scripts/lib/loop-worker-snapshot.mjs +3 -2
- package/dist/assets/.agents/aidlc/scripts/lib/store.mjs +2 -2
- package/dist/assets/.agents/aidlc/scripts/remote-state.mjs +2 -0
- package/dist/assets/.agents/aidlc/scripts/state.mjs +4 -0
- package/dist/services/aidlc-coordination/src/lifecycle-core.mjs +2 -2
- package/dist/src/adapters.js +8 -1
- package/dist/src/cli.js +111 -95
- package/dist/src/context.js +2 -0
- package/dist/src/gate.d.ts +1 -0
- package/dist/src/gate.js +48 -35
- package/dist/src/installer.d.ts +5 -0
- package/dist/src/installer.js +116 -80
- package/dist/src/model.d.ts +1 -1
- package/dist/src/profiles.d.ts +6 -0
- package/dist/src/profiles.js +11 -0
- package/dist/src/project-migration.d.ts +1 -0
- package/dist/src/project-migration.js +7 -0
- package/dist/src/state/archive.d.ts +17 -0
- package/dist/src/state/archive.js +60 -0
- package/dist/src/state/items.d.ts +25 -0
- package/dist/src/state/items.js +146 -0
- package/dist/src/state/lessons.d.ts +7 -0
- package/dist/src/state/lessons.js +67 -0
- package/dist/src/state/lifecycle.d.ts +5 -0
- package/dist/src/state/lifecycle.js +78 -0
- package/dist/src/state/lock.d.ts +7 -0
- package/dist/src/state/lock.js +124 -0
- package/dist/src/state/memory.d.ts +8 -0
- package/dist/src/state/memory.js +88 -0
- package/dist/src/state/render.d.ts +26 -0
- package/dist/src/state/render.js +29 -0
- package/dist/src/state/shared.d.ts +29 -0
- package/dist/src/state/shared.js +71 -0
- package/dist/src/state/store.d.ts +4 -0
- package/dist/src/state/store.js +81 -0
- package/dist/src/state/transitions.d.ts +21 -0
- package/dist/src/state/transitions.js +93 -0
- package/dist/src/state/validate.d.ts +4 -0
- package/dist/src/state/validate.js +100 -0
- package/dist/src/state.d.ts +15 -117
- package/dist/src/state.js +15 -815
- package/dist/src/tracker.d.ts +7 -0
- package/dist/src/tracker.js +3 -0
- package/dist/src/upgrade-board.d.ts +5 -0
- package/dist/src/upgrade-board.js +89 -0
- package/dist/src/upgrade.d.ts +4 -5
- package/dist/src/upgrade.js +197 -214
- package/dist/src/workflow.js +1 -1
- package/docs/README.md +2 -2
- package/docs/architecture.md +4 -1
- package/docs/command-reference.md +15 -12
- package/docs/configuration.md +7 -4
- package/docs/coordination-service.md +5 -2
- package/docs/development.md +15 -1
- package/docs/operating-workflow.md +4 -1
- package/docs/testing-and-release.md +7 -7
- package/package.json +2 -2
package/dist/src/workflow.js
CHANGED
|
@@ -30,7 +30,7 @@ export const manifestFor = (files, adapters) => ({
|
|
|
30
30
|
workflow: "AI-DLC",
|
|
31
31
|
source: "local-package-assets",
|
|
32
32
|
remoteUpdates: false,
|
|
33
|
-
managedBy: "aidlc-
|
|
33
|
+
managedBy: "aidlc-kit",
|
|
34
34
|
adapters,
|
|
35
35
|
files: Object.fromEntries(files.filter((file) => file.ownershipClass === "managed" || !file.ownershipClass).map((file) => [manifestKey(file), {
|
|
36
36
|
hash: contentHash(file.strategy === "managed-block" ? file.content.trimEnd() : file.content),
|
package/docs/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Use this page to choose the guide that matches your role and next task.
|
|
|
8
8
|
2. Read [Operating the workflow](./operating-workflow.md) before asking an agent to change a project.
|
|
9
9
|
3. Use [Configuration](./configuration.md) to configure project rules, profiles, and Codex, Claude Code, and OpenCode permissions.
|
|
10
10
|
4. Keep [Command reference](./command-reference.md) nearby for safe CLI usage.
|
|
11
|
-
5. Read [AI-DLC Coordination service](./coordination-service.md) before enabling remote canonical state.
|
|
11
|
+
5. Read [AI-DLC Coordination service](./coordination-service.md) before enabling remote canonical state — the service and the loop are **experimental and unfinished**, with known bugs and possible breaking changes in every release before `1.0.0`.
|
|
12
12
|
|
|
13
13
|
## For contributors and maintainers
|
|
14
14
|
|
|
@@ -26,6 +26,6 @@ Use this page to choose the guide that matches your role and next task.
|
|
|
26
26
|
| [Development](./development.md) | Contributors | Dependencies, source layout, local commands, and implementation rules. |
|
|
27
27
|
| [Testing and release](./testing-and-release.md) | Maintainers | Test strategy, evaluator, package smoke test, and release checks. |
|
|
28
28
|
| [Architecture](./architecture.md) | Contributors | Boundaries, dependency direction, and source-to-consumer flow. |
|
|
29
|
-
| [AI-DLC Coordination service](./coordination-service.md) | Operators | Opt-in service deployment, state authority, and credential safety. |
|
|
29
|
+
| [AI-DLC Coordination service](./coordination-service.md) | Operators | Opt-in service deployment, state authority, and credential safety. Experimental and unfinished: known bugs, breaking changes possible before `1.0.0`. |
|
|
30
30
|
|
|
31
31
|
When a public command, configuration field, or installed layout changes, update the relevant guide and its validation in the same change.
|
package/docs/architecture.md
CHANGED
|
@@ -45,7 +45,10 @@ The installed kernel consists of contracts, templates, schemas, profiles, and de
|
|
|
45
45
|
| `.agents/data/` | Project owned | Canonical state, task artifacts, derived indexes, memory, and evidence. |
|
|
46
46
|
| `.agents/project/` | Project owned | Local profiles, rules, and evaluation material. |
|
|
47
47
|
|
|
48
|
-
The state machine enforces the lifecycle; gates require explicit human approval; evidence is append-only. Installed scripts remain usable without an `aidlc-
|
|
48
|
+
The state machine enforces the lifecycle; gates require explicit human approval; evidence is append-only. Installed scripts remain usable without an `aidlc-kit` executable or a duplicate board file.
|
|
49
|
+
|
|
50
|
+
> [!WARNING]
|
|
51
|
+
> The interactive-loop support and the end-to-end loop/fleet coordinator described below are **experimental and unfinished**: they contain known bugs and rough edges, and — because the package is still pre-1.0 (`0.x`) — their command surface, configuration fields, and state layout can change incompatibly in any release before `1.0.0`.
|
|
49
52
|
|
|
50
53
|
The interactive loop runs inside the current Codex, Claude Code, or OpenCode conversation. Native workers use local assignment records under `.agents/data/loop/`; those records hold claims and checkpoints while `.agents/data/state/` remains lifecycle authority. The optional headless fleet runner uses the coordination service's PostgreSQL state, fenced lead and worker claims, and Git commit handoff. Its assignment records are operational metadata; task phase, evidence, and gates stay in the canonical lifecycle state. All hosts derive dispatch from task `nextAction` and dependency-ready work.
|
|
51
54
|
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
# Command reference
|
|
2
2
|
|
|
3
|
-
All package commands operate on local files. The examples run version `0.
|
|
3
|
+
All package commands operate on local files. The examples run version `0.1.1` through npm; `npx` may ask permission to fetch that package on first use. Replace `.` with the target project path when needed. For a source checkout, see the [development guide](./development.md).
|
|
4
4
|
|
|
5
5
|
## `init`
|
|
6
6
|
|
|
7
7
|
```sh
|
|
8
|
-
npx --package @felixdotgo/aidlc-kit@0.
|
|
8
|
+
npx --package @felixdotgo/aidlc-kit@0.1.1 aidlc-kit init [path] [--agent <name[,name]> | --all] [--loop-mode off|local|fleet] [--loop-lead codex|claude|opencode] [--loop-workers <id=provider,...>] [--yes] [--dry-run] [--force]
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Plans the installation, prints a preview, and then writes the workflow only after confirmation (or `--yes`). `--dry-run` prints the same plan without writing. If exactly one installed agent is detected, it can be selected automatically. In an interactive terminal, choose multiple agents with the checkbox prompt: use arrow keys to move, Space to toggle, A to toggle all, and Enter to confirm. For scripts and non-interactive terminals, use `--agent <name[,name]>` or `--all`.
|
|
12
12
|
|
|
13
|
-
In interactive setup, choose a loop mode and, when enabled, the lead and worker providers. For non-interactive setup, omit loop options to keep the default off, or specify `--loop-mode local|fleet` together with `--loop-lead` and `--loop-workers` (for example, `--loop-workers a=codex,b=opencode`). The preview includes the project config change. These settings only configure the loop; run `aidlc-
|
|
13
|
+
In interactive setup, choose a loop mode and, when enabled, the lead and worker providers. For non-interactive setup, omit loop options to keep the default off, or specify `--loop-mode local|fleet` together with `--loop-lead` and `--loop-workers` (for example, `--loop-workers a=codex,b=opencode`). The preview includes the project config change. These settings only configure the loop; run `aidlc-kit loop start` to actually start it. The loop and the coordination service are experimental: their flags and defaults may change incompatibly in any release before `1.0.0`.
|
|
14
14
|
|
|
15
15
|
`--force` is for an intentional initial replacement of an unmanaged conflicting file. It is not an upgrade mechanism. If the project already has another workflow package version, use the human-run upgrade flow instead.
|
|
16
16
|
|
|
17
17
|
## `status`
|
|
18
18
|
|
|
19
19
|
```sh
|
|
20
|
-
npx --package @felixdotgo/aidlc-kit@0.
|
|
20
|
+
npx --package @felixdotgo/aidlc-kit@0.1.1 aidlc-kit status [path]
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
Reports the installed version and local installation status. It does not query a registry.
|
|
@@ -25,7 +25,7 @@ Reports the installed version and local installation status. It does not query a
|
|
|
25
25
|
## `doctor`
|
|
26
26
|
|
|
27
27
|
```sh
|
|
28
|
-
npx --package @felixdotgo/aidlc-kit@0.
|
|
28
|
+
npx --package @felixdotgo/aidlc-kit@0.1.1 aidlc-kit doctor [path] [--strict]
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
Checks the local manifest, configuration, and canonical state. `--strict` turns compatibility warnings such as a legacy manifest into errors. It does not query a registry.
|
|
@@ -33,7 +33,7 @@ Checks the local manifest, configuration, and canonical state. `--strict` turns
|
|
|
33
33
|
## `profile validate`
|
|
34
34
|
|
|
35
35
|
```sh
|
|
36
|
-
npx --package @felixdotgo/aidlc-kit@0.
|
|
36
|
+
npx --package @felixdotgo/aidlc-kit@0.1.1 aidlc-kit profile validate [path]
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
Loads `.agents/config.json`, resolves its profile chain, and prints the effective profile order. Use it after changing `extends` or local profiles.
|
|
@@ -41,7 +41,7 @@ Loads `.agents/config.json`, resolves its profile chain, and prints the effectiv
|
|
|
41
41
|
## `uninstall`
|
|
42
42
|
|
|
43
43
|
```sh
|
|
44
|
-
npx --package @felixdotgo/aidlc-kit@0.
|
|
44
|
+
npx --package @felixdotgo/aidlc-kit@0.1.1 aidlc-kit uninstall [path] [--yes] [--dry-run]
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
Prints the removal plan before applying it. It removes eligible unchanged managed assets but preserves project configuration and state. Prefer `--dry-run` first when working in an existing project.
|
|
@@ -49,7 +49,7 @@ Prints the removal plan before applying it. It removes eligible unchanged manage
|
|
|
49
49
|
## `mcp setup`
|
|
50
50
|
|
|
51
51
|
```sh
|
|
52
|
-
npx --package @felixdotgo/aidlc-kit@0.
|
|
52
|
+
npx --package @felixdotgo/aidlc-kit@0.1.1 aidlc-kit mcp setup [path] [--dry-run] [--yes] [--storage sqlite|postgres] [--deployment docker|remote] [--bind localhost|network] [--workspace <id>] [--poll-ms <n>] [--enable]
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
Previews the optional AI-DLC Coordination service configuration, then writes only after confirmation. Non-interactive use requires `--deployment`, `--storage`, `--bind`, and `--workspace`. It never starts Docker; `--enable` is explicit and remote mode has no local fallback. See [AI-DLC Coordination service](./coordination-service.md) for deployment and credential requirements.
|
|
@@ -57,7 +57,7 @@ Previews the optional AI-DLC Coordination service configuration, then writes onl
|
|
|
57
57
|
## `upgrade`
|
|
58
58
|
|
|
59
59
|
```sh
|
|
60
|
-
npx --package @felixdotgo/aidlc-kit@0.
|
|
60
|
+
npx --package @felixdotgo/aidlc-kit@0.1.1 aidlc-kit upgrade [path] [--loop-mode off|local|fleet] [--loop-lead codex|claude|opencode] [--loop-workers <id=provider,...>] [--dry-run]
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
Upgrade is deliberately human-only. The command rejects `--yes` and `--force`; applying it requires an interactive terminal and an exact typed confirmation of the package version. Interactive confirmations use the same styled terminal prompt as `init`. Agents must not run, preview, detect, or suggest package upgrades on their own.
|
|
@@ -69,9 +69,12 @@ The upgrade plan handles supported legacy `.aidlc/` project data transactionally
|
|
|
69
69
|
## `loop`
|
|
70
70
|
|
|
71
71
|
```sh
|
|
72
|
-
npx --package @felixdotgo/aidlc-kit@0.
|
|
72
|
+
npx --package @felixdotgo/aidlc-kit@0.1.1 aidlc-kit loop start|status|resume [options]
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
+
> [!WARNING]
|
|
76
|
+
> The loop commands and fleet mode are **experimental and unfinished**: they contain known bugs and rough edges, and — because the package is still pre-1.0 (`0.x`) — their options, environment variables, and diagnostics can change incompatibly in any release before `1.0.0`.
|
|
77
|
+
|
|
75
78
|
Options: `--task-id <id>` (optional for `start`, which derives one; required for `status`/`resume`), `--root <path>`, and `--mode local|fleet` (defaults to the configured `loop.mode`). `start` reads the requirement from an interactive prompt or stdin — the requirement is never passed as an argument. The command fails closed when the requested mode does not match the configured authority, when another task is actionable, or when a resume record is missing.
|
|
76
79
|
|
|
77
80
|
`status` prints the canonical task, its derived next action, and — in fleet mode — the durable gate checkpoint. `start` and `resume` run the supervisor in the foreground until the next gate, a pause, a blocked state, or completion; the emitted events include each gate view and the waiting state.
|
|
@@ -119,7 +122,7 @@ node .agents/aidlc-coordination/src/fleet-run.mjs coordinator <task-id> --once
|
|
|
119
122
|
node .agents/aidlc-coordination/src/fleet-run.mjs worker --once
|
|
120
123
|
```
|
|
121
124
|
|
|
122
|
-
`supervisor` claims the task's supervisor lease, runs fenced lead turns through the coordinator, publishes each gate snapshot with its checkpoint in one service transaction, waits for the reviewer approval, and resumes automatically; it returns at a pause, blocked state, or completion, and never approves a gate. `coordinator --once` runs a single unattended pass without the supervisor lease. `worker --once` claims one ready assignment on a worker machine; it requires `AIDLC_WORKER_DOCKER_IMAGE` and that machine's worker credential and fails closed without them. `aidlc-
|
|
125
|
+
`supervisor` claims the task's supervisor lease, runs fenced lead turns through the coordinator, publishes each gate snapshot with its checkpoint in one service transaction, waits for the reviewer approval, and resumes automatically; it returns at a pause, blocked state, or completion, and never approves a gate. `coordinator --once` runs a single unattended pass without the supervisor lease. `worker --once` claims one ready assignment on a worker machine; it requires `AIDLC_WORKER_DOCKER_IMAGE` and that machine's worker credential and fails closed without them. `aidlc-kit loop start --mode fleet` wraps the same supervisor with requirement intake and preflight.
|
|
123
126
|
|
|
124
127
|
Fleet mode uses `remote-state.mjs` instead of local `state.mjs`. Set `AIDLC_FLEET_URL`, `AIDLC_FLEET_WORKSPACE`, and `AIDLC_FLEET_PROJECT_ROOT`; lead mutations additionally require `AIDLC_FLEET_TOKEN` and the current `AIDLC_FLEET_LEAD_EPOCH`. Claim an epoch before creating or changing a task:
|
|
125
128
|
|
|
@@ -155,7 +158,7 @@ node .agents/aidlc/scripts/state.mjs gate approve <task-id> --gate <gate> --sour
|
|
|
155
158
|
node .agents/aidlc/scripts/state.mjs task transition <task-id> --to <phase> --mode audited --reason "<reason>" --source "<source>"
|
|
156
159
|
```
|
|
157
160
|
|
|
158
|
-
Self-transitions are rejected, and `task create` rejects an id that collides case-insensitively with an existing task or archive record. `task create` also fails while another unrelated task is actionable; its `--switch-from <ids>` acknowledgement still requires explicit user direction. `--feature <feature-id>` permits sibling tasks in an existing feature without abandoning them. `feature link` checks membership and task dependencies; `task item ... --depends-on <item-id,...> --owns <path,...>` adds item edges and an optional Git path scope. Fleet dispatch requires a nonempty path scope. Missing and cyclic dependencies fail, and an item or feature task cannot finish before its prerequisites. After reopening the Approve plan step, all non-deferred execution items return to `todo`; prior Review implementation, verification, and review evidence cannot satisfy the new build boundary, and repair-bound counters reset with it.
|
|
161
|
+
Self-transitions are rejected, and `task create` rejects an id that collides case-insensitively with an existing task or archive record. `task create` also fails while another unrelated task is actionable; its `--switch-from <ids>` acknowledgement still requires explicit user direction. `--feature <feature-id>` permits sibling tasks in an existing feature without abandoning them. `feature link` checks membership and task dependencies; `task item ... --depends-on <item-id,...> --owns <path,...>` adds item edges and an optional Git path scope. Fleet dispatch requires a nonempty path scope. Path scopes are normalized (trailing slashes stripped) and may name either a file or a directory; directory scopes cover every file beneath them. Missing and cyclic dependencies fail, and an item or feature task cannot finish before its prerequisites. After reopening the Approve plan step, all non-deferred execution items return to `todo`; prior Review implementation, verification, and review evidence cannot satisfy the new build boundary, and repair-bound counters reset with it.
|
|
159
162
|
|
|
160
163
|
State writes and generated workplans use symlink-checked atomic replacement. State-lock release is owner-token checked and never removes a replacement owner's lock. If a process stops after writing a terminal archive record but before committing the catalog, a retry replaces that orphan only when the persisted catalog still contains the same active task identity and does not reference an archive record; malformed, referenced, or identity-conflicting records fail closed.
|
|
161
164
|
|
package/docs/configuration.md
CHANGED
|
@@ -42,10 +42,10 @@ Built-in topology profiles are:
|
|
|
42
42
|
Arrays are stable-deduplicated. Command keys are last-wins, so a project can replace a profile command intentionally. Validate the resolved profile chain with:
|
|
43
43
|
|
|
44
44
|
```sh
|
|
45
|
-
npx --package @felixdotgo/aidlc-kit@0.
|
|
45
|
+
npx --package @felixdotgo/aidlc-kit@0.1.1 aidlc-kit profile validate .
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
This command uses the npm package at version `0.
|
|
48
|
+
This command uses the npm package at version `0.1.1`. To run from a source checkout instead, see the [development guide](./development.md).
|
|
49
49
|
|
|
50
50
|
## Rules, project data, and managed assets
|
|
51
51
|
|
|
@@ -71,10 +71,13 @@ Set the default risk level deliberately. Planning, migrations, cross-service con
|
|
|
71
71
|
|
|
72
72
|
## Optional AI-DLC Coordination
|
|
73
73
|
|
|
74
|
-
`mcp` is absent (or `{ "enabled": false }`) by default. An enabled configuration requires an HTTP(S) `endpoint` and non-empty `workspace`; it may also name a token environment variable, polling interval from 1,000 to 3,600,000 ms, and the enabled Jira/Trello/GitHub Issues preflight providers. See [AI-DLC Coordination service](./coordination-service.md) for the remote-authority and deployment contract.
|
|
74
|
+
`mcp` is absent (or `{ "enabled": false }`) by default. An enabled configuration requires an HTTP(S) `endpoint` and non-empty `workspace`; it may also name a token environment variable, polling interval from 1,000 to 3,600,000 ms, and the enabled Jira/Trello/GitHub Issues preflight providers. See [AI-DLC Coordination service](./coordination-service.md) for the remote-authority and deployment contract. The coordination service is **experimental and unfinished** (known bugs included), and it can change incompatibly in any release before `1.0.0`.
|
|
75
75
|
|
|
76
76
|
## Optional loop configuration
|
|
77
77
|
|
|
78
|
+
> [!WARNING]
|
|
79
|
+
> The loop and the coordination service are **experimental and unfinished**: they contain known bugs and rough edges, and — because the package is still pre-1.0 (`0.x`) — the `loop.*` fields, provider mappings, and environment variables can change incompatibly in any release before `1.0.0`.
|
|
80
|
+
|
|
78
81
|
`loop.mode` can be `off`, `local`, or `fleet`; an absent `loop` field means `off`. The optional `loop.agents` maps one lead and named workers to `codex`, `claude`, or `opencode`, independently of `mcp.providers`:
|
|
79
82
|
|
|
80
83
|
```json
|
|
@@ -88,4 +91,4 @@ Set the default risk level deliberately. Planning, migrations, cross-service con
|
|
|
88
91
|
|
|
89
92
|
When any selected provider is `opencode`, set `AIDLC_OPENCODE_MODEL` to a `provider/model[#variant]` value such as `opencode-go/gpt-6-luna`. The provider turn fails closed without a valid value. Docker-isolated lead turns, local Docker worker batches, and fleet worker containers reject OpenCode with `OpenCode workers require file-based credentials and are not available in isolated containers yet`; they do not fall back to the host.
|
|
90
93
|
|
|
91
|
-
Configure this field through the init or human-run upgrade preview, or edit the project-owned config deliberately. Provider credentials do not belong in this object. The configuration is an opt-in selection; it does not install or start a service, authorize an upgrade, or grant gate approval. Selecting a mode alone does not start the loop — run `aidlc-
|
|
94
|
+
Configure this field through the init or human-run upgrade preview, or edit the project-owned config deliberately. Provider credentials do not belong in this object. The configuration is an opt-in selection; it does not install or start a service, authorize an upgrade, or grant gate approval. Selecting a mode alone does not start the loop — run `aidlc-kit loop start` explicitly. Existing fleet operations and storage requirements are documented in [Coordination service](./coordination-service.md).
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# AI-DLC Coordination service
|
|
2
2
|
|
|
3
|
+
> [!WARNING]
|
|
4
|
+
> The coordination service (and the end-to-end loop that builds on it) is **experimental and unfinished**: it contains known bugs and rough edges. The package is pre-1.0 (`0.x`), so setup flags, `mcp.*`/`loop.*` configuration, endpoints, environment variables, and storage behaviour can change incompatibly in any release before `1.0.0`. Do not treat it as a stable dependency yet.
|
|
5
|
+
|
|
3
6
|
The optional AI-DLC Coordination service is a separate Docker-deployable authority for a workflow workspace. It is disabled by default: without an enabled `mcp` block, installed lifecycle scripts remain local and make no network calls.
|
|
4
7
|
|
|
5
8
|
## Safe setup
|
|
@@ -7,11 +10,11 @@ The optional AI-DLC Coordination service is a separate Docker-deployable authori
|
|
|
7
10
|
Preview a configuration first. Outside an interactive terminal, provide all four selection flags.
|
|
8
11
|
|
|
9
12
|
```sh
|
|
10
|
-
npx --package @felixdotgo/aidlc-kit@0.
|
|
13
|
+
npx --package @felixdotgo/aidlc-kit@0.1.1 aidlc-kit mcp setup . --dry-run \
|
|
11
14
|
--deployment docker --storage sqlite --bind localhost --workspace engineering
|
|
12
15
|
```
|
|
13
16
|
|
|
14
|
-
This command uses the npm package at version `0.
|
|
17
|
+
This command uses the npm package at version `0.1.1`. To run from a source checkout instead, see the [development guide](./development.md).
|
|
15
18
|
|
|
16
19
|
Remove `--dry-run` and confirm to create `.agents/aidlc-coordination/` and update `.agents/config.json`. Setup does not start Docker. Copy `.env.example` to a secret-managed `.env`, review it, then start explicitly:
|
|
17
20
|
|
package/docs/development.md
CHANGED
|
@@ -74,7 +74,7 @@ To test the package before release, create its `.tgz` archive and run the local
|
|
|
74
74
|
|
|
75
75
|
```sh
|
|
76
76
|
npm pack
|
|
77
|
-
npx --package felixdotgo-aidlc-kit-0.
|
|
77
|
+
npx --package felixdotgo-aidlc-kit-0.1.1.tgz -- aidlc-kit init .
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
`npx` runs the archive without publishing it. Run the command from the directory containing the archive. Use a disposable project instead of `.` if you do not want the command to write workflow files into the current directory.
|
|
@@ -95,6 +95,20 @@ The TypeScript implementation powers the package CLI. Installed projects use a d
|
|
|
95
95
|
|
|
96
96
|
Likewise, a public configuration or schema change must update its validator, JSON schema, installed assets, package inventory, documentation, and tests together.
|
|
97
97
|
|
|
98
|
+
## Code style and conventions
|
|
99
|
+
|
|
100
|
+
Adopted as the project baseline (approved decision `D1-convention-standard` on task `refactor-source-readability`):
|
|
101
|
+
|
|
102
|
+
- **Strict TypeScript, no new dependencies for tooling.** Keep `strict` mode; enforce via `npm run lint` (`tsc --noEmit`). No ESLint/Prettier for now.
|
|
103
|
+
- **File size targets.** Aim for ≤250 lines per source file and ≤60 lines per function; split by domain responsibility when exceeded.
|
|
104
|
+
- **Module boundaries.** One responsibility per module; a facade module may re-export a public API for compatibility (for example `src/state.ts`).
|
|
105
|
+
- **Naming.** Descriptive camelCase for functions/variables, `PascalCase` for types/interfaces, `SCREAMING_SNAKE_CASE` for true constants; file names match their primary export.
|
|
106
|
+
- **Error handling.** Fail with typed, one-line errors; never swallow exceptions silently; validate inputs before I/O.
|
|
107
|
+
- **Dependencies.** Pass dependencies (fetch, clock, environment) explicitly as parameters; avoid module-level mutable state.
|
|
108
|
+
- **Public API.** Document exported symbols with JSDoc when the contract is non-obvious.
|
|
109
|
+
- **Behavior preservation.** Refactors must not change CLI output, state schema, file layout, or installed assets; run parity tests.
|
|
110
|
+
- **Verification.** Run the narrowest relevant test while iterating; `npm test` + `npm run lint` before handing off.
|
|
111
|
+
|
|
98
112
|
## Safe implementation rules
|
|
99
113
|
|
|
100
114
|
- Resolve all project-relative paths through the shared path helpers; reject traversal and symlink escape.
|
|
@@ -116,7 +116,10 @@ See [Configuration](./configuration.md) for project customisation and [Command r
|
|
|
116
116
|
|
|
117
117
|
## Optional end-to-end loop
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
> [!WARNING]
|
|
120
|
+
> The end-to-end loop and the coordination service are **experimental and unfinished**: they contain known bugs and rough edges, and — because the package is still pre-1.0 (`0.x`) — their commands, configuration, and recovery behaviour can change incompatibly in any release before `1.0.0`.
|
|
121
|
+
|
|
122
|
+
When the project enables `loop.mode`, `aidlc-kit loop start` accepts a requirement once (interactive prompt or stdin), creates exactly one task under the configured authority, and runs the loop to the first gate or to completion. `loop status` reports the canonical task and gate checkpoint; `loop resume` continues after an interruption. The intake is idempotent: re-running `start` with the same task ID and requirement reuses the existing task, and it refuses to create a second task while another one is actionable.
|
|
120
123
|
|
|
121
124
|
The loop never approves a gate itself. At each gate it publishes the review packet and waits; in local mode approval happens only through the trusted host terminal command, and in fleet mode only through the reviewer credential against the published snapshot and revision. After a real approval the running supervisor re-reads the canonical state and checkpoint, re-acquires its fenced lease, and resumes automatically. If the supervisor is not running at approval time, restart it and it reconciles from the checkpoint; a consumed, stale, or mismatched checkpoint stops for manual reconciliation instead of guessing. Restarting never resumes a paused or handed-off task, an outdated snapshot, or an uncertain Git result — those require the documented recovery actions.
|
|
122
125
|
|
|
@@ -77,7 +77,7 @@ AIDLC_TEST_PROJECT="$(mktemp -d /tmp/aidlc-project.XXXXXX)"
|
|
|
77
77
|
|
|
78
78
|
npm run build
|
|
79
79
|
npm pack --pack-destination "$AIDLC_PACK_DIR"
|
|
80
|
-
tar -xzf "$AIDLC_PACK_DIR/felixdotgo-aidlc-kit-0.
|
|
80
|
+
tar -xzf "$AIDLC_PACK_DIR/felixdotgo-aidlc-kit-0.1.1.tgz" -C "$AIDLC_EXTRACT_DIR"
|
|
81
81
|
node "$AIDLC_EXTRACT_DIR/package/dist/src/cli.js" init "$AIDLC_TEST_PROJECT" --agent codex --dry-run
|
|
82
82
|
node "$AIDLC_EXTRACT_DIR/package/dist/src/cli.js" init "$AIDLC_TEST_PROJECT" --agent codex --yes
|
|
83
83
|
node "$AIDLC_EXTRACT_DIR/package/dist/src/cli.js" status "$AIDLC_TEST_PROJECT"
|
|
@@ -100,7 +100,7 @@ node dist/dev/evaluator/cli.js run --runner local-simulated
|
|
|
100
100
|
|
|
101
101
|
Runners exchange JSON, and reports capture transport, transcript, normalised events, usage, and diagnostics. Real Codex, Claude Code, or OpenCode runs can consume credentials and model budget; they are not required for ordinary development verification.
|
|
102
102
|
|
|
103
|
-
The pinned `opencode-
|
|
103
|
+
The pinned `opencode-beam` runner uses adapter `opencode` with model `opencode-go/beam-free`, version `opencode-2.2.0`, protocol version `2`, real evidence, and a 300000 ms timeout; the `economy` category is pinned to the lighter `opencode-go/beam-free#medium` variant so heavier turns stay inside that timeout. It runs `opencode run --format json --standalone --auto` once per turn, resumes with `--session`, and writes `opencode.json` containing `{"mcp": {}}` into each scenario workspace so project MCP servers do not leak into the evaluation. OpenCode resolves its project directory from the inherited `PWD`, not the spawned process working directory, so the runner and the loop driver pin `PWD` to the workspace; without that pin, commands would silently run in the invoking repository. OpenCode has no environment-credential mode, so the runner reuses the local Console authentication; the residual risk is that user plugins or agents can still load. That isolation is workspace configuration, not a security boundary.
|
|
104
104
|
|
|
105
105
|
The release-eligible `aidlc-official-agentic` suite is version `2.5.0`. Its `supported-adapters` scenario asks the agent to explain that the workflow supports Codex, Claude Code, and OpenCode without executing remote code or shell strings. The suite also includes `build-multi-item-continuation`, which starts with three canonical build items and requires one agent run to complete all of them, record verification/review evidence, and stop only at a ready G2. This complements unit guards by exercising the model-facing continuation contract.
|
|
106
106
|
|
|
@@ -126,17 +126,17 @@ Publishing, tagging, committing, and pushing are separate human-authorised actio
|
|
|
126
126
|
|
|
127
127
|
## First npm publication
|
|
128
128
|
|
|
129
|
-
The first release is `@felixdotgo/aidlc-kit@0.
|
|
129
|
+
The first release is `@felixdotgo/aidlc-kit@0.1.1`, with public access and the `latest` dist-tag. Complete the release checks and the project's human review gates before publishing.
|
|
130
130
|
|
|
131
131
|
From the repository root, sign in to an npm account with permission to publish to the `@felixdotgo` scope and confirm the active account:
|
|
132
132
|
|
|
133
133
|
```sh
|
|
134
134
|
npm login --registry https://registry.npmjs.org
|
|
135
135
|
npm whoami --registry https://registry.npmjs.org
|
|
136
|
-
npm view @felixdotgo/aidlc-kit@0.
|
|
136
|
+
npm view @felixdotgo/aidlc-kit@0.1.1 version --registry https://registry.npmjs.org
|
|
137
137
|
```
|
|
138
138
|
|
|
139
|
-
An unpublished package normally returns `404` from `npm view`; that response does not establish scope ownership or publish permission. If `0.
|
|
139
|
+
An unpublished package normally returns `404` from `npm view`; that response does not establish scope ownership or publish permission. If `0.1.1` already exists, stop: npm versions cannot be overwritten. If `npm whoami` returns `401`, sign in again before publishing.
|
|
140
140
|
|
|
141
141
|
After inspecting the local tarball and documentation, publish from the repository root:
|
|
142
142
|
|
|
@@ -149,8 +149,8 @@ npm publish --access public --tag latest --registry https://registry.npmjs.org
|
|
|
149
149
|
Confirm the published version, dist-tag and artifact metadata:
|
|
150
150
|
|
|
151
151
|
```sh
|
|
152
|
-
npm view @felixdotgo/aidlc-kit@0.
|
|
152
|
+
npm view @felixdotgo/aidlc-kit@0.1.1 version dist.tarball dist.integrity --json --registry https://registry.npmjs.org
|
|
153
153
|
npm view @felixdotgo/aidlc-kit dist-tags --json --registry https://registry.npmjs.org
|
|
154
154
|
```
|
|
155
155
|
|
|
156
|
-
Expect version `0.
|
|
156
|
+
Expect version `0.1.1`, a tarball URL and integrity value, and `latest` pointing to `0.1.1`. Git tags, GitHub releases, commits, and pushes require their own delivery authorisation.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@felixdotgo/aidlc-kit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Install a local, agent-adapted AI-DLC workflow into a project.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-dlc",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"license": "MIT",
|
|
23
23
|
"type": "module",
|
|
24
24
|
"bin": {
|
|
25
|
-
"aidlc-
|
|
25
|
+
"aidlc-kit": "dist/src/cli.js"
|
|
26
26
|
},
|
|
27
27
|
"files": [
|
|
28
28
|
"dist/src",
|