@event4u/agent-config 4.1.0 → 4.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.
Files changed (66) hide show
  1. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  2. package/.claude-plugin/marketplace.json +1 -1
  3. package/CHANGELOG.md +51 -0
  4. package/README.md +3 -2
  5. package/dist/cli/agent-config.js +9 -0
  6. package/dist/cli/agent-config.js.map +1 -1
  7. package/dist/cli/commands/uiServe.js +1 -1
  8. package/dist/cli/commands/uiServe.js.map +1 -1
  9. package/dist/cli/initRouting.js +101 -0
  10. package/dist/cli/initRouting.js.map +1 -0
  11. package/dist/discovery/deprecation-report.md +1 -1
  12. package/dist/discovery/discovery-manifest.json +1 -1
  13. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  14. package/dist/discovery/discovery-manifest.summary.md +1 -1
  15. package/dist/discovery/orphan-report.md +1 -1
  16. package/dist/discovery/packs.json +1 -1
  17. package/dist/discovery/trust-report.md +1 -1
  18. package/dist/discovery/workspaces.json +1 -1
  19. package/dist/mcp/registry-manifest.json +1 -1
  20. package/dist/server/routes/install.js +11 -200
  21. package/dist/server/routes/install.js.map +1 -1
  22. package/dist/server/routes/wizard.js +167 -26
  23. package/dist/server/routes/wizard.js.map +1 -1
  24. package/dist/server/schemas/settings.js +1 -0
  25. package/dist/server/schemas/settings.js.map +1 -1
  26. package/dist/ui/assets/index-BDAhhpDV.js +40 -0
  27. package/dist/ui/assets/index-BDAhhpDV.js.map +1 -0
  28. package/dist/ui/index.html +1 -1
  29. package/docs/contracts/gui-wizard.md +116 -96
  30. package/docs/decisions/ADR-021-deployment-shape.md +2 -2
  31. package/docs/deploy/connector-setup.md +2 -2
  32. package/docs/deploy/policy-cookbook.md +2 -2
  33. package/package.json +1 -1
  34. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  35. package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  36. package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  37. package/scripts/install.py +197 -34
  38. package/scripts/lint_framework_leakage_allowlist.json +8 -0
  39. package/dist/install/apply.js +0 -238
  40. package/dist/install/apply.js.map +0 -1
  41. package/dist/install/bridges/augment.js +0 -20
  42. package/dist/install/bridges/augment.js.map +0 -1
  43. package/dist/install/bridges/claude.js +0 -44
  44. package/dist/install/bridges/claude.js.map +0 -1
  45. package/dist/install/bridges/cline.js +0 -69
  46. package/dist/install/bridges/cline.js.map +0 -1
  47. package/dist/install/bridges/copilot.js +0 -28
  48. package/dist/install/bridges/copilot.js.map +0 -1
  49. package/dist/install/bridges/cursor.js +0 -34
  50. package/dist/install/bridges/cursor.js.map +0 -1
  51. package/dist/install/bridges/gemini.js +0 -39
  52. package/dist/install/bridges/gemini.js.map +0 -1
  53. package/dist/install/bridges/index.js +0 -88
  54. package/dist/install/bridges/index.js.map +0 -1
  55. package/dist/install/bridges/marker-content.js +0 -153
  56. package/dist/install/bridges/marker-content.js.map +0 -1
  57. package/dist/install/bridges/markers.js +0 -42
  58. package/dist/install/bridges/markers.js.map +0 -1
  59. package/dist/install/bridges/types.js +0 -31
  60. package/dist/install/bridges/types.js.map +0 -1
  61. package/dist/install/bridges/vscode.js +0 -26
  62. package/dist/install/bridges/vscode.js.map +0 -1
  63. package/dist/install/bridges/windsurf.js +0 -35
  64. package/dist/install/bridges/windsurf.js.map +0 -1
  65. package/dist/ui/assets/index-DLEuEW1V.js +0 -35
  66. package/dist/ui/assets/index-DLEuEW1V.js.map +0 -1
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
6
  <meta name="robots" content="noindex" />
7
7
  <title>agent-config</title>
8
- <script type="module" crossorigin src="/assets/index-DLEuEW1V.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-BDAhhpDV.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-BXZILUxe.css">
10
10
  </head>
11
11
  <body>
@@ -8,20 +8,27 @@ keep-beta-until: 2026-08-19
8
8
  > Companion to the agent-mode protocol
9
9
  > ([`installer-agent-mode.md`](installer-agent-mode.md)) and the
10
10
  > trust-and-safety layer ([`trust-and-safety.md`](trust-and-safety.md)).
11
- > The wizard is a thin HTTP wrapper around the same install plan, the
12
- > same lockfile, and the same atomic-write semantics as the CLI/TUI
13
- > paths. It is **optional by design** — the CLI is the canonical entry
14
- > point; the wizard exists for non-technical users who want a visual
15
- > picker.
11
+ > The wizard is a thin HTTP wrapper: it is a **selection front-end**, and
12
+ > every real write goes through the single installer
13
+ > `scripts/install.py --apply-payload` (D12 / ADR-020). It is **optional by
14
+ > design** the CLI is the canonical entry point; the wizard exists for
15
+ > non-technical users who want a visual picker.
16
16
 
17
17
  ## Source of truth
18
18
 
19
- - Server: [`packages/core/installer/src/gui/server.ts`](../../packages/core/installer/src/gui/server.ts)
20
- - Handlers: [`packages/core/installer/src/gui/handlers.ts`](../../packages/core/installer/src/gui/handlers.ts)
21
- - Security primitives: [`packages/core/installer/src/gui/security.ts`](../../packages/core/installer/src/gui/security.ts)
22
- - Inlined SPA: [`packages/core/installer/src/gui/static-assets.ts`](../../packages/core/installer/src/gui/static-assets.ts)
23
- - Transaction log: [`packages/core/installer/src/gui/transaction-log.ts`](../../packages/core/installer/src/gui/transaction-log.ts)
24
- - Tests: [`packages/core/installer/tests/gui-*.test.ts`](../../packages/core/installer/tests/)
19
+ The GUI is a Fastify server (`src/server/`) serving a Preact SPA
20
+ (`src/ui/`), booted by the `install` / `setup` / `ui:serve` CLI
21
+ subcommands. The legacy `packages/core/installer/src/gui/*` tree was
22
+ retired; the single real installer is `scripts/install.py`.
23
+
24
+ - Server app + security hooks: [`src/server/app.ts`](../../src/server/app.ts) (Host allow-list, Origin allow-list, CSRF token — `onRequest` hooks)
25
+ - Wizard routes (incl. the real-apply bridge): [`src/server/routes/wizard.ts`](../../src/server/routes/wizard.ts)
26
+ - Read-only install routes (detect / plan-preview / recovery / legacy-v3): [`src/server/routes/install.ts`](../../src/server/routes/install.ts)
27
+ - Atomic / 2PC writes: [`src/server/io/atomicWrite.ts`](../../src/server/io/atomicWrite.ts), [`atomicMultiWrite.ts`](../../src/server/io/atomicMultiWrite.ts)
28
+ - SPA: [`src/ui/`](../../src/ui/) (entry `src/ui/pages/WizardPage.tsx`)
29
+ - CLI boot + `WIZARD_READY` contract: [`src/cli/commands/uiServe.ts`](../../src/cli/commands/uiServe.ts)
30
+ - The single installer (all real writes): [`scripts/install.py`](../../scripts/install.py)
31
+ - Tests: [`tests/server/`](../../tests/server/) + [`tests/e2e/`](../../tests/e2e/)
25
32
 
26
33
  ## Local-only invariant
27
34
 
@@ -34,106 +41,118 @@ no cross-origin asset, no remote endpoint — CSP
34
41
  ## Boot sequence
35
42
 
36
43
  ```
37
- npx @event4u/agent-config init --gui [--gui-port=<n>] [--no-open] [--gui-idle=<s>]
44
+ agent-config install (or `setup`, or `init` when the GUI is usable)
38
45
 
39
- ├─► inspect agents/runtime/gui/server.pid abort if live
40
- ├─► load dist/discovery/discovery-manifest.json (walks up from CWD)
41
- ├─► generate per-server CSRF token (64-hex)
42
- ├─► http.createServer + listen({ host: '127.0.0.1', port: 0 })
43
- ├─► write agents/runtime/gui/server.pid (POSIX pid, single line)
44
- ├─► default-spawn the OS browser opener (skipped with --no-open)
45
- └─► return GuiServerHandle { url, port, csrfToken, pidFile, close }
46
+ ├─► pick a free loopback port; mint a per-server bearer/CSRF token
47
+ ├─► Fastify listen({ host: '127.0.0.1', port })
48
+ ├─► print `WIZARD_READY <url>` on stdout (url carries `?token=…` + `#/…`)
49
+ ├─► open the OS browser at <url> (skipped with --no-open / headless)
50
+ └─► serve until the user finishes (Finish install) or Ctrl-C
51
+ ```
52
+
53
+ `init` is the consumer entry point and the install **front-end**: the TS CLI
54
+ (`src/cli/initRouting.ts → shouldInitLaunchGui`) opens the browser wizard
55
+ directly (via `runUiServe`, install mode) whenever it can actually be used —
56
+ interactive TTY, a display, and no CLI-mode flag. There is no CLI tool-picker
57
+ in that path; the wizard collects the tool/pack/settings selection and its
58
+ Finish drives the **whole** install through `POST /api/v1/wizard/apply` →
59
+ `scripts/install.py --apply-payload` (one installer).
60
+
61
+ `init` falls back to the non-interactive bash CLI install (`scripts/install` →
62
+ `install.py`) — and never boots the GUI — when any of these hold: `CI` set,
63
+ `AGENT_CONFIG_NO_UI` set, stdin/stdout not a TTY, a headless host (SSH / Linux
64
+ without `DISPLAY`), or a CLI-mode flag (`--no-ui` / `--tools` / `--ai` /
65
+ `--yes` / `--quiet` / `--dry-run` / `--minimal` / `--settings-only` /
66
+ `--list-tools`). `install.py`'s own tail-launch (`_wizard_spawn`, matching the
67
+ `WIZARD_READY <url>` handshake) remains for direct `python3 install.py` runs.
68
+
69
+ ### `WIZARD_READY` stdout contract
70
+
71
+ The server emits exactly one line on stdout when it has bound:
72
+
73
+ ```
74
+ WIZARD_READY http://127.0.0.1:<port>/?token=<token>#/<route>
46
75
  ```
47
76
 
48
- Idle timeout (default 600 s, configurable via `--gui-idle`) is keyed on
49
- the **last HTTP request timestamp**, not on SSE event activity.
77
+ The supervisor matches `^WIZARD_READY (http://(127.0.0.1|localhost):\d+/\S*)$`
78
+ (no `url=` prefix; the query/hash are part of the captured URL). The line is
79
+ unconditional so headless CI can detect "Fastify bound" without polling the
80
+ port.
50
81
 
51
82
  ## Endpoints
52
83
 
53
- | Method | Path | Purpose |
54
- |--------|------------------|------------------------------------------------------|
55
- | GET | `/` | SPA shell with CSRF token injected via `<meta>` |
56
- | GET | `/app.css` | Static stylesheet |
57
- | GET | `/app.js` | Inlined SPA logic |
58
- | GET | `/api/manifest` | `{ manifest, sha256 }` — bytes-identical to disk |
59
- | GET | `/api/auto-detect` | `{ signals: { composer, package, pyproject } }` |
60
- | POST | `/api/preview` | `{ plan, lockfileSha256 }` for current selection |
61
- | POST | `/api/apply` | SSE: `plan-file`, `progress`, `done`, `error` |
62
- | POST | `/api/cancel` | Flush in-flight transaction log, close SSE stream |
63
-
64
- All POSTs require:
65
-
66
- 1. `Origin` header matching `http://127.0.0.1:<port>` or
67
- `http://localhost:<port>`.
68
- 2. Body field `csrf` matching the per-server token (timing-safe
69
- compare in `security.ts`).
70
-
71
- A bad CSRF returns `403` with no body. A bad Origin or Host returns
72
- `403` with a short plaintext reason.
73
-
74
- ## Transaction log + rollback
75
-
76
- Every `POST /api/apply` writes append-only JSONL entries to
77
- `<projectRoot>/agents/runtime/gui/install-<ts>.log`. Shapes are
78
- declared in
79
- [`types.ts § TransactionLogEntry`](../../packages/core/installer/src/gui/types.ts):
80
-
81
- - `start` workspaces + packs selected
82
- - `plan` — one entry per planned write (`path`, `pack`)
83
- - `commit` `filesWritten`, `lockfileSha256`
84
- - `cancel` explicit `POST /api/cancel`
85
- - `error` terminating failure with `message`
86
-
87
- The next `--gui` boot inspects the most recent log and offers to roll
88
- back if it ended on `start`/`plan`/`error` without a matching
89
- `commit`/`cancel`. The CLI path consumes the same log, so a mid-install
90
- crash can be undone from either entry point.
84
+ Versioned under `/api/v1/`. Selected routes:
85
+
86
+ | Method | Path | Purpose |
87
+ |--------|-------------------------------|-------------------------------------------------------------------------|
88
+ | GET | `/` | SPA shell (token passed via the `?token=` query) |
89
+ | GET | `/api/v1/wizard/state` | Resumable partial wizard state |
90
+ | POST | `/api/v1/wizard/state` | Persist state between steps |
91
+ | GET | `/api/v1/wizard/manifest` | Locked discovery-manifest (extended mode) |
92
+ | GET | `/api/v1/wizard/auto-detect` | Project-signal evidence for the `ai-tools` step (extended mode) |
93
+ | POST | `/api/v1/wizard/finish` | 2PC commit of settings + user-identity |
94
+ | POST | `/api/v1/wizard/apply` | **Single real-apply route.** `dry_run:true` → buffered plan preview; otherwise SSE-streams `scripts/install.py --apply-payload` |
95
+ | GET | `/api/v1/install/detect` | Scope + project shape + tool presence |
96
+ | POST | `/api/v1/install/plan` | Plan preview (per-tool file counts + conflicts) for the Review step |
97
+ | GET | `/api/v1/install/recovery` | Interrupted-run recovery state |
98
+ | GET | `/api/v1/install/legacy-v3` | v3-install detection (backup screen) |
99
+
100
+ The TypeScript apply engine and its `POST /api/v1/install/apply` SSE route
101
+ were removed (road-to-single-install-source-of-truth § Phase 3). All real
102
+ writes now flow through `POST /api/v1/wizard/apply` `scripts/install.py`.
103
+
104
+ Every request passes three `onRequest` hooks in
105
+ [`src/server/app.ts`](../../src/server/app.ts): a `Host`-header allow-list,
106
+ an `Origin` allow-list (browser-issued requests), and a per-server bearer
107
+ token (`Authorization: Bearer <token>`, minted at boot, surfaced in the
108
+ `?token=` URL). A bad token / Host / Origin returns `403`.
109
+
110
+ ## Real apply — single source of truth
111
+
112
+ `POST /api/v1/wizard/apply` is the only write path:
113
+
114
+ - `dry_run: true` spawns `install.py --apply-payload <tmp> --dry-run` and
115
+ returns the buffered plan-summary text (used by the Review preview).
116
+ - otherwise → spawns `install.py --apply-payload <tmp>` (real apply) and
117
+ **streams** the installer's NDJSON stdout
118
+ (`{type:"file",…}` / `{type:"done"|"error"}`) mapped to the SSE frames the
119
+ SPA consumes. The child is killed if the client disconnects
120
+ (abort-on-disconnect, Finding #24). The installer owns its own
121
+ transactional state (the user-scope lockfile + project manifest), so the
122
+ GUI does not maintain a parallel transaction log.
91
123
 
92
124
  ## SSE event framing
93
125
 
94
- Every `POST /api/apply` event is `data: <json>\n\n`. The terminal event
95
- is one of:
126
+ Each real-apply event is `data: <json>\n\n`. Frames:
96
127
 
97
128
  ```jsonc
98
- { "type": "done", "filesWritten": 12, "lockfileSha256": "<64-hex>" }
99
- { "type": "error", "message": "<reason>" }
129
+ { "type": "progress", "file": "<tool>", "status": "deployed", "written": 1, "total": 3 }
130
+ { "type": "done", "summary": { "written": 3, "total": 3 } }
131
+ { "type": "error", "code": "<code>", "message": "<reason>", "recoverable": false }
100
132
  ```
101
133
 
102
- The browser closes the EventSource on either; the server flushes the
103
- transaction log and unblocks the idle timer.
104
-
105
- ## Tarball budget
106
-
107
- GUI assets under `packages/core/installer/src/gui/` (inlined HTML +
108
- CSS + JS in `static-assets.ts`) must stay **≤ 200 KB compiled**. The
109
- constraint is enforced by reviewer judgment for now; a CI check is
110
- tracked under the Phase 6 follow-ups.
134
+ The browser stops reading on `done` / `error`; the server ends the stream.
111
135
 
112
136
  ## Security failure modes covered
113
137
 
114
- - **Remote exploitation** — loopback bind, Host allowlist, Origin
115
- allowlist, CSRF token, CSP `default-src 'self'`.
116
- - **DNS rebinding** — Host header check covers POSTs that omit
117
- `Origin` (form posts).
118
- - **Zombie servers** — ephemeral port + PID file + last-request idle
119
- timer. Stale PIDs (process gone) are silently overwritten on next
120
- boot; live PIDs block boot with a helpful message.
121
- - **Mid-install crash** — transaction log + boot-time rollback prompt.
122
- - **Hidden state** — closing the tab triggers idle timeout; no
123
- cross-tab session.
138
+ - **Remote exploitation** — loopback bind, Host allow-list, Origin
139
+ allow-list, per-server bearer token.
140
+ - **DNS rebinding** — Host header check covers POSTs that omit `Origin`.
141
+ - **Mid-install crash** — `scripts/install.py` owns the user-scope
142
+ lockfile + project manifest; the recovery routes
143
+ (`/api/v1/install/recovery`) surface an interrupted run on next boot.
124
144
 
125
145
  ## Non-goals (documented contract)
126
146
 
127
- - Not a hosted SaaS — no auth, no account model, no telemetry.
128
- - Not a settings editorread-only on the lockfile; writes go
129
- through the same install plan as the CLI.
130
- - Not a CI surface — every operation is reachable via `--gui-port=0
131
- --no-open` is supported for headless smoke tests, but the canonical
132
- CI path is the flag-driven non-interactive CLI.
147
+ - Not a hosted SaaS — no auth account model, no telemetry.
148
+ - Not a parallel installerthe GUI is a selection front-end; every
149
+ real write goes through `scripts/install.py --apply-payload`.
150
+ - Not a CI surface — `--no-open` headless boots are supported for smoke
151
+ tests, but the canonical CI path is the flag-driven non-interactive CLI.
133
152
 
134
153
  ## Apply payload — versioning handshake (road-to-global-only-install Phase 0.4 · D12)
135
154
 
136
- `/api/apply` accepts a discriminated-union body keyed on
155
+ `POST /api/v1/wizard/apply` accepts a discriminated-union body keyed on
137
156
  `schema_version`. The full JSON Schema lives at
138
157
  [`internal/schemas/wizard-apply-payload.schema.json`](../../internal/schemas/wizard-apply-payload.schema.json).
139
158
 
@@ -142,18 +161,19 @@ tracked under the Phase 6 follow-ups.
142
161
  | `"installer-v1"` | `InstallerPayloadV1` | `{ ai_tools[], configs{}, dry_run? }` — legacy Installer-GUI, AI tools only. |
143
162
  | `"wizard-v2"` | `WizardPayloadV2` | `{ tools[], packs[], settings{}, scope_to_project_only?, dry_run? }` — unified 9-step wizard. |
144
163
 
145
- **D12 (locked).** Single `/api/apply` endpoint with a `schema_version`
164
+ **D12 (locked).** Single apply endpoint with a `schema_version`
146
165
  discriminator — **not** two endpoints with a shared Python backend.
147
- Reasoning: one bind, one CSRF token, one transaction log; the
166
+ Reasoning: one bind, one token, one installer; the
148
167
  Python `scripts/install.py` payload-router branches on
149
168
  `schema_version` before any disk write. The dual-endpoint variant was
150
- considered and rejected for doubling the CSRF + idle-timer surface
151
- with no observability gain.
169
+ considered and rejected for doubling the surface with no gain.
152
170
 
153
171
  `schema_version` is **required**. Servers MUST reject any body that
154
- lacks it (HTTP 400, single-line error pointing at the schema). This
155
- locks the contract before Phase 1 implementation so no implicit fork
156
- can sneak in at Phase 1.5.
172
+ lacks it (HTTP 4xx, single-line error pointing at the schema). The
173
+ real-apply path is now wired end-to-end
174
+ (road-to-single-install-source-of-truth § Phases 1–2): `install.py`
175
+ translates the payload into the canonical install and streams NDJSON
176
+ progress back to the GUI.
157
177
 
158
178
  ## Unified 9-step flow (road-to-global-only-install § Phase 1.6)
159
179
 
@@ -25,7 +25,7 @@ Companion artefacts:
25
25
  - Roadmap: [`agents/roadmaps/road-to-internal-ai-os-deployment.md`](../../agents/roadmaps/road-to-internal-ai-os-deployment.md)
26
26
  - Artefacts: [`packages/core/deploy/`](../../packages/core/deploy/)
27
27
  - Env contract: [`docs/deploy/env-vars.md`](../deploy/env-vars.md)
28
- - Council question (drafted, not invoked — no keys): [`agents/tmp/council-question-deployment-shape.md`](../../agents/tmp/council-question-deployment-shape.md)
28
+ - Council question (drafted, not invoked — no keys): [`agents/tmp/council-question-deployment-shape.md`](../../agents/tmp/old/council-question-deployment-shape.md)
29
29
  - Predecessor ADR: [`ADR-016`](ADR-016-installer-architecture.md) — installer architecture (agent-mode protocol the GUI server wraps).
30
30
 
31
31
  ## Context
@@ -141,7 +141,7 @@ orchestrator-agnostic.
141
141
  ## Open questions (council-deferred)
142
142
 
143
143
  The accompanying council question file
144
- [`agents/tmp/council-question-deployment-shape.md`](../../agents/tmp/council-question-deployment-shape.md)
144
+ [`agents/tmp/council-question-deployment-shape.md`](../../agents/tmp/old/council-question-deployment-shape.md)
145
145
  has not yet been run (no provider keys configured). A maintainer with
146
146
  keys should run it and either ratify or supersede this ADR.
147
147
 
@@ -6,7 +6,7 @@
6
6
  > and Phase 3 (central policy) shipping first.
7
7
  >
8
8
  > Open design questions live in
9
- > [`agents/tmp/council-question-connector-scope.md`](../../agents/tmp/council-question-connector-scope.md).
9
+ > [`agents/tmp/council-question-connector-scope.md`](../../agents/tmp/old/council-question-connector-scope.md).
10
10
 
11
11
  ## Audience
12
12
 
@@ -124,6 +124,6 @@ All of the above land in Phase 5, contingent on Phases 2 + 3.
124
124
  ## Cross-references
125
125
 
126
126
  - 🚧 Reserved ADR slot: `docs/decisions/ADR-025-connector-scope.md`.
127
- - Council question: [`agents/tmp/council-question-connector-scope.md`](../../agents/tmp/council-question-connector-scope.md).
127
+ - Council question: [`agents/tmp/council-question-connector-scope.md`](../../agents/tmp/old/council-question-connector-scope.md).
128
128
  - Quickstart: [`quickstart.md`](quickstart.md).
129
129
  - Policy cookbook: [`policy-cookbook.md`](policy-cookbook.md).
@@ -7,7 +7,7 @@
7
7
  > before code lands. Every section below is normative-once-shipped.
8
8
  >
9
9
  > Open design questions live in
10
- > [`agents/tmp/council-question-central-policy.md`](../../agents/tmp/council-question-central-policy.md).
10
+ > [`agents/tmp/council-question-central-policy.md`](../../agents/tmp/old/council-question-central-policy.md).
11
11
 
12
12
  ## Audience
13
13
 
@@ -125,6 +125,6 @@ All of the above land in Phase 3. Until then, per-user
125
125
  ## Cross-references
126
126
 
127
127
  - 🚧 Reserved ADR slot: `docs/decisions/ADR-023-central-policy.md`.
128
- - Council question: [`agents/tmp/council-question-central-policy.md`](../../agents/tmp/council-question-central-policy.md).
128
+ - Council question: [`agents/tmp/council-question-central-policy.md`](../../agents/tmp/old/council-question-central-policy.md).
129
129
  - Env contract: [`env-vars.md`](env-vars.md) (`POLICY_PATH`).
130
130
  - Quickstart: [`quickstart.md`](quickstart.md).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event4u/agent-config",
3
- "version": "4.1.0",
3
+ "version": "4.3.0",
4
4
  "description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
5
5
  "license": "MIT",
6
6
  "private": false,