crewly 1.20.364 → 1.20.366

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 (185) hide show
  1. package/config/roles/team-leader/prompt.md +2 -0
  2. package/config/skills/agent/core/attach-file/SKILL.md +7 -0
  3. package/config/skills/agent/core/attach-file/execute.sh +8 -3
  4. package/config/skills/agent/core/complete-task/SKILL.md +4 -2
  5. package/config/skills/agent/core/complete-task/execute.sh +9 -1
  6. package/config/skills/agent/core/complete-task/explicit-id.test.sh +13 -2
  7. package/config/skills/agent/core/create-task/SKILL.md +2 -0
  8. package/config/skills/agent/core/create-task/execute.sh +27 -1
  9. package/config/skills/agent/core/create-task/execute.test.sh +67 -0
  10. package/config/skills/agent/core/handoff-task/execute.sh +12 -5
  11. package/config/skills/agent/core/handoff-task/explicit-id.test.sh +70 -0
  12. package/config/skills/agent/core/reply/SKILL.md +10 -2
  13. package/config/skills/agent/core/reply-channel/SKILL.md +17 -0
  14. package/config/skills/agent/core/reply-channel/execute.sh +17 -2
  15. package/config/skills/agent/core/reply-channel/execute.test.sh +15 -2
  16. package/config/skills/agent/core/send-message/SKILL.md +14 -0
  17. package/config/skills/agent/core/slack-post/SKILL.md +3 -3
  18. package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
  19. package/config/skills/orchestrator/reply-slack/execute.sh +6 -2
  20. package/config/skills/orchestrator/send-pdf-to-slack/SKILL.md +2 -1
  21. package/config/skills/orchestrator/send-pdf-to-slack/execute.sh +10 -2
  22. package/config/skills/registry.json +6 -6
  23. package/config/skills/team-leader/delegate-task/SKILL.md +1 -1
  24. package/config/skills/team-leader/delegate-task/execute.sh +6 -0
  25. package/dist/backend/backend/src/constants.d.ts +26 -0
  26. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  27. package/dist/backend/backend/src/constants.js +26 -0
  28. package/dist/backend/backend/src/constants.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -1
  30. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +7 -3
  31. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -1
  32. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts.map +1 -1
  33. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js +2 -0
  34. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js.map +1 -1
  35. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts +12 -0
  36. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  37. package/dist/backend/backend/src/controllers/chat/chat.controller.js +56 -7
  38. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  39. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +9 -0
  40. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  41. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +159 -0
  42. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  43. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  44. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +89 -2
  45. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  46. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  47. package/dist/backend/backend/src/controllers/slack/slack.controller.js +58 -4
  48. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  49. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  50. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +36 -2
  51. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  52. package/dist/backend/backend/src/index.d.ts.map +1 -1
  53. package/dist/backend/backend/src/index.js +9 -0
  54. package/dist/backend/backend/src/index.js.map +1 -1
  55. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +16 -10
  56. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  57. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +19 -11
  58. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  59. package/dist/backend/backend/src/services/messaging/agent-message-envelope.d.ts +106 -0
  60. package/dist/backend/backend/src/services/messaging/agent-message-envelope.d.ts.map +1 -0
  61. package/dist/backend/backend/src/services/messaging/agent-message-envelope.js +124 -0
  62. package/dist/backend/backend/src/services/messaging/agent-message-envelope.js.map +1 -0
  63. package/dist/backend/backend/src/services/messaging/owner-hook-message.d.ts +62 -13
  64. package/dist/backend/backend/src/services/messaging/owner-hook-message.d.ts.map +1 -1
  65. package/dist/backend/backend/src/services/messaging/owner-hook-message.js +196 -22
  66. package/dist/backend/backend/src/services/messaging/owner-hook-message.js.map +1 -1
  67. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +15 -5
  68. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js +22 -0
  70. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
  71. package/dist/backend/backend/src/services/orc/agent-mention-post-guard.d.ts +69 -0
  72. package/dist/backend/backend/src/services/orc/agent-mention-post-guard.d.ts.map +1 -0
  73. package/dist/backend/backend/src/services/orc/agent-mention-post-guard.js +81 -0
  74. package/dist/backend/backend/src/services/orc/agent-mention-post-guard.js.map +1 -0
  75. package/dist/backend/backend/src/services/orc/message-route.d.ts +129 -0
  76. package/dist/backend/backend/src/services/orc/message-route.d.ts.map +1 -0
  77. package/dist/backend/backend/src/services/orc/message-route.js +197 -0
  78. package/dist/backend/backend/src/services/orc/message-route.js.map +1 -0
  79. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts +34 -3
  80. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts.map +1 -1
  81. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js +65 -8
  82. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js.map +1 -1
  83. package/dist/backend/backend/src/services/orc/owner-completion-report.text.d.ts +15 -2
  84. package/dist/backend/backend/src/services/orc/owner-completion-report.text.d.ts.map +1 -1
  85. package/dist/backend/backend/src/services/orc/owner-completion-report.text.js +21 -6
  86. package/dist/backend/backend/src/services/orc/owner-completion-report.text.js.map +1 -1
  87. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.d.ts +16 -1
  88. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.d.ts.map +1 -1
  89. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.js +19 -3
  90. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.js.map +1 -1
  91. package/dist/backend/backend/src/services/orc/reply-destination-resolver.d.ts +76 -4
  92. package/dist/backend/backend/src/services/orc/reply-destination-resolver.d.ts.map +1 -1
  93. package/dist/backend/backend/src/services/orc/reply-destination-resolver.js +343 -45
  94. package/dist/backend/backend/src/services/orc/reply-destination-resolver.js.map +1 -1
  95. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts +70 -8
  96. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
  97. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +256 -100
  98. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
  99. package/dist/backend/backend/src/services/orc/triggered-by.d.ts.map +1 -1
  100. package/dist/backend/backend/src/services/orc/triggered-by.js +9 -0
  101. package/dist/backend/backend/src/services/orc/triggered-by.js.map +1 -1
  102. package/dist/backend/backend/src/services/orc/work-item-destination.d.ts +2 -1
  103. package/dist/backend/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
  104. package/dist/backend/backend/src/services/orc/work-item-destination.js +1 -1
  105. package/dist/backend/backend/src/services/orc/work-item-destination.js.map +1 -1
  106. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.d.ts +16 -1
  107. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.d.ts.map +1 -1
  108. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.js +33 -4
  109. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.js.map +1 -1
  110. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts +1 -0
  111. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -1
  112. package/dist/backend/backend/src/services/slack/room-responder.d.ts +7 -3
  113. package/dist/backend/backend/src/services/slack/room-responder.d.ts.map +1 -1
  114. package/dist/backend/backend/src/services/slack/room-responder.js +26 -20
  115. package/dist/backend/backend/src/services/slack/room-responder.js.map +1 -1
  116. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts +1 -1
  117. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -1
  118. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +20 -13
  119. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -1
  120. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +17 -0
  121. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  122. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +35 -1
  123. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  124. package/dist/backend/backend/src/services/slack/slack.service.d.ts +20 -1
  125. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  126. package/dist/backend/backend/src/services/slack/slack.service.js +58 -3
  127. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  128. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +31 -0
  129. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  130. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +62 -5
  131. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  132. package/dist/backend/backend/src/services/trace/turn-trigger.d.ts +34 -1
  133. package/dist/backend/backend/src/services/trace/turn-trigger.d.ts.map +1 -1
  134. package/dist/backend/backend/src/services/trace/turn-trigger.js +76 -6
  135. package/dist/backend/backend/src/services/trace/turn-trigger.js.map +1 -1
  136. package/dist/backend/build-info.json +2 -2
  137. package/dist/cli/backend/src/constants.d.ts +26 -0
  138. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  139. package/dist/cli/backend/src/constants.js +26 -0
  140. package/dist/cli/backend/src/constants.js.map +1 -1
  141. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +16 -10
  142. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  143. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +19 -11
  144. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  145. package/dist/cli/backend/src/services/messaging/agent-message-envelope.d.ts +106 -0
  146. package/dist/cli/backend/src/services/messaging/agent-message-envelope.d.ts.map +1 -0
  147. package/dist/cli/backend/src/services/messaging/agent-message-envelope.js +124 -0
  148. package/dist/cli/backend/src/services/messaging/agent-message-envelope.js.map +1 -0
  149. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +15 -5
  150. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -1
  151. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js +22 -0
  152. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
  153. package/dist/cli/backend/src/services/orc/message-route.d.ts +129 -0
  154. package/dist/cli/backend/src/services/orc/message-route.d.ts.map +1 -0
  155. package/dist/cli/backend/src/services/orc/message-route.js +197 -0
  156. package/dist/cli/backend/src/services/orc/message-route.js.map +1 -0
  157. package/dist/cli/backend/src/services/orc/owner-completion-report.text.d.ts +15 -2
  158. package/dist/cli/backend/src/services/orc/owner-completion-report.text.d.ts.map +1 -1
  159. package/dist/cli/backend/src/services/orc/owner-completion-report.text.js +21 -6
  160. package/dist/cli/backend/src/services/orc/owner-completion-report.text.js.map +1 -1
  161. package/dist/cli/backend/src/services/orc/work-item-destination.d.ts +2 -1
  162. package/dist/cli/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
  163. package/dist/cli/backend/src/services/orc/work-item-destination.js +1 -1
  164. package/dist/cli/backend/src/services/orc/work-item-destination.js.map +1 -1
  165. package/dist/cli/backend/src/services/slack/room-responder.d.ts +7 -3
  166. package/dist/cli/backend/src/services/slack/room-responder.d.ts.map +1 -1
  167. package/dist/cli/backend/src/services/slack/room-responder.js +26 -20
  168. package/dist/cli/backend/src/services/slack/room-responder.js.map +1 -1
  169. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +17 -0
  170. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  171. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +35 -1
  172. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  173. package/dist/cli/backend/src/services/slack/slack.service.d.ts +20 -1
  174. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
  175. package/dist/cli/backend/src/services/slack/slack.service.js +58 -3
  176. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
  177. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +31 -0
  178. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  179. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +62 -5
  180. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  181. package/dist/cli/backend/src/services/trace/turn-trigger.d.ts +34 -1
  182. package/dist/cli/backend/src/services/trace/turn-trigger.d.ts.map +1 -1
  183. package/dist/cli/backend/src/services/trace/turn-trigger.js +76 -6
  184. package/dist/cli/backend/src/services/trace/turn-trigger.js.map +1 -1
  185. package/package.json +1 -1
@@ -16,6 +16,16 @@
16
16
  * @module services/messaging/owner-hook-message
17
17
  */
18
18
  import { SubAgentMessageQueue, type SurfacedOwnerMessage } from './sub-agent-message-queue.service.js';
19
+ /**
20
+ * Writes an owner message too long for the note to a file, returning its
21
+ * path (null when it could not be written).
22
+ */
23
+ export type OwnerMessageOverflowWriter = (fullText: string) => string | null;
24
+ /** Options of {@link buildOwnerHookNote}. */
25
+ export interface OwnerHookNoteOptions {
26
+ /** Where an owner message too long for the note is written in full */
27
+ overflow?: OwnerMessageOverflowWriter;
28
+ }
19
29
  /**
20
30
  * The note for one surfaced owner message (English harness text). The queued
21
31
  * text already carries where the message came from and how to reply, as the
@@ -23,24 +33,51 @@ import { SubAgentMessageQueue, type SurfacedOwnerMessage } from './sub-agent-mes
23
33
  *
24
34
  * @param message - The surfaced message
25
35
  * @param maxChars - Ceiling on the note's length
36
+ * @param options - Overflow writer (default: a file under CREWLY_HOME)
26
37
  * @returns The note
27
38
  */
28
- export declare function buildOwnerHookNote(message: SurfacedOwnerMessage, maxChars?: number): string;
39
+ export declare function buildOwnerHookNote(message: SurfacedOwnerMessage, maxChars?: number, options?: OwnerHookNoteOptions): string;
29
40
  /**
30
- * Fit a queued message into `room` characters, keeping what the agent needs
31
- * to act on: its first block (`[CHAT:…]` header — where it came from) and
32
- * its end (the newest thread lines, the message itself, how to reply). The
33
- * older middle is cut and the cut is said.
41
+ * Fit a queued owner message into `room` characters. The owner's own text
42
+ * is never cut (message-routing audit 2026-10-18, R0): what gives way is,
43
+ * in order, the reply instructions after the `---` line (down to their
44
+ * start, which holds the reply command) and the older thread context (its
45
+ * newest lines are kept). When the owner's text alone is still too long, it
46
+ * is written in full to a file and the note quotes its start and points to
47
+ * the file.
34
48
  *
35
- * The end used to be cut instead. A 13.5k-char thread prompt lost its newest
36
- * posts and the owner's ping itself, so the agent saw only the thread's old
37
- * topics and answered something else (2026-10-08, #content-team).
49
+ * History: the end used to be cut, and a 13.5k-char thread prompt lost its
50
+ * newest posts and the owner's ping (2026-10-08, #content-team). Then the
51
+ * middle was cut, and with long reply instructions the cut took the owner's
52
+ * question just before them: the agent said the message arrived empty
53
+ * (2026-10-18, #awesome-videos, I1–I5).
38
54
  *
39
55
  * @param data - The queued text
40
56
  * @param room - Characters available
41
- * @returns The text, whole or cut in the middle
57
+ * @param overflow - Writes the full text when the owner's text cannot fit
58
+ * @returns The text, whole or fitted
59
+ */
60
+ export declare function fitKeepingNewest(data: string, room: number, overflow?: OwnerMessageOverflowWriter): string;
61
+ /**
62
+ * Split a queued text into its header (where it came from), the thread
63
+ * context, and the owner's own message (after the last context-closing
64
+ * line; the whole text after the header when there is none).
65
+ *
66
+ * @param body - The queued text without its reply instructions
67
+ * @returns The three parts (concatenated, they are `body`)
42
68
  */
43
- export declare function fitKeepingNewest(data: string, room: number): string;
69
+ export declare function splitOwnerMessage(body: string): {
70
+ lead: string;
71
+ context: string;
72
+ message: string;
73
+ };
74
+ /**
75
+ * The default overflow writer: `<CREWLY_HOME>/runtime/owner-messages/<label>-<ts>.md`.
76
+ *
77
+ * @param label - File name prefix (the agent's session)
78
+ * @returns The writer
79
+ */
80
+ export declare function defaultOverflowWriter(label: string): OwnerMessageOverflowWriter;
44
81
  /**
45
82
  * The owner-message note for an agent's PostToolUse hook, or null. One
46
83
  * message at most per call. Off when {@link OWNER_HOOK_MESSAGE_CONSTANTS.KILL_SWITCH_ENV}
@@ -49,16 +86,28 @@ export declare function fitKeepingNewest(data: string, room: number): string;
49
86
  * @param sessionName - The agent
50
87
  * @param env - Environment (kill switch)
51
88
  * @param queue - The message queue
89
+ * @param maxChars - Room for the note (what the other notes of this hook call leave)
90
+ * @param overflow - Where an owner message too long for the note is written in full
52
91
  * @returns The note, or null
53
92
  */
54
- export declare function ownerHookNoteFor(sessionName: string, env?: NodeJS.ProcessEnv, queue?: SubAgentMessageQueue): string | null;
93
+ export declare function ownerHookNoteFor(sessionName: string, env?: NodeJS.ProcessEnv, queue?: SubAgentMessageQueue, maxChars?: number, overflow?: OwnerMessageOverflowWriter): string | null;
55
94
  /**
56
- * Join the notes for one hook response, owner message first, within the
57
- * size ceiling (a later note that does not fit is dropped, not cut).
95
+ * Join the notes for one hook response, in priority order, within the size
96
+ * ceiling. Nothing goes silently (message-routing audit 2026-10-18): a note
97
+ * that does not fit is dropped and the result says how many were, and a
98
+ * first note longer than the ceiling is cut with a marker. Owner notes are
99
+ * built to fit their room ({@link ownerHookNoteFor}'s `maxChars`), so they
100
+ * are never cut here.
58
101
  *
59
102
  * @param notes - Notes in priority order (nulls skipped)
60
103
  * @param maxChars - Ceiling
61
104
  * @returns The joined text, or null when there is none
62
105
  */
63
106
  export declare function joinHookNotes(notes: ReadonlyArray<string | null | undefined>, maxChars?: number): string | null;
107
+ /**
108
+ * Room {@link joinHookNotes} keeps after a note that is not the last, for
109
+ * the line naming notes left out. A note built to go first takes at most
110
+ * the ceiling less this.
111
+ */
112
+ export declare const HOOK_NOTE_JOIN_RESERVE: number;
64
113
  //# sourceMappingURL=owner-hook-message.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"owner-hook-message.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/owner-hook-message.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAEvG;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,GAAE,MAAuD,GAAG,MAAM,CAgB3I;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAYnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC/B,WAAW,EAAE,MAAM,EACnB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,GAAE,oBAAyD,GAC9D,MAAM,GAAG,IAAI,CAKf;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,QAAQ,GAAE,MAAuD,GAAG,MAAM,GAAG,IAAI,CAY/J"}
1
+ {"version":3,"file":"owner-hook-message.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/owner-hook-message.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAEvG;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;AAE7E,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB;IACpC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,0BAA0B,CAAC;CACtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,GAAE,MAAuD,EACjE,OAAO,GAAE,oBAAyB,GAChC,MAAM,CAgBR;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,0BAA0B,GAAG,MAAM,CA+B1G;AAeD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAOlG;AA6CD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,0BAA0B,CAS/E;AAuBD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC/B,WAAW,EAAE,MAAM,EACnB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,GAAE,oBAAyD,EAChE,QAAQ,GAAE,MAAuD,EACjE,QAAQ,GAAE,0BAA+D,GACvE,MAAM,GAAG,IAAI,CAKf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,QAAQ,GAAE,MAAuD,GAAG,MAAM,GAAG,IAAI,CAmB/J;AAOD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAA0B,CAAC"}
@@ -15,7 +15,10 @@
15
15
  *
16
16
  * @module services/messaging/owner-hook-message
17
17
  */
18
+ import * as fs from 'fs';
19
+ import * as path from 'path';
18
20
  import { OWNER_HOOK_MESSAGE_CONSTANTS } from '../../constants.js';
21
+ import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
19
22
  import { SubAgentMessageQueue } from './sub-agent-message-queue.service.js';
20
23
  /**
21
24
  * The note for one surfaced owner message (English harness text). The queued
@@ -24,9 +27,10 @@ import { SubAgentMessageQueue } from './sub-agent-message-queue.service.js';
24
27
  *
25
28
  * @param message - The surfaced message
26
29
  * @param maxChars - Ceiling on the note's length
30
+ * @param options - Overflow writer (default: a file under CREWLY_HOME)
27
31
  * @returns The note
28
32
  */
29
- export function buildOwnerHookNote(message, maxChars = OWNER_HOOK_MESSAGE_CONSTANTS.MAX_CONTEXT_CHARS) {
33
+ export function buildOwnerHookNote(message, maxChars = OWNER_HOOK_MESSAGE_CONSTANTS.MAX_CONTEXT_CHARS, options = {}) {
30
34
  const C = OWNER_HOOK_MESSAGE_CONSTANTS;
31
35
  // Drive mode (specs/2026-10-09-drive-mode-v3.md §4): the owner is listening
32
36
  // on the phone; a quick ack now beats a full answer later.
@@ -41,33 +45,168 @@ export function buildOwnerHookNote(message, maxChars = OWNER_HOOK_MESSAGE_CONSTA
41
45
  'Answer it now, in the conversation it came from, before your next step of the current work; then carry on with that work.';
42
46
  const sep = '\n\n';
43
47
  const room = maxChars - head.length - sep.length;
44
- return `${head}${sep}${fitKeepingNewest(message.data, room)}`;
48
+ return `${head}${sep}${fitKeepingNewest(message.data, room, options.overflow ?? defaultOverflowWriter('owner-message'))}`;
45
49
  }
46
50
  /**
47
- * Fit a queued message into `room` characters, keeping what the agent needs
48
- * to act on: its first block (`[CHAT:…]` header — where it came from) and
49
- * its end (the newest thread lines, the message itself, how to reply). The
50
- * older middle is cut and the cut is said.
51
+ * Fit a queued owner message into `room` characters. The owner's own text
52
+ * is never cut (message-routing audit 2026-10-18, R0): what gives way is,
53
+ * in order, the reply instructions after the `---` line (down to their
54
+ * start, which holds the reply command) and the older thread context (its
55
+ * newest lines are kept). When the owner's text alone is still too long, it
56
+ * is written in full to a file and the note quotes its start and points to
57
+ * the file.
51
58
  *
52
- * The end used to be cut instead. A 13.5k-char thread prompt lost its newest
53
- * posts and the owner's ping itself, so the agent saw only the thread's old
54
- * topics and answered something else (2026-10-08, #content-team).
59
+ * History: the end used to be cut, and a 13.5k-char thread prompt lost its
60
+ * newest posts and the owner's ping (2026-10-08, #content-team). Then the
61
+ * middle was cut, and with long reply instructions the cut took the owner's
62
+ * question just before them: the agent said the message arrived empty
63
+ * (2026-10-18, #awesome-videos, I1–I5).
55
64
  *
56
65
  * @param data - The queued text
57
66
  * @param room - Characters available
58
- * @returns The text, whole or cut in the middle
67
+ * @param overflow - Writes the full text when the owner's text cannot fit
68
+ * @returns The text, whole or fitted
59
69
  */
60
- export function fitKeepingNewest(data, room) {
70
+ export function fitKeepingNewest(data, room, overflow) {
61
71
  if (data.length <= room)
62
72
  return data;
63
- const marker = '\n… (older part cut here to fit; the newest lines, the message itself and how to reply follow; read the full thread in its conversation before you answer)\n';
73
+ const split = data.lastIndexOf(REPLY_TAIL_SEPARATOR);
74
+ const body = split > 0 ? data.slice(0, split) : data;
75
+ const fullTail = split > 0 ? data.slice(split) : '';
76
+ const { lead, context, message } = splitOwnerMessage(body);
77
+ // 1. The reply instructions: at most their share of the room, and less
78
+ // when the owner's text needs it (never below their opening).
79
+ const minTail = Math.min(fullTail.length, MIN_TAIL_CHARS);
80
+ const fixed = lead.length + message.length;
81
+ const tailRoom = Math.max(minTail, Math.min(Math.floor(room * REPLY_TAIL_SHARE), room - fixed - CONTEXT_CUT_MARKER.length));
82
+ const tail = cutTail(fullTail, tailRoom);
83
+ // 2. The thread context: its newest lines, in whatever room is left.
84
+ const contextRoom = room - fixed - tail.length;
85
+ if (contextRoom >= 0)
86
+ return `${lead}${fitContext(context, contextRoom)}${message}${tail}`;
87
+ // 3. The owner's text alone does not fit: point to it in full.
88
+ const file = overflow ? safeWrite(overflow, data) : null;
89
+ if (file) {
90
+ const open = `\n[The owner's message is ${message.trim().length} characters, too long to show here. Its start:]\n`;
91
+ const close = `\n[… Read the whole message, with its thread, before you answer: ${file}]\n`;
92
+ // The pointer always fits; the preview and the reply command share the rest.
93
+ const spare = Math.max(0, room - lead.length - open.length - close.length);
94
+ const previewChars = Math.min(OWNER_HOOK_MESSAGE_CONSTANTS.OVERFLOW_PREVIEW_CHARS, Math.max(0, spare - Math.min(fullTail.length, MIN_TAIL_CHARS)));
95
+ const pointer = `${open}${message.trim().slice(0, previewChars)}${close}`;
96
+ return `${lead}${pointer}${cutTail(fullTail, Math.max(0, room - lead.length - pointer.length))}`;
97
+ }
98
+ // No file: the old middle cut, and it says the owner's text was cut.
99
+ return fitBody(data, room);
100
+ }
101
+ /** Line that opens the reply instructions in a queued chat message */
102
+ const REPLY_TAIL_SEPARATOR = '\n---\n';
103
+ /** Most of the room the reply instructions may take when the message is cut */
104
+ const REPLY_TAIL_SHARE = 0.35;
105
+ /** The opening of the reply instructions (the reply command) is kept at least this long */
106
+ const MIN_TAIL_CHARS = 400;
107
+ /** Said where the reply instructions were cut */
108
+ const TAIL_CUT_MARKER = '\n… (rest of the reply instructions cut to fit)';
109
+ /** Said where the older thread context was cut */
110
+ const CONTEXT_CUT_MARKER = '\n… (older thread lines cut here to fit; the newest ones and the owner\'s message follow in full)\n';
111
+ /** Lines that close the thread context; the owner's message follows them */
112
+ const CONTEXT_END_RE = /\n\[end of (?:Slack (?:thread|channel context)|context-only messages)[^\n]*\]/g;
113
+ /**
114
+ * Split a queued text into its header (where it came from), the thread
115
+ * context, and the owner's own message (after the last context-closing
116
+ * line; the whole text after the header when there is none).
117
+ *
118
+ * @param body - The queued text without its reply instructions
119
+ * @returns The three parts (concatenated, they are `body`)
120
+ */
121
+ export function splitOwnerMessage(body) {
122
+ let contextEnd = -1;
123
+ for (const m of body.matchAll(CONTEXT_END_RE))
124
+ contextEnd = (m.index ?? 0) + m[0].length;
125
+ const firstBreak = body.indexOf('\n\n');
126
+ const leadEnd = firstBreak > 0 && (contextEnd < 0 || firstBreak < contextEnd) ? firstBreak : 0;
127
+ if (contextEnd < 0)
128
+ return { lead: body.slice(0, leadEnd), context: '', message: body.slice(leadEnd) };
129
+ return { lead: body.slice(0, leadEnd), context: body.slice(leadEnd, contextEnd), message: body.slice(contextEnd) };
130
+ }
131
+ /**
132
+ * The reply instructions within `room`: whole, or their start and a marker.
133
+ *
134
+ * @param tail - Instructions (from the `---` line)
135
+ * @param room - Characters available
136
+ * @returns The fitted instructions
137
+ */
138
+ function cutTail(tail, room) {
139
+ if (tail.length <= room)
140
+ return tail;
141
+ return `${tail.slice(0, Math.max(0, room - TAIL_CUT_MARKER.length))}${TAIL_CUT_MARKER}`.slice(0, Math.max(0, room));
142
+ }
143
+ /**
144
+ * The thread context within `room`: whole, or its newest lines after a marker.
145
+ *
146
+ * @param context - Thread context
147
+ * @param room - Characters available
148
+ * @returns The fitted context
149
+ */
150
+ function fitContext(context, room) {
151
+ if (context.length <= room)
152
+ return context;
153
+ if (room <= CONTEXT_CUT_MARKER.length)
154
+ return '';
155
+ let start = context.length - (room - CONTEXT_CUT_MARKER.length);
156
+ const nl = context.indexOf('\n', start);
157
+ if (nl >= 0 && nl - start < 200 && nl + 1 < context.length)
158
+ start = nl + 1;
159
+ return `${CONTEXT_CUT_MARKER}${context.slice(start)}`;
160
+ }
161
+ /**
162
+ * Run an overflow writer, never throwing.
163
+ *
164
+ * @param write - The writer
165
+ * @param text - Full text
166
+ * @returns Its path, or null
167
+ */
168
+ function safeWrite(write, text) {
169
+ try {
170
+ return write(text);
171
+ }
172
+ catch {
173
+ return null;
174
+ }
175
+ }
176
+ /**
177
+ * The default overflow writer: `<CREWLY_HOME>/runtime/owner-messages/<label>-<ts>.md`.
178
+ *
179
+ * @param label - File name prefix (the agent's session)
180
+ * @returns The writer
181
+ */
182
+ export function defaultOverflowWriter(label) {
183
+ return (fullText) => {
184
+ const dir = path.join(getCrewlyHomePath(), OWNER_HOOK_MESSAGE_CONSTANTS.OVERFLOW_DIR);
185
+ fs.mkdirSync(dir, { recursive: true });
186
+ const safe = label.replace(/[^A-Za-z0-9_-]/g, '_').slice(0, 80) || 'owner-message';
187
+ const file = path.join(dir, `${safe}-${Date.now()}.md`);
188
+ fs.writeFileSync(file, fullText, 'utf8');
189
+ return file;
190
+ };
191
+ }
192
+ /**
193
+ * Last resort when the full text cannot be written: cut the older middle,
194
+ * keeping the first block and the end, and say the owner's text was cut.
195
+ *
196
+ * @param data - The text
197
+ * @param room - Characters available
198
+ * @returns The text, cut in the middle
199
+ */
200
+ function fitBody(data, room) {
201
+ if (data.length <= room)
202
+ return data;
203
+ const marker = '\n… (cut here to fit — the owner\'s message may be incomplete; read it in full in its conversation before you answer)\n';
64
204
  if (room <= marker.length + 20)
65
205
  return data.slice(data.length - Math.max(0, room));
66
206
  const firstBreak = data.indexOf('\n\n');
67
207
  const lead = firstBreak > 0 && firstBreak <= Math.floor(room / 4) ? data.slice(0, firstBreak) : '';
68
208
  const keep = room - lead.length - marker.length;
69
209
  let start = data.length - keep;
70
- // Start the kept end on a whole line when one begins soon.
71
210
  const nl = data.indexOf('\n', start);
72
211
  if (nl >= 0 && nl - start < 200 && nl + 1 < data.length)
73
212
  start = nl + 1;
@@ -81,36 +220,71 @@ export function fitKeepingNewest(data, room) {
81
220
  * @param sessionName - The agent
82
221
  * @param env - Environment (kill switch)
83
222
  * @param queue - The message queue
223
+ * @param maxChars - Room for the note (what the other notes of this hook call leave)
224
+ * @param overflow - Where an owner message too long for the note is written in full
84
225
  * @returns The note, or null
85
226
  */
86
- export function ownerHookNoteFor(sessionName, env = process.env, queue = SubAgentMessageQueue.getInstance()) {
227
+ export function ownerHookNoteFor(sessionName, env = process.env, queue = SubAgentMessageQueue.getInstance(), maxChars = OWNER_HOOK_MESSAGE_CONSTANTS.MAX_CONTEXT_CHARS, overflow = defaultOverflowWriter(sessionName)) {
87
228
  const C = OWNER_HOOK_MESSAGE_CONSTANTS;
88
229
  if (env[C.KILL_SWITCH_ENV] === C.KILL_SWITCH_OFF_VALUE)
89
230
  return null;
90
231
  const message = queue.takeOwnerMessageForHook(sessionName);
91
- return message ? buildOwnerHookNote(message) : null;
232
+ return message ? buildOwnerHookNote(message, maxChars, { overflow }) : null;
92
233
  }
93
234
  /**
94
- * Join the notes for one hook response, owner message first, within the
95
- * size ceiling (a later note that does not fit is dropped, not cut).
235
+ * Join the notes for one hook response, in priority order, within the size
236
+ * ceiling. Nothing goes silently (message-routing audit 2026-10-18): a note
237
+ * that does not fit is dropped and the result says how many were, and a
238
+ * first note longer than the ceiling is cut with a marker. Owner notes are
239
+ * built to fit their room ({@link ownerHookNoteFor}'s `maxChars`), so they
240
+ * are never cut here.
96
241
  *
97
242
  * @param notes - Notes in priority order (nulls skipped)
98
243
  * @param maxChars - Ceiling
99
244
  * @returns The joined text, or null when there is none
100
245
  */
101
246
  export function joinHookNotes(notes, maxChars = OWNER_HOOK_MESSAGE_CONSTANTS.MAX_CONTEXT_CHARS) {
247
+ const present = notes.filter((n) => !!n);
248
+ const reserve = HOOK_NOTE_JOIN_RESERVE;
102
249
  let out = '';
103
- for (const note of notes) {
104
- if (!note)
105
- continue;
250
+ const dropped = [];
251
+ for (const [i, note] of present.entries()) {
252
+ const last = i === present.length - 1;
253
+ // Keep room for the "dropped" line unless nothing can follow.
254
+ const limit = last && dropped.length === 0 ? maxChars : maxChars - reserve;
106
255
  const next = out ? `${out}\n\n${note}` : note;
107
- if (next.length > maxChars) {
256
+ if (next.length > limit) {
108
257
  if (!out)
109
- out = note.slice(0, maxChars);
258
+ out = `${note.slice(0, Math.max(0, limit - NOTE_CUT_MARKER.length))}${NOTE_CUT_MARKER}`;
259
+ else
260
+ dropped.push(note);
110
261
  continue;
111
262
  }
112
263
  out = next;
113
264
  }
265
+ if (dropped.length > 0)
266
+ out = `${out}\n\n${droppedNotice(dropped)}`;
114
267
  return out || null;
115
268
  }
269
+ /** Said at the end of a cut note */
270
+ const NOTE_CUT_MARKER = '\n… (note cut to fit)';
271
+ /** Room kept for the line that names the notes left out */
272
+ const DROPPED_NOTICE_ROOM = 200;
273
+ /**
274
+ * Room {@link joinHookNotes} keeps after a note that is not the last, for
275
+ * the line naming notes left out. A note built to go first takes at most
276
+ * the ceiling less this.
277
+ */
278
+ export const HOOK_NOTE_JOIN_RESERVE = DROPPED_NOTICE_ROOM + 2;
279
+ /**
280
+ * The line that says which notes were left out (their openings).
281
+ *
282
+ * @param dropped - Notes left out
283
+ * @returns The line, at most {@link DROPPED_NOTICE_ROOM} characters
284
+ */
285
+ function droppedNotice(dropped) {
286
+ const n = dropped.length;
287
+ const openings = dropped.map((d) => d.replace(/\s+/g, ' ').trim().slice(0, 60)).join(' | ');
288
+ return `[Left out to fit: ${n} more Crewly note${n === 1 ? '' : 's'} — ${openings}]`.slice(0, DROPPED_NOTICE_ROOM);
289
+ }
116
290
  //# sourceMappingURL=owner-hook-message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"owner-hook-message.js","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/owner-hook-message.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAA6B,MAAM,sCAAsC,CAAC;AAEvG;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA6B,EAAE,WAAmB,4BAA4B,CAAC,iBAAiB;IAClI,MAAM,CAAC,GAAG,4BAA4B,CAAC;IACvC,4EAA4E;IAC5E,2DAA2D;IAC3D,MAAM,KAAK,GAAG,+CAA+C,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,IAAI,GAAG,KAAK;QACjB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,+FAA+F;YACxG,iBAAiB,KAAK,wFAAwF,KAAK,kCAAkC;QACtJ,CAAC,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC;YACzB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,+GAA+G;gBACxH,4GAA4G;YAC7G,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,wEAAwE;gBACjF,2HAA2H,CAAC;IAC/H,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,MAAM,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IACjD,OAAO,GAAG,IAAI,GAAG,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAY;IAC1D,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,8JAA8J,CAAC;IAC9K,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACnF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,UAAU,GAAG,CAAC,IAAI,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnG,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IAC/B,2DAA2D;IAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;QAAE,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;IACxE,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC/B,WAAmB,EACnB,MAAyB,OAAO,CAAC,GAAG,EACpC,QAA8B,oBAAoB,CAAC,WAAW,EAAE;IAEhE,MAAM,CAAC,GAAG,4BAA4B,CAAC;IACvC,IAAI,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,qBAAqB;QAAE,OAAO,IAAI,CAAC;IACpE,MAAM,OAAO,GAAG,KAAK,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAC3D,OAAO,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,KAA+C,EAAE,WAAmB,4BAA4B,CAAC,iBAAiB;IAC/I,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG;gBAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACxC,SAAS;QACV,CAAC;QACD,GAAG,GAAG,IAAI,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,IAAI,IAAI,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"owner-hook-message.js","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/owner-hook-message.ts"],"names":[],"mappings":"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"}
@@ -381,14 +381,24 @@ export declare function setOwnerThreadSentinel(service: OwnerThreadSentinelServi
381
381
  * @param event - What happened
382
382
  */
383
383
  export declare function reportOwnerThreadBlocking(agent: string, event: SentinelEvent): void;
384
+ /** An agent's Slack post, as reported by {@link reportOwnerThreadAgentPost}. */
385
+ export type AgentSlackPost = SlackThreadRef & {
386
+ agent: string;
387
+ text: string;
388
+ interim?: boolean;
389
+ };
390
+ /**
391
+ * Listen to every agent Slack post made on this machine, with its author
392
+ * (crewly#1376: the owner completion report needs to know who posted).
393
+ *
394
+ * @param listener - Called once per post; must not throw (errors are swallowed)
395
+ * @returns Unsubscribe
396
+ */
397
+ export declare function onAgentSlackPost(listener: (post: AgentSlackPost) => void): () => void;
384
398
  /**
385
399
  * Report an agent's Slack post, if the sentinel runs. Never throws.
386
400
  *
387
401
  * @param input - Who, where, what
388
402
  */
389
- export declare function reportOwnerThreadAgentPost(input: SlackThreadRef & {
390
- agent: string;
391
- text: string;
392
- interim?: boolean;
393
- }): void;
403
+ export declare function reportOwnerThreadAgentPost(input: AgentSlackPost): void;
394
404
  //# sourceMappingURL=owner-thread-sentinel.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"owner-thread-sentinel.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/owner-thread-sentinel.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAQH,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wEAAwE;AACxE,MAAM,MAAM,aAAa;AACvB,wFAAwF;AACtF;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,cAAc,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE;AACzH,oFAAoF;GAClF;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE;AAChH,wDAAwD;GACtD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AAC9E,sEAAsE;GACpE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAC9C,sFAAsF;GACpF;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,cAAc,CAAA;CAAE;AACpE,2CAA2C;GACzC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAA;CAAE;AACxD,qCAAqC;GACnC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAC3C,mDAAmD;GACjD;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE;AAC5B,iGAAiG;GAC/F;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,GAAG,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAElF,0BAA0B;AAC1B,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7G,gDAAgD;IAChD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mDAAmD;IACnD,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzC,oFAAoF;IACpF,KAAK,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9D,4FAA4F;IAC5F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,sEAAsE;IACtE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,0BAA0B;AAC1B,MAAM,WAAW,uBAAuB;IACtC,mGAAmG;IACnG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,UAAU,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF,yFAAyF;IACzF,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,2DAA2D;IAC3D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,gFAAgF;IAChF,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACpE,+EAA+E;IAC/E,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5D,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACjD;AAED,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAkCD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAgBrE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAQlE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAErD;AAwBD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkC/E;AAwBD;;GAEG;AACH,qBAAa,0BAA0B;IASzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IARjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAAS;IAExB;;OAEG;gBAC0B,IAAI,EAAE,uBAAuB;IAK1D,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,MAAM;IAId,qCAAqC;IACrC,KAAK,IAAI,IAAI;IAMb,oCAAoC;IACpC,IAAI,IAAI,IAAI;IAKZ,8CAA8C;IAC9C,IAAI,IAAI,gBAAgB,EAAE;IAQ1B;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAU9E;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAiC5G;;;;;;;OAOG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAmDxE;;;;;;;OAOG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAWpC;;;;;;;;OAQG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAWjC;;;;;;;;;;;OAWG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAA0B,GAAG,OAAO;IAWjF;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAcvC;;;;;;OAMG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzC;;;;;;;OAOG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,GAAG,IAAI;IAgB9G;;;;;;OAMG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IASpD;;;;;OAKG;IACH,WAAW,IAAI,MAAM,EAAE;IASvB;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAiC7B,iGAAiG;YACnF,aAAa;IA4B3B,iFAAiF;YACnE,UAAU;IAkBxB,8CAA8C;YAChC,UAAU;IAwBxB,+CAA+C;YACjC,IAAI;IA8BlB,mDAAmD;IACnD,OAAO,CAAC,MAAM;IAuBd,2FAA2F;IAC3F,OAAO,CAAC,IAAI;IAgBZ,OAAO,CAAC,OAAO;IAaf,qFAAqF;IACrF,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,IAAI;CAkBb;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAGjE;AAuDD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,EAAE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,EAAE,CAQnI;AAQD,6EAA6E;AAC7E,wBAAgB,sBAAsB,IAAI,0BAA0B,GAAG,IAAI,CAE1E;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI,GAAG,IAAI,CAEvF;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAInF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAS3H"}
1
+ {"version":3,"file":"owner-thread-sentinel.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/owner-thread-sentinel.service.ts"],"names":[],"mappings":"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"}
@@ -870,6 +870,20 @@ export function reportOwnerThreadBlocking(agent, event) {
870
870
  return;
871
871
  void s.noteBlocking(agent, event).catch(() => undefined);
872
872
  }
873
+ const agentPostListeners = new Set();
874
+ /**
875
+ * Listen to every agent Slack post made on this machine, with its author
876
+ * (crewly#1376: the owner completion report needs to know who posted).
877
+ *
878
+ * @param listener - Called once per post; must not throw (errors are swallowed)
879
+ * @returns Unsubscribe
880
+ */
881
+ export function onAgentSlackPost(listener) {
882
+ agentPostListeners.add(listener);
883
+ return () => {
884
+ agentPostListeners.delete(listener);
885
+ };
886
+ }
873
887
  /**
874
888
  * Report an agent's Slack post, if the sentinel runs. Never throws.
875
889
  *
@@ -879,6 +893,14 @@ export function reportOwnerThreadAgentPost(input) {
879
893
  // The follow-through guard sees every agent post, including those in threads
880
894
  // the sentinel does not watch (a decision card's thread, 2026-10-10).
881
895
  reportAgentPostForFollowThrough({ agent: input.agent, text: input.text, ...(input.interim ? { interim: true } : {}) });
896
+ for (const listener of agentPostListeners) {
897
+ try {
898
+ listener(input);
899
+ }
900
+ catch {
901
+ /* best-effort */
902
+ }
903
+ }
882
904
  try {
883
905
  instance?.noteAgentPost(input);
884
906
  }