@autopilot-harness/cli 0.1.0 → 0.2.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 (42) hide show
  1. package/README.md +1 -1
  2. package/assets/autopilot-harness-hook.mjs +228 -36
  3. package/assets/vendor/runtime.mjs +397 -15
  4. package/dist/assets/autopilot-harness-hook.mjs +228 -36
  5. package/dist/assets/vendor/runtime.mjs +397 -15
  6. package/dist/bin.js +6 -3
  7. package/dist/bin.js.map +1 -1
  8. package/dist/index.d.ts +3 -2
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -2
  11. package/dist/index.js.map +1 -1
  12. package/dist/init/claude-settings-merge.d.ts +51 -0
  13. package/dist/init/claude-settings-merge.d.ts.map +1 -0
  14. package/dist/init/claude-settings-merge.js +318 -0
  15. package/dist/init/claude-settings-merge.js.map +1 -0
  16. package/dist/init/install.d.ts +4 -1
  17. package/dist/init/install.d.ts.map +1 -1
  18. package/dist/init/install.js +258 -83
  19. package/dist/init/install.js.map +1 -1
  20. package/dist/init/platforms.d.ts +5 -0
  21. package/dist/init/platforms.d.ts.map +1 -1
  22. package/dist/init/platforms.js +17 -0
  23. package/dist/init/platforms.js.map +1 -1
  24. package/dist/init/types.d.ts +1 -1
  25. package/dist/init/types.js +1 -1
  26. package/dist/init/wizard-helpers.d.ts.map +1 -1
  27. package/dist/init/wizard-helpers.js +21 -10
  28. package/dist/init/wizard-helpers.js.map +1 -1
  29. package/dist/status-doctor.d.ts.map +1 -1
  30. package/dist/status-doctor.js +121 -55
  31. package/dist/status-doctor.js.map +1 -1
  32. package/dist/uninstall.d.ts.map +1 -1
  33. package/dist/uninstall.js +163 -5
  34. package/dist/uninstall.js.map +1 -1
  35. package/dist/upgrade.d.ts.map +1 -1
  36. package/dist/upgrade.js +100 -2
  37. package/dist/upgrade.js.map +1 -1
  38. package/dist/vendor-entry.d.ts +4 -1
  39. package/dist/vendor-entry.d.ts.map +1 -1
  40. package/dist/vendor-entry.js +6 -2
  41. package/dist/vendor-entry.js.map +1 -1
  42. package/package.json +5 -4
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE5H,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAKlD,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,8BAA8B,EAC9B,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,EACf,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,EAC1B,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,gBAAgB,EAChB,+BAA+B,EAC/B,qBAAqB,EACrB,cAAc,EACd,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKnD,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,cAAc,GACf,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,+BAA+B,EAC/B,6BAA6B,EAC7B,4BAA4B,EAC5B,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE5H,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAKlD,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,8BAA8B,EAC9B,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,EACf,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,gBAAgB,EAChB,+BAA+B,EAC/B,qBAAqB,EACrB,cAAc,EACd,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKnD,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,cAAc,GACf,MAAM,cAAc,CAAC"}
@@ -0,0 +1,51 @@
1
+ export declare const CLAUDE_BLOCK_CAP_ENV = "CLAUDE_CODE_STOP_HOOK_BLOCK_CAP";
2
+ /** Events Autopilot registers under Claude Code hooks. */
3
+ export declare const CLAUDE_AUTOPILOT_EVENTS: readonly ["UserPromptSubmit", "PostToolUse", "Stop", "StopFailure"];
4
+ export type ClaudeAutopilotEvent = (typeof CLAUDE_AUTOPILOT_EVENTS)[number];
5
+ export interface ClaudeHookHandler {
6
+ type?: string;
7
+ command?: string;
8
+ timeout?: number;
9
+ [key: string]: unknown;
10
+ }
11
+ export interface ClaudeMatcherGroup {
12
+ matcher?: string;
13
+ hooks?: ClaudeHookHandler[];
14
+ [key: string]: unknown;
15
+ }
16
+ export interface ClaudeSettingsFile {
17
+ env?: Record<string, unknown>;
18
+ hooks?: Record<string, ClaudeMatcherGroup[] | unknown>;
19
+ [key: string]: unknown;
20
+ }
21
+ /** Build the Autopilot command handler for a Claude hook event. */
22
+ export declare function autopilotClaudeHookHandler(event: ClaudeAutopilotEvent): ClaudeHookHandler;
23
+ /** Matcher group Autopilot installs for one Claude event. */
24
+ export declare function autopilotClaudeMatcherGroup(event: ClaudeAutopilotEvent): ClaudeMatcherGroup;
25
+ /**
26
+ * Ensure settings.json shape is merge-safe; otherwise refuse (do not wipe).
27
+ */
28
+ export declare function validateClaudeSettingsShape(settings: ClaudeSettingsFile): string | null;
29
+ /**
30
+ * Merge Autopilot Claude hooks + BLOCK_CAP=0 into existing or empty settings.
31
+ */
32
+ export declare function mergeClaudeSettings(existing: ClaudeSettingsFile | null): ClaudeSettingsFile;
33
+ /**
34
+ * Remove Autopilot Claude hook handlers and BLOCK_CAP env; keep foreign hooks/env.
35
+ * Does not delete settings.json — caller decides write/unlink.
36
+ */
37
+ export declare function stripAutopilotClaudeSettings(existing: ClaudeSettingsFile): ClaudeSettingsFile;
38
+ /**
39
+ * True when Autopilot Claude markers remain (hook commands and/or BLOCK_CAP env).
40
+ * BLOCK_CAP alone counts so uninstall can clear leftover env after partial strip.
41
+ */
42
+ export declare function claudeSettingsContainAutopilot(settings: ClaudeSettingsFile | null): boolean;
43
+ /** True when BLOCK_CAP is present and set to "0" (string or number). */
44
+ export declare function hasClaudeBlockCapZero(settings: ClaudeSettingsFile): boolean;
45
+ /** Counts of Autopilot command handlers per required Claude event. */
46
+ export declare function summarizeClaudeAutopilotHooks(settings: ClaudeSettingsFile): {
47
+ missingEvents: string[];
48
+ duplicates: number;
49
+ };
50
+ export declare function hasCompleteClaudeAutopilotHooks(settings: ClaudeSettingsFile): boolean;
51
+ //# sourceMappingURL=claude-settings-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-settings-merge.d.ts","sourceRoot":"","sources":["../../src/init/claude-settings-merge.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,oBAAoB,oCAAoC,CAAC;AAEtE,0DAA0D;AAC1D,eAAO,MAAM,uBAAuB,qEAK1B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,CAAC;IACvD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAeD,mEAAmE;AACnE,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,oBAAoB,GAC1B,iBAAiB,CAKnB;AAED,6DAA6D;AAC7D,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,GAC1B,kBAAkB,CASpB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,kBAAkB,GAC3B,MAAM,GAAG,IAAI,CAqEf;AAyBD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,GAClC,kBAAkB,CAqDpB;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,kBAAkB,GAC3B,kBAAkB,CA4CpB;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,kBAAkB,GAAG,IAAI,GAClC,OAAO,CA2BT;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAU3E;AAED,sEAAsE;AACtE,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,kBAAkB,GAAG;IAC3E,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB,CAsBA;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAGT"}
@@ -0,0 +1,318 @@
1
+ /**
2
+ * Merge Autopilot hooks + BLOCK_CAP into Claude Code `.claude/settings.json`.
3
+ * Preserves foreign hooks/env; replaces Autopilot-marked command entries only.
4
+ */
5
+ import { isAutopilotCommand } from "./hooks-merge.js";
6
+ export const CLAUDE_BLOCK_CAP_ENV = "CLAUDE_CODE_STOP_HOOK_BLOCK_CAP";
7
+ /** Events Autopilot registers under Claude Code hooks. */
8
+ export const CLAUDE_AUTOPILOT_EVENTS = [
9
+ "UserPromptSubmit",
10
+ "PostToolUse",
11
+ "Stop",
12
+ "StopFailure",
13
+ ];
14
+ function safeKeyLabel(key) {
15
+ const cleaned = key
16
+ .replace(/[\u0000-\u001f\u007f]+/g, " ")
17
+ .replace(/ +/g, " ")
18
+ .trim();
19
+ return cleaned || "?";
20
+ }
21
+ /** Keys that must never be copied from JSON into merged objects (see config-merge). */
22
+ function isUnsafeKey(key) {
23
+ return key === "__proto__" || key === "prototype" || key === "constructor";
24
+ }
25
+ /** Build the Autopilot command handler for a Claude hook event. */
26
+ export function autopilotClaudeHookHandler(event) {
27
+ return {
28
+ type: "command",
29
+ command: `node .autopilot/bin/autopilot-harness-hook.mjs --event ${event}`,
30
+ };
31
+ }
32
+ /** Matcher group Autopilot installs for one Claude event. */
33
+ export function autopilotClaudeMatcherGroup(event) {
34
+ const handler = autopilotClaudeHookHandler(event);
35
+ if (event === "PostToolUse") {
36
+ return {
37
+ matcher: "Edit|Write|NotebookEdit",
38
+ hooks: [handler],
39
+ };
40
+ }
41
+ return { hooks: [handler] };
42
+ }
43
+ /**
44
+ * Ensure settings.json shape is merge-safe; otherwise refuse (do not wipe).
45
+ */
46
+ export function validateClaudeSettingsShape(settings) {
47
+ for (const key of Object.keys(settings)) {
48
+ if (isUnsafeKey(key)) {
49
+ return `settings.json key "${safeKeyLabel(key)}" is not allowed.`;
50
+ }
51
+ }
52
+ if (settings.env != null) {
53
+ if (typeof settings.env !== "object" ||
54
+ Array.isArray(settings.env) ||
55
+ settings.env === null) {
56
+ return 'settings.json "env" must be an object.';
57
+ }
58
+ for (const key of Object.keys(settings.env)) {
59
+ if (isUnsafeKey(key)) {
60
+ return `settings.json env key "${safeKeyLabel(key)}" is not allowed.`;
61
+ }
62
+ }
63
+ }
64
+ if (settings.hooks == null)
65
+ return null;
66
+ if (typeof settings.hooks !== "object" ||
67
+ Array.isArray(settings.hooks) ||
68
+ settings.hooks === null) {
69
+ return 'settings.json "hooks" must be an object.';
70
+ }
71
+ for (const [key, value] of Object.entries(settings.hooks)) {
72
+ const label = safeKeyLabel(key);
73
+ if (isUnsafeKey(key)) {
74
+ return `settings.json hooks key "${label}" is not allowed.`;
75
+ }
76
+ if (value == null)
77
+ continue;
78
+ if (!Array.isArray(value)) {
79
+ return `settings.json hooks.${label} must be an array of matcher groups.`;
80
+ }
81
+ for (const group of value) {
82
+ if (!group || typeof group !== "object" || Array.isArray(group)) {
83
+ return `settings.json hooks.${label} contains a non-object matcher group.`;
84
+ }
85
+ const g = group;
86
+ if (g.matcher != null && typeof g.matcher !== "string") {
87
+ return `settings.json hooks.${label} has a non-string matcher.`;
88
+ }
89
+ if (g.hooks == null)
90
+ continue;
91
+ if (!Array.isArray(g.hooks)) {
92
+ return `settings.json hooks.${label} matcher group hooks must be an array.`;
93
+ }
94
+ for (const h of g.hooks) {
95
+ if (!h || typeof h !== "object" || Array.isArray(h)) {
96
+ return `settings.json hooks.${label} contains a non-object hook handler.`;
97
+ }
98
+ if (h.command != null && typeof h.command !== "string") {
99
+ return `settings.json hooks.${label} has a non-string command.`;
100
+ }
101
+ if (h.type != null && typeof h.type !== "string") {
102
+ return `settings.json hooks.${label} has a non-string type.`;
103
+ }
104
+ if (h.timeout != null &&
105
+ (typeof h.timeout !== "number" || !Number.isFinite(h.timeout))) {
106
+ return `settings.json hooks.${label} has a non-finite timeout.`;
107
+ }
108
+ }
109
+ }
110
+ }
111
+ return null;
112
+ }
113
+ function stripAutopilotFromGroups(groups) {
114
+ const out = [];
115
+ for (const group of groups) {
116
+ if (!Array.isArray(group.hooks)) {
117
+ // No hooks list — preserve foreign matcher metadata as-is.
118
+ out.push({ ...group });
119
+ continue;
120
+ }
121
+ const kept = group.hooks.filter((h) => !isAutopilotCommand(h?.command));
122
+ if (kept.length === 0) {
123
+ // Drop Autopilot-only groups; keep intentionally empty foreign groups.
124
+ if (group.hooks.length === 0) {
125
+ out.push({ ...group, hooks: [] });
126
+ }
127
+ continue;
128
+ }
129
+ out.push({ ...group, hooks: kept });
130
+ }
131
+ return out;
132
+ }
133
+ /**
134
+ * Merge Autopilot Claude hooks + BLOCK_CAP=0 into existing or empty settings.
135
+ */
136
+ export function mergeClaudeSettings(existing) {
137
+ const base = {};
138
+ if (existing && typeof existing === "object" && !Array.isArray(existing)) {
139
+ const shapeError = validateClaudeSettingsShape(existing);
140
+ if (shapeError) {
141
+ throw new Error(shapeError);
142
+ }
143
+ for (const [key, value] of Object.entries(existing)) {
144
+ if (isUnsafeKey(key))
145
+ continue;
146
+ base[key] = value;
147
+ }
148
+ }
149
+ else {
150
+ const shapeError = validateClaudeSettingsShape(base);
151
+ if (shapeError) {
152
+ throw new Error(shapeError);
153
+ }
154
+ }
155
+ const prevEnv = Object.create(null);
156
+ if (base.env && typeof base.env === "object" && !Array.isArray(base.env)) {
157
+ for (const [key, value] of Object.entries(base.env)) {
158
+ if (isUnsafeKey(key))
159
+ continue;
160
+ prevEnv[key] = value;
161
+ }
162
+ }
163
+ base.env = {
164
+ ...prevEnv,
165
+ [CLAUDE_BLOCK_CAP_ENV]: "0",
166
+ };
167
+ const nextHooks = Object.create(null);
168
+ if (base.hooks && typeof base.hooks === "object" && !Array.isArray(base.hooks)) {
169
+ for (const [key, value] of Object.entries(base.hooks)) {
170
+ if (isUnsafeKey(key))
171
+ continue;
172
+ if (!Array.isArray(value)) {
173
+ // validateClaudeSettingsShape should have rejected; keep fail-closed.
174
+ continue;
175
+ }
176
+ nextHooks[key] = stripAutopilotFromGroups(value);
177
+ }
178
+ }
179
+ for (const event of CLAUDE_AUTOPILOT_EVENTS) {
180
+ const current = Array.isArray(nextHooks[event])
181
+ ? [...nextHooks[event]]
182
+ : [];
183
+ const stripped = stripAutopilotFromGroups(current);
184
+ stripped.push(autopilotClaudeMatcherGroup(event));
185
+ nextHooks[event] = stripped;
186
+ }
187
+ base.hooks = nextHooks;
188
+ return base;
189
+ }
190
+ /**
191
+ * Remove Autopilot Claude hook handlers and BLOCK_CAP env; keep foreign hooks/env.
192
+ * Does not delete settings.json — caller decides write/unlink.
193
+ */
194
+ export function stripAutopilotClaudeSettings(existing) {
195
+ const shapeError = validateClaudeSettingsShape(existing);
196
+ if (shapeError) {
197
+ throw new Error(shapeError);
198
+ }
199
+ const base = {};
200
+ for (const [key, value] of Object.entries(existing)) {
201
+ if (isUnsafeKey(key))
202
+ continue;
203
+ base[key] = value;
204
+ }
205
+ if (base.env && typeof base.env === "object" && !Array.isArray(base.env)) {
206
+ const nextEnv = Object.create(null);
207
+ for (const [key, value] of Object.entries(base.env)) {
208
+ if (isUnsafeKey(key))
209
+ continue;
210
+ if (key === CLAUDE_BLOCK_CAP_ENV)
211
+ continue;
212
+ nextEnv[key] = value;
213
+ }
214
+ if (Object.keys(nextEnv).length === 0) {
215
+ delete base.env;
216
+ }
217
+ else {
218
+ base.env = nextEnv;
219
+ }
220
+ }
221
+ const prevHooks = base.hooks;
222
+ if (prevHooks && typeof prevHooks === "object" && !Array.isArray(prevHooks)) {
223
+ const nextHooks = Object.create(null);
224
+ for (const [key, value] of Object.entries(prevHooks)) {
225
+ if (isUnsafeKey(key))
226
+ continue;
227
+ if (!Array.isArray(value))
228
+ continue;
229
+ const kept = stripAutopilotFromGroups(value);
230
+ // Drop empty event lists so uninstall does not leave Stop: [].
231
+ if (kept.length > 0)
232
+ nextHooks[key] = kept;
233
+ }
234
+ if (Object.keys(nextHooks).length === 0) {
235
+ delete base.hooks;
236
+ }
237
+ else {
238
+ base.hooks = nextHooks;
239
+ }
240
+ }
241
+ return base;
242
+ }
243
+ /**
244
+ * True when Autopilot Claude markers remain (hook commands and/or BLOCK_CAP env).
245
+ * BLOCK_CAP alone counts so uninstall can clear leftover env after partial strip.
246
+ */
247
+ export function claudeSettingsContainAutopilot(settings) {
248
+ if (!settings || typeof settings !== "object" || Array.isArray(settings)) {
249
+ return false;
250
+ }
251
+ const env = settings.env;
252
+ if (env &&
253
+ typeof env === "object" &&
254
+ !Array.isArray(env) &&
255
+ Object.prototype.hasOwnProperty.call(env, CLAUDE_BLOCK_CAP_ENV)) {
256
+ return true;
257
+ }
258
+ const bag = settings.hooks &&
259
+ typeof settings.hooks === "object" &&
260
+ !Array.isArray(settings.hooks)
261
+ ? settings.hooks
262
+ : {};
263
+ for (const value of Object.values(bag)) {
264
+ if (!Array.isArray(value))
265
+ continue;
266
+ for (const g of value) {
267
+ const hooks = Array.isArray(g?.hooks) ? g.hooks : [];
268
+ if (hooks.some((h) => isAutopilotCommand(h?.command)))
269
+ return true;
270
+ }
271
+ }
272
+ return false;
273
+ }
274
+ /** True when BLOCK_CAP is present and set to "0" (string or number). */
275
+ export function hasClaudeBlockCapZero(settings) {
276
+ const env = settings.env;
277
+ if (!env || typeof env !== "object" || Array.isArray(env))
278
+ return false;
279
+ if (!Object.prototype.hasOwnProperty.call(env, CLAUDE_BLOCK_CAP_ENV)) {
280
+ return false;
281
+ }
282
+ const raw = env[CLAUDE_BLOCK_CAP_ENV];
283
+ if (raw === 0)
284
+ return true;
285
+ if (typeof raw === "string" && raw.trim() === "0")
286
+ return true;
287
+ return false;
288
+ }
289
+ /** Counts of Autopilot command handlers per required Claude event. */
290
+ export function summarizeClaudeAutopilotHooks(settings) {
291
+ const bag = settings.hooks &&
292
+ typeof settings.hooks === "object" &&
293
+ !Array.isArray(settings.hooks)
294
+ ? settings.hooks
295
+ : {};
296
+ const missingEvents = [];
297
+ let duplicates = 0;
298
+ for (const event of CLAUDE_AUTOPILOT_EVENTS) {
299
+ const groups = Array.isArray(bag[event])
300
+ ? bag[event]
301
+ : [];
302
+ let n = 0;
303
+ for (const g of groups) {
304
+ const hooks = Array.isArray(g.hooks) ? g.hooks : [];
305
+ n += hooks.filter((h) => isAutopilotCommand(h?.command)).length;
306
+ }
307
+ if (n === 0)
308
+ missingEvents.push(event);
309
+ if (n > 1)
310
+ duplicates += n - 1;
311
+ }
312
+ return { missingEvents, duplicates };
313
+ }
314
+ export function hasCompleteClaudeAutopilotHooks(settings) {
315
+ const { missingEvents, duplicates } = summarizeClaudeAutopilotHooks(settings);
316
+ return missingEvents.length === 0 && duplicates === 0;
317
+ }
318
+ //# sourceMappingURL=claude-settings-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-settings-merge.js","sourceRoot":"","sources":["../../src/init/claude-settings-merge.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import type { InitResult, InitYesOptions } from "./types.js";
2
2
  export { mergeHooksJson, stripAutopilotHooks, isAutopilotCommand, countAutopilotDuplicates, validateHooksShape, hasCompleteAutopilotHooks, summarizeAutopilotHooks, autopilotStopHasUnlimitedLoop, autopilotHookCommand, } from "./hooks-merge.js";
3
+ export { mergeClaudeSettings, validateClaudeSettingsShape, hasClaudeBlockCapZero, hasCompleteClaudeAutopilotHooks, summarizeClaudeAutopilotHooks, stripAutopilotClaudeSettings, claudeSettingsContainAutopilot, CLAUDE_AUTOPILOT_EVENTS, CLAUDE_BLOCK_CAP_ENV, } from "./claude-settings-merge.js";
4
+ export type { ClaudeSettingsFile, ClaudeMatcherGroup, ClaudeHookHandler, } from "./claude-settings-merge.js";
3
5
  export type { InitYesOptions, InitResult, HooksFile } from "./types.js";
4
6
  /** Skills written by init; uninstall must remove the same set. */
5
7
  export declare const AUTOPILOT_SKILL_NAMES: readonly ["autopilot-on", "autopilot-run", "autopilot-off", "autopilot-resume", "autopilot-replan"];
@@ -22,7 +24,8 @@ export type PreflightResult = {
22
24
  */
23
25
  export declare function preflightForceRefresh(projectRoot: string): PreflightResult;
24
26
  /**
25
- * Non-interactive init (`--yes`). Writes .autopilot + merges .cursor/hooks.json.
27
+ * Non-interactive init (`--yes`). Writes .autopilot + host hooks/skills
28
+ * (`.cursor/hooks.json` and/or `.claude/settings.json` per platforms).
26
29
  * `--force` refreshes hook/skills/pin/hooks merge but does **not** overwrite
27
30
  * an existing config.yml, except when `mergePlatforms` / `--add-platform`
28
31
  * updates the `platforms` list (committed only after hooks succeed).
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/init/install.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,UAAU,EACV,cAAc,EACf,MAAM,YAAY,CAAC;AAuCpB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIxE,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,qGAMxB,CAAC;AAEX,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,8DAG3B,CAAC;AAwRX;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,MAAM,GAAG,IAAI,CA6Df;AAqMD,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAiD1E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CAsY/D"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/init/install.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAGV,UAAU,EACV,cAAc,EACf,MAAM,YAAY,CAAC;AAyCpB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,+BAA+B,EAC/B,6BAA6B,EAC7B,4BAA4B,EAC5B,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIxE,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,qGAMxB,CAAC;AAEX,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,8DAG3B,CAAC;AAgVX;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,MAAM,GAAG,IAAI,CA6Df;AAwMD,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CA8C1E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CAuhB/D"}