codekin 0.6.5 → 0.7.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 (79) hide show
  1. package/README.md +6 -3
  2. package/dist/assets/index-CLuQVRRb.css +1 -0
  3. package/dist/assets/index-JVnFWiSw.js +185 -0
  4. package/dist/index.html +2 -2
  5. package/package.json +4 -2
  6. package/server/dist/anthropic-models.d.ts +40 -0
  7. package/server/dist/anthropic-models.js +212 -0
  8. package/server/dist/anthropic-models.js.map +1 -0
  9. package/server/dist/claude-process.d.ts +31 -3
  10. package/server/dist/claude-process.js +126 -9
  11. package/server/dist/claude-process.js.map +1 -1
  12. package/server/dist/codex-process.d.ts +147 -0
  13. package/server/dist/codex-process.js +741 -0
  14. package/server/dist/codex-process.js.map +1 -0
  15. package/server/dist/coding-process.d.ts +16 -4
  16. package/server/dist/coding-process.js +10 -0
  17. package/server/dist/coding-process.js.map +1 -1
  18. package/server/dist/config.d.ts +13 -0
  19. package/server/dist/config.js +18 -0
  20. package/server/dist/config.js.map +1 -1
  21. package/server/dist/opencode-process.d.ts +142 -5
  22. package/server/dist/opencode-process.js +664 -84
  23. package/server/dist/opencode-process.js.map +1 -1
  24. package/server/dist/orchestrator-children.d.ts +53 -6
  25. package/server/dist/orchestrator-children.js +292 -68
  26. package/server/dist/orchestrator-children.js.map +1 -1
  27. package/server/dist/orchestrator-manager.d.ts +10 -0
  28. package/server/dist/orchestrator-manager.js +70 -18
  29. package/server/dist/orchestrator-manager.js.map +1 -1
  30. package/server/dist/orchestrator-monitor.d.ts +7 -1
  31. package/server/dist/orchestrator-monitor.js +49 -19
  32. package/server/dist/orchestrator-monitor.js.map +1 -1
  33. package/server/dist/orchestrator-notify.d.ts +16 -3
  34. package/server/dist/orchestrator-notify.js +22 -7
  35. package/server/dist/orchestrator-notify.js.map +1 -1
  36. package/server/dist/orchestrator-outbox.d.ts +48 -0
  37. package/server/dist/orchestrator-outbox.js +154 -0
  38. package/server/dist/orchestrator-outbox.js.map +1 -0
  39. package/server/dist/orchestrator-session-router.js +40 -1
  40. package/server/dist/orchestrator-session-router.js.map +1 -1
  41. package/server/dist/prompt-router.d.ts +22 -1
  42. package/server/dist/prompt-router.js +94 -11
  43. package/server/dist/prompt-router.js.map +1 -1
  44. package/server/dist/session-archive.js +11 -1
  45. package/server/dist/session-archive.js.map +1 -1
  46. package/server/dist/session-lifecycle.js +36 -0
  47. package/server/dist/session-lifecycle.js.map +1 -1
  48. package/server/dist/session-manager.d.ts +19 -2
  49. package/server/dist/session-manager.js +116 -27
  50. package/server/dist/session-manager.js.map +1 -1
  51. package/server/dist/session-naming.d.ts +4 -0
  52. package/server/dist/session-naming.js +26 -5
  53. package/server/dist/session-naming.js.map +1 -1
  54. package/server/dist/session-routes.js +38 -1
  55. package/server/dist/session-routes.js.map +1 -1
  56. package/server/dist/stepflow-handler.js +2 -2
  57. package/server/dist/stepflow-handler.js.map +1 -1
  58. package/server/dist/tsconfig.tsbuildinfo +1 -1
  59. package/server/dist/types.d.ts +24 -3
  60. package/server/dist/types.js +1 -9
  61. package/server/dist/types.js.map +1 -1
  62. package/server/dist/upload-routes.d.ts +7 -0
  63. package/server/dist/upload-routes.js +53 -24
  64. package/server/dist/upload-routes.js.map +1 -1
  65. package/server/dist/webhook-handler.js +3 -3
  66. package/server/dist/webhook-handler.js.map +1 -1
  67. package/server/dist/workflow-config.d.ts +2 -2
  68. package/server/dist/workflow-engine.d.ts +19 -0
  69. package/server/dist/workflow-engine.js +27 -3
  70. package/server/dist/workflow-engine.js.map +1 -1
  71. package/server/dist/workflow-loader.d.ts +5 -5
  72. package/server/dist/workflow-loader.js +90 -59
  73. package/server/dist/workflow-loader.js.map +1 -1
  74. package/server/dist/ws-message-handler.js +19 -8
  75. package/server/dist/ws-message-handler.js.map +1 -1
  76. package/server/dist/ws-server.js +25 -1
  77. package/server/dist/ws-server.js.map +1 -1
  78. package/dist/assets/index-B0xIzdCK.js +0 -187
  79. package/dist/assets/index-Q2WSVlHo.css +0 -1
@@ -29,7 +29,16 @@ Agent ${AGENT_DISPLAY_NAME} tracks repositories you work with in Codekin.
29
29
  ## Active Repos
30
30
  (none yet — ${AGENT_DISPLAY_NAME} will populate this as you work)
31
31
  `;
32
- const CLAUDE_MD_TEMPLATE = `# Agent ${AGENT_DISPLAY_NAME} — Codekin Orchestrator
32
+ /**
33
+ * Bump this whenever CLAUDE_MD_TEMPLATE changes. Already-seeded CLAUDE.md
34
+ * files carrying an older (or no) version stamp are refreshed on boot —
35
+ * without this, installs keep running on stale orchestrator instructions
36
+ * forever. CLAUDE.md is system-managed; user memory lives in PROFILE.md,
37
+ * REPOS.md and journal/, which are never overwritten.
38
+ */
39
+ export const CLAUDE_MD_TEMPLATE_VERSION = 2;
40
+ const CLAUDE_MD_TEMPLATE = `<!-- codekin-template-version: ${CLAUDE_MD_TEMPLATE_VERSION} -->
41
+ # Agent ${AGENT_DISPLAY_NAME} — Codekin Orchestrator
33
42
 
34
43
  You are ${AGENT_DISPLAY_NAME}, a calm and friendly ops manager inside Codekin.
35
44
  You help users keep their repositories healthy, their workflows running
@@ -129,6 +138,13 @@ Fields:
129
138
  - **useWorktree**: true (default) — runs in an isolated git worktree
130
139
  - **model**: Optional model override (e.g. "claude-sonnet-4-6")
131
140
  - **allowedTools**: Optional array of tool patterns to override defaults (advanced)
141
+ - **timeoutMs**: Optional working-time budget in ms (default 1800000 = 30 min,
142
+ range 1 min – 4 h). Time spent blocked on an approval does not count.
143
+ Raise this for large tasks (big refactors, full test suites).
144
+
145
+ The spawn response includes a \`worktree\` field ("active", "failed", or
146
+ "none") and \`worktreePath\`. If worktree is "failed", the child works
147
+ directly in the main repo directory — watch it more closely.
132
148
 
133
149
  ### What Child Sessions Can Do Automatically
134
150
  Child sessions have a broad set of pre-approved tools for standard dev work:
@@ -136,6 +152,9 @@ Child sessions have a broad set of pre-approved tools for standard dev work:
136
152
  - **Git & GitHub**: git (all subcommands), gh (PRs, issues, runs)
137
153
  - **Package managers**: npm, npx, yarn, pnpm, bun
138
154
  - **Build tools**: node, tsc, eslint, prettier, cargo, go, make, pip
155
+ - **Python**: python3, pytest
156
+ - **Text/data**: sed, rg, jq
157
+ - **File management** (non-destructive): mkdir, cp, mv, touch
139
158
  - **Filesystem** (read-only): ls, cat, head, tail, sort, diff, tree, wc, which, file
140
159
 
141
160
  They do NOT have access to destructive commands (rm, sudo, docker,
@@ -158,6 +177,12 @@ curl -s "http://localhost:$CODEKIN_PORT/api/orchestrator/children" \\
158
177
  # Get specific child session
159
178
  curl -s "http://localhost:$CODEKIN_PORT/api/orchestrator/children/SESSION_ID" \\
160
179
  -H "Authorization: Bearer $CODEKIN_AUTH_TOKEN"
180
+
181
+ # Read the tail of a child's transcript (what Claude actually output).
182
+ # Useful when a child stops with "Completion not verified" or gets stuck.
183
+ # ?limit caps the returned characters (default 5000, max 50000).
184
+ curl -s "http://localhost:$CODEKIN_PORT/api/orchestrator/children/SESSION_ID/transcript?limit=10000" \\
185
+ -H "Authorization: Bearer $CODEKIN_AUTH_TOKEN"
161
186
  \`\`\`
162
187
 
163
188
  ## Scheduling Reminders & Recurring Tasks
@@ -171,16 +196,26 @@ You have access to CronCreate, CronDelete, and CronList tools for in-session sch
171
196
  Examples:
172
197
  - Every morning at 9am: \`cron: "3 9 * * *"\`, \`prompt: "Check for new reports"\`
173
198
  - One-shot reminder: \`cron: "0 14 22 3 *"\`, \`prompt: "Follow up on deploy"\`, \`recurring: false\`
174
- - Every 30 minutes: \`cron: "*/30 * * * *"\`, \`prompt: "Check child session status"\`
199
+
200
+ You do NOT need a recurring cron to watch child sessions — the server
201
+ pushes you a notification the moment a child blocks on an approval,
202
+ finishes, fails, or times out. Use crons for reminders and scheduled
203
+ work, not for polling.
175
204
 
176
205
  Important: The \`cron\` parameter must be a plain string like \`"0 9 * * *"\`, NOT an object.
177
206
  Jobs only live in this session — they are lost when the session restarts. Recurring jobs auto-expire after 7 days.
178
207
 
179
208
  ## Monitoring Sessions
180
- After spawning a session:
181
- - Keep an eye on its progress
182
- - If the session completes but didn't do the final step (create PR, push,
183
- deploy), send it a follow-up instruction to finish
209
+ You receive push notifications about your child sessions automatically:
210
+ - **Blocked**: the child is waiting on a tool approval or question — the
211
+ notification includes the requestId and the exact curl to respond
212
+ - **Stopped**: the child completed, failed, or timed out
213
+
214
+ The server also verifies completion against ground truth (does the PR /
215
+ pushed branch actually exist?) and nudges the child once if the final
216
+ step is missing. When a "Stopped" notification carries a
217
+ "Completion not verified" note, the final step still didn't land —
218
+ inspect the worktree and finish it or respawn.
184
219
  - If the session gets stuck or fails, inform the user and suggest next steps
185
220
  - When done, summarize what was accomplished
186
221
 
@@ -188,31 +223,31 @@ After spawning a session:
188
223
  Sessions can get stuck waiting for tool approvals or user answers. You can
189
224
  discover and unblock them:
190
225
 
191
- \\\`\\\`\\\`bash
226
+ \`\`\`bash
192
227
  # List all sessions with pending prompts
193
228
  curl -s "http://localhost:$CODEKIN_PORT/api/orchestrator/sessions/pending-prompts" \\
194
229
  -H "Authorization: Bearer $CODEKIN_AUTH_TOKEN"
195
- \\\`\\\`\\\`
230
+ \`\`\`
196
231
 
197
- Returns sessions with their pending prompts, including the \\\`requestId\\\`,
198
- \\\`toolName\\\`, and \\\`promptType\\\` ("permission" or "question").
232
+ Returns sessions with their pending prompts, including the \`requestId\`,
233
+ \`toolName\`, and \`promptType\` ("permission" or "question").
199
234
 
200
235
  ### Giving Approvals to Stuck Sessions
201
236
  If a child session is blocked on a tool approval and you're confident it's
202
237
  safe, you can approve it directly:
203
238
 
204
- \\\`\\\`\\\`bash
239
+ \`\`\`bash
205
240
  curl -s -X POST "http://localhost:$CODEKIN_PORT/api/orchestrator/sessions/SESSION_ID/respond" \\
206
241
  -H "Authorization: Bearer $CODEKIN_AUTH_TOKEN" \\
207
242
  -H "Content-Type: application/json" \\
208
243
  -d '{"requestId": "REQUEST_ID", "value": "allow"}'
209
- \\\`\\\`\\\`
244
+ \`\`\`
210
245
 
211
- Values: \\\`"allow"\\\`, \\\`"deny"\\\`, \\\`"always_allow"\\\`, or free text for question prompts.
246
+ Values: \`"allow"\`, \`"deny"\`, \`"always_allow"\`, or free text for question prompts.
212
247
 
213
248
  **Guidelines for giving approvals:**
214
249
  - Only approve tools you understand — if unsure, ask the user
215
- - Prefer \\\`"allow"\\\` over \\\`"always_allow"\\\` for child sessions
250
+ - Prefer \`"allow"\` over \`"always_allow"\` for child sessions
216
251
  - Never approve destructive commands (rm -rf, git push --force, DROP TABLE)
217
252
  without user confirmation
218
253
  - For question prompts, provide a reasonable answer or ask the user
@@ -273,9 +308,9 @@ Users can manage trust directly in chat:
273
308
  4. Read skill-profile.json for guidance style adaptation
274
309
  5. Check for new audit reports that may have landed
275
310
  6. Check for decisions pending outcome assessment
276
- 7. **Re-establish cron jobs** — cron jobs do not survive session restarts, so always re-create your standard recurring checks on startup:
311
+ 7. **Re-establish cron jobs** — cron jobs do not survive session restarts, so re-create your scheduled work on startup:
277
312
  - Report check: \`cron: "3 9 * * *"\`, \`prompt: "Check for new audit reports across all managed repos and triage any new findings"\`
278
- - Child session monitor: \`cron: "*/30 * * * *"\`, \`prompt: "Check child session status and unblock any stuck sessions"\`
313
+ - Do NOT create a child-session polling cron the server pushes blocked/terminal notifications to you in realtime.
279
314
  8. Greet the user with a brief, friendly status update
280
315
 
281
316
  ### Greeting Guidelines
@@ -294,16 +329,33 @@ export function ensureOrchestratorDir() {
294
329
  const journalDir = join(ORCHESTRATOR_DIR, 'journal');
295
330
  if (!existsSync(journalDir))
296
331
  mkdirSync(journalDir, { recursive: true });
297
- // Seed files only if they don't exist (preserve user edits)
332
+ // Seed memory files only if they don't exist (preserve user edits)
298
333
  const seeds = [
299
334
  [join(ORCHESTRATOR_DIR, 'PROFILE.md'), PROFILE_TEMPLATE],
300
335
  [join(ORCHESTRATOR_DIR, 'REPOS.md'), REPOS_TEMPLATE],
301
- [join(ORCHESTRATOR_DIR, 'CLAUDE.md'), CLAUDE_MD_TEMPLATE],
302
336
  ];
303
337
  for (const [path, content] of seeds) {
304
338
  if (!existsSync(path))
305
339
  writeFileSync(path, content, 'utf-8');
306
340
  }
341
+ // CLAUDE.md is system-managed: refresh it whenever the embedded template
342
+ // version is older than the current one (or missing entirely).
343
+ const claudeMdPath = join(ORCHESTRATOR_DIR, 'CLAUDE.md');
344
+ if (readTemplateVersion(claudeMdPath) < CLAUDE_MD_TEMPLATE_VERSION) {
345
+ writeFileSync(claudeMdPath, CLAUDE_MD_TEMPLATE, 'utf-8');
346
+ }
347
+ }
348
+ /** Parse the template version stamp from a seeded CLAUDE.md; 0 when absent. */
349
+ export function readTemplateVersion(path) {
350
+ try {
351
+ if (!existsSync(path))
352
+ return 0;
353
+ const match = /<!-- codekin-template-version: (\d+) -->/.exec(readFileSync(path, 'utf-8'));
354
+ return match ? parseInt(match[1], 10) : 0;
355
+ }
356
+ catch {
357
+ return 0;
358
+ }
307
359
  }
308
360
  /** Get or create a stable session UUID that persists across restarts. */
309
361
  export function getOrCreateOrchestratorId() {
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator-manager.js","sourceRoot":"","sources":["../orchestrator-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator-manager.js","sourceRoot":"","sources":["../orchestrator-manager.ts"],"names":[],"mappings":"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"}
@@ -55,9 +55,15 @@ export declare class OrchestratorMonitor {
55
55
  private addNotification;
56
56
  /** Deliver a notification to the orchestrator chat session. */
57
57
  private deliverToOrchestrator;
58
- /** Discover repo paths from REPOS_ROOT. */
58
+ /** Discover repo paths from REPOS_ROOT (see discoverRepoPathsUnder). */
59
59
  private discoverRepoPaths;
60
60
  }
61
+ /**
62
+ * Discover git repositories under a root directory, recursing one level into
63
+ * non-repo directories so org-style layouts (root/org/repo) are picked up
64
+ * alongside flat ones (root/repo). Unreadable entries are skipped.
65
+ */
66
+ export declare function discoverRepoPathsUnder(root: string): string[];
61
67
  /**
62
68
  * Suppress passive-repo alerts unless at least one workflow is enabled for the
63
69
  * repo — there's nothing to "de-schedule" otherwise, so the nag is noise.
@@ -10,6 +10,7 @@ import { join } from 'path';
10
10
  import { scanRepoReports } from './orchestrator-reports.js';
11
11
  import { runAgingCycle, getPendingOutcomeAssessments } from './orchestrator-learning.js';
12
12
  import { getOrchestratorSessionId } from './orchestrator-manager.js';
13
+ import { getOrchestratorOutbox } from './orchestrator-outbox.js';
13
14
  import { REPOS_ROOT, getAgentDisplayName } from './config.js';
14
15
  import { loadWorkflowConfig } from './workflow-config.js';
15
16
  // ---------------------------------------------------------------------------
@@ -224,37 +225,66 @@ export class OrchestratorMonitor {
224
225
  if (!orchestratorId)
225
226
  return;
226
227
  const session = this.sessions.get(orchestratorId);
227
- if (!session?.claudeProcess?.isAlive())
228
+ if (!session?.claudeProcess?.isAlive()) {
229
+ // Orchestrator not running — hand the notification to the persistent
230
+ // outbox so it is replayed (as a digest) when the session comes back,
231
+ // instead of rotting in the in-memory buffer forever.
232
+ getOrchestratorOutbox().enqueue({
233
+ label: notification.severity.toUpperCase(),
234
+ title: notification.title,
235
+ body: notification.body,
236
+ });
237
+ notification.delivered = true;
228
238
  return;
239
+ }
229
240
  // Send as a system message that the orchestrator will see and respond to
230
241
  const message = `[Agent ${getAgentDisplayName()} Notification — ${notification.severity.toUpperCase()}]\n${notification.title}\n${notification.body}`;
231
242
  this.sessions.sendInput(orchestratorId, message);
232
243
  notification.delivered = true;
233
244
  }
234
- /** Discover repo paths from REPOS_ROOT. */
245
+ /** Discover repo paths from REPOS_ROOT (see discoverRepoPathsUnder). */
235
246
  discoverRepoPaths() {
236
- if (!existsSync(REPOS_ROOT))
237
- return [];
238
- try {
239
- return readdirSync(REPOS_ROOT)
240
- .map(name => join(REPOS_ROOT, name))
241
- .filter(p => {
242
- try {
243
- return statSync(p).isDirectory() && existsSync(join(p, '.git'));
244
- }
245
- catch {
246
- return false;
247
- }
248
- });
249
- }
250
- catch {
251
- return [];
252
- }
247
+ return discoverRepoPathsUnder(REPOS_ROOT);
253
248
  }
254
249
  }
255
250
  // ---------------------------------------------------------------------------
256
251
  // Helpers
257
252
  // ---------------------------------------------------------------------------
253
+ /**
254
+ * Discover git repositories under a root directory, recursing one level into
255
+ * non-repo directories so org-style layouts (root/org/repo) are picked up
256
+ * alongside flat ones (root/repo). Unreadable entries are skipped.
257
+ */
258
+ export function discoverRepoPathsUnder(root) {
259
+ if (!existsSync(root))
260
+ return [];
261
+ const repos = [];
262
+ const scan = (dir, depth) => {
263
+ let entries;
264
+ try {
265
+ entries = readdirSync(dir);
266
+ }
267
+ catch {
268
+ return;
269
+ }
270
+ for (const name of entries) {
271
+ const p = join(dir, name);
272
+ try {
273
+ if (!statSync(p).isDirectory())
274
+ continue;
275
+ if (existsSync(join(p, '.git')))
276
+ repos.push(p);
277
+ else if (depth < 2)
278
+ scan(p, depth + 1);
279
+ }
280
+ catch {
281
+ // unreadable entry — skip
282
+ }
283
+ }
284
+ };
285
+ scan(root, 1);
286
+ return repos;
287
+ }
258
288
  /**
259
289
  * Suppress passive-repo alerts unless at least one workflow is enabled for the
260
290
  * repo — there's nothing to "de-schedule" otherwise, so the nag is noise.
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator-monitor.js","sourceRoot":"","sources":["../orchestrator-monitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator-monitor.js","sourceRoot":"","sources":["../orchestrator-monitor.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,10 @@
9
9
  *
10
10
  * which is the established style used by the proactive monitor and surfaced
11
11
  * inside the orchestrator chat.
12
+ *
13
+ * When the recipient session cannot be reached (missing or its Claude
14
+ * process is not running), the notification is queued in the persistent
15
+ * outbox and replayed as a digest once the orchestrator is back.
12
16
  */
13
17
  import type { SessionManager } from './session-manager.js';
14
18
  export interface OrchestratorNotifyArgs {
@@ -21,9 +25,18 @@ export interface OrchestratorNotifyArgs {
21
25
  /** Remaining body — multi-line is fine. */
22
26
  body: string;
23
27
  }
28
+ /** Minimal outbox surface needed by this helper (injectable for tests). */
29
+ export interface NotificationOutbox {
30
+ enqueue(args: {
31
+ label: string;
32
+ title: string;
33
+ body: string;
34
+ }): void;
35
+ }
24
36
  /**
25
37
  * Send a notification to the parent session via Claude stdin.
26
- * Returns true when delivered, false when the recipient cannot be reached
27
- * (session missing or its Claude process is not alive).
38
+ * Returns true when delivered immediately OR queued in the outbox for
39
+ * replay (the outbox owns delivery from that point on). Returns false only
40
+ * when queueing itself failed.
28
41
  */
29
- export declare function sendOrchestratorNotification(sessions: SessionManager, args: OrchestratorNotifyArgs): boolean;
42
+ export declare function sendOrchestratorNotification(sessions: SessionManager, args: OrchestratorNotifyArgs, outbox?: NotificationOutbox): boolean;
@@ -9,19 +9,34 @@
9
9
  *
10
10
  * which is the established style used by the proactive monitor and surfaced
11
11
  * inside the orchestrator chat.
12
+ *
13
+ * When the recipient session cannot be reached (missing or its Claude
14
+ * process is not running), the notification is queued in the persistent
15
+ * outbox and replayed as a digest once the orchestrator is back.
12
16
  */
13
17
  import { getAgentDisplayName } from './config.js';
18
+ import { getOrchestratorOutbox } from './orchestrator-outbox.js';
14
19
  /**
15
20
  * Send a notification to the parent session via Claude stdin.
16
- * Returns true when delivered, false when the recipient cannot be reached
17
- * (session missing or its Claude process is not alive).
21
+ * Returns true when delivered immediately OR queued in the outbox for
22
+ * replay (the outbox owns delivery from that point on). Returns false only
23
+ * when queueing itself failed.
18
24
  */
19
- export function sendOrchestratorNotification(sessions, args) {
25
+ export function sendOrchestratorNotification(sessions, args, outbox = getOrchestratorOutbox()) {
20
26
  const session = sessions.get(args.parentSessionId);
21
- if (!session?.claudeProcess?.isAlive())
27
+ if (session?.claudeProcess?.isAlive()) {
28
+ const message = `[Agent ${getAgentDisplayName()} Notification — ${args.label}]\n${args.title}\n${args.body}`;
29
+ sessions.sendInput(args.parentSessionId, message);
30
+ return true;
31
+ }
32
+ // Parent unreachable — queue for replay when the orchestrator comes back.
33
+ try {
34
+ outbox.enqueue({ label: args.label, title: args.title, body: args.body });
35
+ return true;
36
+ }
37
+ catch (err) {
38
+ console.warn('[orchestrator-notify] failed to queue notification:', err);
22
39
  return false;
23
- const message = `[Agent ${getAgentDisplayName()} Notification — ${args.label}]\n${args.title}\n${args.body}`;
24
- sessions.sendInput(args.parentSessionId, message);
25
- return true;
40
+ }
26
41
  }
27
42
  //# sourceMappingURL=orchestrator-notify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator-notify.js","sourceRoot":"","sources":["../orchestrator-notify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAajD;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC1C,QAAwB,EACxB,IAA4B;IAE5B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAClD,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE;QAAE,OAAO,KAAK,CAAA;IAEpD,MAAM,OAAO,GAAG,UAAU,mBAAmB,EAAE,mBAAmB,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,CAAA;IAC5G,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;IACjD,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"orchestrator-notify.js","sourceRoot":"","sources":["../orchestrator-notify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAkBhE;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAC1C,QAAwB,EACxB,IAA4B,EAC5B,SAA6B,qBAAqB,EAAE;IAEpD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAClD,IAAI,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,UAAU,mBAAmB,EAAE,mBAAmB,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,CAAA;QAC5G,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;QACjD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,0EAA0E;IAC1E,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACzE,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,qDAAqD,EAAE,GAAG,CAAC,CAAA;QACxE,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Persistent outbox for orchestrator notifications.
3
+ *
4
+ * When a notification cannot be delivered to the orchestrator session
5
+ * (Claude process not running), it is queued here and replayed as a single
6
+ * digest message once the orchestrator is back. The queue survives server
7
+ * restarts via a JSON file in the orchestrator workspace.
8
+ */
9
+ import type { SessionManager } from './session-manager.js';
10
+ export interface OutboxItem {
11
+ id: string;
12
+ label: string;
13
+ title: string;
14
+ body: string;
15
+ queuedAt: string;
16
+ }
17
+ export declare class OrchestratorOutbox {
18
+ private items;
19
+ private filePath;
20
+ private flushTimer;
21
+ constructor(filePath?: string);
22
+ /** Number of queued (undelivered) notifications. */
23
+ size(): number;
24
+ /** Queue a notification for later delivery. Oldest items are dropped at the cap. */
25
+ enqueue(args: {
26
+ label: string;
27
+ title: string;
28
+ body: string;
29
+ }): void;
30
+ /**
31
+ * Attempt to deliver all queued items to the orchestrator session as a
32
+ * single digest message. No-op when the queue is empty, the orchestrator
33
+ * session is missing / not running, or the rate-limit circuit breaker is
34
+ * open. Returns the number of items delivered.
35
+ */
36
+ flush(sessions: SessionManager): number;
37
+ /** Start a background timer that periodically attempts a flush. */
38
+ startFlusher(sessions: SessionManager, intervalMs?: number): void;
39
+ /** Stop the background flusher. */
40
+ stopFlusher(): void;
41
+ private buildDigest;
42
+ private load;
43
+ private persist;
44
+ }
45
+ /** Get the process-wide outbox instance. */
46
+ export declare function getOrchestratorOutbox(): OrchestratorOutbox;
47
+ /** Test-only: replace the singleton (pass null to reset). */
48
+ export declare function setOrchestratorOutboxForTest(outbox: OrchestratorOutbox | null): void;
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Persistent outbox for orchestrator notifications.
3
+ *
4
+ * When a notification cannot be delivered to the orchestrator session
5
+ * (Claude process not running), it is queued here and replayed as a single
6
+ * digest message once the orchestrator is back. The queue survives server
7
+ * restarts via a JSON file in the orchestrator workspace.
8
+ */
9
+ import { dirname, join } from 'path';
10
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
11
+ import { randomUUID } from 'crypto';
12
+ import { DATA_DIR, getAgentDisplayName } from './config.js';
13
+ import { getOrchestratorSessionId } from './orchestrator-manager.js';
14
+ /** Hard cap on queued items — oldest entries are dropped beyond this. */
15
+ const MAX_QUEUED_ITEMS = 200;
16
+ /** Default interval for the background flusher. */
17
+ const FLUSH_INTERVAL_MS = 60_000;
18
+ export class OrchestratorOutbox {
19
+ items = [];
20
+ filePath;
21
+ flushTimer = null;
22
+ constructor(filePath = join(DATA_DIR, 'orchestrator', 'outbox.json')) {
23
+ this.filePath = filePath;
24
+ this.load();
25
+ }
26
+ /** Number of queued (undelivered) notifications. */
27
+ size() {
28
+ return this.items.length;
29
+ }
30
+ /** Queue a notification for later delivery. Oldest items are dropped at the cap. */
31
+ enqueue(args) {
32
+ this.items.push({
33
+ id: randomUUID(),
34
+ label: args.label,
35
+ title: args.title,
36
+ body: args.body,
37
+ queuedAt: new Date().toISOString(),
38
+ });
39
+ if (this.items.length > MAX_QUEUED_ITEMS) {
40
+ this.items = this.items.slice(-MAX_QUEUED_ITEMS);
41
+ }
42
+ this.persist();
43
+ }
44
+ /**
45
+ * Attempt to deliver all queued items to the orchestrator session as a
46
+ * single digest message. No-op when the queue is empty, the orchestrator
47
+ * session is missing / not running, or the rate-limit circuit breaker is
48
+ * open. Returns the number of items delivered.
49
+ */
50
+ flush(sessions) {
51
+ if (this.items.length === 0)
52
+ return 0;
53
+ if (sessions.isRateLimited())
54
+ return 0;
55
+ const orchestratorId = getOrchestratorSessionId(sessions);
56
+ if (!orchestratorId)
57
+ return 0;
58
+ const session = sessions.get(orchestratorId);
59
+ if (!session?.claudeProcess?.isAlive())
60
+ return 0;
61
+ const count = this.items.length;
62
+ const digest = this.buildDigest();
63
+ // Clear before sending: if sendInput throws we'd rather drop than
64
+ // double-deliver on the next flush tick.
65
+ this.items = [];
66
+ this.persist();
67
+ sessions.sendInput(orchestratorId, digest);
68
+ return count;
69
+ }
70
+ /** Start a background timer that periodically attempts a flush. */
71
+ startFlusher(sessions, intervalMs = FLUSH_INTERVAL_MS) {
72
+ if (this.flushTimer)
73
+ return;
74
+ this.flushTimer = setInterval(() => {
75
+ try {
76
+ const delivered = this.flush(sessions);
77
+ if (delivered > 0) {
78
+ console.log(`[orchestrator-outbox] replayed ${delivered} queued notification(s)`);
79
+ }
80
+ }
81
+ catch (err) {
82
+ console.error('[orchestrator-outbox] flush error:', err);
83
+ }
84
+ }, intervalMs);
85
+ if (this.flushTimer.unref)
86
+ this.flushTimer.unref();
87
+ }
88
+ /** Stop the background flusher. */
89
+ stopFlusher() {
90
+ if (this.flushTimer) {
91
+ clearInterval(this.flushTimer);
92
+ this.flushTimer = null;
93
+ }
94
+ }
95
+ // -------------------------------------------------------------------------
96
+ // Internal
97
+ // -------------------------------------------------------------------------
98
+ buildDigest() {
99
+ const agent = getAgentDisplayName();
100
+ const header = this.items.length === 1
101
+ ? `[Agent ${agent} Notification — ${this.items[0].label} (queued while you were away)]`
102
+ : `[Agent ${agent} Notifications — ${this.items.length} queued while you were away]`;
103
+ const sections = this.items.map(item => {
104
+ const ts = item.queuedAt.replace('T', ' ').slice(0, 16);
105
+ return this.items.length === 1
106
+ ? `${item.title}\n${item.body}`
107
+ : `--- [${item.label}] ${ts} ---\n${item.title}\n${item.body}`;
108
+ });
109
+ return [header, ...sections].join('\n');
110
+ }
111
+ load() {
112
+ try {
113
+ if (!existsSync(this.filePath))
114
+ return;
115
+ const parsed = JSON.parse(readFileSync(this.filePath, 'utf-8'));
116
+ if (Array.isArray(parsed)) {
117
+ this.items = parsed.filter((it) => !!it && typeof it === 'object'
118
+ && typeof it.label === 'string'
119
+ && typeof it.title === 'string'
120
+ && typeof it.body === 'string').slice(-MAX_QUEUED_ITEMS);
121
+ }
122
+ }
123
+ catch (err) {
124
+ console.warn('[orchestrator-outbox] failed to load outbox file, starting empty:', err);
125
+ this.items = [];
126
+ }
127
+ }
128
+ persist() {
129
+ try {
130
+ const dir = dirname(this.filePath);
131
+ if (!existsSync(dir))
132
+ mkdirSync(dir, { recursive: true });
133
+ writeFileSync(this.filePath, JSON.stringify(this.items, null, 2), 'utf-8');
134
+ }
135
+ catch (err) {
136
+ console.warn('[orchestrator-outbox] failed to persist outbox file:', err);
137
+ }
138
+ }
139
+ }
140
+ // ---------------------------------------------------------------------------
141
+ // Singleton
142
+ // ---------------------------------------------------------------------------
143
+ let singleton = null;
144
+ /** Get the process-wide outbox instance. */
145
+ export function getOrchestratorOutbox() {
146
+ if (!singleton)
147
+ singleton = new OrchestratorOutbox();
148
+ return singleton;
149
+ }
150
+ /** Test-only: replace the singleton (pass null to reset). */
151
+ export function setOrchestratorOutboxForTest(outbox) {
152
+ singleton = outbox;
153
+ }
154
+ //# sourceMappingURL=orchestrator-outbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-outbox.js","sourceRoot":"","sources":["../orchestrator-outbox.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAWpE,yEAAyE;AACzE,MAAM,gBAAgB,GAAG,GAAG,CAAA;AAC5B,mDAAmD;AACnD,MAAM,iBAAiB,GAAG,MAAM,CAAA;AAEhC,MAAM,OAAO,kBAAkB;IACrB,KAAK,GAAiB,EAAE,CAAA;IACxB,QAAQ,CAAQ;IAChB,UAAU,GAA0C,IAAI,CAAA;IAEhE,YAAY,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC;QAClE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,IAAI,EAAE,CAAA;IACb,CAAC;IAED,oDAAoD;IACpD,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;IAC1B,CAAC;IAED,oFAAoF;IACpF,OAAO,CAAC,IAAoD;QAC1D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,UAAU,EAAE;YAChB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnC,CAAC,CAAA;QACF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAA;QAClD,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAwB;QAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAA;QACrC,IAAI,QAAQ,CAAC,aAAa,EAAE;YAAE,OAAO,CAAC,CAAA;QAEtC,MAAM,cAAc,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAA;QACzD,IAAI,CAAC,cAAc;YAAE,OAAO,CAAC,CAAA;QAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAC5C,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE;YAAE,OAAO,CAAC,CAAA;QAEhD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QACjC,kEAAkE;QAClE,yCAAyC;QACzC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACf,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;QAC1C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,mEAAmE;IACnE,YAAY,CAAC,QAAwB,EAAE,UAAU,GAAG,iBAAiB;QACnE,IAAI,IAAI,CAAC,UAAU;YAAE,OAAM;QAC3B,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBACtC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,kCAAkC,SAAS,yBAAyB,CAAC,CAAA;gBACnF,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAA;YAC1D,CAAC;QACH,CAAC,EAAE,UAAU,CAAC,CAAA;QACd,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;IACpD,CAAC;IAED,mCAAmC;IACnC,WAAW;QACT,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACxB,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,WAAW;IACX,4EAA4E;IAEpE,WAAW;QACjB,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAA;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YACpC,CAAC,CAAC,UAAU,KAAK,mBAAmB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,gCAAgC;YACvF,CAAC,CAAC,UAAU,KAAK,oBAAoB,IAAI,CAAC,KAAK,CAAC,MAAM,8BAA8B,CAAA;QAEtF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACrC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACvD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;gBAC5B,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE;gBAC/B,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,KAAK,EAAE,SAAS,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,CAAA;QAClE,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzC,CAAC;IAEO,IAAI;QACV,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAAE,OAAM;YACtC,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;YACxE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAoB,EAAE,CAClD,CAAC,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ;uBAC3B,OAAQ,EAAiB,CAAC,KAAK,KAAK,QAAQ;uBAC5C,OAAQ,EAAiB,CAAC,KAAK,KAAK,QAAQ;uBAC5C,OAAQ,EAAiB,CAAC,IAAI,KAAK,QAAQ,CAC/C,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,mEAAmE,EAAE,GAAG,CAAC,CAAA;YACtF,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACjB,CAAC;IACH,CAAC;IAEO,OAAO;QACb,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACzD,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QAC5E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE,GAAG,CAAC,CAAA;QAC3E,CAAC;IACH,CAAC;CACF;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,IAAI,SAAS,GAA8B,IAAI,CAAA;AAE/C,4CAA4C;AAC5C,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,kBAAkB,EAAE,CAAA;IACpD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,4BAA4B,CAAC,MAAiC;IAC5E,SAAS,GAAG,MAAM,CAAA;AACpB,CAAC"}