@rasensio/aidlc 1.87.0 → 1.89.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 (47) hide show
  1. package/dist/change/types.d.ts +1 -1
  2. package/dist/change/types.d.ts.map +1 -1
  3. package/dist/commands/amend.d.ts.map +1 -1
  4. package/dist/commands/amend.js +12 -2
  5. package/dist/commands/amend.js.map +1 -1
  6. package/dist/commands/autopilot.d.ts.map +1 -1
  7. package/dist/commands/autopilot.js +9 -0
  8. package/dist/commands/autopilot.js.map +1 -1
  9. package/dist/commands/hook.d.ts.map +1 -1
  10. package/dist/commands/hook.js +5 -0
  11. package/dist/commands/hook.js.map +1 -1
  12. package/dist/commands/transition.d.ts.map +1 -1
  13. package/dist/commands/transition.js +84 -28
  14. package/dist/commands/transition.js.map +1 -1
  15. package/dist/core/lifecycle.d.ts.map +1 -1
  16. package/dist/core/lifecycle.js +3 -2
  17. package/dist/core/lifecycle.js.map +1 -1
  18. package/dist/core/next-steps.d.ts.map +1 -1
  19. package/dist/core/next-steps.js +8 -0
  20. package/dist/core/next-steps.js.map +1 -1
  21. package/dist/core/types.d.ts +5 -0
  22. package/dist/core/types.d.ts.map +1 -1
  23. package/dist/doctor/migrations/instance-completion.d.ts +5 -0
  24. package/dist/doctor/migrations/instance-completion.d.ts.map +1 -1
  25. package/dist/doctor/migrations/instance-completion.js +13 -4
  26. package/dist/doctor/migrations/instance-completion.js.map +1 -1
  27. package/dist/events/event-bus.d.ts +2 -1
  28. package/dist/events/event-bus.d.ts.map +1 -1
  29. package/dist/events/event-bus.js +25 -11
  30. package/dist/events/event-bus.js.map +1 -1
  31. package/dist/hooks/approval-guard.d.ts +51 -0
  32. package/dist/hooks/approval-guard.d.ts.map +1 -0
  33. package/dist/hooks/approval-guard.js +293 -0
  34. package/dist/hooks/approval-guard.js.map +1 -0
  35. package/dist/hooks/human-only.d.ts +61 -0
  36. package/dist/hooks/human-only.d.ts.map +1 -0
  37. package/dist/hooks/human-only.js +82 -0
  38. package/dist/hooks/human-only.js.map +1 -0
  39. package/dist/hooks/install.d.ts +1 -1
  40. package/dist/hooks/install.d.ts.map +1 -1
  41. package/dist/hooks/install.js +56 -9
  42. package/dist/hooks/install.js.map +1 -1
  43. package/dist/roadmap/promote.d.ts +32 -0
  44. package/dist/roadmap/promote.d.ts.map +1 -1
  45. package/dist/roadmap/promote.js +49 -1
  46. package/dist/roadmap/promote.js.map +1 -1
  47. package/package.json +2 -2
@@ -25,13 +25,18 @@
25
25
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
26
26
  import { dirname, join } from 'node:path';
27
27
  import { cliEntryPath } from '../cost/hooks/entry.js';
28
+ import { APPROVAL_GUARD_MATCHER, APPROVAL_GUARD_PATH, approvalGuardCommand, renderApprovalGuard } from './approval-guard.js';
28
29
  import { shimInvocation, shimProblem, writeShim } from '../cost/hooks/shim.js';
29
30
  export const LIFECYCLE_PLATFORMS = ['claude-code', 'codex'];
30
31
  export const LIFECYCLE_HOOK_MARKER = '#aidlc-lifecycle-hook';
31
32
  export const GUARD_MATCHER = 'Edit|Write|MultiEdit|NotebookEdit';
32
33
  /** A hook needs only to start the CLI and read a few files; ten seconds is generous. */
33
34
  const TIMEOUT_SECONDS = 10;
34
- const EVENT = { 'session-start': 'SessionStart', guard: 'PreToolUse' };
35
+ const EVENT = {
36
+ 'session-start': 'SessionStart',
37
+ guard: 'PreToolUse',
38
+ 'approval-guard': 'PreToolUse',
39
+ };
35
40
  /**
36
41
  * The two hook commands for a platform. Both run through the cost-capture shim,
37
42
  * which finds an absolute `node` and this project's CLI at run time and never
@@ -43,6 +48,7 @@ export function lifecycleCommands(platform = 'claude-code') {
43
48
  return {
44
49
  'session-start': `${base} hook session-start ${LIFECYCLE_HOOK_MARKER}`,
45
50
  guard: `${base} hook guard ${LIFECYCLE_HOOK_MARKER}`,
51
+ 'approval-guard': approvalGuardCommand(),
46
52
  };
47
53
  }
48
54
  /** The one table mapping a platform to its lifecycle hooks (agent-portability/AC-41). */
@@ -79,10 +85,31 @@ export function installCommand(platform) {
79
85
  function isMarked(h) {
80
86
  return typeof h.command === 'string' && h.command.endsWith(LIFECYCLE_HOOK_MARKER);
81
87
  }
88
+ /**
89
+ * Which lifecycle hook a marked command is, read from its text. The phase guard
90
+ * and the approval guard share `PreToolUse`, so identity by marker alone would
91
+ * have each install replace the other (agent-cannot-approve-itself, design C4).
92
+ */
93
+ function kindOf(h) {
94
+ if (!isMarked(h))
95
+ return null;
96
+ if (h.command.includes(APPROVAL_GUARD_PATH))
97
+ return 'approval-guard';
98
+ if (h.command.includes(' hook guard '))
99
+ return 'guard';
100
+ return 'session-start';
101
+ }
102
+ function isKind(which) {
103
+ return which === null ? isMarked : (h) => kindOf(h) === which;
104
+ }
82
105
  function groupFor(which, platform) {
83
106
  const hook = { type: 'command', command: lifecycleCommands(platform)[which], timeout: TIMEOUT_SECONDS };
84
107
  // No matcher on SessionStart, so it fires on startup, resume, clear and compact.
85
- return which === 'guard' ? { matcher: GUARD_MATCHER, hooks: [hook] } : { hooks: [hook] };
108
+ if (which === 'guard')
109
+ return { matcher: GUARD_MATCHER, hooks: [hook] };
110
+ if (which === 'approval-guard')
111
+ return { matcher: APPROVAL_GUARD_MATCHER, hooks: [hook] };
112
+ return { hooks: [hook] };
86
113
  }
87
114
  function load(path) {
88
115
  if (!existsSync(path))
@@ -105,12 +132,13 @@ function save(path, raw, file) {
105
132
  * Only a group this takes a command from is dropped for being left empty; a
106
133
  * user's group is passed through as it was, empty or not.
107
134
  */
108
- function withoutMarked(groups) {
135
+ function withoutMarked(groups, which = null) {
136
+ const matches = isKind(which);
109
137
  let removed = 0;
110
138
  const kept = [];
111
139
  for (const g of groups ?? []) {
112
140
  const hooks = Array.isArray(g.hooks) ? g.hooks : [];
113
- const unmarked = hooks.filter((h) => !isMarked(h));
141
+ const unmarked = hooks.filter((h) => !matches(h));
114
142
  removed += hooks.length - unmarked.length;
115
143
  if (unmarked.length === hooks.length)
116
144
  kept.push(g);
@@ -122,7 +150,7 @@ function withoutMarked(groups) {
122
150
  /** Exactly one marked command under the event, in the group shape the installer writes. */
123
151
  function isCurrent(groups, which, platform) {
124
152
  const expected = groupFor(which, platform);
125
- const marked = (groups ?? []).filter((g) => (g.hooks ?? []).some(isMarked));
153
+ const marked = (groups ?? []).filter((g) => (g.hooks ?? []).some(isKind(which)));
126
154
  return marked.length === 1 && JSON.stringify(marked[0]) === JSON.stringify(expected);
127
155
  }
128
156
  function ensure(file, which, platform) {
@@ -131,7 +159,7 @@ function ensure(file, which, platform) {
131
159
  // Left where it is when already current, so a re-install does not even reorder
132
160
  // the file (AC-16).
133
161
  if (!isCurrent(hooks[event], which, platform)) {
134
- hooks[event] = [...withoutMarked(hooks[event]).groups, groupFor(which, platform)];
162
+ hooks[event] = [...withoutMarked(hooks[event], which).groups, groupFor(which, platform)];
135
163
  }
136
164
  file.hooks = hooks;
137
165
  }
@@ -154,7 +182,26 @@ export function installLifecycleHooks(projectRoot, opts) {
154
182
  ensure(file, 'session-start', opts.platform);
155
183
  if (opts.guard)
156
184
  ensure(file, 'guard', opts.platform);
157
- return { written: save(path, raw, file), path };
185
+ // Not opt-in: an approval only means something when no agent can give it
186
+ // (agent-cannot-approve-itself/AC-16). Claude Code only; every harness gets the
187
+ // CLI's own terminal check.
188
+ let scriptWritten = false;
189
+ if (opts.platform === 'claude-code') {
190
+ ensure(file, 'approval-guard', opts.platform);
191
+ scriptWritten = writeApprovalGuard(projectRoot);
192
+ }
193
+ const settingsWritten = save(path, raw, file);
194
+ return { written: settingsWritten || scriptWritten, path };
195
+ }
196
+ /** Write the approval guard script when its text would change; true when written. */
197
+ function writeApprovalGuard(projectRoot) {
198
+ const path = join(projectRoot, APPROVAL_GUARD_PATH);
199
+ const text = renderApprovalGuard();
200
+ if (existsSync(path) && readFileSync(path, 'utf8') === text)
201
+ return false;
202
+ mkdirSync(dirname(path), { recursive: true });
203
+ writeFileSync(path, text);
204
+ return true;
158
205
  }
159
206
  /**
160
207
  * Remove the lifecycle hooks from one platform's file, or only the guard
@@ -173,7 +220,7 @@ export function removeLifecycleHooks(projectRoot, opts) {
173
220
  for (const event of events) {
174
221
  if (!(event in file.hooks))
175
222
  continue;
176
- const result = withoutMarked(file.hooks[event]);
223
+ const result = withoutMarked(file.hooks[event], opts.guardOnly ? 'guard' : null);
177
224
  if (result.removed === 0)
178
225
  continue;
179
226
  removed += result.removed;
@@ -194,7 +241,7 @@ export function removeLifecycleHooks(projectRoot, opts) {
194
241
  export function lifecycleHookInstalled(projectRoot, platform, which) {
195
242
  try {
196
243
  const { file } = load(hookFilePath(projectRoot, platform));
197
- return (file.hooks?.[EVENT[which]] ?? []).some((g) => (g.hooks ?? []).some(isMarked));
244
+ return (file.hooks?.[EVENT[which]] ?? []).some((g) => (g.hooks ?? []).some(isKind(which)));
198
245
  }
199
246
  catch {
200
247
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/hooks/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/hooks/install.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,38 @@ export declare function setPromotedTo(raw: string, instance: string): string | n
50
50
  * @returns The item's new path.
51
51
  */
52
52
  export declare function promoteItem(item: RoadmapItem, cwd: string, instance: string, stateDir: string, at: string): string;
53
+ /** One item found through an instance's own copy rather than its `promoted_to`. */
54
+ export interface CopyMatch {
55
+ item: RoadmapItem;
56
+ /** The `id` the copy and the item share. */
57
+ id: string;
58
+ }
59
+ /**
60
+ * Find the open items an instance's `roadmap-item.md` copy names by `id`, when the
61
+ * item itself has lost its `promoted_to` (roadmap-item-loses-promoted-to/AC-1).
62
+ *
63
+ * On 2026-10-09 two items reached `in-progress/` with `promoted_to: null` while their
64
+ * instances' copies carried the link, and `roadmap-done`, which looks by `promoted_to`
65
+ * alone, filed nothing. The cause was not reproduced, so the instance's copy is the
66
+ * fallback that makes the outcome right whatever the cause.
67
+ *
68
+ * The copy counts only when its own `promoted_to` names `instance` (AC-4): `promoteItem`
69
+ * writes the copy after linking, so that is what proves it is this instance's. Only
70
+ * items with `promoted_to: null` match (AC-3): an item linked to another instance is
71
+ * that instance's to file. `done/` is skipped — there is nothing left to file there.
72
+ *
73
+ * The id is compared, never opened, as `matches` does: a value like `../../x` finds
74
+ * nothing.
75
+ */
76
+ export declare function findUnlinkedByCopy(cwd: string, instance: string): CopyMatch[];
77
+ /**
78
+ * `item` with its `promoted_to` set to `instance`, unwritten (AC-2).
79
+ *
80
+ * Handed to `moveItem`, the link and the history entry land in its one write before the
81
+ * rename, so a failed move leaves the item where it was with its text unchanged. An item
82
+ * with no `promoted_to` key at all is filed as it is.
83
+ */
84
+ export declare function linkForFiling(item: RoadmapItem, instance: string): RoadmapItem;
53
85
  export type ParkResult = {
54
86
  ok: true;
55
87
  file: string;
@@ -1 +1 @@
1
- {"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../src/roadmap/promote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,EAKL,KAAK,WAAW,EAEjB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC/B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAuB5E;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAiBtE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ1E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,GACT,MAAM,CAWR;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAKlC;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,CAE9F;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,CAE9F"}
1
+ {"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../src/roadmap/promote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,EAQL,KAAK,WAAW,EAEjB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC/B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAuB5E;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAiBtE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ1E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,GACT,MAAM,CAWR;AAED,mFAAmF;AACnF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,4CAA4C;IAC5C,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAiB7E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAE9E;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAKlC;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,CAE9F;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,CAE9F"}
@@ -16,7 +16,7 @@
16
16
  import { copyFileSync, mkdirSync, writeFileSync } from 'node:fs';
17
17
  import { join } from 'node:path';
18
18
  import { promotionRefusal } from './next.js';
19
- import { frontmatter, listStatusAt, moveItem, roadmapRoot, } from './paths.js';
19
+ import { frontmatter, listStatusAt, moveItem, readItem, roadmapRoot, roadmapRoots, ROADMAP_STATUSES, } from './paths.js';
20
20
  /** Statuses an item may be promoted from: triaged first, then untriaged. */
21
21
  const PROMOTABLE = ['backlog', 'inbox'];
22
22
  /** Statuses an item may be parked from. Never `done/` or `hold/`. */
@@ -101,6 +101,54 @@ export function promoteItem(item, cwd, instance, stateDir, at) {
101
101
  copyFileSync(moved, join(instanceDir, 'roadmap-item.md'));
102
102
  return moved;
103
103
  }
104
+ /**
105
+ * Find the open items an instance's `roadmap-item.md` copy names by `id`, when the
106
+ * item itself has lost its `promoted_to` (roadmap-item-loses-promoted-to/AC-1).
107
+ *
108
+ * On 2026-10-09 two items reached `in-progress/` with `promoted_to: null` while their
109
+ * instances' copies carried the link, and `roadmap-done`, which looks by `promoted_to`
110
+ * alone, filed nothing. The cause was not reproduced, so the instance's copy is the
111
+ * fallback that makes the outcome right whatever the cause.
112
+ *
113
+ * The copy counts only when its own `promoted_to` names `instance` (AC-4): `promoteItem`
114
+ * writes the copy after linking, so that is what proves it is this instance's. Only
115
+ * items with `promoted_to: null` match (AC-3): an item linked to another instance is
116
+ * that instance's to file. `done/` is skipped — there is nothing left to file there.
117
+ *
118
+ * The id is compared, never opened, as `matches` does: a value like `../../x` finds
119
+ * nothing.
120
+ */
121
+ export function findUnlinkedByCopy(cwd, instance) {
122
+ const copy = readItem(join(cwd, '.aidlc', 'state', instance, 'roadmap-item.md'), 'in-progress');
123
+ if (copy === null || copy.id === null || copy.promotedTo !== instance)
124
+ return [];
125
+ const id = copy.id;
126
+ const found = [];
127
+ const seen = new Set();
128
+ for (const root of roadmapRoots(cwd)) {
129
+ for (const status of ROADMAP_STATUSES) {
130
+ if (status === 'done')
131
+ continue;
132
+ for (const item of listStatusAt(root, status)) {
133
+ if (item.id !== id || item.promotedTo !== null || seen.has(item.filename))
134
+ continue;
135
+ seen.add(item.filename);
136
+ found.push({ item, id });
137
+ }
138
+ }
139
+ }
140
+ return found;
141
+ }
142
+ /**
143
+ * `item` with its `promoted_to` set to `instance`, unwritten (AC-2).
144
+ *
145
+ * Handed to `moveItem`, the link and the history entry land in its one write before the
146
+ * rename, so a failed move leaves the item where it was with its text unchanged. An item
147
+ * with no `promoted_to` key at all is filed as it is.
148
+ */
149
+ export function linkForFiling(item, instance) {
150
+ return { ...item, raw: setPromotedTo(item.raw, instance) ?? item.raw, promotedTo: instance };
151
+ }
104
152
  /** Every move into `hold/` says which kind it is; this one is always parked. */
105
153
  const PARKED_PREFIX = 'parked — ';
106
154
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/roadmap/promote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/roadmap/promote.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rasensio/aidlc",
3
- "version": "1.87.0",
3
+ "version": "1.89.0",
4
4
  "description": "AI Development Lifecycle Framework — structured lifecycle guidance for AI coding agents across platforms",
5
5
  "homepage": "https://aidlc.rodrigoasensio.com",
6
6
  "repository": {
@@ -31,7 +31,7 @@
31
31
  "commander": "15.0.0",
32
32
  "picomatch": "4.0.5",
33
33
  "yaml": "2.9.0",
34
- "@rasensio/aidlc-content": "1.87.0"
34
+ "@rasensio/aidlc-content": "1.89.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "22.15.32",