@achieveai/hitl-mcp-server 2.9.6 → 2.11.2

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 (60) hide show
  1. package/dist/cli.d.ts +31 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +133 -5
  4. package/dist/cli.js.map +1 -1
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +2 -0
  7. package/dist/config.js.map +1 -1
  8. package/dist/git-context.d.ts +53 -2
  9. package/dist/git-context.d.ts.map +1 -1
  10. package/dist/git-context.js +118 -18
  11. package/dist/git-context.js.map +1 -1
  12. package/dist/host-settings.d.ts +68 -0
  13. package/dist/host-settings.d.ts.map +1 -0
  14. package/dist/host-settings.js +136 -0
  15. package/dist/host-settings.js.map +1 -0
  16. package/dist/identity.d.ts +20 -0
  17. package/dist/identity.d.ts.map +1 -0
  18. package/dist/identity.js +35 -0
  19. package/dist/identity.js.map +1 -0
  20. package/dist/mcp-server.d.ts +65 -1
  21. package/dist/mcp-server.d.ts.map +1 -1
  22. package/dist/mcp-server.js +446 -65
  23. package/dist/mcp-server.js.map +1 -1
  24. package/dist/ntfy-transport.d.ts +293 -13
  25. package/dist/ntfy-transport.d.ts.map +1 -1
  26. package/dist/ntfy-transport.js +765 -88
  27. package/dist/ntfy-transport.js.map +1 -1
  28. package/dist/payload.d.ts +80 -0
  29. package/dist/payload.d.ts.map +1 -0
  30. package/dist/payload.js +135 -0
  31. package/dist/payload.js.map +1 -0
  32. package/dist/plan-diff.d.ts +29 -0
  33. package/dist/plan-diff.d.ts.map +1 -0
  34. package/dist/plan-diff.js +138 -0
  35. package/dist/plan-diff.js.map +1 -0
  36. package/dist/plan-file.d.ts +24 -0
  37. package/dist/plan-file.d.ts.map +1 -0
  38. package/dist/plan-file.js +98 -0
  39. package/dist/plan-file.js.map +1 -0
  40. package/dist/plan-review.d.ts +54 -0
  41. package/dist/plan-review.d.ts.map +1 -0
  42. package/dist/plan-review.js +110 -0
  43. package/dist/plan-review.js.map +1 -0
  44. package/dist/setup.d.ts +22 -5
  45. package/dist/setup.d.ts.map +1 -1
  46. package/dist/setup.js +52 -15
  47. package/dist/setup.js.map +1 -1
  48. package/dist/snapshot-store.d.ts +104 -0
  49. package/dist/snapshot-store.d.ts.map +1 -0
  50. package/dist/snapshot-store.js +209 -0
  51. package/dist/snapshot-store.js.map +1 -0
  52. package/dist/types.d.ts +144 -1
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/types.js +2 -0
  55. package/dist/types.js.map +1 -1
  56. package/dist/version.d.ts +13 -0
  57. package/dist/version.d.ts.map +1 -0
  58. package/dist/version.js +15 -0
  59. package/dist/version.js.map +1 -0
  60. package/package.json +64 -61
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,33 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ /** Result of merging HITL's entry into a host's global (user-level) settings. */
3
+ export interface HostSettingMergeResult {
4
+ updated: boolean;
5
+ path: string;
6
+ }
7
+ /** Injectable dependencies for {@link performClaudeCodeInstall}, for testing. */
8
+ export interface ClaudeCodeInstallDeps {
9
+ runClaudeMcpAdd: (args: string[]) => void;
10
+ mergeGlobalHostSetting: () => HostSettingMergeResult;
11
+ }
12
+ export interface ClaudeCodeInstallResult {
13
+ success: boolean;
14
+ registered: 'added' | 'already_registered' | 'error';
15
+ message: string;
16
+ hostSetting: HostSettingMergeResult;
17
+ restartInstruction: string;
18
+ }
19
+ /**
20
+ * Build the argv for `claude mcp add`, registering HITL as a user-scoped
21
+ * stdio MCP server launched via npx. Deliberately carries no `--env` flags:
22
+ * any "auto-launch client in the background" behavior belongs in global host
23
+ * settings (merged separately via mergeGlobalHostSetting), not baked into
24
+ * this per-registration command line.
25
+ */
26
+ export declare function buildClaudeMcpAddArgs(): string[];
27
+ /**
28
+ * Register HITL as a Claude Code MCP server and merge the global host
29
+ * setting. Idempotent: re-running after a prior successful install reports
30
+ * `registered: 'already_registered'` (success) rather than an error.
31
+ */
32
+ export declare function performClaudeCodeInstall(deps?: ClaudeCodeInstallDeps): ClaudeCodeInstallResult;
3
33
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAuIA,iFAAiF;AACjF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAaD,iFAAiF;AACjF,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;CACtD;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,GAAG,oBAAoB,GAAG,OAAO,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,sBAAsB,CAAC;IACpC,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAQhD;AAmBD;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,GAAE,qBAGL,GACA,uBAAuB,CAwCzB"}
package/dist/cli.js CHANGED
@@ -1,7 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import crypto from 'crypto';
3
+ import { execFileSync } from 'child_process';
3
4
  import { loadConfig, saveConfig, generateDefaultConfig, getConfigPath } from './config.js';
4
5
  import { findClientBinary, launchClient } from './setup.js';
6
+ import { applyAutoBackgroundSetting } from './host-settings.js';
5
7
  import { dirname } from 'path';
6
8
  import { fileURLToPath } from 'url';
7
9
  const HELP = `
@@ -13,6 +15,7 @@ Usage:
13
15
  hitl config set-topic <id> Update the topic ID
14
16
  hitl test Send a test question through ntfy
15
17
  hitl client Launch the HITL desktop client app
18
+ hitl claude-code install Register HITL as a Claude Code MCP server (user scope)
16
19
  hitl help Show this help message
17
20
  `;
18
21
  async function main() {
@@ -27,6 +30,8 @@ async function main() {
27
30
  return cmdTest();
28
31
  case 'client':
29
32
  return cmdClient();
33
+ case 'claude-code':
34
+ return cmdClaudeCode(args.slice(1));
30
35
  case 'help':
31
36
  case '--help':
32
37
  case '-h':
@@ -108,6 +113,123 @@ function cmdClient() {
108
113
  launchClient(binaryPath);
109
114
  console.log(`HITL Client launched from ${binaryPath}`);
110
115
  }
116
+ // --- claude-code install ---
117
+ const CLAUDE_CODE_MCP_NAME = 'hitl';
118
+ const CLAUDE_CODE_MCP_PACKAGE = '@achieveai/hitl-mcp-server';
119
+ const CLAUDE_CODE_RESTART_INSTRUCTION = 'Restart Claude Code (or start a new session) for the HITL MCP server to become available.';
120
+ /**
121
+ * Merge HITL's entry into Claude Code's global user-level settings
122
+ * (~/.claude/settings.json), setting CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS="0"
123
+ * so Claude Code never auto-backgrounds a blocking HITL tool call before the
124
+ * human gets a chance to respond. Delegates to host-settings.ts, which
125
+ * preserves every unrelated key and is idempotent.
126
+ */
127
+ function defaultMergeGlobalHostSetting() {
128
+ return applyAutoBackgroundSetting();
129
+ }
130
+ /**
131
+ * Build the argv for `claude mcp add`, registering HITL as a user-scoped
132
+ * stdio MCP server launched via npx. Deliberately carries no `--env` flags:
133
+ * any "auto-launch client in the background" behavior belongs in global host
134
+ * settings (merged separately via mergeGlobalHostSetting), not baked into
135
+ * this per-registration command line.
136
+ */
137
+ export function buildClaudeMcpAddArgs() {
138
+ return [
139
+ 'mcp', 'add', CLAUDE_CODE_MCP_NAME,
140
+ '--scope', 'user',
141
+ '--transport', 'stdio',
142
+ '--',
143
+ 'npx', '-y', CLAUDE_CODE_MCP_PACKAGE,
144
+ ];
145
+ }
146
+ function defaultRunClaudeMcpAdd(args) {
147
+ // execFileSync: argv passed as an array, no shell involved — safe against
148
+ // shell injection, unlike execSync/exec with a concatenated string.
149
+ execFileSync('claude', args, { stdio: 'pipe', encoding: 'utf-8' });
150
+ }
151
+ function errorText(err) {
152
+ if (err instanceof Error) {
153
+ const withStreams = err;
154
+ const parts = [withStreams.message, withStreams.stderr, withStreams.stdout]
155
+ .filter((p) => Boolean(p))
156
+ .map((p) => p.toString());
157
+ return parts.join('\n');
158
+ }
159
+ return String(err);
160
+ }
161
+ /**
162
+ * Register HITL as a Claude Code MCP server and merge the global host
163
+ * setting. Idempotent: re-running after a prior successful install reports
164
+ * `registered: 'already_registered'` (success) rather than an error.
165
+ */
166
+ export function performClaudeCodeInstall(deps = {
167
+ runClaudeMcpAdd: defaultRunClaudeMcpAdd,
168
+ mergeGlobalHostSetting: defaultMergeGlobalHostSetting,
169
+ }) {
170
+ let registered = 'added';
171
+ let message = `Registered "${CLAUDE_CODE_MCP_NAME}" as a user-scoped Claude Code MCP server.`;
172
+ try {
173
+ deps.runClaudeMcpAdd(buildClaudeMcpAddArgs());
174
+ }
175
+ catch (err) {
176
+ const text = errorText(err);
177
+ if (/already exists/i.test(text)) {
178
+ registered = 'already_registered';
179
+ message = `"${CLAUDE_CODE_MCP_NAME}" is already registered as a Claude Code MCP server.`;
180
+ }
181
+ else {
182
+ return {
183
+ success: false,
184
+ registered: 'error',
185
+ message: `Failed to register "${CLAUDE_CODE_MCP_NAME}" with Claude Code: ${text}`,
186
+ hostSetting: { updated: false, path: '' },
187
+ restartInstruction: CLAUDE_CODE_RESTART_INSTRUCTION,
188
+ };
189
+ }
190
+ }
191
+ try {
192
+ const hostSetting = deps.mergeGlobalHostSetting();
193
+ return {
194
+ success: true,
195
+ registered,
196
+ message,
197
+ hostSetting,
198
+ restartInstruction: CLAUDE_CODE_RESTART_INSTRUCTION,
199
+ };
200
+ }
201
+ catch (err) {
202
+ return {
203
+ success: false,
204
+ registered,
205
+ message: `${message} Failed to update global host settings: ${errorText(err)}`,
206
+ hostSetting: { updated: false, path: '' },
207
+ restartInstruction: CLAUDE_CODE_RESTART_INSTRUCTION,
208
+ };
209
+ }
210
+ }
211
+ function cmdClaudeCodeInstall() {
212
+ const result = performClaudeCodeInstall();
213
+ console.log(result.message);
214
+ if (result.hostSetting.updated) {
215
+ console.log(`Updated global host settings at ${result.hostSetting.path}`);
216
+ }
217
+ console.log(result.restartInstruction);
218
+ if (!result.success) {
219
+ process.exit(1);
220
+ }
221
+ }
222
+ function cmdClaudeCode(args) {
223
+ const subcommand = args[0];
224
+ switch (subcommand) {
225
+ case 'install':
226
+ return cmdClaudeCodeInstall();
227
+ default:
228
+ console.error(`Unknown claude-code subcommand: ${subcommand}`);
229
+ console.log('Available: install');
230
+ process.exit(1);
231
+ }
232
+ }
111
233
  async function cmdTest() {
112
234
  const config = loadConfig();
113
235
  const { NtfyTransport } = await import('./ntfy-transport.js');
@@ -138,7 +260,7 @@ async function cmdTest() {
138
260
  console.log('');
139
261
  console.log('Waiting for response (60s timeout)...');
140
262
  try {
141
- const answer = await transport.waitForAnswer(messageId, 60000);
263
+ const answer = await transport.waitForAnswer(messageId, AbortSignal.timeout(60000));
142
264
  console.log('');
143
265
  console.log('✓ Response received!');
144
266
  console.log(` From: ${answer.respondedFrom}`);
@@ -156,8 +278,14 @@ async function cmdTest() {
156
278
  transport.close();
157
279
  }
158
280
  }
159
- main().catch((err) => {
160
- console.error('Error:', err.message);
161
- process.exit(1);
162
- });
281
+ // Only run when executed directly (e.g. `node cli.js` / the `hitl` bin), not
282
+ // when imported as a module (e.g. from tests) — importing must not have the
283
+ // side effect of parsing real process.argv and dispatching a command.
284
+ const isMainModule = process.argv[1] === fileURLToPath(import.meta.url);
285
+ if (isMainModule) {
286
+ main().catch((err) => {
287
+ console.error('Error:', err.message);
288
+ process.exit(1);
289
+ });
290
+ }
163
291
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM7C;;;GAGG;AACH,wBAAgB,UAAU,IAAI,UAAU,CAuBvC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,UAAU,CAQlD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGnD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM7C;;;GAGG;AACH,wBAAgB,UAAU,IAAI,UAAU,CAwBvC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,UAAU,CASlD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGnD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
package/dist/config.js CHANGED
@@ -27,6 +27,7 @@ export function loadConfig() {
27
27
  deviceName: parsed.deviceName || hostname(),
28
28
  soundEnabled: parsed.soundEnabled !== false,
29
29
  encryptionKey: parsed.encryptionKey || undefined,
30
+ identityEnabled: parsed.identityEnabled !== false,
30
31
  };
31
32
  }
32
33
  /**
@@ -39,6 +40,7 @@ export function generateDefaultConfig() {
39
40
  deviceName: hostname(),
40
41
  soundEnabled: true,
41
42
  encryptionKey: crypto.randomBytes(32).toString('hex'),
43
+ identityEnabled: true,
42
44
  };
43
45
  }
44
46
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,4BAA4B,WAAW,IAAI;YAC3C,oEAAoE;YACpE,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CACjD,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;IAEtD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,4CAA4C,WAAW,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,gBAAgB;QAC3C,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,QAAQ,EAAE;QAC3C,YAAY,EAAE,MAAM,CAAC,YAAY,KAAK,KAAK;QAC3C,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,SAAS;KACjD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,OAAO,EAAE,QAAQ,MAAM,EAAE,EAAE;QAC3B,OAAO,EAAE,gBAAgB;QACzB,UAAU,EAAE,QAAQ,EAAE;QACtB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;KACtD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,4BAA4B,WAAW,IAAI;YAC3C,oEAAoE;YACpE,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CACjD,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;IAEtD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,4CAA4C,WAAW,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,gBAAgB;QAC3C,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,QAAQ,EAAE;QAC3C,YAAY,EAAE,MAAM,CAAC,YAAY,KAAK,KAAK;QAC3C,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,SAAS;QAChD,eAAe,EAAE,MAAM,CAAC,eAAe,KAAK,KAAK;KAClD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,OAAO,EAAE,QAAQ,MAAM,EAAE,EAAE;QAC3B,OAAO,EAAE,gBAAgB;QACzB,UAAU,EAAE,QAAQ,EAAE;QACtB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrD,eAAe,EAAE,IAAI;KACtB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -1,7 +1,58 @@
1
1
  import type { RepoContext } from './types.js';
2
2
  /**
3
- * Auto-detect git repository context from the current working directory.
4
- * Returns null fields gracefully if git is unavailable or not in a repo.
3
+ * Auto-detect git repository context.
4
+ *
5
+ * `cwd` matters: a plan usually lives in a sibling repo while the agent's
6
+ * process cwd is the workspace root, so callers with a concrete file must pass
7
+ * `path.dirname(resolvedPlanPath)` rather than relying on the default (B-6).
8
+ * Returns null gracefully if git is unavailable or the directory is not a repo.
5
9
  */
6
10
  export declare function detectRepoContext(cwd?: string): RepoContext | null;
11
+ /**
12
+ * Whether `cwd` is inside a *linked* git worktree (created via `git worktree add`),
13
+ * as opposed to the main working tree or a plain non-worktree repo.
14
+ *
15
+ * `--git-dir` and `--git-common-dir` point at the same place in the main working
16
+ * tree; a linked worktree has its own `--git-dir` under `.git/worktrees/<name>`
17
+ * while `--git-common-dir` still points at the shared repo. Resolved to absolute
18
+ * paths before comparing since git may print either relative or absolute output
19
+ * depending on platform/version. Returns `false` (never throws) when `cwd` isn't
20
+ * a git repo at all.
21
+ */
22
+ export declare function isLinkedWorktree(cwd?: string): boolean;
23
+ /**
24
+ * Absolute path of the repository root containing `dir`, or null when `dir`
25
+ * is not inside a work tree.
26
+ *
27
+ * Runs `git -C <dir>` so the answer describes the plan file's repo, not the
28
+ * server process's cwd. The result is normalized, so two spellings of the same
29
+ * root (`B:\repo` vs `b:/repo`) produce one identity (B-10).
30
+ */
31
+ export declare function resolveRepoRoot(dir: string): string | null;
32
+ /**
33
+ * Whether `absPath` is tracked by the git repo containing it.
34
+ *
35
+ * Used to pick the revision-1 diff baseline: a tracked plan diffs against
36
+ * `HEAD:<relpath>`, an untracked one renders as all-added (B-5).
37
+ */
38
+ export declare function isTracked(repoRoot: string, absPath: string): boolean;
39
+ /**
40
+ * Content of `absPath` at git HEAD, or null when the path is untracked, the
41
+ * repo has no commits yet, or git is unavailable.
42
+ *
43
+ * Returned as a raw utf-8 string with line endings untouched — normalizing CRLF
44
+ * here would shift every anchor in the diff (B-11).
45
+ */
46
+ export declare function readHeadContent(repoRoot: string, absPath: string): string | null;
47
+ /** Forward-slashed, repo-root-relative form of `absPath` — git's own spelling. */
48
+ export declare function toRepoRelative(repoRoot: string, absPath: string): string;
49
+ /**
50
+ * Canonical spelling of a path for hashing and comparison.
51
+ *
52
+ * Windows paths are case-insensitive and accept either separator, so `B:\a\b`
53
+ * and `b:/a/b` name the same file and must hash to one identity (B-10). Only
54
+ * the drive letter is case-folded — the rest of the path keeps its case, since
55
+ * the store is also read on case-sensitive filesystems.
56
+ */
57
+ export declare function normalizePath(p: string): string;
7
58
  //# sourceMappingURL=git-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-context.d.ts","sourceRoot":"","sources":["../src/git-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAwBlE"}
1
+ {"version":3,"file":"git-context.d.ts","sourceRoot":"","sources":["../src/git-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAW9C;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAclE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAKrE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY1D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAYpE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYhF;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/C"}
@@ -1,29 +1,129 @@
1
1
  import { execSync } from 'child_process';
2
+ import path from 'path';
3
+ /** Run a git command in `cwd`, tolerating any failure. Trims stdout; empty output ⇒ undefined. */
4
+ function run(cmd, cwd) {
5
+ try {
6
+ return execSync(cmd, { cwd, encoding: 'utf-8', timeout: 5000, stdio: 'pipe' }).trim() || undefined;
7
+ }
8
+ catch {
9
+ return undefined;
10
+ }
11
+ }
2
12
  /**
3
- * Auto-detect git repository context from the current working directory.
4
- * Returns null fields gracefully if git is unavailable or not in a repo.
13
+ * Auto-detect git repository context.
14
+ *
15
+ * `cwd` matters: a plan usually lives in a sibling repo while the agent's
16
+ * process cwd is the workspace root, so callers with a concrete file must pass
17
+ * `path.dirname(resolvedPlanPath)` rather than relying on the default (B-6).
18
+ * Returns null gracefully if git is unavailable or the directory is not a repo.
5
19
  */
6
20
  export function detectRepoContext(cwd) {
7
- const opts = { cwd: cwd ?? process.cwd(), encoding: 'utf-8', timeout: 5000 };
21
+ const resolvedCwd = cwd ?? process.cwd();
22
+ // Quick check: are we in a git repo at all?
23
+ if (run('git rev-parse --is-inside-work-tree', resolvedCwd) === undefined) {
24
+ return null;
25
+ }
26
+ const toplevel = run('git rev-parse --show-toplevel', resolvedCwd);
27
+ const name = toplevel ? toplevel.split('/').pop() ?? toplevel.split('\\').pop() ?? 'unknown' : 'unknown';
28
+ const branch = run('git branch --show-current', resolvedCwd) ?? 'HEAD';
29
+ const remoteUrl = run('git remote get-url origin', resolvedCwd);
30
+ return { name, branch, remoteUrl };
31
+ }
32
+ /**
33
+ * Whether `cwd` is inside a *linked* git worktree (created via `git worktree add`),
34
+ * as opposed to the main working tree or a plain non-worktree repo.
35
+ *
36
+ * `--git-dir` and `--git-common-dir` point at the same place in the main working
37
+ * tree; a linked worktree has its own `--git-dir` under `.git/worktrees/<name>`
38
+ * while `--git-common-dir` still points at the shared repo. Resolved to absolute
39
+ * paths before comparing since git may print either relative or absolute output
40
+ * depending on platform/version. Returns `false` (never throws) when `cwd` isn't
41
+ * a git repo at all.
42
+ */
43
+ export function isLinkedWorktree(cwd = process.cwd()) {
44
+ const gitDir = run(`git rev-parse --git-dir`, cwd);
45
+ const gitCommonDir = run(`git rev-parse --git-common-dir`, cwd);
46
+ if (gitDir === undefined || gitCommonDir === undefined)
47
+ return false;
48
+ return path.resolve(cwd, gitDir) !== path.resolve(cwd, gitCommonDir);
49
+ }
50
+ /**
51
+ * Absolute path of the repository root containing `dir`, or null when `dir`
52
+ * is not inside a work tree.
53
+ *
54
+ * Runs `git -C <dir>` so the answer describes the plan file's repo, not the
55
+ * server process's cwd. The result is normalized, so two spellings of the same
56
+ * root (`B:\repo` vs `b:/repo`) produce one identity (B-10).
57
+ */
58
+ export function resolveRepoRoot(dir) {
8
59
  try {
9
- // Quick check: are we in a git repo at all?
10
- execSync('git rev-parse --is-inside-work-tree', { ...opts, stdio: 'pipe' });
60
+ const out = execSync('git rev-parse --show-toplevel', {
61
+ cwd: dir,
62
+ encoding: 'utf-8',
63
+ timeout: 5000,
64
+ stdio: 'pipe',
65
+ }).trim();
66
+ return out ? normalizePath(out) : null;
11
67
  }
12
68
  catch {
13
69
  return null;
14
70
  }
15
- const run = (cmd) => {
16
- try {
17
- return execSync(cmd, { ...opts, stdio: 'pipe' }).trim() || undefined;
18
- }
19
- catch {
20
- return undefined;
21
- }
22
- };
23
- const toplevel = run('git rev-parse --show-toplevel');
24
- const name = toplevel ? toplevel.split('/').pop() ?? toplevel.split('\\').pop() ?? 'unknown' : 'unknown';
25
- const branch = run('git branch --show-current') ?? 'HEAD';
26
- const remoteUrl = run('git remote get-url origin');
27
- return { name, branch, remoteUrl };
71
+ }
72
+ /**
73
+ * Whether `absPath` is tracked by the git repo containing it.
74
+ *
75
+ * Used to pick the revision-1 diff baseline: a tracked plan diffs against
76
+ * `HEAD:<relpath>`, an untracked one renders as all-added (B-5).
77
+ */
78
+ export function isTracked(repoRoot, absPath) {
79
+ try {
80
+ execSync(`git ls-files --error-unmatch -- "${toRepoRelative(repoRoot, absPath)}"`, {
81
+ cwd: repoRoot,
82
+ encoding: 'utf-8',
83
+ timeout: 5000,
84
+ stdio: 'pipe',
85
+ });
86
+ return true;
87
+ }
88
+ catch {
89
+ return false;
90
+ }
91
+ }
92
+ /**
93
+ * Content of `absPath` at git HEAD, or null when the path is untracked, the
94
+ * repo has no commits yet, or git is unavailable.
95
+ *
96
+ * Returned as a raw utf-8 string with line endings untouched — normalizing CRLF
97
+ * here would shift every anchor in the diff (B-11).
98
+ */
99
+ export function readHeadContent(repoRoot, absPath) {
100
+ try {
101
+ const relative = toRepoRelative(repoRoot, absPath);
102
+ return execSync(`git show "HEAD:${relative}"`, {
103
+ cwd: repoRoot,
104
+ timeout: 5000,
105
+ stdio: 'pipe',
106
+ maxBuffer: 64 * 1024 * 1024,
107
+ }).toString('utf8');
108
+ }
109
+ catch {
110
+ return null;
111
+ }
112
+ }
113
+ /** Forward-slashed, repo-root-relative form of `absPath` — git's own spelling. */
114
+ export function toRepoRelative(repoRoot, absPath) {
115
+ return path.relative(repoRoot, absPath).split(path.sep).join('/');
116
+ }
117
+ /**
118
+ * Canonical spelling of a path for hashing and comparison.
119
+ *
120
+ * Windows paths are case-insensitive and accept either separator, so `B:\a\b`
121
+ * and `b:/a/b` name the same file and must hash to one identity (B-10). Only
122
+ * the drive letter is case-folded — the rest of the path keeps its case, since
123
+ * the store is also read on case-sensitive filesystems.
124
+ */
125
+ export function normalizePath(p) {
126
+ const slashed = p.replace(/\\/g, '/').replace(/\/+$/, '');
127
+ return slashed.replace(/^([a-zA-Z]):/, (_m, drive) => `${drive.toUpperCase()}:`);
28
128
  }
29
129
  //# sourceMappingURL=git-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-context.js","sourceRoot":"","sources":["../src/git-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAEtF,IAAI,CAAC;QACH,4CAA4C;QAC5C,QAAQ,CAAC,qCAAqC,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,GAAW,EAAsB,EAAE;QAC9C,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAG,CAAC,+BAA+B,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACzG,MAAM,MAAM,GAAG,GAAG,CAAC,2BAA2B,CAAC,IAAI,MAAM,CAAC;IAC1D,MAAM,SAAS,GAAG,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAEnD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"git-context.js","sourceRoot":"","sources":["../src/git-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /** The env var Claude Code reads to decide when to auto-background a long-running MCP tool call. */
2
+ export declare const AUTO_BACKGROUND_ENV_KEY = "CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS";
3
+ /** The value that disables auto-backgrounding, so a blocking HITL tool call is never yanked away before the human answers. */
4
+ export declare const AUTO_BACKGROUND_TARGET_VALUE = "0";
5
+ /** Result of checking whether the auto-background guard is in effect. */
6
+ export interface AutoBackgroundStatus {
7
+ /** True if the guard is already effective now, or will be after the next Claude Code restart. */
8
+ active: boolean;
9
+ /** True if the *currently running* process inherited the target value (in effect right now). */
10
+ activeInEnv: boolean;
11
+ /** True if ~/.claude/settings.json has the target value queued for the next restart. */
12
+ configuredForRestart: boolean;
13
+ /** Raw value observed in the inherited env, if any. */
14
+ envValue?: string;
15
+ /** Raw value observed in settings.json's `env` block, if any. */
16
+ settingsValue?: string;
17
+ }
18
+ /** Locate the host Claude Code settings file: ~/.claude/settings.json */
19
+ export declare function getHostSettingsPath(): string;
20
+ /**
21
+ * Read a Claude Code settings.json file. Returns an empty object when the
22
+ * file is missing or blank, so callers can merge into the result unconditionally.
23
+ * Malformed JSON is not swallowed — it throws, so a caller can surface a clear
24
+ * error instead of silently discarding a user's existing settings.
25
+ */
26
+ export declare function readHostSettings(settingsPath?: string): Record<string, unknown>;
27
+ /**
28
+ * Merge the auto-background remediation value into an existing settings
29
+ * object, preserving every other top-level key and every other `env` entry.
30
+ * Pure function — never mutates its input. Applying it to its own output is
31
+ * idempotent (produces an equal object).
32
+ */
33
+ export declare function mergeAutoBackgroundSetting(existingSettings: Record<string, unknown>): Record<string, unknown>;
34
+ /** Result of writing the auto-background remediation to disk. */
35
+ export interface ApplySettingsResult {
36
+ /** True if the file was created or modified to reach the target state. */
37
+ updated: boolean;
38
+ /** Path to the settings file that was read/written. */
39
+ path: string;
40
+ }
41
+ /**
42
+ * Apply the auto-background remediation to disk: read the existing
43
+ * settings.json (if any), merge in the target env value via
44
+ * {@link mergeAutoBackgroundSetting}, and write the result back only if it
45
+ * actually changed. Re-running this after a prior successful run is a no-op
46
+ * (`updated: false`) rather than rewriting an identical file.
47
+ *
48
+ * The parent directory (e.g. ~/.claude) is created if missing. Writes are
49
+ * atomic — see {@link writeAtomic}.
50
+ */
51
+ export declare function applyAutoBackgroundSetting(settingsPath?: string): ApplySettingsResult;
52
+ /**
53
+ * Detect whether the auto-background guard is already in effect:
54
+ * - `activeInEnv`: the currently running process inherited it — in effect now.
55
+ * - `configuredForRestart`: ~/.claude/settings.json has it queued — takes
56
+ * effect the next time Claude Code restarts, not for the current session.
57
+ *
58
+ * Never throws: a missing or malformed settings.json is treated the same as
59
+ * "not configured", since this is a read-only diagnostic.
60
+ */
61
+ export declare function detectAutoBackgroundStatus(env?: NodeJS.ProcessEnv, settingsPath?: string): AutoBackgroundStatus;
62
+ /**
63
+ * Build reusable, human-readable remediation text for when the auto-background
64
+ * guard is not yet active. Shared by the setup diagnostic step, and any future
65
+ * CLI/UX surface that needs to explain the same fix.
66
+ */
67
+ export declare function buildAutoBackgroundRemediationText(settingsPath?: string): string;
68
+ //# sourceMappingURL=host-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-settings.d.ts","sourceRoot":"","sources":["../src/host-settings.ts"],"names":[],"mappings":"AAKA,oGAAoG;AACpG,eAAO,MAAM,uBAAuB,uCAAuC,CAAC;AAE5E,8HAA8H;AAC9H,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,yEAAyE;AACzE,MAAM,WAAW,oBAAoB;IACnC,iGAAiG;IACjG,MAAM,EAAE,OAAO,CAAC;IAChB,gGAAgG;IAChG,WAAW,EAAE,OAAO,CAAC;IACrB,wFAAwF;IACxF,oBAAoB,EAAE,OAAO,CAAC;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAQD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,GAAE,MAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKtG;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAED,iEAAiE;AACjE,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;CACd;AAyBD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,GAAE,MAA8B,GAC3C,mBAAmB,CAWrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,YAAY,GAAE,MAA8B,GAC3C,oBAAoB,CAuBtB;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,YAAY,GAAE,MAA8B,GAC3C,MAAM,CAOR"}