crewly 1.20.360 → 1.20.362

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 (153) hide show
  1. package/config/roles/team-leader/prompt.md +1 -1
  2. package/config/roles/team-leader/tl-addon.md +1 -1
  3. package/config/skills/team-leader/delegate-task/SKILL.md +21 -6
  4. package/config/skills/team-leader/delegate-task/execute.sh +12 -1
  5. package/dist/backend/backend/src/constants.d.ts +155 -6
  6. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  7. package/dist/backend/backend/src/constants.js +155 -6
  8. package/dist/backend/backend/src/constants.js.map +1 -1
  9. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  10. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +7 -4
  11. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  12. package/dist/backend/backend/src/index.d.ts.map +1 -1
  13. package/dist/backend/backend/src/index.js +58 -3
  14. package/dist/backend/backend/src/index.js.map +1 -1
  15. package/dist/backend/backend/src/services/agent/boot-pressure.d.ts +19 -3
  16. package/dist/backend/backend/src/services/agent/boot-pressure.d.ts.map +1 -1
  17. package/dist/backend/backend/src/services/agent/boot-pressure.js +30 -7
  18. package/dist/backend/backend/src/services/agent/boot-pressure.js.map +1 -1
  19. package/dist/backend/backend/src/services/agent/follow-through.wiring.d.ts.map +1 -1
  20. package/dist/backend/backend/src/services/agent/follow-through.wiring.js +2 -0
  21. package/dist/backend/backend/src/services/agent/follow-through.wiring.js.map +1 -1
  22. package/dist/backend/backend/src/services/agent/handover-interrupted.d.ts +76 -0
  23. package/dist/backend/backend/src/services/agent/handover-interrupted.d.ts.map +1 -0
  24. package/dist/backend/backend/src/services/agent/handover-interrupted.js +139 -0
  25. package/dist/backend/backend/src/services/agent/handover-interrupted.js.map +1 -0
  26. package/dist/backend/backend/src/services/agent/handover-pointers.d.ts +4 -0
  27. package/dist/backend/backend/src/services/agent/handover-pointers.d.ts.map +1 -1
  28. package/dist/backend/backend/src/services/agent/handover-pointers.js +11 -4
  29. package/dist/backend/backend/src/services/agent/handover-pointers.js.map +1 -1
  30. package/dist/backend/backend/src/services/agent/idle-work-guard.d.ts +3 -1
  31. package/dist/backend/backend/src/services/agent/idle-work-guard.d.ts.map +1 -1
  32. package/dist/backend/backend/src/services/agent/idle-work-guard.js +2 -0
  33. package/dist/backend/backend/src/services/agent/idle-work-guard.js.map +1 -1
  34. package/dist/backend/backend/src/services/agent/resource-mode-protection.d.ts +5 -1
  35. package/dist/backend/backend/src/services/agent/resource-mode-protection.d.ts.map +1 -1
  36. package/dist/backend/backend/src/services/agent/resource-mode-protection.js +6 -1
  37. package/dist/backend/backend/src/services/agent/resource-mode-protection.js.map +1 -1
  38. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +7 -0
  39. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +18 -1
  41. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  42. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.d.ts +8 -0
  43. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.js +10 -0
  45. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -1
  46. package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts +43 -2
  47. package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -1
  48. package/dist/backend/backend/src/services/open-items/open-item-extractor.js +124 -13
  49. package/dist/backend/backend/src/services/open-items/open-item-extractor.js.map +1 -1
  50. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +40 -1
  51. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  52. package/dist/backend/backend/src/services/open-items/open-items.service.js +76 -3
  53. package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
  54. package/dist/backend/backend/src/services/open-items/open-items.wiring.d.ts +8 -0
  55. package/dist/backend/backend/src/services/open-items/open-items.wiring.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/open-items/open-items.wiring.js +19 -1
  57. package/dist/backend/backend/src/services/open-items/open-items.wiring.js.map +1 -1
  58. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts +35 -19
  59. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js +60 -63
  61. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js.map +1 -1
  62. package/dist/backend/backend/src/services/orc/owner-completion-report.text.d.ts +86 -0
  63. package/dist/backend/backend/src/services/orc/owner-completion-report.text.d.ts.map +1 -0
  64. package/dist/backend/backend/src/services/orc/owner-completion-report.text.js +170 -0
  65. package/dist/backend/backend/src/services/orc/owner-completion-report.text.js.map +1 -0
  66. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.d.ts +24 -0
  67. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.js +38 -1
  69. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.js.map +1 -1
  70. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts +2 -0
  71. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
  72. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +8 -3
  73. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
  74. package/dist/backend/backend/src/services/orc/work-item-destination.d.ts +76 -0
  75. package/dist/backend/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
  76. package/dist/backend/backend/src/services/orc/work-item-destination.js +83 -3
  77. package/dist/backend/backend/src/services/orc/work-item-destination.js.map +1 -1
  78. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.d.ts +31 -2
  79. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.js +38 -0
  81. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.js.map +1 -1
  82. package/dist/backend/backend/src/services/stall/background-run-detector.d.ts +56 -0
  83. package/dist/backend/backend/src/services/stall/background-run-detector.d.ts.map +1 -0
  84. package/dist/backend/backend/src/services/stall/background-run-detector.js +93 -0
  85. package/dist/backend/backend/src/services/stall/background-run-detector.js.map +1 -0
  86. package/dist/backend/backend/src/services/stall/claim-check.d.ts +60 -0
  87. package/dist/backend/backend/src/services/stall/claim-check.d.ts.map +1 -0
  88. package/dist/backend/backend/src/services/stall/claim-check.js +98 -0
  89. package/dist/backend/backend/src/services/stall/claim-check.js.map +1 -0
  90. package/dist/backend/backend/src/services/stall/in-flight-runs.store.d.ts +110 -0
  91. package/dist/backend/backend/src/services/stall/in-flight-runs.store.d.ts.map +1 -0
  92. package/dist/backend/backend/src/services/stall/in-flight-runs.store.js +109 -0
  93. package/dist/backend/backend/src/services/stall/in-flight-runs.store.js.map +1 -0
  94. package/dist/backend/backend/src/services/stall/stall-watcher.service.d.ts +456 -0
  95. package/dist/backend/backend/src/services/stall/stall-watcher.service.d.ts.map +1 -0
  96. package/dist/backend/backend/src/services/stall/stall-watcher.service.js +854 -0
  97. package/dist/backend/backend/src/services/stall/stall-watcher.service.js.map +1 -0
  98. package/dist/backend/backend/src/services/stall/stall-watcher.wiring.d.ts +98 -0
  99. package/dist/backend/backend/src/services/stall/stall-watcher.wiring.d.ts.map +1 -0
  100. package/dist/backend/backend/src/services/stall/stall-watcher.wiring.js +217 -0
  101. package/dist/backend/backend/src/services/stall/stall-watcher.wiring.js.map +1 -0
  102. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +53 -0
  103. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  104. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +162 -15
  105. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  106. package/dist/backend/backend/src/services/tl-delegation/tl-delegation.service.js +1 -1
  107. package/dist/backend/backend/src/services/tl-delegation/tl-delegation.service.js.map +1 -1
  108. package/dist/backend/backend/src/types/v2/open-item.types.d.ts +2 -0
  109. package/dist/backend/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  110. package/dist/backend/build-info.json +2 -2
  111. package/dist/cli/backend/src/constants.d.ts +155 -6
  112. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  113. package/dist/cli/backend/src/constants.js +155 -6
  114. package/dist/cli/backend/src/constants.js.map +1 -1
  115. package/dist/cli/backend/src/services/agent/boot-pressure.d.ts +19 -3
  116. package/dist/cli/backend/src/services/agent/boot-pressure.d.ts.map +1 -1
  117. package/dist/cli/backend/src/services/agent/boot-pressure.js +30 -7
  118. package/dist/cli/backend/src/services/agent/boot-pressure.js.map +1 -1
  119. package/dist/cli/backend/src/services/agent/handover-interrupted.d.ts +76 -0
  120. package/dist/cli/backend/src/services/agent/handover-interrupted.d.ts.map +1 -0
  121. package/dist/cli/backend/src/services/agent/handover-interrupted.js +139 -0
  122. package/dist/cli/backend/src/services/agent/handover-interrupted.js.map +1 -0
  123. package/dist/cli/backend/src/services/agent/handover-pointers.d.ts +4 -0
  124. package/dist/cli/backend/src/services/agent/handover-pointers.d.ts.map +1 -1
  125. package/dist/cli/backend/src/services/agent/handover-pointers.js +11 -4
  126. package/dist/cli/backend/src/services/agent/handover-pointers.js.map +1 -1
  127. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +7 -0
  128. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  129. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +18 -1
  130. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  131. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts +8 -0
  132. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -1
  133. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js +10 -0
  134. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -1
  135. package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts +43 -2
  136. package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -1
  137. package/dist/cli/backend/src/services/open-items/open-item-extractor.js +124 -13
  138. package/dist/cli/backend/src/services/open-items/open-item-extractor.js.map +1 -1
  139. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts +40 -1
  140. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  141. package/dist/cli/backend/src/services/open-items/open-items.service.js +76 -3
  142. package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
  143. package/dist/cli/backend/src/services/orc/work-item-destination.d.ts +76 -0
  144. package/dist/cli/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
  145. package/dist/cli/backend/src/services/orc/work-item-destination.js +83 -3
  146. package/dist/cli/backend/src/services/orc/work-item-destination.js.map +1 -1
  147. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +53 -0
  148. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  149. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +162 -15
  150. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  151. package/dist/cli/backend/src/types/v2/open-item.types.d.ts +2 -0
  152. package/dist/cli/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  153. package/package.json +1 -1
@@ -15,6 +15,8 @@
15
15
  export interface BootPressureSnapshot {
16
16
  usedPercent: number;
17
17
  freeMB: number;
18
+ /** Physical memory; scales the free floor on small machines (0 or absent: not scaled) */
19
+ totalMB?: number;
18
20
  swapUsedPercent: number;
19
21
  osPressure: boolean;
20
22
  /** ResourceModeService is in pressure mode */
@@ -33,11 +35,25 @@ export interface BootPressureThresholds {
33
35
  * @returns Effective thresholds
34
36
  */
35
37
  export declare function bootPressureThresholds(env?: NodeJS.ProcessEnv): BootPressureThresholds;
38
+ /**
39
+ * The free-memory floor for this machine: the configured floor, capped at
40
+ * MIN_FREE_FRACTION of physical memory. A fixed 3 GB floor reads an 8 GB
41
+ * laptop as tight on every boot (2026-10-17: the Air held Fern back while
42
+ * its own health check said memory was fine).
43
+ *
44
+ * @param snapshot - Reading (its totalMB scales the floor)
45
+ * @param thresholds - Effective thresholds
46
+ * @returns Floor in MB
47
+ */
48
+ export declare function effectiveMinFreeMB(snapshot: BootPressureSnapshot, thresholds: BootPressureThresholds): number;
36
49
  /**
37
50
  * Why the snapshot is tight for the boot, or null when it is calm. Tight:
38
- * pressure mode, swap at or above the threshold, or free memory under the
39
- * floor. An unreadable snapshot (null) is calm: a boot must not stall on a
40
- * reading that failed.
51
+ * pressure mode, the OS pressure flag, free memory under the floor, or swap
52
+ * at or above the threshold while free memory is also under twice the
53
+ * floor. Swap fill alone does not count: macOS grows its swap file on
54
+ * demand, so a small swap file sits near full on a healthy machine. An
55
+ * unreadable snapshot (null) is calm: a boot must not stall on a reading
56
+ * that failed.
41
57
  *
42
58
  * @param snapshot - Reading, or null when unavailable
43
59
  * @param thresholds - Effective thresholds
@@ -1 +1 @@
1
- {"version":3,"file":"boot-pressure.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/boot-pressure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"boot-pressure.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/boot-pressure.ts"],"names":[],"mappings":"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"}
@@ -38,11 +38,29 @@ export function bootPressureThresholds(env = process.env) {
38
38
  launchSpacingMs: envInt(env[BOOT_PRESSURE_CONSTANTS.ENV_LAUNCH_SPACING_MS], BOOT_PRESSURE_CONSTANTS.MIN_LAUNCH_SPACING_MS),
39
39
  };
40
40
  }
41
+ /**
42
+ * The free-memory floor for this machine: the configured floor, capped at
43
+ * MIN_FREE_FRACTION of physical memory. A fixed 3 GB floor reads an 8 GB
44
+ * laptop as tight on every boot (2026-10-17: the Air held Fern back while
45
+ * its own health check said memory was fine).
46
+ *
47
+ * @param snapshot - Reading (its totalMB scales the floor)
48
+ * @param thresholds - Effective thresholds
49
+ * @returns Floor in MB
50
+ */
51
+ export function effectiveMinFreeMB(snapshot, thresholds) {
52
+ if (!snapshot.totalMB || snapshot.totalMB <= 0)
53
+ return thresholds.minFreeMB;
54
+ return Math.min(thresholds.minFreeMB, Math.round(snapshot.totalMB * BOOT_PRESSURE_CONSTANTS.MIN_FREE_FRACTION));
55
+ }
41
56
  /**
42
57
  * Why the snapshot is tight for the boot, or null when it is calm. Tight:
43
- * pressure mode, swap at or above the threshold, or free memory under the
44
- * floor. An unreadable snapshot (null) is calm: a boot must not stall on a
45
- * reading that failed.
58
+ * pressure mode, the OS pressure flag, free memory under the floor, or swap
59
+ * at or above the threshold while free memory is also under twice the
60
+ * floor. Swap fill alone does not count: macOS grows its swap file on
61
+ * demand, so a small swap file sits near full on a healthy machine. An
62
+ * unreadable snapshot (null) is calm: a boot must not stall on a reading
63
+ * that failed.
46
64
  *
47
65
  * @param snapshot - Reading, or null when unavailable
48
66
  * @param thresholds - Effective thresholds
@@ -51,13 +69,17 @@ export function bootPressureThresholds(env = process.env) {
51
69
  export function bootPressureReason(snapshot, thresholds = bootPressureThresholds()) {
52
70
  if (!snapshot)
53
71
  return null;
72
+ const floor = effectiveMinFreeMB(snapshot, thresholds);
54
73
  const why = [];
55
74
  if (snapshot.pressureMode)
56
75
  why.push('pressure mode');
57
- if (snapshot.swapUsedPercent >= thresholds.swapUsedPercent)
58
- why.push(`swap ${snapshot.swapUsedPercent}% >= ${thresholds.swapUsedPercent}%`);
59
- if (snapshot.freeMB < thresholds.minFreeMB)
60
- why.push(`free ${snapshot.freeMB}MB < ${thresholds.minFreeMB}MB`);
76
+ if (snapshot.osPressure)
77
+ why.push('OS memory pressure');
78
+ if (snapshot.freeMB < floor)
79
+ why.push(`free ${snapshot.freeMB}MB < ${floor}MB`);
80
+ else if (snapshot.swapUsedPercent >= thresholds.swapUsedPercent && snapshot.freeMB < floor * 2) {
81
+ why.push(`swap ${snapshot.swapUsedPercent}% >= ${thresholds.swapUsedPercent}% with free ${snapshot.freeMB}MB < ${floor * 2}MB`);
82
+ }
61
83
  if (why.length === 0)
62
84
  return null;
63
85
  return `${why.join(', ')} (used=${snapshot.usedPercent}% free=${snapshot.freeMB}MB swap=${snapshot.swapUsedPercent}% osPressure=${snapshot.osPressure})`;
@@ -77,6 +99,7 @@ export function readBootPressureSnapshot() {
77
99
  return {
78
100
  usedPercent: mem.usedPercent,
79
101
  freeMB: mem.freeMB,
102
+ totalMB: mem.totalMB,
80
103
  swapUsedPercent: mem.swapUsedPercent ?? 0,
81
104
  osPressure: mem.pressureElevated === true,
82
105
  pressureMode: rm.getMode() === 'pressure',
@@ -1 +1 @@
1
- {"version":3,"file":"boot-pressure.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/boot-pressure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"boot-pressure.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/boot-pressure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Work a restart cut off inside an agent's Claude Code conversation
3
+ * (crewly#1361). A `tool_use` block whose `tool_use_id` never received a
4
+ * `tool_result` before the transcript ends was still running when the process
5
+ * died: a sub-agent (Task / Agent tool) or a background / long-running shell
6
+ * command. Neither survives the restart, but the agent's last words in the
7
+ * transcript say the work is "still in progress", so a resumed agent waited on
8
+ * it for 16 hours. The handover lists these calls as interrupted, near its
9
+ * top and again under "Open work", so the new conversation restarts them or
10
+ * reports them lost instead of waiting.
11
+ *
12
+ * @module services/agent/handover-interrupted
13
+ */
14
+ /** A `tool_use` block of the transcript that has not received its result (yet). */
15
+ export interface PendingToolCall {
16
+ /** `tool_use.id` */
17
+ id: string;
18
+ /** Tool name ("Task", "Agent", "Bash", …) */
19
+ name: string;
20
+ /** `tool_use.input` as recorded */
21
+ input: unknown;
22
+ }
23
+ /** One interrupted call, as the handover describes it. */
24
+ export interface InterruptedWork {
25
+ kind: 'sub-agent' | 'background-command';
26
+ /** What it was doing: the sub-agent's description and prompt head, or the command head (clipped) */
27
+ text: string;
28
+ }
29
+ /**
30
+ * Whether a pending call is long-running work that dies with the process: a
31
+ * sub-agent, or a shell command run in the background or that looks like a
32
+ * render / encode / build ({@link HANDOVER_CONSTANTS.LONG_COMMAND_PATTERN}).
33
+ * A short command that merely had no result yet (the last `cat` before the
34
+ * cut) is not listed: nothing was lost but its output.
35
+ *
36
+ * @param call - Pending tool call
37
+ * @returns The interrupted work it stands for, or null
38
+ */
39
+ export declare function interruptedFromCall(call: PendingToolCall): InterruptedWork | null;
40
+ /**
41
+ * The interrupted work among the calls still pending at the end of a
42
+ * transcript, oldest first, at most {@link HANDOVER_CONSTANTS.INTERRUPTED_MAX_ITEMS}.
43
+ *
44
+ * @param pending - Tool calls without a result, in transcript order
45
+ * @returns Interrupted sub-agents and background commands
46
+ *
47
+ * @example
48
+ * interruptedWork([{ id: 't1', name: 'Task', input: { description: 'Make v4', prompt: '…' } }])
49
+ * // → [{ kind: 'sub-agent', text: 'Make v4: …' }]
50
+ */
51
+ export declare function interruptedWork(pending: readonly PendingToolCall[]): InterruptedWork[];
52
+ /**
53
+ * One bullet of the section.
54
+ *
55
+ * @param item - Interrupted work
56
+ * @returns The line
57
+ */
58
+ export declare function interruptedLine(item: InterruptedWork): string;
59
+ /**
60
+ * The "Interrupted by the restart" section of a handover: factual, one bullet
61
+ * per call, nothing about mechanics.
62
+ *
63
+ * @param items - Interrupted work
64
+ * @returns Markdown, or '' when nothing was interrupted
65
+ */
66
+ export declare function formatInterruptedSection(items: readonly InterruptedWork[]): string;
67
+ /**
68
+ * Read the interrupted work back out of a handover body that carries the
69
+ * section (the pointers header is written by a different module and lists
70
+ * the same items under "Open work").
71
+ *
72
+ * @param body - Handover body
73
+ * @returns The items, in order; [] when the section is absent
74
+ */
75
+ export declare function interruptedFromHandoverBody(body: string): InterruptedWork[];
76
+ //# sourceMappingURL=handover-interrupted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handover-interrupted.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/handover-interrupted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC/B,oBAAoB;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,KAAK,EAAE,OAAO,CAAC;CACf;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,WAAW,GAAG,oBAAoB,CAAC;IACzC,oGAAoG;IACpG,IAAI,EAAE,MAAM,CAAC;CACb;AA2BD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,GAAG,IAAI,CAcjF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,eAAe,EAAE,CAQtF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAI7D;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAGlF;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAe3E"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Work a restart cut off inside an agent's Claude Code conversation
3
+ * (crewly#1361). A `tool_use` block whose `tool_use_id` never received a
4
+ * `tool_result` before the transcript ends was still running when the process
5
+ * died: a sub-agent (Task / Agent tool) or a background / long-running shell
6
+ * command. Neither survives the restart, but the agent's last words in the
7
+ * transcript say the work is "still in progress", so a resumed agent waited on
8
+ * it for 16 hours. The handover lists these calls as interrupted, near its
9
+ * top and again under "Open work", so the new conversation restarts them or
10
+ * reports them lost instead of waiting.
11
+ *
12
+ * @module services/agent/handover-interrupted
13
+ */
14
+ import { HANDOVER_CONSTANTS } from '../../constants.js';
15
+ const C = HANDOVER_CONSTANTS;
16
+ /**
17
+ * Clip to one line of at most {@link HANDOVER_CONSTANTS.INTERRUPTED_TEXT_MAX_CHARS}
18
+ * characters, without a trailing full stop (the bullet adds its own sentence).
19
+ *
20
+ * @param text - Text
21
+ * @returns One line
22
+ */
23
+ function clip(text) {
24
+ const flat = text.replace(/\s+/g, ' ').trim().replace(/[.。]+$/u, '');
25
+ return flat.length > C.INTERRUPTED_TEXT_MAX_CHARS ? `${flat.slice(0, C.INTERRUPTED_TEXT_MAX_CHARS)}…` : flat;
26
+ }
27
+ /**
28
+ * A string field of a tool input object, or ''.
29
+ *
30
+ * @param input - `tool_use.input`
31
+ * @param key - Field name
32
+ * @returns The field when it is a string
33
+ */
34
+ function field(input, key) {
35
+ if (!input || typeof input !== 'object')
36
+ return '';
37
+ const v = input[key];
38
+ return typeof v === 'string' ? v : '';
39
+ }
40
+ /**
41
+ * Whether a pending call is long-running work that dies with the process: a
42
+ * sub-agent, or a shell command run in the background or that looks like a
43
+ * render / encode / build ({@link HANDOVER_CONSTANTS.LONG_COMMAND_PATTERN}).
44
+ * A short command that merely had no result yet (the last `cat` before the
45
+ * cut) is not listed: nothing was lost but its output.
46
+ *
47
+ * @param call - Pending tool call
48
+ * @returns The interrupted work it stands for, or null
49
+ */
50
+ export function interruptedFromCall(call) {
51
+ if (C.SUBAGENT_TOOLS.includes(call.name)) {
52
+ const description = field(call.input, 'description');
53
+ const prompt = field(call.input, 'prompt');
54
+ const text = clip([description, prompt].filter(Boolean).join(': ') || call.name);
55
+ return { kind: 'sub-agent', text };
56
+ }
57
+ if (C.SHELL_TOOLS.includes(call.name)) {
58
+ const command = field(call.input, 'command');
59
+ const background = !!call.input && typeof call.input === 'object' && call.input.run_in_background === true;
60
+ if (!background && !C.LONG_COMMAND_PATTERN.test(command))
61
+ return null;
62
+ return { kind: 'background-command', text: clip(command || call.name) };
63
+ }
64
+ return null;
65
+ }
66
+ /**
67
+ * The interrupted work among the calls still pending at the end of a
68
+ * transcript, oldest first, at most {@link HANDOVER_CONSTANTS.INTERRUPTED_MAX_ITEMS}.
69
+ *
70
+ * @param pending - Tool calls without a result, in transcript order
71
+ * @returns Interrupted sub-agents and background commands
72
+ *
73
+ * @example
74
+ * interruptedWork([{ id: 't1', name: 'Task', input: { description: 'Make v4', prompt: '…' } }])
75
+ * // → [{ kind: 'sub-agent', text: 'Make v4: …' }]
76
+ */
77
+ export function interruptedWork(pending) {
78
+ const out = [];
79
+ for (const call of pending) {
80
+ const item = interruptedFromCall(call);
81
+ if (item)
82
+ out.push(item);
83
+ if (out.length >= C.INTERRUPTED_MAX_ITEMS)
84
+ break;
85
+ }
86
+ return out;
87
+ }
88
+ /**
89
+ * One bullet of the section.
90
+ *
91
+ * @param item - Interrupted work
92
+ * @returns The line
93
+ */
94
+ export function interruptedLine(item) {
95
+ return item.kind === 'sub-agent'
96
+ ? `${C.SUBAGENT_LINE_PREFIX}${item.text}${C.SUBAGENT_LINE_SUFFIX}`
97
+ : `${C.COMMAND_LINE_PREFIX}${item.text}${C.COMMAND_LINE_SUFFIX}`;
98
+ }
99
+ /**
100
+ * The "Interrupted by the restart" section of a handover: factual, one bullet
101
+ * per call, nothing about mechanics.
102
+ *
103
+ * @param items - Interrupted work
104
+ * @returns Markdown, or '' when nothing was interrupted
105
+ */
106
+ export function formatInterruptedSection(items) {
107
+ if (items.length === 0)
108
+ return '';
109
+ return [C.INTERRUPTED_HEADING, '', ...items.map(interruptedLine)].join('\n');
110
+ }
111
+ /**
112
+ * Read the interrupted work back out of a handover body that carries the
113
+ * section (the pointers header is written by a different module and lists
114
+ * the same items under "Open work").
115
+ *
116
+ * @param body - Handover body
117
+ * @returns The items, in order; [] when the section is absent
118
+ */
119
+ export function interruptedFromHandoverBody(body) {
120
+ const start = body.indexOf(C.INTERRUPTED_HEADING);
121
+ if (start === -1)
122
+ return [];
123
+ const out = [];
124
+ for (const raw of body.slice(start + C.INTERRUPTED_HEADING.length).split('\n')) {
125
+ const line = raw.trim();
126
+ if (!line)
127
+ continue;
128
+ if (!line.startsWith('- '))
129
+ break;
130
+ if (line.startsWith(C.SUBAGENT_LINE_PREFIX) && line.endsWith(C.SUBAGENT_LINE_SUFFIX)) {
131
+ out.push({ kind: 'sub-agent', text: line.slice(C.SUBAGENT_LINE_PREFIX.length, line.length - C.SUBAGENT_LINE_SUFFIX.length) });
132
+ }
133
+ else if (line.startsWith(C.COMMAND_LINE_PREFIX) && line.endsWith(C.COMMAND_LINE_SUFFIX)) {
134
+ out.push({ kind: 'background-command', text: line.slice(C.COMMAND_LINE_PREFIX.length, line.length - C.COMMAND_LINE_SUFFIX.length) });
135
+ }
136
+ }
137
+ return out;
138
+ }
139
+ //# sourceMappingURL=handover-interrupted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handover-interrupted.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/handover-interrupted.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,10 @@ export declare function suggestedSkillsFor(role?: string): string[];
49
49
  * Prepend the pointer header to a handover body. Does nothing when the body
50
50
  * already starts with one (chained handovers carry no second copy).
51
51
  *
52
+ * Work the restart interrupted (a sub-agent or background command the body's
53
+ * "Interrupted by the restart" section lists, crewly#1361) is repeated under
54
+ * "Open work": it is the agent's to restart or report, not background.
55
+ *
52
56
  * @param body - Handover body (the transcript tail)
53
57
  * @param opts - Session, optional role, optional CREWLY_HOME and open work override (tests)
54
58
  * @returns Header plus body, redacted
@@ -1 +1 @@
1
- {"version":3,"file":"handover-pointers.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/handover-pointers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAID;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,GAAE,MAA4B,GAAG,gBAAgB,EAAE,CAkBlH;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKxD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAM1D;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAA;CAAE,GAC9F,MAAM,CAUR;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK1D"}
1
+ {"version":3,"file":"handover-pointers.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/handover-pointers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAID;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,GAAE,MAA4B,GAAG,gBAAgB,EAAE,CAkBlH;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKxD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAM1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAA;CAAE,GAC9F,MAAM,CAYR;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK1D"}
@@ -12,6 +12,7 @@ import * as path from 'path';
12
12
  import { redactSecrets } from '../../utils/secret-redactor.js';
13
13
  import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
14
14
  import { HANDOVER_POINTERS_CONSTANTS } from '../../constants.js';
15
+ import { interruptedFromHandoverBody } from './handover-interrupted.js';
15
16
  const C = HANDOVER_POINTERS_CONSTANTS;
16
17
  /**
17
18
  * Mask secrets (keys, tokens, bearer headers, `NAME=value` secrets) in text
@@ -85,6 +86,10 @@ export function suggestedSkillsFor(role) {
85
86
  * Prepend the pointer header to a handover body. Does nothing when the body
86
87
  * already starts with one (chained handovers carry no second copy).
87
88
  *
89
+ * Work the restart interrupted (a sub-agent or background command the body's
90
+ * "Interrupted by the restart" section lists, crewly#1361) is repeated under
91
+ * "Open work": it is the agent's to restart or report, not background.
92
+ *
88
93
  * @param body - Handover body (the transcript tail)
89
94
  * @param opts - Session, optional role, optional CREWLY_HOME and open work override (tests)
90
95
  * @returns Header plus body, redacted
@@ -93,13 +98,15 @@ export function withHandoverPointers(body, opts) {
93
98
  if (body.includes(C.START_MARK))
94
99
  return body;
95
100
  const open = opts.openWork ?? readOpenWorkSync(opts.sessionName, opts.crewlyHome);
101
+ const interrupted = interruptedFromHandoverBody(body);
96
102
  const links = findArtifactLinks(body);
97
103
  const lines = [C.START_MARK, '## Open work', ''];
98
- if (open.length === 0)
104
+ if (open.length === 0 && interrupted.length === 0)
99
105
  lines.push('None open for you (no WorkItems in flight).');
100
- else
101
- for (const w of open)
102
- lines.push(`- ${w.id} — ${w.title} (${w.status})`);
106
+ for (const w of open)
107
+ lines.push(`- ${w.id} — ${w.title} (${w.status})`);
108
+ for (const i of interrupted)
109
+ lines.push(`- Interrupted by the restart (${i.kind === 'sub-agent' ? 'sub-agent' : 'background command'}, not running now): ${i.text}`);
103
110
  if (links.length)
104
111
  lines.push('', 'Mentioned in the conversation: ' + links.join(', '));
105
112
  lines.push('', `## Suggested skills`, '', `Call the Skill tool for: ${suggestedSkillsFor(opts.role).join(', ')}.`, C.END_MARK, '');
@@ -1 +1 @@
1
- {"version":3,"file":"handover-pointers.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/handover-pointers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handover-pointers.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/handover-pointers.ts"],"names":[],"mappings":"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"}
@@ -251,6 +251,13 @@ export declare function lastTurnContextTokens(filePath: string): number | null;
251
251
  * (crewly#1344). Images are a described placeholder, never copied. System
252
252
  * reminders and command wrappers are left out.
253
253
  *
254
+ * A sub-agent or background command whose tool call never got its result
255
+ * before the end of the transcript died with the restart: it is listed first,
256
+ * under {@link HANDOVER_CONSTANTS.INTERRUPTED_HEADING}, so the new
257
+ * conversation does not take the agent's last "still in progress" words for
258
+ * work that is running (crewly#1361). That section is capped on its own
259
+ * (items × characters) and does not count against the body's limit.
260
+ *
254
261
  * @param filePath - Transcript path
255
262
  * @returns Markdown, newest last; empty when nothing readable was found
256
263
  */
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-session-recovery.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/runtime-session-recovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-session-recovery.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/runtime-session-recovery.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,7 @@ import * as path from 'path';
33
33
  import { randomUUID } from 'crypto';
34
34
  import { ANTIGRAVITY_CONSTANTS, RUNTIME_TYPES, ORC_CONVERSATION_CONSTANTS, FRESH_TASK_CONVERSATION_CONSTANTS } from '../../constants.js';
35
35
  import { redactHandoverText, stripHandoverPointers, withHandoverPointers } from './handover-pointers.js';
36
+ import { formatInterruptedSection, interruptedWork } from './handover-interrupted.js';
36
37
  import { getAntigravityConfigDir } from '../../utils/antigravity-settings.utils.js';
37
38
  import { resolveProjectSlugCandidatesSync } from '../monitoring/claude-session-tokens.service.js';
38
39
  /**
@@ -624,6 +625,13 @@ function toolResultText(content) {
624
625
  * (crewly#1344). Images are a described placeholder, never copied. System
625
626
  * reminders and command wrappers are left out.
626
627
  *
628
+ * A sub-agent or background command whose tool call never got its result
629
+ * before the end of the transcript died with the restart: it is listed first,
630
+ * under {@link HANDOVER_CONSTANTS.INTERRUPTED_HEADING}, so the new
631
+ * conversation does not take the agent's last "still in progress" words for
632
+ * work that is running (crewly#1361). That section is capped on its own
633
+ * (items × characters) and does not count against the body's limit.
634
+ *
627
635
  * @param filePath - Transcript path
628
636
  * @returns Markdown, newest last; empty when nothing readable was found
629
637
  */
@@ -648,6 +656,8 @@ export function buildHandoverSummary(filePath) {
648
656
  const clip = ORC_CONVERSATION_CONSTANTS.HANDOVER_MESSAGE_CHARS;
649
657
  const toolClip = ORC_CONVERSATION_CONSTANTS.HANDOVER_TOOL_RESULT_CHARS;
650
658
  const toolNames = new Map();
659
+ // Calls still waiting for their result when the transcript ends (insertion order = transcript order).
660
+ const pending = new Map();
651
661
  const said = [];
652
662
  for (const line of text.split('\n')) {
653
663
  if (!line.trim())
@@ -676,8 +686,10 @@ export function buildHandoverSummary(filePath) {
676
686
  tools.push('↳ [image attached]');
677
687
  else if (block.type === 'tool_use') {
678
688
  const name = typeof block.name === 'string' ? block.name : 'tool';
679
- if (typeof block.id === 'string')
689
+ if (typeof block.id === 'string') {
680
690
  toolNames.set(block.id, name);
691
+ pending.set(block.id, { id: block.id, name, input: block.input });
692
+ }
681
693
  let input = '';
682
694
  try {
683
695
  input = typeof block.input === 'string' ? block.input : JSON.stringify(block.input ?? '');
@@ -688,6 +700,8 @@ export function buildHandoverSummary(filePath) {
688
700
  tools.push(`↳ ${name}: ${oneLine(input, toolClip)}`);
689
701
  }
690
702
  else if (block.type === 'tool_result') {
703
+ if (typeof block.tool_use_id === 'string')
704
+ pending.delete(block.tool_use_id);
691
705
  const name = (typeof block.tool_use_id === 'string' && toolNames.get(block.tool_use_id)) || 'tool';
692
706
  const result = toolResultText(block.content);
693
707
  const parts = [result.text ? oneLine(result.text, toolClip) : '', result.images > 0 ? `[${result.images} image${result.images === 1 ? '' : 's'} returned]` : '']
@@ -720,6 +734,9 @@ export function buildHandoverSummary(filePath) {
720
734
  blocks.unshift(b);
721
735
  total += b.length;
722
736
  }
737
+ const interrupted = formatInterruptedSection(interruptedWork([...pending.values()]));
738
+ if (interrupted)
739
+ blocks.unshift(interrupted);
723
740
  // A token pasted into the conversation must not be copied into a plain file
724
741
  // (and from there into every later handover).
725
742
  return redactHandoverText(blocks.join('\n\n'));