@felixdotgo/aidlc-kit 0.2.0 → 0.3.0
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/DEVELOPMENT.md +13 -26
- package/README.md +35 -39
- package/dist/assets/.agents/aidlc/orchestrator.md +1 -1
- package/dist/assets/.agents/aidlc/schemas/state.schema.json +2 -0
- package/dist/assets/.agents/aidlc/scripts/lib/assignment-store.mjs +94 -48
- package/dist/assets/.agents/aidlc/scripts/lib/context-runtime.mjs +5 -4
- package/dist/assets/.agents/aidlc/scripts/lib/loop-authority.mjs +21 -5
- package/dist/assets/.agents/aidlc/scripts/lib/loop-daemon.mjs +52 -78
- package/dist/assets/.agents/aidlc/scripts/lib/loop-drivers.mjs +88 -14
- package/dist/assets/.agents/aidlc/scripts/lib/loop-env.mjs +279 -0
- package/dist/assets/.agents/aidlc/scripts/lib/loop-fleet-cli.mjs +20 -5
- package/dist/assets/.agents/aidlc/scripts/lib/loop-fleet-remote.mjs +10 -1
- package/dist/assets/.agents/aidlc/scripts/lib/loop-fleet-supervisor.mjs +2 -1
- package/dist/assets/.agents/aidlc/scripts/lib/loop-fleet.mjs +3 -2
- package/dist/assets/.agents/aidlc/scripts/lib/loop-git.mjs +9 -3
- package/dist/assets/.agents/aidlc/scripts/lib/loop-holder.mjs +376 -0
- package/dist/assets/.agents/aidlc/scripts/lib/loop-intake.mjs +11 -3
- package/dist/assets/.agents/aidlc/scripts/lib/loop-lease.mjs +67 -61
- package/dist/assets/.agents/aidlc/scripts/lib/loop-leases.mjs +268 -0
- package/dist/assets/.agents/aidlc/scripts/lib/loop-local-workers.mjs +78 -17
- package/dist/assets/.agents/aidlc/scripts/lib/loop-runtime.mjs +42 -10
- package/dist/assets/.agents/aidlc/scripts/lib/loop-stream.mjs +66 -9
- package/dist/assets/.agents/aidlc/scripts/lib/loop-supervisor-local.mjs +16 -56
- package/dist/assets/.agents/aidlc/scripts/lib/loop-supervisor-run-local.mjs +12 -6
- package/dist/assets/.agents/aidlc/scripts/lib/loop-worker-docker.mjs +14 -2
- package/dist/assets/.agents/aidlc/scripts/lib/loop-worker-log.mjs +158 -0
- package/dist/assets/.agents/aidlc/scripts/lib/repo-head.mjs +22 -0
- package/dist/assets/.agents/aidlc/scripts/lib/store.mjs +11 -0
- package/dist/assets/.agents/aidlc/scripts/lib/task-runtime-migrate.mjs +75 -0
- package/dist/assets/.agents/aidlc/scripts/lib/task-runtime.mjs +97 -0
- package/dist/assets/.agents/aidlc/scripts/loop-entry.mjs +87 -4
- package/dist/assets/.agents/aidlc/scripts/loop.cmd +101 -0
- package/dist/assets/.agents/aidlc/scripts/loop.sh +71 -0
- package/dist/assets/.agents/aidlc/scripts/remote-state.mjs +10 -4
- package/dist/assets/.agents/aidlc/scripts/state.mjs +16 -8
- package/dist/assets/ui/changes.js +83 -0
- package/dist/assets/ui/common.js +664 -0
- package/dist/assets/ui/dashboard.css +281 -59
- package/dist/assets/ui/dashboard.js +77 -0
- package/dist/assets/ui/detail.js +159 -0
- package/dist/assets/ui/live-log.js +332 -0
- package/dist/services/aidlc-coordination/package.json +1 -1
- package/dist/services/aidlc-coordination/src/lifecycle-core.mjs +11 -0
- package/dist/src/cli/argv.js +10 -4
- package/dist/src/cli/commands.js +52 -22
- package/dist/src/cli/loop-launcher.d.ts +47 -0
- package/dist/src/cli/loop-launcher.js +322 -0
- package/dist/src/cli.js +3 -0
- package/dist/src/installer.js +4 -2
- package/dist/src/model/records.d.ts +4 -0
- package/dist/src/state/validate.js +5 -0
- package/dist/src/task-ui.d.ts +31 -52
- package/dist/src/task-ui.js +25 -1562
- package/dist/src/ui/assets.d.ts +14 -0
- package/dist/src/ui/assets.js +45 -0
- package/dist/src/ui/changes.d.ts +83 -0
- package/dist/src/ui/changes.js +498 -0
- package/dist/src/ui/containers.d.ts +71 -0
- package/dist/src/ui/containers.js +214 -0
- package/dist/src/ui/daemon.d.ts +75 -0
- package/dist/src/ui/daemon.js +232 -0
- package/dist/src/ui/data.d.ts +42 -0
- package/dist/src/ui/data.js +89 -0
- package/dist/src/ui/docs.d.ts +13 -0
- package/dist/src/ui/docs.js +39 -0
- package/dist/src/ui/files.d.ts +3 -0
- package/dist/src/ui/files.js +20 -0
- package/dist/src/ui/http.d.ts +14 -0
- package/dist/src/ui/http.js +80 -0
- package/dist/src/ui/live.d.ts +5 -0
- package/dist/src/ui/live.js +43 -0
- package/dist/src/ui/markdown.d.ts +2 -0
- package/dist/src/ui/markdown.js +127 -0
- package/dist/src/ui/options.d.ts +48 -0
- package/dist/src/ui/options.js +81 -0
- package/dist/src/ui/security.d.ts +34 -0
- package/dist/src/ui/security.js +38 -0
- package/dist/src/ui/server.d.ts +39 -0
- package/dist/src/ui/server.js +347 -0
- package/dist/src/ui/sse.d.ts +14 -0
- package/dist/src/ui/sse.js +281 -0
- package/dist/src/ui/views/board.d.ts +7 -0
- package/dist/src/ui/views/board.js +131 -0
- package/dist/src/ui/views/changes.d.ts +19 -0
- package/dist/src/ui/views/changes.js +154 -0
- package/dist/src/ui/views/components.d.ts +56 -0
- package/dist/src/ui/views/components.js +113 -0
- package/dist/src/ui/views/docs.d.ts +15 -0
- package/dist/src/ui/views/docs.js +64 -0
- package/dist/src/ui/views/layout.d.ts +44 -0
- package/dist/src/ui/views/layout.js +233 -0
- package/dist/src/ui/views/task.d.ts +25 -0
- package/dist/src/ui/views/task.js +320 -0
- package/dist/src/upgrade.js +5 -2
- package/dist/src/workflow.d.ts +4 -0
- package/dist/src/workflow.js +33 -1
- package/docs/README.md +48 -33
- package/docs/architecture.md +101 -38
- package/docs/command-reference.md +269 -93
- package/docs/configuration.md +62 -42
- package/docs/coordination-service.md +85 -36
- package/docs/design-decisions.md +35 -31
- package/docs/development.md +111 -61
- package/docs/loop-local-run.md +135 -402
- package/docs/loop-runbook.md +84 -105
- package/docs/operating-workflow.md +55 -42
- package/docs/testing-and-release.md +70 -51
- package/docs/troubleshooting.md +165 -69
- package/package.json +1 -1
package/docs/architecture.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Architecture
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
One Node.js/TypeScript package: the CLI installs and maintains static AI-DLC workflow assets; installed projects run dependency-free scripts locally.
|
|
4
4
|
|
|
5
5
|
## Source-to-consumer flow
|
|
6
6
|
|
|
@@ -14,56 +14,117 @@ dist/assets/.agents/ + dist/src/
|
|
|
14
14
|
consumer project: .agents/aidlc/ + .agents/skills/ + project-owned .agents/data/
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- **Source layout** is this repository's editable `assets/aidlc/` and `skills/` tree.
|
|
20
|
-
- **Bundle layout** is generated under `dist/assets/.agents/` for package publication.
|
|
21
|
-
- **Installed layout** is written under a consumer project's `.agents/` directory.
|
|
22
|
-
|
|
23
|
-
`dist/` is generated. Source assets and installed assets must remain behaviourally aligned through the bundle and package-smoke tests.
|
|
17
|
+
Layouts: **source** (editable `assets/aidlc/`, `skills/`), **bundle** (generated `dist/assets/.agents/`, never hand-edited), **installed** (consumer `.agents/`); bundle and package-smoke tests keep them aligned.
|
|
24
18
|
|
|
25
19
|
## Module boundaries
|
|
26
20
|
|
|
27
21
|
| Boundary | Modules | Responsibility |
|
|
28
22
|
| --- | --- | --- |
|
|
29
|
-
| CLI and installation | `src/cli.ts` + `src/cli/` (`argv`, `options`, `prompt`, `commands`
|
|
30
|
-
| Shared planning core | `src/managed-planning.ts` |
|
|
31
|
-
| Lifecycle domain | `src/model/` (barrel `src/model.ts`), `src/state/` (barrel `src/state.ts
|
|
32
|
-
| Profiles
|
|
33
|
-
| Migration | `src/upgrade.ts`, `src/project-migration.ts`, `src/legacy.ts`, `src/upgrade-board.ts` |
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
37
|
-
|
|
23
|
+
| CLI and installation | `src/cli.ts` + `src/cli/` (`argv`, `options`, `prompt`, `commands`), `src/installer.ts`, `src/workflow.ts`, `src/adapters.ts`, `src/mcp-setup.ts` | Parse commands, select adapters, plan deterministic writes, install managed assets (incl. coordination-service template), status/doctor. |
|
|
24
|
+
| Shared planning core | `src/managed-planning.ts` | Manifest reading, inventory keys, managed-file planning ladder (create/skip/update/conflict), init vs upgrade policies. |
|
|
25
|
+
| Lifecycle domain | `src/model/` (barrel `src/model.ts`), `src/state/` (barrel `src/state.ts`), `src/gate.ts`, `src/context.ts` | Validate state, compute transitions and gate readiness, classify next actions, build phase packets. |
|
|
26
|
+
| Profiles | `src/profiles.ts` | Resolve and validate config/profiles (incl. schema-only `tracker`), expand effective rules. |
|
|
27
|
+
| Migration | `src/upgrade.ts`, `src/project-migration.ts`, `src/legacy.ts`, `src/upgrade-board.ts` | Legacy-data and version-layout migration (incl. legacy `BOARD.md`) with audit backups. |
|
|
28
|
+
| Web dashboard | `src/task-ui.ts` (barrel) over `src/ui/`; browser scripts `assets/ui/*.js` | Serve `aidlc-kit ui` dependency-free; mutations only spawn installed scripts, never write state. |
|
|
29
|
+
| Shared file semantics | `src/project-path.ts`, `src/managed-content.ts` | Path containment, unsafe-symlink rejection, managed-block marker format. |
|
|
30
|
+
| Development evaluator | `dev/evaluator/` | Repository-only; never in the published CLI. |
|
|
31
|
+
|
|
32
|
+
`src/state/`: `io`, `paths`, `domain`, `guards`, `archive-record`, `items`, `commands`, `transitions`, `validate`, `store`, `memory`, `lessons`, `lifecycle`, `render`, `migrate`, `lock`.
|
|
33
|
+
|
|
34
|
+
### Web dashboard modules
|
|
35
|
+
|
|
36
|
+
- `src/ui/server`: route table (`ROUTES`) and `startUiServer`.
|
|
37
|
+
- `src/ui/security`: Host and request-shape checks (Origin, `Sec-Fetch-Site`, custom header); there is no session token.
|
|
38
|
+
- `src/ui/containers`: per-task worker container index and raw log tail (`.agents/data/tasks/<id>/runtime/workers/`), with `docker ps` enrichment.
|
|
39
|
+
- `src/ui/changes`: code changes with one source order for every mode (fleet snapshot → assignments → task range from `baseCommit`/`finalCommit` → working tree).
|
|
40
|
+
- `src/ui/options`, `src/ui/http`: option parsing, HTTP helpers.
|
|
41
|
+
- `src/ui/assets`: whitelisted static CSS/JS from `assets/ui/`.
|
|
42
|
+
- `src/ui/daemon`: daemon status, health, spawned script actions.
|
|
43
|
+
- `src/ui/data`: local and fleet reads.
|
|
44
|
+
- `src/ui/changes`: task diffs via Git.
|
|
45
|
+
- `src/ui/live`, `src/ui/sse`: `/api/live` regions and `/api/events`.
|
|
46
|
+
- `src/ui/markdown`: Markdown rendering.
|
|
47
|
+
- `src/ui/docs`: read-only packaged `docs/*.md` via the fixed `DOC_PAGES` whitelist.
|
|
48
|
+
- `src/ui/files`: byte-range file reads, optionally refusing symlinks.
|
|
49
|
+
- `src/ui/views/`: `layout`, `components`, `board`, `task`, `changes`, `docs`.
|
|
50
|
+
- `assets/ui/*.js`: plain browser scripts `common`, `dashboard`, `detail`, `live-log`, `changes`.
|
|
51
|
+
|
|
52
|
+
New page: route in `ROUTES` (`src/ui/server.ts`) + view in `src/ui/views/`.
|
|
53
|
+
|
|
54
|
+
### Dependency direction
|
|
55
|
+
|
|
56
|
+
- Inward only: CLI, installation, migration depend on planning core, lifecycle, shared helpers.
|
|
57
|
+
- Planning core depends only on `model`, `workflow`, `managed-content`, `profiles`; never on CLI, installer, or upgrade.
|
|
58
|
+
- Migration never imports installation (`upgrade.ts` uses `managed-planning.ts` directly); the only `installer.ts` → `project-migration.ts` edge is init-time legacy-layout planning.
|
|
59
|
+
- Lifecycle never depends on installation; the evaluator may provision one but is not published runtime.
|
|
60
|
+
- `src/ledger.ts` and `src/tracker.ts` were removed as dead code; `tracker` config is schema-only (`TrackerConfig`).
|
|
38
61
|
|
|
39
62
|
## Installed workflow runtime
|
|
40
63
|
|
|
41
|
-
|
|
64
|
+
Kernel: contracts, templates, schemas, profiles, dependency-free scripts in `.agents/aidlc/`, reached via thin adapter instructions. Customisation stays outside:
|
|
42
65
|
|
|
43
66
|
| Location | Ownership | Purpose |
|
|
44
67
|
| --- | --- | --- |
|
|
45
|
-
| `.agents/aidlc/` | Package managed | Lifecycle contracts, schemas,
|
|
46
|
-
| `.agents/data/` | Project owned | Canonical state, task artifacts, derived indexes, memory,
|
|
47
|
-
| `.agents/project/` | Project owned | Local profiles, rules,
|
|
68
|
+
| `.agents/aidlc/` | Package managed | Lifecycle contracts, schemas, scripts. |
|
|
69
|
+
| `.agents/data/` | Project owned | Canonical state, task artifacts, derived indexes, memory, evidence. |
|
|
70
|
+
| `.agents/project/` | Project owned | Local profiles, rules, evaluation material. |
|
|
48
71
|
|
|
49
|
-
|
|
72
|
+
State machine enforces the lifecycle; gates need human approval; evidence is append-only; no `aidlc-kit` executable or duplicate board file needed.
|
|
73
|
+
|
|
74
|
+
### Loop runtime
|
|
50
75
|
|
|
51
76
|
> [!WARNING]
|
|
52
|
-
>
|
|
77
|
+
> Experimental, pre-1.0. See [Status and stability](./loop-runbook.md#status-and-stability).
|
|
78
|
+
|
|
79
|
+
Dispatch derives from task `nextAction` and dependency-ready work; assignment records are operational metadata; phase, evidence, gates stay canonical. Selecting a mode only configures; `loop start` (or `loop up`) runs.
|
|
53
80
|
|
|
54
|
-
|
|
81
|
+
| Variant | Authority | How it runs |
|
|
82
|
+
| --- | --- | --- |
|
|
83
|
+
| Interactive | Local `.agents/data/state/` | In the current agent conversation; native workers claim and checkpoint via assignment records in the task's `runtime/` directory. |
|
|
84
|
+
| Local | Local `.agents/data/state/` | Singleton daemon (`loop start` or `loop.sh up`): host-executed lead, Docker-isolated workers; gate approval only via trusted host terminal or dashboard. |
|
|
85
|
+
| Fleet | Coordination service | Service owns supervisor leases, gate checkpoints, reviewer approval; Docker workers hold own credentials; Git uses fenced lead/worker claims with commit handoff. SQLite single-host, PostgreSQL multi-host. |
|
|
86
|
+
|
|
87
|
+
Every variant is a wrapper around the same data: the canonical task state (including `baseCommit`/`finalCommit`, written by `state.mjs` locally and `remote-state.mjs` in fleet mode through the shared core) and the task directory `.agents/data/tasks/<id>/`. Review artifacts (`intent.md`, `design.md`, `workplan.md`) sit at its root; everything operational sits under `runtime/`, identical for the no-loop workflow, the local loop, and fleet (one helper, `lib/task-runtime.mjs`, names every path and refuses symlinked components):
|
|
88
|
+
|
|
89
|
+
| `.agents/data/tasks/<id>/runtime/` | Written by | Purpose |
|
|
90
|
+
| --- | --- | --- |
|
|
91
|
+
| `assignments.json`, `assignments.lock` | `assignment.mjs` (interactive), local supervisor | worker claims (local only; fleet claims live in the service) |
|
|
92
|
+
| `events.jsonl` (+ `.1`) | `loop-stream.mjs` | the task's event history (dashboard live log) |
|
|
93
|
+
| `run.json` | `loop-runtime.mjs` | the loop run record (run id, agent, status, session, checkpoint) |
|
|
94
|
+
| `intake.json`, `requirement.md` | loop intake | loop ownership and the requirement text |
|
|
95
|
+
| `workers/index.json`, `workers/<assignment>.log` | local and fleet workers | container index and raw output |
|
|
55
96
|
|
|
56
|
-
|
|
97
|
+
`.agents/data/loop/` holds only daemon and process state: `daemon.lock`, `daemon.log`, `daemon.stop`, the global `ui-events.jsonl`, `ui.json`/`cli.json`, task leases (`<id>.lease`), the lead checkpoint (`<id>.supervisor.json`) and gate receipt. Both directories are operational: never committed, handed off, or clean-checked, and the installer's `.agents/.gitignore` excludes them. Files written by versions before this layout are read in place and moved by `aidlc-kit loop migrate-data` or the daemon at start ([Command reference](./command-reference.md#loop)).
|
|
98
|
+
|
|
99
|
+
**Agent support.**
|
|
100
|
+
|
|
101
|
+
- Host-executed lead turns: Codex, Claude Code, OpenCode.
|
|
102
|
+
- Container-isolated lead turns: Codex, Claude Code; OpenCode rejected with a diagnostic (file-based credentials; `lib/loop-lead-sandbox.mjs`).
|
|
103
|
+
- Docker workers (local and fleet): all three; OpenCode uses environment credentials, XDG roots redirected into the ephemeral worker HOME (`lib/loop-worker-docker.mjs`).
|
|
104
|
+
|
|
105
|
+
**Leases, locks, and claims.** One holder-file primitive (`lib/loop-holder.mjs`), three meanings:
|
|
106
|
+
|
|
107
|
+
- **Lock:** short mutex around a file write (assignment records).
|
|
108
|
+
- **Lease:** process ownership of the singleton daemon or one task's loop run (replacing separate runner and supervisor leases); its `activity` (`waiting` or `turn`) gates approval.
|
|
109
|
+
- **Claim:** a worker's ownership of an item and its paths.
|
|
110
|
+
|
|
111
|
+
One file format and liveness rule; 15 s renewal, 60 s TTL; a `<file>.guard` serializes reclaim, renewal, release. `aidlc-kit loop leases` lists them; details: [Troubleshooting](./troubleshooting.md#loop-leases-locks-and-claims).
|
|
112
|
+
|
|
113
|
+
### Installed entry points
|
|
114
|
+
|
|
115
|
+
A shared strict argv parser validates command shape before root discovery, lock acquisition, and state reads. Explicit roots must be validated project directories; implicit roots use nearest-ancestor `.agents/aidlc/` discovery, never an arbitrary cwd.
|
|
57
116
|
|
|
58
117
|
## Trust and safety boundaries
|
|
59
118
|
|
|
60
|
-
-
|
|
61
|
-
- Install/upgrade plans
|
|
62
|
-
-
|
|
63
|
-
- Codex
|
|
64
|
-
- Project commands
|
|
65
|
-
- Canonical state, terminal records, and rendered workplans reject symlink traversal
|
|
66
|
-
-
|
|
119
|
+
- Assets are local (manifest `remoteUpdates: false`); status/doctor never consult a registry.
|
|
120
|
+
- Install/upgrade plans: conflict-first, path-contained, no unsafe symlink traversal.
|
|
121
|
+
- Upgrade is human-only (interactive confirmation); agents never run or discover upgrades.
|
|
122
|
+
- Codex: project-scoped `.codex/config.toml`, `.codex/rules/aidlc.rules`. Claude Code: lifecycle-script permission via local settings and phase skills. OpenCode: owner-scoped `AGENTS.md` block only; `.opencode/` read for detection only.
|
|
123
|
+
- Project commands: executable-and-argument arrays, never shell strings.
|
|
124
|
+
- Canonical state, terminal records, and rendered workplans reject symlink traversal; writes are same-directory atomic replaces.
|
|
125
|
+
- State lock: guard-serialized; release verifies the owner token directly, so a contended guard cannot strand it; stale when its pid is gone and it is 30 s old.
|
|
126
|
+
- Loop holders (`lib/loop-holder.mjs`) re-read the token under the guard on reclaim, so a reclaimer never deletes a newer holder.
|
|
127
|
+
- The compact master catalog is archive authority; recovery replaces only a valid, unreferenced terminal orphan matching the active catalog task by `id` and `createdAt`; referenced, malformed, or identity-conflicting records fail closed.
|
|
67
128
|
|
|
68
129
|
## Change impact guide
|
|
69
130
|
|
|
@@ -71,11 +132,13 @@ Installed entry points share a strict dependency-free argv parser. Parsing and c
|
|
|
71
132
|
| --- | --- |
|
|
72
133
|
| A lifecycle/state rule | Installed scripts, schemas, gate/context rendering, runtime parity tests. |
|
|
73
134
|
| An asset or adapter | Asset builder, package inventory, installer, adapter tests, tarball smoke test. |
|
|
74
|
-
| A configuration/profile field | Validator, schema, effective-profile behaviour,
|
|
75
|
-
| Migration semantics | Upgrade plan/apply logic, path safety, transaction rollback,
|
|
76
|
-
| A public command | CLI parsing, README/setup guidance, command reference,
|
|
77
|
-
|
|
78
|
-
Use this guide with [Development](./development.md) and [Testing and release](./testing-and-release.md) before changing a cross-cutting boundary.
|
|
135
|
+
| A configuration/profile field | Validator, schema, effective-profile behaviour, docs, tests. |
|
|
136
|
+
| Migration semantics | Upgrade plan/apply logic, path safety, transaction rollback, migration tests. |
|
|
137
|
+
| A public command | CLI parsing, README/setup guidance, command reference, package tests. |
|
|
79
138
|
|
|
139
|
+
## Related
|
|
80
140
|
|
|
81
|
-
|
|
141
|
+
- [Development guide](./development.md)
|
|
142
|
+
- [Testing and release](./testing-and-release.md)
|
|
143
|
+
- [Design decisions](./design-decisions.md)
|
|
144
|
+
- [Coordination service](./coordination-service.md)
|