crewly 1.20.346 → 1.20.347

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 (47) hide show
  1. package/dist/backend/backend/src/constants.d.ts +30 -0
  2. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  3. package/dist/backend/backend/src/constants.js +30 -0
  4. package/dist/backend/backend/src/constants.js.map +1 -1
  5. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  6. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +25 -1
  7. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  8. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +5 -2
  9. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  10. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +8 -1
  11. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  12. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +5 -0
  13. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  14. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +3 -2
  15. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  16. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts +49 -0
  17. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
  18. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +107 -2
  19. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
  20. package/dist/backend/backend/src/services/orc/triggered-by.d.ts +62 -0
  21. package/dist/backend/backend/src/services/orc/triggered-by.d.ts.map +1 -0
  22. package/dist/backend/backend/src/services/orc/triggered-by.js +141 -0
  23. package/dist/backend/backend/src/services/orc/triggered-by.js.map +1 -0
  24. package/dist/backend/backend/src/services/trace/trace-context.service.d.ts.map +1 -1
  25. package/dist/backend/backend/src/services/trace/trace-context.service.js +20 -6
  26. package/dist/backend/backend/src/services/trace/trace-context.service.js.map +1 -1
  27. package/dist/backend/backend/src/services/trace/turn-trigger.d.ts +141 -0
  28. package/dist/backend/backend/src/services/trace/turn-trigger.d.ts.map +1 -0
  29. package/dist/backend/backend/src/services/trace/turn-trigger.js +258 -0
  30. package/dist/backend/backend/src/services/trace/turn-trigger.js.map +1 -0
  31. package/dist/backend/build-info.json +2 -2
  32. package/dist/cli/backend/src/constants.d.ts +30 -0
  33. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  34. package/dist/cli/backend/src/constants.js +30 -0
  35. package/dist/cli/backend/src/constants.js.map +1 -1
  36. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +5 -0
  37. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  38. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +3 -2
  39. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  40. package/dist/cli/backend/src/services/trace/trace-context.service.d.ts.map +1 -1
  41. package/dist/cli/backend/src/services/trace/trace-context.service.js +20 -6
  42. package/dist/cli/backend/src/services/trace/trace-context.service.js.map +1 -1
  43. package/dist/cli/backend/src/services/trace/turn-trigger.d.ts +141 -0
  44. package/dist/cli/backend/src/services/trace/turn-trigger.d.ts.map +1 -0
  45. package/dist/cli/backend/src/services/trace/turn-trigger.js +258 -0
  46. package/dist/cli/backend/src/services/trace/turn-trigger.js.map +1 -0
  47. package/package.json +1 -1
@@ -0,0 +1,258 @@
1
+ /**
2
+ * What started an agent's turn — the "trigger" of everything it posts from
3
+ * that turn (agent-provenance audit 2026-10-14).
4
+ *
5
+ * The harness writes every prompt into a turn (terminal `/write` and
6
+ * `/deliver`, `sendMessageToAgent`). Each delivery is classified here into a
7
+ * finer kind than {@link classifyDelivery} (which lumps restarts, reminders,
8
+ * app changes and agent-to-agent messages into `system`), with the sending
9
+ * agent when another agent wrote it. The last trigger of each session is kept
10
+ * in memory, so a reply posted from that turn can say why it exists.
11
+ *
12
+ * Agent-to-agent sends are noted when the sender's request arrives
13
+ * ({@link TurnTriggerTracker.noteSender}) and matched to the delivery by text,
14
+ * so a message queued while the target was busy keeps its sender.
15
+ *
16
+ * @module services/trace/turn-trigger
17
+ */
18
+ import { TURN_TRIGGER_CONSTANTS } from '../../constants.js';
19
+ import { parseInboundOrigin } from '../orc/orc-reply-route.service.js';
20
+ const C = TURN_TRIGGER_CONSTANTS;
21
+ /** Fine-grained kinds of what started a turn. */
22
+ export const TURN_TRIGGER_KINDS = [
23
+ 'owner_message',
24
+ 'agent_message',
25
+ 'dispatch',
26
+ 'redelivery',
27
+ 'follow_up',
28
+ 'owner_report_due',
29
+ 'follow_through',
30
+ 'stale_item',
31
+ 'decision',
32
+ 'restart',
33
+ 'scheduled',
34
+ 'app_change',
35
+ 'status',
36
+ 'system',
37
+ ];
38
+ /** Restart notice that wraps the interrupted message (SAFE_RESTART constants). */
39
+ const RESTART_RE = /^\s*Crewly restarted while you were working on\b/;
40
+ /** Header in a restart notice before the original message. */
41
+ const RESTART_ORIGINAL_RE = /\nThe message you were handling:\n([\s\S]*)$/;
42
+ /**
43
+ * Classify a delivered prompt.
44
+ *
45
+ * @param text - Exactly what was written into the turn
46
+ * @returns The trigger kind and the ids the prompt names
47
+ */
48
+ export function classifyTurnTrigger(text) {
49
+ const t = typeof text === 'string' ? text : '';
50
+ if (RESTART_RE.test(t) || /^\s*\[SYSTEM — TASK RECOVERY\]|\[RESTART_DRAIN\]|^\s*\[CHAT_RESUME\]/.test(t)) {
51
+ // A restart that re-delivers an owner message is still that message.
52
+ const original = RESTART_ORIGINAL_RE.exec(t)?.[1];
53
+ if (original) {
54
+ const inner = classifyTurnTrigger(original);
55
+ if (inner.triggerKind === 'owner_message' || inner.triggerKind === 'agent_message')
56
+ return inner;
57
+ }
58
+ return { triggerKind: 'restart', ...workItemOf(t) };
59
+ }
60
+ // An owner's chat message opens with its routing prefix; checked before
61
+ // the harness tags, which the owner's own text may quote.
62
+ const chat = parseInboundOrigin(t);
63
+ if (chat)
64
+ return { triggerKind: 'owner_message', conversationId: chat.conversationId };
65
+ if (/^\s*\[(?:OWNER MESSAGE\]|SLACK[A-Z_-]*[:\]]|REMOTE:)/.test(t))
66
+ return { triggerKind: 'owner_message' };
67
+ if (/\[TASK RE-DELIVERY\]|\[CREWLY-DISPATCH\] \d+ WorkItems? (?:is|are) still queued/.test(t))
68
+ return { triggerKind: 'redelivery', ...workItemOf(t) };
69
+ if (/\[TRIGGER WAKE\]|\[SCHEDULED\]|\[SCHEDULED CHECK-IN/.test(t))
70
+ return { triggerKind: 'scheduled', ...workItemOf(t) };
71
+ if (/\[CREWLY-DISPATCH\]|\[TASK ASSIGNMENT\]|^\s*\[TASK\]/.test(t))
72
+ return { triggerKind: 'dispatch', ...workItemOf(t) };
73
+ const followUp = /\[FOLLOW-UP\s+([A-Z][A-Z0-9]*-\d+)?/.exec(t);
74
+ if (followUp)
75
+ return { triggerKind: 'follow_up', ...(followUp[1] ? { ticket: followUp[1] } : {}) };
76
+ if (/\[OWNER REPORT DUE\b/.test(t))
77
+ return { triggerKind: 'owner_report_due', ...workItemOf(t) };
78
+ if (/\[FOLLOW-THROUGH\b/.test(t))
79
+ return { triggerKind: 'follow_through' };
80
+ if (/\[STALE ITEM\]/.test(t))
81
+ return { triggerKind: 'stale_item' };
82
+ const decision = /\[DECISIONS?\s*(D-\d+)?/.exec(t);
83
+ if (decision)
84
+ return { triggerKind: 'decision', ...(decision[1] ? { ticket: decision[1] } : {}) };
85
+ if (/\[APP CHANGES\]/.test(t))
86
+ return { triggerKind: 'app_change' };
87
+ if (/Agent status:|Status from \S+ \(reports to you\)|\[STATUS DIGEST\]|\[STATUS REPORT\]/.test(t))
88
+ return { triggerKind: 'status' };
89
+ return { triggerKind: 'system' };
90
+ }
91
+ /**
92
+ * The work item a prompt names.
93
+ *
94
+ * @param text - Prompt text
95
+ * @returns `{ workItemId }` or nothing
96
+ */
97
+ function workItemOf(text) {
98
+ const m = /WorkItem(?: ID)?:?\s+([A-Za-z0-9_-]{6,})/.exec(text);
99
+ return m ? { workItemId: m[1] } : {};
100
+ }
101
+ /** Recognisable start of a text (whitespace collapsed). */
102
+ function fingerprint(text) {
103
+ return text.replace(/\s+/g, ' ').trim().slice(0, C.SENDER_MATCH_CHARS);
104
+ }
105
+ /**
106
+ * Last trigger of each session. Singleton (see {@link getTurnTriggerTracker}).
107
+ */
108
+ export class TurnTriggerTracker {
109
+ current = new Map();
110
+ sends = new Map();
111
+ /** Per session: conversation id → when the owner last wrote to it there */
112
+ ownerAsks = new Map();
113
+ /**
114
+ * Note that `sender` asked to write `text` to `target` (the terminal write
115
+ * route, before delivery or queueing).
116
+ *
117
+ * @param target - Receiving session
118
+ * @param text - Message text
119
+ * @param sender - Sending agent session
120
+ * @param now - Clock (epoch ms)
121
+ */
122
+ noteSender(target, text, sender, now = Date.now()) {
123
+ if (!target || !sender || sender === target || typeof text !== 'string')
124
+ return;
125
+ if (!C.AGENT_SESSION_PATTERN.test(sender))
126
+ return;
127
+ const key = fingerprint(text);
128
+ if (!key)
129
+ return;
130
+ const list = (this.sends.get(target) ?? []).filter((s) => now - s.at < C.SENDER_MATCH_MS);
131
+ list.push({ sender, key, at: now });
132
+ this.sends.set(target, list.slice(-C.MAX_SENDERS_PER_TARGET));
133
+ }
134
+ /**
135
+ * Record what started `session`'s turn.
136
+ *
137
+ * @param session - Agent session written to
138
+ * @param text - Exactly what was delivered
139
+ * @param opts - Trace the delivery joined; sender when the caller knows it
140
+ * @param now - Clock (epoch ms)
141
+ * @returns The recorded trigger
142
+ */
143
+ noteDelivery(session, text, opts = {}, now = Date.now()) {
144
+ const classified = classifyTurnTrigger(text);
145
+ const sender = opts.sender || this.takeSender(session, text, now);
146
+ const base = sender && (classified.triggerKind === 'system' || classified.triggerKind === 'status')
147
+ ? { triggerKind: 'agent_message' }
148
+ : classified;
149
+ let trigger;
150
+ if (base.triggerKind === 'agent_message' && sender) {
151
+ const up = this.trigger(sender, now);
152
+ const via = [...(up?.viaAgents ?? []), sender].filter((s, i, a) => a.indexOf(s) === i).slice(-C.MAX_VIA_AGENTS);
153
+ trigger = {
154
+ ...base,
155
+ sender,
156
+ rootKind: up ? up.rootKind : 'agent_message',
157
+ ...(up?.rootRef ? { rootRef: up.rootRef } : {}),
158
+ viaAgents: via,
159
+ at: now,
160
+ };
161
+ }
162
+ else {
163
+ const rootRef = base.conversationId ?? base.workItemId ?? base.ticket;
164
+ trigger = { ...base, rootKind: base.triggerKind, ...(rootRef ? { rootRef } : {}), viaAgents: [], at: now };
165
+ }
166
+ if (opts.traceId)
167
+ trigger.traceId = opts.traceId;
168
+ if (session)
169
+ this.current.set(session, trigger);
170
+ if (session && trigger.triggerKind === 'owner_message' && trigger.conversationId) {
171
+ const asks = this.ownerAsks.get(session) ?? new Map();
172
+ asks.set(trigger.conversationId, now);
173
+ this.ownerAsks.set(session, asks);
174
+ }
175
+ return trigger;
176
+ }
177
+ /**
178
+ * Whether the owner wrote to `session` in `conversationId` recently — a
179
+ * post there is then an answer to the owner, whatever came in since (a
180
+ * reminder delivered mid-turn must not relabel it).
181
+ *
182
+ * @param session - Agent session
183
+ * @param conversationId - Conversation posted to
184
+ * @param now - Clock (epoch ms)
185
+ * @returns True within {@link TURN_TRIGGER_CONSTANTS.OWNER_ANSWER_WINDOW_MS}
186
+ */
187
+ ownerAskedRecently(session, conversationId, now = Date.now()) {
188
+ const at = this.ownerAsks.get(session)?.get(conversationId);
189
+ return at !== undefined && now - at <= C.OWNER_ANSWER_WINDOW_MS;
190
+ }
191
+ /**
192
+ * The trigger of `session`'s current turn, while fresh.
193
+ *
194
+ * @param session - Agent session
195
+ * @param now - Clock (epoch ms)
196
+ * @returns The trigger, or null
197
+ */
198
+ trigger(session, now = Date.now()) {
199
+ const t = session ? this.current.get(session) : undefined;
200
+ if (!t)
201
+ return null;
202
+ if (now - t.at > C.FRESH_MS) {
203
+ this.current.delete(session);
204
+ return null;
205
+ }
206
+ return t;
207
+ }
208
+ /** Forget everything (tests). */
209
+ reset() {
210
+ this.current.clear();
211
+ this.sends.clear();
212
+ this.ownerAsks.clear();
213
+ }
214
+ /**
215
+ * The sender of a noted send whose text the delivery contains (consumed).
216
+ *
217
+ * @param target - Receiving session
218
+ * @param text - Delivered text
219
+ * @param now - Clock
220
+ * @returns Sender session, or undefined
221
+ */
222
+ takeSender(target, text, now) {
223
+ const list = this.sends.get(target);
224
+ if (!list?.length)
225
+ return undefined;
226
+ const whole = text.replace(/\s+/g, ' ');
227
+ for (let i = list.length - 1; i >= 0; i--) {
228
+ const s = list[i];
229
+ if (now - s.at >= C.SENDER_MATCH_MS)
230
+ continue;
231
+ if (whole.includes(s.key)) {
232
+ list.splice(i, 1);
233
+ return s.sender;
234
+ }
235
+ }
236
+ return undefined;
237
+ }
238
+ }
239
+ let instance = null;
240
+ /**
241
+ * The process-wide tracker.
242
+ *
243
+ * @returns The singleton
244
+ */
245
+ export function getTurnTriggerTracker() {
246
+ if (!instance)
247
+ instance = new TurnTriggerTracker();
248
+ return instance;
249
+ }
250
+ /**
251
+ * Replace the singleton (tests).
252
+ *
253
+ * @param tracker - Replacement, or null to drop it
254
+ */
255
+ export function setTurnTriggerTrackerForTesting(tracker) {
256
+ instance = tracker;
257
+ }
258
+ //# sourceMappingURL=turn-trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-trigger.js","sourceRoot":"","sources":["../../../../../../backend/src/services/trace/turn-trigger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crewly",
3
- "version": "1.20.346",
3
+ "version": "1.20.347",
4
4
  "type": "module",
5
5
  "description": "Multi-agent orchestration platform for AI coding teams — coordinates Claude Code, Gemini CLI, and Codex agents with a real-time web dashboard",
6
6
  "workspaces": [