crewly 1.20.181 → 1.20.183
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.
- package/config/roles/orchestrator/prompt.md +4 -0
- package/config/skills/agent/core/report-status/execute.sh +4 -2
- package/dist/backend/backend/src/constants.d.ts +101 -1
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +110 -1
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js +22 -1
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +25 -24
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +15 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts +11 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +44 -9
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-terms.controller.d.ts +31 -0
- package/dist/backend/backend/src/controllers/system/runtime-terms.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/system/runtime-terms.controller.js +99 -0
- package/dist/backend/backend/src/controllers/system/runtime-terms.controller.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +4 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/modules/system.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/modules/system.routes.js +3 -0
- package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.js +5 -0
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-card.d.ts +14 -4
- package/dist/backend/backend/src/services/decisions/decision-card.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-card.js +31 -10
- package/dist/backend/backend/src/services/decisions/decision-card.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts +40 -2
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.js +100 -8
- package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.js +7 -0
- package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts +2 -1
- package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/message-queue.service.js +6 -3
- package/dist/backend/backend/src/services/messaging/message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +6 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +3 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +7 -4
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts +110 -0
- package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js +229 -0
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -0
- package/dist/backend/backend/src/services/orc/orc-status-routing.d.ts +108 -0
- package/dist/backend/backend/src/services/orc/orc-status-routing.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orc/orc-status-routing.js +145 -0
- package/dist/backend/backend/src/services/orc/orc-status-routing.js.map +1 -0
- package/dist/backend/backend/src/services/orc/orc-wake-counter.d.ts +86 -0
- package/dist/backend/backend/src/services/orc/orc-wake-counter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orc/orc-wake-counter.js +130 -0
- package/dist/backend/backend/src/services/orc/orc-wake-counter.js.map +1 -0
- package/dist/backend/backend/src/services/orc/work-item-destination.d.ts +33 -0
- package/dist/backend/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/work-item-destination.js +49 -0
- package/dist/backend/backend/src/services/orc/work-item-destination.js.map +1 -1
- package/dist/backend/backend/src/services/orc/work-item-destination.wiring.d.ts +2 -1
- package/dist/backend/backend/src/services/orc/work-item-destination.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/work-item-destination.wiring.js +10 -4
- package/dist/backend/backend/src/services/orc/work-item-destination.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts +8 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js +5 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +2 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +4 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +2 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +3 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts +15 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.js +13 -2
- package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-driver.d.ts +92 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-driver.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-driver.js +199 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-driver.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-screens.d.ts +79 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-screens.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-screens.js +145 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-screens.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/fake-agy-tui.fixture.d.ts +75 -0
- package/dist/backend/backend/src/services/runtime-terms/fake-agy-tui.fixture.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/fake-agy-tui.fixture.js +218 -0
- package/dist/backend/backend/src/services/runtime-terms/fake-agy-tui.fixture.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms-consent.service.d.ts +245 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms-consent.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms-consent.service.js +428 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms-consent.service.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.store.d.ts +67 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.store.js +78 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.store.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.wiring.d.ts +39 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.wiring.js +161 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +16 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +31 -8
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.js +2 -0
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +23 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +61 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/types/decision.types.d.ts +29 -5
- package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +101 -1
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +110 -1
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.js +5 -0
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-card.d.ts +165 -0
- package/dist/cli/backend/src/services/decisions/decision-card.d.ts.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-card.js +358 -0
- package/dist/cli/backend/src/services/decisions/decision-card.js.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-contract.d.ts +83 -0
- package/dist/cli/backend/src/services/decisions/decision-contract.d.ts.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-contract.js +226 -0
- package/dist/cli/backend/src/services/decisions/decision-contract.js.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-store.d.ts +80 -0
- package/dist/cli/backend/src/services/decisions/decision-store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-store.js +151 -0
- package/dist/cli/backend/src/services/decisions/decision-store.js.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts +376 -0
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision.service.js +821 -0
- package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -0
- package/dist/cli/backend/src/services/decisions/ticket-thread-store.d.ts +97 -0
- package/dist/cli/backend/src/services/decisions/ticket-thread-store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/decisions/ticket-thread-store.js +137 -0
- package/dist/cli/backend/src/services/decisions/ticket-thread-store.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/message-queue.service.d.ts +2 -1
- package/dist/cli/backend/src/services/messaging/message-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/message-queue.service.js +6 -3
- package/dist/cli/backend/src/services/messaging/message-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js +6 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +3 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +7 -4
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
- package/dist/cli/backend/src/services/orc/orc-status-routing.d.ts +108 -0
- package/dist/cli/backend/src/services/orc/orc-status-routing.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orc/orc-status-routing.js +145 -0
- package/dist/cli/backend/src/services/orc/orc-status-routing.js.map +1 -0
- package/dist/cli/backend/src/services/orc/orc-wake-counter.d.ts +86 -0
- package/dist/cli/backend/src/services/orc/orc-wake-counter.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orc/orc-wake-counter.js +130 -0
- package/dist/cli/backend/src/services/orc/orc-wake-counter.js.map +1 -0
- package/dist/cli/backend/src/services/orc/work-item-destination.d.ts +198 -0
- package/dist/cli/backend/src/services/orc/work-item-destination.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orc/work-item-destination.js +288 -0
- package/dist/cli/backend/src/services/orc/work-item-destination.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +136 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js +152 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts +217 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-smoke-test.service.js +430 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-smoke-test.service.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-driver.d.ts +92 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-driver.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-driver.js +199 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-driver.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-screens.d.ts +79 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-screens.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-screens.js +145 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-screens.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms-consent.service.d.ts +245 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms-consent.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms-consent.service.js +428 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms-consent.service.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms.store.d.ts +67 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms.store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms.store.js +78 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms.store.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +16 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +31 -8
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +23 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +61 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/types/decision.types.d.ts +192 -0
- package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/decision.types.js +13 -0
- package/dist/cli/backend/src/types/decision.types.js.map +1 -0
- package/dist/cli/cli/src/commands/harness-setup.js +2 -2
- package/frontend/dist/assets/{index-4271e95e.js → index-9c91de50.js} +138 -138
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -143,6 +143,8 @@ export declare class OrcDeliveryEnforcerService {
|
|
|
143
143
|
* status to a slack-prefixed conversation. Safe to call multiple times
|
|
144
144
|
* for the same thread — the most recent agent message wins (we
|
|
145
145
|
* surface only the latest deliverable summary in the reminder).
|
|
146
|
+
*
|
|
147
|
+
* @returns True when a pending delivery is now tracked (the orchestrator owes the owner this)
|
|
146
148
|
*/
|
|
147
149
|
markPendingDelivery(input: {
|
|
148
150
|
conversationId: string;
|
|
@@ -150,7 +152,7 @@ export declare class OrcDeliveryEnforcerService {
|
|
|
150
152
|
text: string;
|
|
151
153
|
/** Injectable clock (tests). */
|
|
152
154
|
now?: number;
|
|
153
|
-
}):
|
|
155
|
+
}): boolean;
|
|
154
156
|
/**
|
|
155
157
|
* Call this from `slack.controller` after a successful `/api/slack/send`.
|
|
156
158
|
* Cleared regardless of which agent originated the underlying deliverable.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orc-delivery-enforcer.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/orc/orc-delivery-enforcer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAcH;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,QAAsB,CAAC;AAK3D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,cAAc,CAAC;IACpB,wFAAwF;IACxF,cAAc,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,KAAK,IAAI,CAAC;AAEX;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,+EAA+E;IAC/E,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qEAAqE;IACrE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,cAAc,GAAG,IAAI,CAAC;AAEpF,MAAM,WAAW,0BAA0B;IACzC,2EAA2E;IAC3E,YAAY,EAAE,oBAAoB,CAAC;IACnC,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACjD;AAED;;GAEG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA2C;IAClE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAgC;IACvE,OAAO,CAAC,KAAK,CAA+B;IAC5C,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;gBAElD,IAAI,EAAE,0BAA0B;IAO5C,MAAM,CAAC,WAAW,IAAI,0BAA0B,GAAG,IAAI;IAIvD,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,0BAA0B,GAAG,IAAI,GAAG,IAAI;IAKjE,2CAA2C;IAC3C,KAAK,IAAI,IAAI;IAUb,IAAI,IAAI,IAAI;IAQZ
|
|
1
|
+
{"version":3,"file":"orc-delivery-enforcer.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/orc/orc-delivery-enforcer.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -123,10 +123,12 @@ export class OrcDeliveryEnforcerService {
|
|
|
123
123
|
* status to a slack-prefixed conversation. Safe to call multiple times
|
|
124
124
|
* for the same thread — the most recent agent message wins (we
|
|
125
125
|
* surface only the latest deliverable summary in the reminder).
|
|
126
|
+
*
|
|
127
|
+
* @returns True when a pending delivery is now tracked (the orchestrator owes the owner this)
|
|
126
128
|
*/
|
|
127
129
|
markPendingDelivery(input) {
|
|
128
130
|
if (!isAgentDeliveryMarker(input.text))
|
|
129
|
-
return;
|
|
131
|
+
return false;
|
|
130
132
|
// The orchestrator is the deliverer, never the source. Its own
|
|
131
133
|
// `[DONE] Agent crewly-orc: …` status report is bookkeeping about work
|
|
132
134
|
// it already did; treating it as an undelivered deliverable made the
|
|
@@ -137,11 +139,11 @@ export class OrcDeliveryEnforcerService {
|
|
|
137
139
|
this.logger.debug('OrcDeliveryEnforcer ignoring orchestrator self-report', {
|
|
138
140
|
conversationId: input.conversationId,
|
|
139
141
|
});
|
|
140
|
-
return;
|
|
142
|
+
return false;
|
|
141
143
|
}
|
|
142
144
|
const key = parseSlackConversationId(input.conversationId);
|
|
143
145
|
if (!key)
|
|
144
|
-
return; // not a slack thread — ignore
|
|
146
|
+
return false; // not a slack thread — ignore
|
|
145
147
|
const k = serializeKey(key);
|
|
146
148
|
const now = input.now ?? Date.now();
|
|
147
149
|
// Issue #731: a [DONE] can NAME a thread the owner stopped talking in
|
|
@@ -156,7 +158,7 @@ export class OrcDeliveryEnforcerService {
|
|
|
156
158
|
lastOwnerMessageAt: activity.lastOwnerMessageAt,
|
|
157
159
|
staleAfterHours: STALE_THREAD_MAX_AGE_MS / (60 * 60 * 1000),
|
|
158
160
|
});
|
|
159
|
-
return;
|
|
161
|
+
return false;
|
|
160
162
|
}
|
|
161
163
|
const summary = input.text.slice(0, 200);
|
|
162
164
|
this.pending.set(k, {
|
|
@@ -174,6 +176,7 @@ export class OrcDeliveryEnforcerService {
|
|
|
174
176
|
summaryPreview: summary.slice(0, 80),
|
|
175
177
|
firstReminderInSec: REMINDER_CADENCE_MS[0] / 1000,
|
|
176
178
|
});
|
|
179
|
+
return true;
|
|
177
180
|
}
|
|
178
181
|
/**
|
|
179
182
|
* Call this from `slack.controller` after a successful `/api/slack/send`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orc-delivery-enforcer.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/orc/orc-delivery-enforcer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,OAAO,EAAE,aAAa,EAAmB,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,2FAA2F;AAC3F,MAAM,mBAAmB,GAAG;IAC1B,CAAC,GAAG,EAAE,GAAG,IAAI;IACb,EAAE,GAAG,EAAE,GAAG,IAAI;IACd,EAAE,GAAG,EAAE,GAAG,IAAI;CACN,CAAC;AAEX,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3D,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AAiElE;;GAEG;AACH,MAAM,OAAO,0BAA0B;IAC7B,MAAM,CAAC,QAAQ,GAAsC,IAAI,CAAC;IACjD,MAAM,CAAkB;IACxB,YAAY,CAAuB;IACnC,cAAc,CAAS;IACvB,sBAAsB,CAAgC;IAC/D,KAAK,GAA0B,IAAI,CAAC;IAC5C,wCAAwC;IACvB,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE9D,YAAY,IAAgC;QAC1C,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;QACvF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,wBAAwB,CAAC;QACtE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAuC;QACxD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,2CAA2C;IAC3C,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;YAC9C,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,cAAc,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;SACtE,CAAC,CAAC;IACL,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"orc-delivery-enforcer.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/orc/orc-delivery-enforcer.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who an agent status report wakes (specs/2026-10-01-orc-status-wakes.md).
|
|
3
|
+
*
|
|
4
|
+
* Every `report-status` line used to be queued for the orchestrator. On
|
|
5
|
+
* 2026-09-29 that was 134 full-context orchestrator turns, almost all of them
|
|
6
|
+
* team members' [DONE] lines about work their own team lead owns and reviews.
|
|
7
|
+
* Now the report goes to whoever is responsible:
|
|
8
|
+
*
|
|
9
|
+
* | Report | Goes to |
|
|
10
|
+
* |---|---|
|
|
11
|
+
* | [IN_PROGRESS] [ACTIVE] [READY] [WORKING] [IDLE] … | recorded only |
|
|
12
|
+
* | [DONE] that a pending owner delivery is waiting for | orchestrator |
|
|
13
|
+
* | [DONE] on work the orchestrator delegated | orchestrator |
|
|
14
|
+
* | [DONE] on anyone else's work item | recorded (the lead's review path takes it) |
|
|
15
|
+
* | [DONE] with no work item | digest (actionable only without a lead) |
|
|
16
|
+
* | [BLOCKED] [FAILED] [ERROR] | the sender's lead; orchestrator when there is none or the lead sent it |
|
|
17
|
+
* | [MILESTONE] | orchestrator (it forwards milestones to the owner) |
|
|
18
|
+
* | other markers | digest (actionable only on orchestrator work or without a lead) |
|
|
19
|
+
* | no marker (an answer someone waits for) | orchestrator, as before |
|
|
20
|
+
*
|
|
21
|
+
* Pure functions only; {@link OrcStatusRouterService} carries out the plan.
|
|
22
|
+
*
|
|
23
|
+
* @module services/orc/orc-status-routing
|
|
24
|
+
*/
|
|
25
|
+
import type { WorkItem } from '../../types/v2/work-item.types.js';
|
|
26
|
+
/** Why the orchestrator is woken (the hourly counter's categories). */
|
|
27
|
+
export type OrcWakeCategory = 'owner' | 'delegated-done' | 'escalation' | 'digest' | 'other';
|
|
28
|
+
/** What happens to one status report. */
|
|
29
|
+
export type OrcStatusRoute =
|
|
30
|
+
/** Status store / UI / ticket log only */
|
|
31
|
+
{
|
|
32
|
+
action: 'record';
|
|
33
|
+
reason: string;
|
|
34
|
+
}
|
|
35
|
+
/** Wake the orchestrator now */
|
|
36
|
+
| {
|
|
37
|
+
action: 'orc';
|
|
38
|
+
category: Exclude<OrcWakeCategory, 'digest'>;
|
|
39
|
+
reason: string;
|
|
40
|
+
}
|
|
41
|
+
/** Hand it to the sender's team lead */
|
|
42
|
+
| {
|
|
43
|
+
action: 'team-lead';
|
|
44
|
+
lead: string;
|
|
45
|
+
reason: string;
|
|
46
|
+
}
|
|
47
|
+
/** Hold for the next digest; only actionable entries make a digest go out */
|
|
48
|
+
| {
|
|
49
|
+
action: 'digest';
|
|
50
|
+
actionable: boolean;
|
|
51
|
+
reason: string;
|
|
52
|
+
};
|
|
53
|
+
/** Inputs of {@link planOrcStatusRoute}. */
|
|
54
|
+
export interface OrcStatusRouteInput {
|
|
55
|
+
/** The report text (`[DONE] Agent x: …`) */
|
|
56
|
+
content: string;
|
|
57
|
+
/** Reporting agent session */
|
|
58
|
+
sender: string;
|
|
59
|
+
/** The work item the report is about, when known */
|
|
60
|
+
workItem: WorkItem | null;
|
|
61
|
+
/** The sender's lead (parent member, else team lead), never the sender itself */
|
|
62
|
+
lead: string | null;
|
|
63
|
+
/** True when the sender leads its own team (reason text only; a lead with a parent still reports up) */
|
|
64
|
+
senderIsLead: boolean;
|
|
65
|
+
/** True when the owner is waiting on the orchestrator to deliver this (OrcDeliveryEnforcer tracked it) */
|
|
66
|
+
deliveryOwed: boolean;
|
|
67
|
+
/** Orchestrator check for a session / name */
|
|
68
|
+
isOrchestrator: (name: string) => boolean;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The bracketed marker a report starts with, upper-cased.
|
|
72
|
+
*
|
|
73
|
+
* @param content - Report text
|
|
74
|
+
* @returns e.g. `DONE`, or null when the text has no leading marker
|
|
75
|
+
*/
|
|
76
|
+
export declare function statusMarkerOf(content: string): string | null;
|
|
77
|
+
/**
|
|
78
|
+
* Whether the orchestrator delegated (or created) a work item: its owner is
|
|
79
|
+
* the orchestrator, or the orchestrator stamped itself as the delegator.
|
|
80
|
+
*
|
|
81
|
+
* @param wi - Work item
|
|
82
|
+
* @param isOrchestrator - Orchestrator check
|
|
83
|
+
* @returns True for orchestrator work
|
|
84
|
+
*/
|
|
85
|
+
export declare function isOrcDelegated(wi: WorkItem, isOrchestrator: (name: string) => boolean): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* The work item a report is about: the one it names; else the sender's
|
|
88
|
+
* running/accepted item (newest); else the sender's most recently finished
|
|
89
|
+
* item, when it finished within {@link ORC_WAKE_CONSTANTS.RECENT_COMPLETION_MS}.
|
|
90
|
+
*
|
|
91
|
+
* `report-status` posts the line BEFORE it completes the item, so the
|
|
92
|
+
* running item is normally the answer.
|
|
93
|
+
*
|
|
94
|
+
* @param items - Pool items
|
|
95
|
+
* @param sender - Reporting agent
|
|
96
|
+
* @param workItemId - Id the report named, if any
|
|
97
|
+
* @param now - Clock (epoch ms)
|
|
98
|
+
* @returns The item, or null
|
|
99
|
+
*/
|
|
100
|
+
export declare function findStatusWorkItem(items: readonly WorkItem[], sender: string, workItemId: string | undefined, now: number): WorkItem | null;
|
|
101
|
+
/**
|
|
102
|
+
* Decide where one agent status report goes.
|
|
103
|
+
*
|
|
104
|
+
* @param input - Report, sender, its work item and lead
|
|
105
|
+
* @returns The route
|
|
106
|
+
*/
|
|
107
|
+
export declare function planOrcStatusRoute(input: OrcStatusRouteInput): OrcStatusRoute;
|
|
108
|
+
//# sourceMappingURL=orc-status-routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orc-status-routing.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/orc/orc-status-routing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAElE,uEAAuE;AACvE,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,gBAAgB,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7F,yCAAyC;AACzC,MAAM,MAAM,cAAc;AACxB,0CAA0C;AACxC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACtC,gCAAgC;GAC9B;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACjF,wCAAwC;GACtC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACvD,6EAA6E;GAC3E;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,iFAAiF;IACjF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,wGAAwG;IACxG,YAAY,EAAE,OAAO,CAAC;IACtB,0GAA0G;IAC1G,YAAY,EAAE,OAAO,CAAC;IACtB,8CAA8C;IAC9C,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAQ/F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,GAAG,EAAE,MAAM,GACV,QAAQ,GAAG,IAAI,CA0BjB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CA2C7E"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who an agent status report wakes (specs/2026-10-01-orc-status-wakes.md).
|
|
3
|
+
*
|
|
4
|
+
* Every `report-status` line used to be queued for the orchestrator. On
|
|
5
|
+
* 2026-09-29 that was 134 full-context orchestrator turns, almost all of them
|
|
6
|
+
* team members' [DONE] lines about work their own team lead owns and reviews.
|
|
7
|
+
* Now the report goes to whoever is responsible:
|
|
8
|
+
*
|
|
9
|
+
* | Report | Goes to |
|
|
10
|
+
* |---|---|
|
|
11
|
+
* | [IN_PROGRESS] [ACTIVE] [READY] [WORKING] [IDLE] … | recorded only |
|
|
12
|
+
* | [DONE] that a pending owner delivery is waiting for | orchestrator |
|
|
13
|
+
* | [DONE] on work the orchestrator delegated | orchestrator |
|
|
14
|
+
* | [DONE] on anyone else's work item | recorded (the lead's review path takes it) |
|
|
15
|
+
* | [DONE] with no work item | digest (actionable only without a lead) |
|
|
16
|
+
* | [BLOCKED] [FAILED] [ERROR] | the sender's lead; orchestrator when there is none or the lead sent it |
|
|
17
|
+
* | [MILESTONE] | orchestrator (it forwards milestones to the owner) |
|
|
18
|
+
* | other markers | digest (actionable only on orchestrator work or without a lead) |
|
|
19
|
+
* | no marker (an answer someone waits for) | orchestrator, as before |
|
|
20
|
+
*
|
|
21
|
+
* Pure functions only; {@link OrcStatusRouterService} carries out the plan.
|
|
22
|
+
*
|
|
23
|
+
* @module services/orc/orc-status-routing
|
|
24
|
+
*/
|
|
25
|
+
import { ORC_WAKE_CONSTANTS } from '../../constants.js';
|
|
26
|
+
/**
|
|
27
|
+
* The bracketed marker a report starts with, upper-cased.
|
|
28
|
+
*
|
|
29
|
+
* @param content - Report text
|
|
30
|
+
* @returns e.g. `DONE`, or null when the text has no leading marker
|
|
31
|
+
*/
|
|
32
|
+
export function statusMarkerOf(content) {
|
|
33
|
+
const m = /^\s*\[([A-Za-z_ ]{2,40})\]/.exec(content ?? '');
|
|
34
|
+
return m ? m[1].trim().toUpperCase() : null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Whether the orchestrator delegated (or created) a work item: its owner is
|
|
38
|
+
* the orchestrator, or the orchestrator stamped itself as the delegator.
|
|
39
|
+
*
|
|
40
|
+
* @param wi - Work item
|
|
41
|
+
* @param isOrchestrator - Orchestrator check
|
|
42
|
+
* @returns True for orchestrator work
|
|
43
|
+
*/
|
|
44
|
+
export function isOrcDelegated(wi, isOrchestrator) {
|
|
45
|
+
if (wi.owner === 'orchestrator')
|
|
46
|
+
return true;
|
|
47
|
+
const meta = (wi.metadata ?? {});
|
|
48
|
+
for (const key of ['delegatedBy', 'createdBy']) {
|
|
49
|
+
const v = meta[key];
|
|
50
|
+
if (typeof v === 'string' && v && isOrchestrator(v))
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The work item a report is about: the one it names; else the sender's
|
|
57
|
+
* running/accepted item (newest); else the sender's most recently finished
|
|
58
|
+
* item, when it finished within {@link ORC_WAKE_CONSTANTS.RECENT_COMPLETION_MS}.
|
|
59
|
+
*
|
|
60
|
+
* `report-status` posts the line BEFORE it completes the item, so the
|
|
61
|
+
* running item is normally the answer.
|
|
62
|
+
*
|
|
63
|
+
* @param items - Pool items
|
|
64
|
+
* @param sender - Reporting agent
|
|
65
|
+
* @param workItemId - Id the report named, if any
|
|
66
|
+
* @param now - Clock (epoch ms)
|
|
67
|
+
* @returns The item, or null
|
|
68
|
+
*/
|
|
69
|
+
export function findStatusWorkItem(items, sender, workItemId, now) {
|
|
70
|
+
if (workItemId) {
|
|
71
|
+
const named = items.find((wi) => wi.id === workItemId);
|
|
72
|
+
if (named)
|
|
73
|
+
return named;
|
|
74
|
+
}
|
|
75
|
+
let running = null;
|
|
76
|
+
let runningAt = -Infinity;
|
|
77
|
+
let finished = null;
|
|
78
|
+
let finishedAt = -Infinity;
|
|
79
|
+
for (const wi of items) {
|
|
80
|
+
if (wi.target !== sender)
|
|
81
|
+
continue;
|
|
82
|
+
if (wi.status === 'running' || wi.status === 'accepted') {
|
|
83
|
+
const at = Date.parse(wi.startedAt ?? wi.createdAt) || 0;
|
|
84
|
+
if (at > runningAt) {
|
|
85
|
+
running = wi;
|
|
86
|
+
runningAt = at;
|
|
87
|
+
}
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const doneAt = Date.parse(wi.completedAt ?? '') || 0;
|
|
91
|
+
if (doneAt && now - doneAt <= ORC_WAKE_CONSTANTS.RECENT_COMPLETION_MS && doneAt > finishedAt) {
|
|
92
|
+
finished = wi;
|
|
93
|
+
finishedAt = doneAt;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return running ?? finished;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Decide where one agent status report goes.
|
|
100
|
+
*
|
|
101
|
+
* @param input - Report, sender, its work item and lead
|
|
102
|
+
* @returns The route
|
|
103
|
+
*/
|
|
104
|
+
export function planOrcStatusRoute(input) {
|
|
105
|
+
const { content, sender, workItem, lead, senderIsLead, deliveryOwed, isOrchestrator } = input;
|
|
106
|
+
const marker = statusMarkerOf(content);
|
|
107
|
+
const hasLead = Boolean(lead) && lead !== sender && !isOrchestrator(String(lead));
|
|
108
|
+
if (ORC_WAKE_CONSTANTS.RECORD_ONLY_MARKERS.test(content)) {
|
|
109
|
+
return { action: 'record', reason: `progress marker [${marker}]` };
|
|
110
|
+
}
|
|
111
|
+
if (deliveryOwed) {
|
|
112
|
+
return { action: 'orc', category: 'owner', reason: 'the owner is waiting on the orchestrator to deliver this' };
|
|
113
|
+
}
|
|
114
|
+
if (!marker) {
|
|
115
|
+
return { action: 'orc', category: 'other', reason: 'not a status line — someone may be waiting for this answer' };
|
|
116
|
+
}
|
|
117
|
+
if (ORC_WAKE_CONSTANTS.ALWAYS_ORC_MARKERS.test(content)) {
|
|
118
|
+
return { action: 'orc', category: 'other', reason: `[${marker}] is forwarded to the owner by the orchestrator` };
|
|
119
|
+
}
|
|
120
|
+
const orcWork = workItem ? isOrcDelegated(workItem, isOrchestrator) : false;
|
|
121
|
+
if (ORC_WAKE_CONSTANTS.DONE_MARKERS.test(content)) {
|
|
122
|
+
if (workItem && orcWork) {
|
|
123
|
+
return { action: 'orc', category: 'delegated-done', reason: `work item ${workItem.id} was delegated by the orchestrator` };
|
|
124
|
+
}
|
|
125
|
+
if (workItem) {
|
|
126
|
+
return { action: 'record', reason: `work item ${workItem.id} is owned by ${workItem.owner}; its review path takes the [DONE]` };
|
|
127
|
+
}
|
|
128
|
+
return hasLead
|
|
129
|
+
? { action: 'digest', actionable: false, reason: `no work item; ${sender} reports to ${lead}` }
|
|
130
|
+
: { action: 'digest', actionable: true, reason: `no work item and no lead above ${sender}` };
|
|
131
|
+
}
|
|
132
|
+
if (ORC_WAKE_CONSTANTS.ATTENTION_MARKERS.test(content)) {
|
|
133
|
+
if (hasLead && lead)
|
|
134
|
+
return { action: 'team-lead', lead, reason: `[${marker}] goes to ${sender}'s lead first` };
|
|
135
|
+
return { action: 'orc', category: 'escalation', reason: senderIsLead ? `[${marker}] from a team lead` : `[${marker}] and ${sender} has no lead` };
|
|
136
|
+
}
|
|
137
|
+
// Structured reports and unknown markers.
|
|
138
|
+
const actionable = orcWork || !hasLead;
|
|
139
|
+
return {
|
|
140
|
+
action: 'digest',
|
|
141
|
+
actionable,
|
|
142
|
+
reason: actionable ? `[${marker}] ${orcWork ? 'on orchestrator work' : 'from an agent with no lead'}` : `[${marker}] on work its lead owns`,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=orc-status-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orc-status-routing.js","sourceRoot":"","sources":["../../../../../../backend/src/services/orc/orc-status-routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hourly count of orchestrator turns, by why it was woken
|
|
3
|
+
* (specs/2026-10-01-orc-status-wakes.md).
|
|
4
|
+
*
|
|
5
|
+
* Every orchestrator turn re-reads its whole context (~70k tokens on
|
|
6
|
+
* 2026-09-29), so the number of turns IS the cost. Once an hour the counter
|
|
7
|
+
* logs one line:
|
|
8
|
+
*
|
|
9
|
+
* orc wakes: 14 (owner 3, delegated-done 2, escalations 1, digest 2, other 6)
|
|
10
|
+
*
|
|
11
|
+
* - `N` and `owner` are counted when the queue processor starts an
|
|
12
|
+
* orchestrator turn (`owner` = any non-system source: Slack, web chat, …).
|
|
13
|
+
* - `delegated-done`, `escalations`, `digest` are counted when the status
|
|
14
|
+
* router decides to wake the orchestrator (several queued system events
|
|
15
|
+
* can coalesce into one turn, so these may add up to more than the turns
|
|
16
|
+
* they caused).
|
|
17
|
+
* - `other` = turns that are neither owner messages nor status-router wakes
|
|
18
|
+
* (cron, wiki, triggers, enforcer reminders, …).
|
|
19
|
+
*
|
|
20
|
+
* @module services/orc/orc-wake-counter
|
|
21
|
+
*/
|
|
22
|
+
import type { OrcWakeCategory } from './orc-status-routing.js';
|
|
23
|
+
/** One hour's numbers. */
|
|
24
|
+
export interface OrcWakeCounts {
|
|
25
|
+
/** Orchestrator turns started */
|
|
26
|
+
turns: number;
|
|
27
|
+
/** Turns for an owner message */
|
|
28
|
+
owner: number;
|
|
29
|
+
/** Status-router wakes: [DONE] on orchestrator-delegated work (incl. owed deliveries) */
|
|
30
|
+
delegatedDone: number;
|
|
31
|
+
/** Status-router wakes: [BLOCKED]/[FAILED] with no lead to take it */
|
|
32
|
+
escalations: number;
|
|
33
|
+
/** Status digests sent */
|
|
34
|
+
digest: number;
|
|
35
|
+
/** Status-router wakes for an answer that was not a status line */
|
|
36
|
+
statusOther: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The log line for one period.
|
|
40
|
+
*
|
|
41
|
+
* @param c - Counts
|
|
42
|
+
* @returns `orc wakes: N (owner X, delegated-done Y, escalations Z, digest W, other V)`
|
|
43
|
+
*/
|
|
44
|
+
export declare function formatOrcWakeLine(c: OrcWakeCounts): string;
|
|
45
|
+
/** Counts orchestrator wakes and logs them once per period. */
|
|
46
|
+
export declare class OrcWakeCounter {
|
|
47
|
+
private readonly now;
|
|
48
|
+
private static instance;
|
|
49
|
+
private counts;
|
|
50
|
+
private periodStart;
|
|
51
|
+
private timer;
|
|
52
|
+
private readonly logger;
|
|
53
|
+
/**
|
|
54
|
+
* @param now - Clock (tests)
|
|
55
|
+
*/
|
|
56
|
+
constructor(now?: () => number);
|
|
57
|
+
/** The process-wide counter. */
|
|
58
|
+
static getInstance(): OrcWakeCounter;
|
|
59
|
+
/** Drop the singleton (tests). */
|
|
60
|
+
static resetInstance(): void;
|
|
61
|
+
/** Log every {@link ORC_WAKE_CONSTANTS.COUNTER_LOG_INTERVAL_MS}. Idempotent. */
|
|
62
|
+
start(): void;
|
|
63
|
+
/** Stop the periodic log. */
|
|
64
|
+
stop(): void;
|
|
65
|
+
/**
|
|
66
|
+
* An orchestrator turn started (queue processor).
|
|
67
|
+
*
|
|
68
|
+
* @param source - Message source of the turn
|
|
69
|
+
*/
|
|
70
|
+
noteTurn(source: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* The status router decided to wake the orchestrator.
|
|
73
|
+
*
|
|
74
|
+
* @param category - Why
|
|
75
|
+
*/
|
|
76
|
+
noteRouted(category: OrcWakeCategory): void;
|
|
77
|
+
/** The current period's numbers (copy). */
|
|
78
|
+
snapshot(): OrcWakeCounts;
|
|
79
|
+
/**
|
|
80
|
+
* Log the period's line and start a new period.
|
|
81
|
+
*
|
|
82
|
+
* @returns The logged line
|
|
83
|
+
*/
|
|
84
|
+
flush(): string;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=orc-wake-counter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orc-wake-counter.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/orc/orc-wake-counter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,0BAA0B;AAC1B,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,aAAa,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;CACrB;AAOD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAI1D;AAED,+DAA+D;AAC/D,qBAAa,cAAc;IAUb,OAAO,CAAC,QAAQ,CAAC,GAAG;IAThC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA+B;IACtD,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC;;OAEG;gBAC0B,GAAG,GAAE,MAAM,MAAiB;IAKzD,gCAAgC;IAChC,MAAM,CAAC,WAAW,IAAI,cAAc;IAKpC,kCAAkC;IAClC,MAAM,CAAC,aAAa,IAAI,IAAI;IAK5B,gFAAgF;IAChF,KAAK,IAAI,IAAI;IAMb,6BAA6B;IAC7B,IAAI,IAAI,IAAI;IAKZ;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK9B;;;;OAIG;IACH,UAAU,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAiB3C,2CAA2C;IAC3C,QAAQ,IAAI,aAAa;IAIzB;;;;OAIG;IACH,KAAK,IAAI,MAAM;CAUhB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hourly count of orchestrator turns, by why it was woken
|
|
3
|
+
* (specs/2026-10-01-orc-status-wakes.md).
|
|
4
|
+
*
|
|
5
|
+
* Every orchestrator turn re-reads its whole context (~70k tokens on
|
|
6
|
+
* 2026-09-29), so the number of turns IS the cost. Once an hour the counter
|
|
7
|
+
* logs one line:
|
|
8
|
+
*
|
|
9
|
+
* orc wakes: 14 (owner 3, delegated-done 2, escalations 1, digest 2, other 6)
|
|
10
|
+
*
|
|
11
|
+
* - `N` and `owner` are counted when the queue processor starts an
|
|
12
|
+
* orchestrator turn (`owner` = any non-system source: Slack, web chat, …).
|
|
13
|
+
* - `delegated-done`, `escalations`, `digest` are counted when the status
|
|
14
|
+
* router decides to wake the orchestrator (several queued system events
|
|
15
|
+
* can coalesce into one turn, so these may add up to more than the turns
|
|
16
|
+
* they caused).
|
|
17
|
+
* - `other` = turns that are neither owner messages nor status-router wakes
|
|
18
|
+
* (cron, wiki, triggers, enforcer reminders, …).
|
|
19
|
+
*
|
|
20
|
+
* @module services/orc/orc-wake-counter
|
|
21
|
+
*/
|
|
22
|
+
import { MESSAGE_SOURCES, ORC_WAKE_CONSTANTS } from '../../constants.js';
|
|
23
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
24
|
+
/** A fresh, zeroed count. */
|
|
25
|
+
function zero() {
|
|
26
|
+
return { turns: 0, owner: 0, delegatedDone: 0, escalations: 0, digest: 0, statusOther: 0 };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The log line for one period.
|
|
30
|
+
*
|
|
31
|
+
* @param c - Counts
|
|
32
|
+
* @returns `orc wakes: N (owner X, delegated-done Y, escalations Z, digest W, other V)`
|
|
33
|
+
*/
|
|
34
|
+
export function formatOrcWakeLine(c) {
|
|
35
|
+
const routed = c.delegatedDone + c.escalations + c.digest;
|
|
36
|
+
const other = Math.max(0, c.turns - c.owner - routed);
|
|
37
|
+
return `orc wakes: ${c.turns} (owner ${c.owner}, delegated-done ${c.delegatedDone}, escalations ${c.escalations}, digest ${c.digest}, other ${other})`;
|
|
38
|
+
}
|
|
39
|
+
/** Counts orchestrator wakes and logs them once per period. */
|
|
40
|
+
export class OrcWakeCounter {
|
|
41
|
+
now;
|
|
42
|
+
static instance = null;
|
|
43
|
+
counts = zero();
|
|
44
|
+
periodStart;
|
|
45
|
+
timer = null;
|
|
46
|
+
logger;
|
|
47
|
+
/**
|
|
48
|
+
* @param now - Clock (tests)
|
|
49
|
+
*/
|
|
50
|
+
constructor(now = Date.now) {
|
|
51
|
+
this.now = now;
|
|
52
|
+
this.periodStart = now();
|
|
53
|
+
this.logger = LoggerService.getInstance().createComponentLogger('OrcWakes');
|
|
54
|
+
}
|
|
55
|
+
/** The process-wide counter. */
|
|
56
|
+
static getInstance() {
|
|
57
|
+
if (!OrcWakeCounter.instance)
|
|
58
|
+
OrcWakeCounter.instance = new OrcWakeCounter();
|
|
59
|
+
return OrcWakeCounter.instance;
|
|
60
|
+
}
|
|
61
|
+
/** Drop the singleton (tests). */
|
|
62
|
+
static resetInstance() {
|
|
63
|
+
OrcWakeCounter.instance?.stop();
|
|
64
|
+
OrcWakeCounter.instance = null;
|
|
65
|
+
}
|
|
66
|
+
/** Log every {@link ORC_WAKE_CONSTANTS.COUNTER_LOG_INTERVAL_MS}. Idempotent. */
|
|
67
|
+
start() {
|
|
68
|
+
if (this.timer)
|
|
69
|
+
return;
|
|
70
|
+
this.timer = setInterval(() => this.flush(), ORC_WAKE_CONSTANTS.COUNTER_LOG_INTERVAL_MS);
|
|
71
|
+
this.timer.unref?.();
|
|
72
|
+
}
|
|
73
|
+
/** Stop the periodic log. */
|
|
74
|
+
stop() {
|
|
75
|
+
if (this.timer)
|
|
76
|
+
clearInterval(this.timer);
|
|
77
|
+
this.timer = null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* An orchestrator turn started (queue processor).
|
|
81
|
+
*
|
|
82
|
+
* @param source - Message source of the turn
|
|
83
|
+
*/
|
|
84
|
+
noteTurn(source) {
|
|
85
|
+
this.counts.turns += 1;
|
|
86
|
+
if (source !== MESSAGE_SOURCES.SYSTEM_EVENT)
|
|
87
|
+
this.counts.owner += 1;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The status router decided to wake the orchestrator.
|
|
91
|
+
*
|
|
92
|
+
* @param category - Why
|
|
93
|
+
*/
|
|
94
|
+
noteRouted(category) {
|
|
95
|
+
switch (category) {
|
|
96
|
+
case 'owner':
|
|
97
|
+
case 'delegated-done':
|
|
98
|
+
this.counts.delegatedDone += 1;
|
|
99
|
+
break;
|
|
100
|
+
case 'escalation':
|
|
101
|
+
this.counts.escalations += 1;
|
|
102
|
+
break;
|
|
103
|
+
case 'digest':
|
|
104
|
+
this.counts.digest += 1;
|
|
105
|
+
break;
|
|
106
|
+
default:
|
|
107
|
+
this.counts.statusOther += 1;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** The current period's numbers (copy). */
|
|
111
|
+
snapshot() {
|
|
112
|
+
return { ...this.counts };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Log the period's line and start a new period.
|
|
116
|
+
*
|
|
117
|
+
* @returns The logged line
|
|
118
|
+
*/
|
|
119
|
+
flush() {
|
|
120
|
+
const line = formatOrcWakeLine(this.counts);
|
|
121
|
+
this.logger.info(line, {
|
|
122
|
+
since: new Date(this.periodStart).toISOString(),
|
|
123
|
+
...this.counts,
|
|
124
|
+
});
|
|
125
|
+
this.counts = zero();
|
|
126
|
+
this.periodStart = this.now();
|
|
127
|
+
return line;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=orc-wake-counter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orc-wake-counter.js","sourceRoot":"","sources":["../../../../../../backend/src/services/orc/orc-wake-counter.ts"],"names":[],"mappings":"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"}
|