aicodeman 1.12.2 → 1.14.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 (130) hide show
  1. package/README.md +93 -15
  2. package/dist/ai-checker-base.d.ts +2 -0
  3. package/dist/ai-checker-base.d.ts.map +1 -1
  4. package/dist/ai-checker-base.js +31 -3
  5. package/dist/ai-checker-base.js.map +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +142 -14
  8. package/dist/cli.js.map +1 -1
  9. package/dist/config/agent-wait.d.ts +73 -0
  10. package/dist/config/agent-wait.d.ts.map +1 -0
  11. package/dist/config/agent-wait.js +99 -0
  12. package/dist/config/agent-wait.js.map +1 -0
  13. package/dist/config/service-names.d.ts +23 -0
  14. package/dist/config/service-names.d.ts.map +1 -0
  15. package/dist/config/service-names.js +29 -0
  16. package/dist/config/service-names.js.map +1 -0
  17. package/dist/daemon-control.d.ts +126 -0
  18. package/dist/daemon-control.d.ts.map +1 -0
  19. package/dist/daemon-control.js +433 -0
  20. package/dist/daemon-control.js.map +1 -0
  21. package/dist/hooks-config.d.ts +28 -6
  22. package/dist/hooks-config.d.ts.map +1 -1
  23. package/dist/hooks-config.js +214 -28
  24. package/dist/hooks-config.js.map +1 -1
  25. package/dist/service-installer.d.ts +96 -0
  26. package/dist/service-installer.d.ts.map +1 -0
  27. package/dist/service-installer.js +333 -0
  28. package/dist/service-installer.js.map +1 -0
  29. package/dist/session-cli-builder.d.ts.map +1 -1
  30. package/dist/session-cli-builder.js +6 -2
  31. package/dist/session-cli-builder.js.map +1 -1
  32. package/dist/tmux-manager.d.ts.map +1 -1
  33. package/dist/tmux-manager.js +5 -1
  34. package/dist/tmux-manager.js.map +1 -1
  35. package/dist/web/public/admin-ui.js.gz +0 -0
  36. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  37. package/dist/web/public/{app.2e9ffd31.js → app.b24f795e.js} +5 -7
  38. package/dist/web/public/app.b24f795e.js.br +0 -0
  39. package/dist/web/public/app.b24f795e.js.gz +0 -0
  40. package/dist/web/public/constants.e7175b95.js.gz +0 -0
  41. package/dist/web/public/cron-ui.js.gz +0 -0
  42. package/dist/web/public/entrance-animations.js.gz +0 -0
  43. package/dist/web/public/i18n.da34cfaf.js +1 -0
  44. package/dist/web/public/i18n.da34cfaf.js.br +0 -0
  45. package/dist/web/public/i18n.da34cfaf.js.gz +0 -0
  46. package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
  47. package/dist/web/public/index.html +13 -6
  48. package/dist/web/public/index.html.br +0 -0
  49. package/dist/web/public/index.html.gz +0 -0
  50. package/dist/web/public/input-cjk.63794d0b.js.gz +0 -0
  51. package/dist/web/public/keyboard-accessory.9936227d.js.gz +0 -0
  52. package/dist/web/public/mobile-handlers.32fdd57f.js.gz +0 -0
  53. package/dist/web/public/mobile-overview.js.gz +0 -0
  54. package/dist/web/public/mobile.32cacde5.css.gz +0 -0
  55. package/dist/web/public/notification-manager.5d229063.js.gz +0 -0
  56. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  57. package/dist/web/public/panels-ui.1d4203e0.js.gz +0 -0
  58. package/dist/web/public/ralph-panel.6de2d0f8.js.gz +0 -0
  59. package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
  60. package/dist/web/public/respawn-ui.ff0dae4c.js.gz +0 -0
  61. package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
  62. package/dist/web/public/session-ui.1356a4f4.js.gz +0 -0
  63. package/dist/web/public/settings-ui.ea63d5db.js +67 -0
  64. package/dist/web/public/settings-ui.ea63d5db.js.br +0 -0
  65. package/dist/web/public/settings-ui.ea63d5db.js.gz +0 -0
  66. package/dist/web/public/styles.b10e5edd.css +1 -0
  67. package/dist/web/public/styles.b10e5edd.css.br +0 -0
  68. package/dist/web/public/styles.b10e5edd.css.gz +0 -0
  69. package/dist/web/public/subagent-windows.4cc8b005.js.gz +0 -0
  70. package/dist/web/public/sw.js.gz +0 -0
  71. package/dist/web/public/{terminal-ui.78c71f3a.js → terminal-ui.d5ae6dcf.js} +2 -2
  72. package/dist/web/public/terminal-ui.d5ae6dcf.js.br +0 -0
  73. package/dist/web/public/terminal-ui.d5ae6dcf.js.gz +0 -0
  74. package/dist/web/public/ultracode-panel.js.gz +0 -0
  75. package/dist/web/public/ultracode-windows.js.gz +0 -0
  76. package/dist/web/public/upload.html.gz +0 -0
  77. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  78. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  79. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  80. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  81. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  82. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  83. package/dist/web/public/vendor/xterm-zerolag-input.137ad9f0.js.gz +0 -0
  84. package/dist/web/public/vendor/xterm.css.gz +0 -0
  85. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  86. package/dist/web/public/voice-input.085e9e73.js.gz +0 -0
  87. package/dist/web/public/webview-tabs.js +1 -2
  88. package/dist/web/public/webview-tabs.js.br +0 -0
  89. package/dist/web/public/webview-tabs.js.gz +0 -0
  90. package/dist/web/routes/hook-event-routes.d.ts.map +1 -1
  91. package/dist/web/routes/hook-event-routes.js +22 -0
  92. package/dist/web/routes/hook-event-routes.js.map +1 -1
  93. package/dist/web/routes/session-routes.d.ts +4 -0
  94. package/dist/web/routes/session-routes.d.ts.map +1 -1
  95. package/dist/web/routes/session-routes.js +499 -17
  96. package/dist/web/routes/session-routes.js.map +1 -1
  97. package/dist/web/schemas.d.ts +53 -0
  98. package/dist/web/schemas.d.ts.map +1 -1
  99. package/dist/web/schemas.js +59 -0
  100. package/dist/web/schemas.js.map +1 -1
  101. package/dist/web/self-update.d.ts.map +1 -1
  102. package/dist/web/self-update.js +4 -4
  103. package/dist/web/self-update.js.map +1 -1
  104. package/dist/web/server.d.ts.map +1 -1
  105. package/dist/web/server.js +14 -0
  106. package/dist/web/server.js.map +1 -1
  107. package/dist/web/session-listener-wiring.d.ts.map +1 -1
  108. package/dist/web/session-listener-wiring.js +28 -0
  109. package/dist/web/session-listener-wiring.js.map +1 -1
  110. package/dist/web/session-wait-registry.d.ts +407 -0
  111. package/dist/web/session-wait-registry.d.ts.map +1 -0
  112. package/dist/web/session-wait-registry.js +895 -0
  113. package/dist/web/session-wait-registry.js.map +1 -0
  114. package/package.json +2 -1
  115. package/skills/codeman/SKILL.md +274 -0
  116. package/skills/codeman/reference/endpoints.md +214 -0
  117. package/skills/codeman/reference/recipes.md +249 -0
  118. package/dist/web/public/app.2e9ffd31.js.br +0 -0
  119. package/dist/web/public/app.2e9ffd31.js.gz +0 -0
  120. package/dist/web/public/i18n.0fbea500.js +0 -1
  121. package/dist/web/public/i18n.0fbea500.js.br +0 -0
  122. package/dist/web/public/i18n.0fbea500.js.gz +0 -0
  123. package/dist/web/public/settings-ui.01a1ae7d.js +0 -67
  124. package/dist/web/public/settings-ui.01a1ae7d.js.br +0 -0
  125. package/dist/web/public/settings-ui.01a1ae7d.js.gz +0 -0
  126. package/dist/web/public/styles.50cd52bd.css +0 -1
  127. package/dist/web/public/styles.50cd52bd.css.br +0 -0
  128. package/dist/web/public/styles.50cd52bd.css.gz +0 -0
  129. package/dist/web/public/terminal-ui.78c71f3a.js.br +0 -0
  130. package/dist/web/public/terminal-ui.78c71f3a.js.gz +0 -0
@@ -10,13 +10,15 @@
10
10
  * Key exports:
11
11
  * - `generateHooksConfig()` — returns hooks object for settings.local.json
12
12
  * - `writeHooksConfig(casePath)` — writes hooks + env config to disk
13
+ * - `ensureCodemanHooks(casePath)` — safely installs/updates hooks for a managed case
13
14
  * - `updateCaseEnvVars(casePath, envVars)` — merges env vars into settings
14
15
  *
15
16
  * Hook events generated: `idle_prompt`, `permission_prompt`, `elicitation_dialog`,
16
17
  * `stop`, `teammate_idle`, `task_completed`
17
18
  *
18
- * Hook categories: `Notification` (3 matchers), `Stop` (1), `TeammateIdle` (1),
19
- * `TaskCompleted` (1), `PostToolUse` (1 self-contained background Bash rewake)
19
+ * Hook categories: `Notification` (3 matchers), `Stop` (1), `SubagentStop` (1),
20
+ * `TeammateIdle` (1), `TaskCompleted` (1), `PostToolUse` (1 self-contained
21
+ * background Bash rewake)
20
22
  *
21
23
  * @dependencies types (HookEventType), config/auth-config (HOOK_TIMEOUT_SECONDS)
22
24
  * @consumedby web/server (session creation), session-cli-builder (env setup)
@@ -48,14 +50,18 @@ const BACKGROUND_WAKE_MARKER_PREFIX = 'CODEMAN_BACKGROUND_REWAKE_V';
48
50
  * changes: `refreshStaleCodemanHooks` treats the absence of the CURRENT marker as
49
51
  * stale, so healed cases pick up the new script on next launch.
50
52
  */
51
- const BACKGROUND_WAKE_MARKER = `${BACKGROUND_WAKE_MARKER_PREFIX}2`;
53
+ const BACKGROUND_WAKE_MARKER = `${BACKGROUND_WAKE_MARKER_PREFIX}3`;
54
+ const SUBAGENT_STOP_GUARD_MARKER_PREFIX = 'CODEMAN_SUBAGENT_STOP_GUARD_V';
55
+ const SUBAGENT_STOP_GUARD_MARKER = `${SUBAGENT_STOP_GUARD_MARKER_PREFIX}1`;
52
56
  const BACKGROUND_WAKE_TIMEOUT_SECONDS = 6 * 60 * 60;
53
57
  /**
54
58
  * Inline Node helper for Claude Code's `asyncRewake` hook.
55
59
  *
56
60
  * A background Bash tool returns immediately with a task ID, then Claude writes
57
- * its completion as a queue-operation in the transcript. Watching that durable
58
- * record avoids injecting terminal input (which could submit a user's draft).
61
+ * its completion as a queue-operation in the top-level transcript. Subagent hooks
62
+ * receive their own transcript path even though their completion is parent-owned,
63
+ * so the helper watches both paths. Watching durable records avoids injecting
64
+ * terminal input (which could submit a user's draft).
59
65
  * The helper is embedded in settings via `node -e`, so it has no script path
60
66
  * that can go stale after an install or plugin-cache cleanup.
61
67
  *
@@ -67,8 +73,12 @@ const BACKGROUND_WAKE_TIMEOUT_SECONDS = 6 * 60 * 60;
67
73
  export function generateBackgroundWakeScript() {
68
74
  return [
69
75
  "const fs = require('node:fs');",
76
+ "const path = require('node:path');",
70
77
  `const ${BACKGROUND_WAKE_MARKER} = true;`,
71
78
  `const deadline = Date.now() + ${BACKGROUND_WAKE_TIMEOUT_SECONDS} * 1000;`,
79
+ "const RESULT_BEGIN = '=== CODEMAN_RESULT_BEGIN ===';",
80
+ "const RESULT_END = '=== CODEMAN_RESULT_END ===';",
81
+ 'const MAX_RESULT_CHARS = 65536;',
72
82
  'let input = {};',
73
83
  "try { input = JSON.parse(fs.readFileSync(0, 'utf8') || '{}'); } catch { process.exit(0); }",
74
84
  'function findTaskId(value) {',
@@ -93,45 +103,162 @@ export function generateBackgroundWakeScript() {
93
103
  'const taskId = findTaskId(input.tool_response);',
94
104
  "const transcriptPath = typeof input.transcript_path === 'string' ? input.transcript_path : '';",
95
105
  'if (!taskId || !transcriptPath) process.exit(0);',
96
- 'let position = 0;',
97
- 'try { position = Math.max(0, fs.statSync(transcriptPath).size - 262144); } catch { process.exit(0); }',
98
- "let carry = '';",
106
+ 'const transcriptPaths = [transcriptPath];',
107
+ 'const sessionDir = path.dirname(path.dirname(transcriptPath));',
108
+ "if (typeof input.agent_id === 'string' && path.basename(path.dirname(transcriptPath)) === 'subagents' &&",
109
+ " typeof input.session_id === 'string' && path.basename(sessionDir) === input.session_id) {",
110
+ " transcriptPaths.push(sessionDir + '.jsonl');",
111
+ '}',
112
+ 'const transcripts = [...new Set(transcriptPaths)].map((transcript) => {',
113
+ ' let position = 0;',
114
+ ' try { position = Math.max(0, fs.statSync(transcript).size - 262144); } catch {}',
115
+ " return { path: transcript, position, carry: '' };",
116
+ '});',
117
+ 'if (!transcripts.some((transcript) => fs.existsSync(transcript.path))) process.exit(0);',
118
+ 'function readMarkedResult(outputPath) {',
119
+ " if (!outputPath || !path.isAbsolute(outputPath) || path.basename(outputPath) !== taskId + '.output') return '';",
120
+ " if (path.basename(path.dirname(outputPath)) !== 'tasks') return '';",
121
+ ' try {',
122
+ ' const size = fs.statSync(outputPath).size;',
123
+ ' const length = Math.min(size, MAX_RESULT_CHARS * 2);',
124
+ ' const buffer = Buffer.allocUnsafe(length);',
125
+ " const fd = fs.openSync(outputPath, 'r');",
126
+ ' const bytes = fs.readSync(fd, buffer, 0, length, size - length);',
127
+ ' fs.closeSync(fd);',
128
+ " const text = buffer.subarray(0, bytes).toString('utf8');",
129
+ ' const begin = text.lastIndexOf(RESULT_BEGIN);',
130
+ ' const end = text.indexOf(RESULT_END, begin + RESULT_BEGIN.length);',
131
+ " if (begin < 0 || end < 0) return '';",
132
+ ' let result = text.slice(begin + RESULT_BEGIN.length, end).trim();',
133
+ " if (!result) return '';",
134
+ ' if (result.length > MAX_RESULT_CHARS) {',
135
+ ' const half = Math.floor(MAX_RESULT_CHARS / 2);',
136
+ " result = result.slice(0, half) + '\\n\\n[report truncated by Codeman]\\n\\n' + result.slice(-half);",
137
+ ' }',
138
+ " return '\\n\\nCompleted task report:\\n<codeman-background-result>\\n' + result + '\\n</codeman-background-result>';",
139
+ " } catch { return ''; }",
140
+ '}',
99
141
  'function inspect(text) {',
100
142
  ' for (const line of text.split(/\\r?\\n/)) {',
101
143
  ' if (!line.includes(taskId)) continue;',
102
144
  ' let entry;',
103
145
  ' try { entry = JSON.parse(line); } catch { continue; }',
104
- " if (entry.type !== 'queue-operation' || typeof entry.content !== 'string') continue;",
146
+ " if (entry.type !== 'queue-operation' || entry.operation !== 'enqueue' || typeof entry.content !== 'string') continue;",
105
147
  " if (!entry.content.includes('<task-id>' + taskId + '</task-id>')) continue;",
106
148
  ' const status = entry.content.match(/<status>(completed|failed|killed|error)<\\/status>/i);',
107
149
  ' if (!status) continue;',
108
150
  ' const output = entry.content.match(/<output-file>([^<]+)<\\/output-file>/i);',
109
- " const location = output ? ' Read ' + output[1] + ' and' : '';",
110
- " console.error('Background command ' + taskId + ' ' + status[1].toLowerCase() + '.' + location + ' continue the task.');",
151
+ " const outputPath = output ? output[1].trim() : '';",
152
+ " const location = outputPath ? ' Read ' + outputPath + ' and' : '';",
153
+ ' const result = readMarkedResult(outputPath);',
154
+ " console.error('Background command ' + taskId + ' ' + status[1].toLowerCase() + '.' + location + ' continue the task.' + result);",
111
155
  ' process.exit(2);',
112
156
  ' }',
113
157
  '}',
114
- 'function poll() {',
115
- ' if (Date.now() > deadline || process.ppid === 1) process.exit(0);',
158
+ 'function pollTranscript(transcript) {',
116
159
  ' try {',
117
- ' const size = fs.statSync(transcriptPath).size;',
118
- " if (size < position) { position = 0; carry = ''; }",
119
- ' if (size > position) {',
120
- ' const length = Math.min(size - position, 1048576);',
160
+ ' const size = fs.statSync(transcript.path).size;',
161
+ " if (size < transcript.position) { transcript.position = 0; transcript.carry = ''; }",
162
+ ' if (size > transcript.position) {',
163
+ ' const length = Math.min(size - transcript.position, 1048576);',
121
164
  ' const buffer = Buffer.allocUnsafe(length);',
122
- " const fd = fs.openSync(transcriptPath, 'r');",
123
- ' const bytes = fs.readSync(fd, buffer, 0, length, position);',
165
+ " const fd = fs.openSync(transcript.path, 'r');",
166
+ ' const bytes = fs.readSync(fd, buffer, 0, length, transcript.position);',
124
167
  ' fs.closeSync(fd);',
125
- ' position += bytes;',
126
- " carry = (carry + buffer.subarray(0, bytes).toString('utf8')).slice(-262144);",
127
- ' inspect(carry);',
168
+ ' transcript.position += bytes;',
169
+ " transcript.carry = (transcript.carry + buffer.subarray(0, bytes).toString('utf8')).slice(-262144);",
170
+ ' inspect(transcript.carry);',
128
171
  ' }',
129
172
  ' } catch {}',
173
+ '}',
174
+ 'function poll() {',
175
+ ' if (Date.now() > deadline || process.ppid === 1) process.exit(0);',
176
+ ' for (const transcript of transcripts) pollTranscript(transcript);',
130
177
  ' setTimeout(poll, 1000);',
131
178
  '}',
132
179
  'poll();',
133
180
  ].join('\n');
134
181
  }
182
+ /**
183
+ * Keep a Claude subagent alive while its Monitor or background Bash work is live.
184
+ * Claude otherwise can publish the worker's last progress sentence as an Agent
185
+ * result when one watcher ends, even if other tracked tasks are still running.
186
+ */
187
+ export function generateSubagentStopGuardScript() {
188
+ return [
189
+ "const fs = require('node:fs');",
190
+ `const ${SUBAGENT_STOP_GUARD_MARKER} = true;`,
191
+ 'let input = {};',
192
+ "try { input = JSON.parse(fs.readFileSync(0, 'utf8') || '{}'); } catch { process.exit(0); }",
193
+ "const transcriptPath = typeof input.agent_transcript_path === 'string' ? input.agent_transcript_path : '';",
194
+ 'if (!transcriptPath) process.exit(0);',
195
+ 'let text;',
196
+ 'try {',
197
+ ' const size = fs.statSync(transcriptPath).size;',
198
+ ' const length = Math.min(size, 16 * 1024 * 1024);',
199
+ ' const buffer = Buffer.allocUnsafe(length);',
200
+ " const fd = fs.openSync(transcriptPath, 'r');",
201
+ ' const bytes = fs.readSync(fd, buffer, 0, length, size - length);',
202
+ ' fs.closeSync(fd);',
203
+ " text = buffer.subarray(0, bytes).toString('utf8');",
204
+ '} catch { process.exit(0); }',
205
+ 'const launched = new Set();',
206
+ 'const finished = new Set();',
207
+ 'function inspectToolResult(value) {',
208
+ " const serialized = typeof value === 'string' ? value : JSON.stringify(value ?? '');",
209
+ ' for (const match of serialized.matchAll(/Command running in background with ID:\\s*([A-Za-z0-9_-]+)/gi)) launched.add(match[1]);',
210
+ ' for (const match of serialized.matchAll(/Monitor started \\(task ([A-Za-z0-9_-]+)/gi)) launched.add(match[1]);',
211
+ '}',
212
+ 'function inspectNotifications(value) {',
213
+ " if (typeof value !== 'string' || !value.includes('<task-notification>')) return;",
214
+ ' for (const match of value.matchAll(/<task-notification>([\\s\\S]*?)<\\/task-notification>/gi)) {',
215
+ ' const body = match[1];',
216
+ ' const id = body.match(/<task-id>([^<]+)<\\/task-id>/i);',
217
+ ' const status = body.match(/<status>(completed|failed|killed|error)<\\/status>/i);',
218
+ ' if (id && status) finished.add(id[1].trim());',
219
+ ' }',
220
+ '}',
221
+ 'for (const line of text.split(/\\r?\\n/)) {',
222
+ ' let entry;',
223
+ ' try { entry = JSON.parse(line); } catch { continue; }',
224
+ ' const content = entry && entry.message ? entry.message.content : undefined;',
225
+ ' if (Array.isArray(content)) {',
226
+ ' for (const block of content) {',
227
+ " if (block && block.type === 'tool_result') inspectToolResult(block.content);",
228
+ " if (block && block.type === 'text') inspectNotifications(block.text);",
229
+ ' }',
230
+ ' } else {',
231
+ ' inspectNotifications(content);',
232
+ ' }',
233
+ ' inspectNotifications(entry && entry.content);',
234
+ '}',
235
+ 'function findLiveTasks(candidates) {',
236
+ ' const live = new Set();',
237
+ " if (candidates.size === 0 || !fs.existsSync('/proc')) return live;",
238
+ ' let processIds;',
239
+ " try { processIds = fs.readdirSync('/proc').filter((name) => /^\\d+$/.test(name)); } catch { return live; }",
240
+ ' for (const processId of processIds) {',
241
+ " for (const descriptor of ['0', '1', '2']) {",
242
+ ' let target;',
243
+ " try { target = fs.readlinkSync('/proc/' + processId + '/fd/' + descriptor); } catch { continue; }",
244
+ ' const match = target.match(/[\\/]tasks[\\/]([A-Za-z0-9_-]+)\\.output(?: \\(deleted\\))?$/);',
245
+ ' if (match && candidates.has(match[1])) live.add(match[1]);',
246
+ ' }',
247
+ ' if (live.size === candidates.size) break;',
248
+ ' }',
249
+ ' return live;',
250
+ '}',
251
+ 'const unfinished = new Set([...launched].filter((taskId) => !finished.has(taskId)));',
252
+ 'const active = [...findLiveTasks(unfinished)];',
253
+ 'if (active.length === 0) process.exit(0);',
254
+ 'const shown = active.slice(0, 8);',
255
+ "const suffix = active.length > shown.length ? ' and ' + (active.length - shown.length) + ' more' : '';",
256
+ 'process.stdout.write(JSON.stringify({',
257
+ " decision: 'block',",
258
+ " reason: 'You still own active background work (' + shown.join(', ') + suffix + '). Do not return an intermediate progress message as your final report. Process the task notifications or keep actively polling until every task completes, then return one complete summary.',",
259
+ '}));',
260
+ ].join('\n');
261
+ }
135
262
  function withSettingsLock(path, fn) {
136
263
  const prev = settingsWriteLocks.get(path) ?? Promise.resolve();
137
264
  const run = prev.then(fn, fn); // run after the prior writer, regardless of its outcome
@@ -163,7 +290,11 @@ export function generateHooksConfig() {
163
290
  // the plain loopback bypass (tunnel down), same as pre-secret behavior.
164
291
  const curlCmd = (event) => `HOOK_DATA=$(cat 2>/dev/null || echo '{}'); ` +
165
292
  `printf '{"event":"${event}","sessionId":"%s","data":%s}' "$CODEMAN_SESSION_ID" "$HOOK_DATA" | ` +
166
- `curl -s -X POST "$CODEMAN_API_URL/api/hook-event" ` +
293
+ // `-k`, same as the statusline exporter: CODEMAN_API_URL is loopback HTTPS with
294
+ // a self-signed cert on --https/tailscale installs. Without it curl exits 60,
295
+ // the `|| true` swallows it, and ALL SIX hook events die silently: respawn loses
296
+ // its definitive idle signals and the wait endpoints lose stop/blocked.
297
+ `curl -sk -X POST "$CODEMAN_API_URL/api/hook-event" ` +
167
298
  `-H 'Content-Type: application/json' ` +
168
299
  `-H "X-Codeman-Hook-Secret: $(cat "$CODEMAN_HOOK_SECRET_FILE" 2>/dev/null)" ` +
169
300
  `--data @- ` +
@@ -189,6 +320,18 @@ export function generateHooksConfig() {
189
320
  hooks: [{ type: 'command', command: curlCmd('stop'), timeout: HOOK_TIMEOUT_SECONDS }],
190
321
  },
191
322
  ],
323
+ SubagentStop: [
324
+ {
325
+ hooks: [
326
+ {
327
+ type: 'command',
328
+ command: 'node',
329
+ args: ['-e', generateSubagentStopGuardScript()],
330
+ timeout: HOOK_TIMEOUT_SECONDS,
331
+ },
332
+ ],
333
+ },
334
+ ],
192
335
  TeammateIdle: [
193
336
  {
194
337
  hooks: [{ type: 'command', command: curlCmd('teammate_idle'), timeout: HOOK_TIMEOUT_SECONDS }],
@@ -219,8 +362,10 @@ export function generateHooksConfig() {
219
362
  function isCodemanHookHandler(value) {
220
363
  try {
221
364
  const serialized = JSON.stringify(value);
222
- // Prefix, not the versioned marker: older script versions must still be ours.
223
- return serialized.includes('/api/hook-event') || serialized.includes(BACKGROUND_WAKE_MARKER_PREFIX);
365
+ // Prefixes, not versioned markers: older script versions must still be ours.
366
+ return (serialized.includes('/api/hook-event') ||
367
+ serialized.includes(BACKGROUND_WAKE_MARKER_PREFIX) ||
368
+ serialized.includes(SUBAGENT_STOP_GUARD_MARKER_PREFIX));
224
369
  }
225
370
  catch {
226
371
  return false;
@@ -401,6 +546,39 @@ export async function writeHooksConfig(casePath) {
401
546
  await writeFile(settingsPath, JSON.stringify(merged, null, 2) + '\n');
402
547
  });
403
548
  }
549
+ /**
550
+ * Ensures an explicitly managed case has the current Codeman hooks.
551
+ *
552
+ * Unlike `refreshStaleCodemanHooks`, this may add Codeman handlers to a valid
553
+ * user-owned settings file. It is therefore reserved for case quick-starts,
554
+ * where the user has explicitly asked Codeman to manage that workspace. A
555
+ * malformed existing file is left untouched rather than replaced.
556
+ */
557
+ export async function ensureCodemanHooks(casePath) {
558
+ const claudeDir = join(casePath, '.claude');
559
+ const settingsPath = join(claudeDir, 'settings.local.json');
560
+ await withSettingsLock(settingsPath, async () => {
561
+ if (!existsSync(claudeDir)) {
562
+ await mkdir(claudeDir, { recursive: true });
563
+ }
564
+ let existing = {};
565
+ try {
566
+ const parsed = JSON.parse(await readFile(settingsPath, 'utf-8'));
567
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
568
+ return;
569
+ existing = parsed;
570
+ }
571
+ catch (err) {
572
+ if (err.code !== 'ENOENT')
573
+ return;
574
+ }
575
+ const generated = generateHooksConfig();
576
+ const hooks = mergeCodemanHooks(existing.hooks, generated.hooks);
577
+ if (JSON.stringify(existing.hooks ?? {}) === JSON.stringify(hooks))
578
+ return;
579
+ await writeFile(settingsPath, JSON.stringify({ ...existing, hooks }, null, 2) + '\n');
580
+ });
581
+ }
404
582
  /**
405
583
  * Self-heal a case's Codeman-owned hooks block.
406
584
  *
@@ -408,8 +586,11 @@ export async function writeHooksConfig(casePath) {
408
586
  * X-Codeman-Hook-Secret header was added (COD-54, 2026-06-10) keep hook curls in their
409
587
  * settings.local.json that POST to /api/hook-event WITHOUT the secret — which, once the
410
588
  * gate requires it unconditionally (COD-91), silently 401 on a password-protected install.
411
- * Older Codeman blocks also lack the background Bash async-rewake hook. Refresh either
412
- * stale shape on launch so existing cases gain both current behaviors.
589
+ * Older Codeman blocks also lack the current background Bash async-rewake hook or the
590
+ * SubagentStop guard. A further stale shape: hook curls without `-k`, which exit 60 on
591
+ * every --https/tailscale install (the cert is self-signed), swallowed by the hooks'
592
+ * own `|| true` — all six hook events die silently. Refresh any of these stale shapes
593
+ * on launch so existing cases heal.
413
594
  *
414
595
  * Deliberately surgical: regenerates ONLY when settings.local.json already contains
415
596
  * Codeman's own hook curls (they target `/api/hook-event`) and they are stale. No-op
@@ -434,7 +615,12 @@ export async function refreshStaleCodemanHooks(casePath) {
434
615
  // absence on our own hooks means they predate COD-54 and need regenerating.
435
616
  const hasSecret = hooksJson.includes('X-Codeman-Hook-Secret');
436
617
  const hasBackgroundWake = hooksJson.includes(BACKGROUND_WAKE_MARKER);
437
- if (!isOurs || (hasSecret && hasBackgroundWake))
618
+ // The pre--k curl shape: `curl -sk -X POST` does not contain `curl -s -X POST`
619
+ // as a substring, so this cleanly identifies hook curls that die with exit 60
620
+ // on a self-signed HTTPS install.
621
+ const hasTlsFlaglessCurl = hooksJson.includes('curl -s -X POST');
622
+ const hasSubagentStopGuard = hooksJson.includes(SUBAGENT_STOP_GUARD_MARKER);
623
+ if (!isOurs || (hasSecret && hasBackgroundWake && hasSubagentStopGuard && !hasTlsFlaglessCurl))
438
624
  return;
439
625
  const generated = generateHooksConfig();
440
626
  const merged = {
@@ -1 +1 @@
1
- {"version":3,"file":"hooks-config.js","sourceRoot":"","sources":["../src/hooks-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks-config.js","sourceRoot":"","sources":["../src/hooks-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @fileoverview `codeman service install|uninstall|status`: write and load the
3
+ * systemd user unit (Linux) or LaunchAgent (macOS) that supervises `codeman web`.
4
+ *
5
+ * This is the "always running" half of issue #231, next to the "detached right
6
+ * now" half in daemon-control.ts. `install.sh` already does this for people who
7
+ * install with the one-liner; this exists for `npm i -g aicodeman` users, who
8
+ * otherwise have to hand-write a plist.
9
+ *
10
+ * Two details are load-bearing and easy to get wrong by hand:
11
+ *
12
+ * - **PATH.** launchd hands a job `/usr/bin:/bin:/usr/sbin:/sbin` and systemd's
13
+ * user manager is nearly as bare, so a Homebrew or nvm `node`, `tmux` or
14
+ * `claude` is simply not found and sessions fail in a way that reads as a
15
+ * Codeman bug. The unit therefore carries the PATH of the shell that ran the
16
+ * install, with the running node's own directory in front.
17
+ * - **The job name.** It is the one `install.sh` and the self-updater already use
18
+ * (config/service-names.ts), so re-running install.sh later updates this unit
19
+ * instead of supervising a second copy of the server.
20
+ *
21
+ * Secrets are deliberately NOT written here. `CODEMAN_PASSWORD` in the installing
22
+ * shell is not copied into the unit; the caller is told where to add it instead,
23
+ * because a unit file is long-lived, world-readable by default, and gets copied
24
+ * into bug reports.
25
+ *
26
+ * The file writers are pure string builders so they can be unit-tested without
27
+ * touching launchctl/systemctl.
28
+ *
29
+ * @module service-installer
30
+ */
31
+ import { type WebLaunchOptions } from './daemon-control.js';
32
+ export type ServiceKind = 'launchd' | 'systemd';
33
+ /** Everything a unit file needs, resolved from the environment by the caller. */
34
+ export interface ServicePlan {
35
+ kind: ServiceKind;
36
+ /** systemd unit filename or launchd label. */
37
+ name: string;
38
+ nodePath: string;
39
+ /** Runner flags carried over from the current process (tsx loader in dev). */
40
+ execArgv: string[];
41
+ scriptPath: string;
42
+ args: string[];
43
+ env: Record<string, string>;
44
+ logPath: string;
45
+ workingDir: string;
46
+ }
47
+ export interface ServiceActionResult {
48
+ ok: boolean;
49
+ message: string;
50
+ /** Path of the unit/plist that was written or removed. */
51
+ unitPath?: string;
52
+ warnings?: string[];
53
+ }
54
+ export interface ServiceStatusResult {
55
+ kind: ServiceKind | null;
56
+ name: string;
57
+ unitPath: string;
58
+ installed: boolean;
59
+ loaded: boolean;
60
+ responding: boolean;
61
+ version?: string;
62
+ url: string;
63
+ }
64
+ /** XML text escaping for plist `<string>` values. */
65
+ export declare function xmlEscape(value: string): string;
66
+ /**
67
+ * PATH for the supervised process: the running node's directory first (so an nvm
68
+ * or Homebrew node is used rather than whatever the supervisor finds), then the
69
+ * installing shell's PATH, then the fallbacks that are still missing.
70
+ *
71
+ * `node_modules/.bin` entries are dropped. npm and npx inject those for the
72
+ * lifetime of one command, and baking a project's local bin dir into a unit file
73
+ * that outlives the checkout is how a service ends up running a binary the
74
+ * operator deleted months ago.
75
+ */
76
+ export declare function buildServicePath(nodeDir: string, currentPath: string, home: string): string;
77
+ /** Environment written into the unit. Never includes secrets (see module docs). */
78
+ export declare function buildServiceEnv(nodeDir: string, currentPath: string, home: string, lang?: string): Record<string, string>;
79
+ /** systemd accepts double-quoted values; escape the two characters that matter. */
80
+ export declare function systemdQuote(value: string): string;
81
+ export declare function buildLaunchAgentPlist(plan: ServicePlan): string;
82
+ export declare function buildSystemdUnit(plan: ServicePlan): string;
83
+ export declare function detectServiceKind(): ServiceKind | null;
84
+ export declare function unitPathFor(kind: ServiceKind): string;
85
+ /** Resolve a full plan from the current process and the requested web options. */
86
+ export declare function resolveServicePlan(kind: ServiceKind, options: WebLaunchOptions): ServicePlan;
87
+ /**
88
+ * Write the unit, load it, and confirm the server actually answers before
89
+ * reporting success. `launchctl load` and `systemctl enable` are both quiet about
90
+ * a job that starts and immediately dies, which is the whole reason install.sh
91
+ * verifies too.
92
+ */
93
+ export declare function installService(options: WebLaunchOptions): Promise<ServiceActionResult>;
94
+ export declare function uninstallService(): ServiceActionResult;
95
+ export declare function serviceStatus(options: WebLaunchOptions): Promise<ServiceStatusResult>;
96
+ //# sourceMappingURL=service-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-installer.d.ts","sourceRoot":"","sources":["../src/service-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AASH,OAAO,EAML,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAEhD,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AASD,qDAAqD;AACrD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO/C;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgB3F;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAqC/D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CA8B1D;AAMD,wBAAgB,iBAAiB,IAAI,WAAW,GAAG,IAAI,CAItD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAIrD;AAQD,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,GAAG,WAAW,CAa5F;AAqBD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuE5F;AAED,wBAAgB,gBAAgB,IAAI,mBAAmB,CAyBtD;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiB3F"}