crewly 1.20.362 → 1.20.363
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/hooks/destructive-git-guard/guard.mjs +96 -0
- package/config/skills/agent/core/ask-owner/SKILL.md +31 -0
- package/config/skills/agent/core/ask-owner/execute.sh +14 -3
- package/config/skills/agent/core/ask-owner/execute.test.sh +8 -0
- package/config/skills/agent/core/gmail-read/SKILL.md +8 -0
- package/config/skills/agent/core/gmail-send/SKILL.md +10 -3
- package/config/skills/agent/core/gmail-send/execute.sh +2 -1
- package/config/skills/agent/core/gmail-watch-thread/SKILL.md +69 -0
- package/config/skills/agent/core/gmail-watch-thread/execute.sh +51 -0
- package/config/skills/agent/core/project-tickets/SKILL.md +12 -0
- package/config/skills/agent/core/project-tickets/execute.sh +13 -3
- package/config/skills/agent/core/project-tickets/execute.test.sh +4 -0
- package/config/skills/agent/core/watch-for-event/SKILL.md +22 -0
- package/config/skills/orchestrator/harness-login/SKILL.md +1 -1
- package/dist/backend/backend/src/constants.d.ts +63 -2
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +64 -3
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts +44 -0
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.js +121 -3
- package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.routes.js +5 -1
- package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/harness/owner-login.controller.d.ts +1 -1
- package/dist/backend/backend/src/controllers/harness/owner-login.controller.js +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +2 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +61 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +2 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-card.d.ts +46 -13
- package/dist/backend/backend/src/services/decisions/decision-card.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-card.js +100 -50
- package/dist/backend/backend/src/services/decisions/decision-card.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-contract.d.ts +23 -1
- package/dist/backend/backend/src/services/decisions/decision-contract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-contract.js +76 -4
- package/dist/backend/backend/src/services/decisions/decision-contract.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-wording.d.ts +167 -0
- package/dist/backend/backend/src/services/decisions/decision-wording.d.ts.map +1 -0
- package/dist/backend/backend/src/services/decisions/decision-wording.js +406 -0
- package/dist/backend/backend/src/services/decisions/decision-wording.js.map +1 -0
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts +30 -1
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.js +44 -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 +17 -0
- package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js +1 -0
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
- package/dist/backend/backend/src/services/google/gmail-reply-watch.service.d.ts +142 -0
- package/dist/backend/backend/src/services/google/gmail-reply-watch.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/google/gmail-reply-watch.service.js +304 -0
- package/dist/backend/backend/src/services/google/gmail-reply-watch.service.js.map +1 -0
- package/dist/backend/backend/src/services/google/gmail-send-approval.service.d.ts +130 -0
- package/dist/backend/backend/src/services/google/gmail-send-approval.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/google/gmail-send-approval.service.js +216 -0
- package/dist/backend/backend/src/services/google/gmail-send-approval.service.js.map +1 -0
- package/dist/backend/backend/src/services/google/gmail-send-gate.d.ts +28 -13
- package/dist/backend/backend/src/services/google/gmail-send-gate.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/gmail-send-gate.js +82 -29
- package/dist/backend/backend/src/services/google/gmail-send-gate.js.map +1 -1
- package/dist/backend/backend/src/services/google/gmail.service.d.ts +90 -0
- package/dist/backend/backend/src/services/google/gmail.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/gmail.service.js +122 -0
- package/dist/backend/backend/src/services/google/gmail.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/claude-accounts.d.ts +24 -14
- package/dist/backend/backend/src/services/harness/claude-accounts.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/claude-accounts.js +35 -21
- package/dist/backend/backend/src/services/harness/claude-accounts.js.map +1 -1
- package/dist/backend/backend/src/services/harness/claude-native-login.d.ts +106 -0
- package/dist/backend/backend/src/services/harness/claude-native-login.d.ts.map +1 -0
- package/dist/backend/backend/src/services/harness/claude-native-login.js +174 -0
- package/dist/backend/backend/src/services/harness/claude-native-login.js.map +1 -0
- package/dist/backend/backend/src/services/harness/claude-token-migration.service.d.ts +158 -0
- package/dist/backend/backend/src/services/harness/claude-token-migration.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/harness/claude-token-migration.service.js +283 -0
- package/dist/backend/backend/src/services/harness/claude-token-migration.service.js.map +1 -0
- package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts +44 -24
- package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-credentials.store.js +96 -39
- package/dist/backend/backend/src/services/harness/harness-credentials.store.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-registry.js +1 -1
- package/dist/backend/backend/src/services/harness/harness-registry.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts +2 -2
- package/dist/backend/backend/src/services/harness/harness-relogin.service.js +2 -2
- package/dist/backend/backend/src/services/harness/harness.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness.service.js +10 -1
- package/dist/backend/backend/src/services/harness/harness.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/login-broker.service.d.ts +24 -21
- package/dist/backend/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/login-broker.service.js +50 -64
- package/dist/backend/backend/src/services/harness/login-broker.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/login-rules.d.ts +17 -11
- package/dist/backend/backend/src/services/harness/login-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/login-rules.js +22 -25
- package/dist/backend/backend/src/services/harness/login-rules.js.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts +36 -0
- package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-item-extractor.js +70 -0
- package/dist/backend/backend/src/services/open-items/open-item-extractor.js.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +25 -0
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.service.js +65 -5
- package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts +5 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +30 -6
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-file.js +6 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-file.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.d.ts +64 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.js +93 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-hold.d.ts +176 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-hold.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-hold.js +301 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-hold.js.map +1 -0
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +33 -3
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +50 -4
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +8 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +26 -0
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +6 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js +3 -2
- package/dist/backend/backend/src/services/reconciler/reconciler.service.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 +4 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/stall/stall-watcher.service.d.ts +34 -0
- package/dist/backend/backend/src/services/stall/stall-watcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/stall/stall-watcher.service.js +70 -2
- package/dist/backend/backend/src/services/stall/stall-watcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +3 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +5 -2
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.d.ts +7 -2
- package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.d.ts.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.js +11 -2
- package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.js.map +1 -1
- package/dist/backend/backend/src/types/decision.types.d.ts +53 -1
- package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts +4 -2
- package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.js +8 -0
- package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/backend/backend/src/types/project-ticket.types.d.ts +7 -0
- package/dist/backend/backend/src/types/project-ticket.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/project-ticket.types.js +1 -0
- package/dist/backend/backend/src/types/project-ticket.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/open-item.types.d.ts +8 -1
- package/dist/backend/backend/src/types/v2/open-item.types.d.ts.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +63 -2
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +64 -3
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +2 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-card.d.ts +46 -13
- package/dist/cli/backend/src/services/decisions/decision-card.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-card.js +100 -50
- package/dist/cli/backend/src/services/decisions/decision-card.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-contract.d.ts +23 -1
- package/dist/cli/backend/src/services/decisions/decision-contract.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-contract.js +76 -4
- package/dist/cli/backend/src/services/decisions/decision-contract.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-wording.d.ts +167 -0
- package/dist/cli/backend/src/services/decisions/decision-wording.d.ts.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-wording.js +406 -0
- package/dist/cli/backend/src/services/decisions/decision-wording.js.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts +30 -1
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.js +44 -8
- package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/event-bus/event-bus.service.js +1 -0
- package/dist/cli/backend/src/services/event-bus/event-bus.service.js.map +1 -1
- package/dist/cli/backend/src/services/harness/claude-accounts.d.ts +24 -14
- package/dist/cli/backend/src/services/harness/claude-accounts.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/claude-accounts.js +35 -21
- package/dist/cli/backend/src/services/harness/claude-accounts.js.map +1 -1
- package/dist/cli/backend/src/services/harness/claude-native-login.d.ts +106 -0
- package/dist/cli/backend/src/services/harness/claude-native-login.d.ts.map +1 -0
- package/dist/cli/backend/src/services/harness/claude-native-login.js +174 -0
- package/dist/cli/backend/src/services/harness/claude-native-login.js.map +1 -0
- package/dist/cli/backend/src/services/harness/claude-token-migration.service.d.ts +158 -0
- package/dist/cli/backend/src/services/harness/claude-token-migration.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/harness/claude-token-migration.service.js +283 -0
- package/dist/cli/backend/src/services/harness/claude-token-migration.service.js.map +1 -0
- package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts +44 -24
- package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-credentials.store.js +96 -39
- package/dist/cli/backend/src/services/harness/harness-credentials.store.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-registry.js +1 -1
- package/dist/cli/backend/src/services/harness/harness-registry.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts +2 -2
- package/dist/cli/backend/src/services/harness/harness-relogin.service.js +2 -2
- package/dist/cli/backend/src/services/harness/harness.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness.service.js +10 -1
- package/dist/cli/backend/src/services/harness/harness.service.js.map +1 -1
- package/dist/cli/backend/src/services/harness/login-broker.service.d.ts +24 -21
- package/dist/cli/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/login-broker.service.js +50 -64
- package/dist/cli/backend/src/services/harness/login-broker.service.js.map +1 -1
- package/dist/cli/backend/src/services/harness/login-rules.d.ts +17 -11
- package/dist/cli/backend/src/services/harness/login-rules.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/login-rules.js +22 -25
- package/dist/cli/backend/src/services/harness/login-rules.js.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts +36 -0
- package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-item-extractor.js +70 -0
- package/dist/cli/backend/src/services/open-items/open-item-extractor.js.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-items.service.d.ts +25 -0
- package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-items.service.js +65 -5
- package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/dist/cli/backend/src/services/orc/owner-completion-report.text.d.ts +86 -0
- package/dist/cli/backend/src/services/orc/owner-completion-report.text.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orc/owner-completion-report.text.js +170 -0
- package/dist/cli/backend/src/services/orc/owner-completion-report.text.js.map +1 -0
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts +5 -0
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +30 -6
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/ticket-file.js +6 -1
- package/dist/cli/backend/src/services/project-tickets/ticket-file.js.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/ticket-hold.d.ts +176 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-hold.d.ts.map +1 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-hold.js +301 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-hold.js.map +1 -0
- package/dist/cli/backend/src/types/decision.types.d.ts +53 -1
- package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/event-bus.types.d.ts +4 -2
- package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/event-bus.types.js +8 -0
- package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/cli/backend/src/types/project-ticket.types.d.ts +7 -0
- package/dist/cli/backend/src/types/project-ticket.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/project-ticket.types.js +1 -0
- package/dist/cli/backend/src/types/project-ticket.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/open-item.types.d.ts +8 -1
- package/dist/cli/backend/src/types/v2/open-item.types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ticket holds (crewly#1369 gap 1) — pure rules.
|
|
3
|
+
*
|
|
4
|
+
* A ticket is on hold when the owner said to stop: "do not merge PR #1138, do
|
|
5
|
+
* not ask Steve". Before this module the hold lived only as a Log line, and
|
|
6
|
+
* nothing read it: days later a janitor notice about the same worktree became
|
|
7
|
+
* a new ticket ("Decide the fate of OPEN PR #1138") and a "merge?" card to the
|
|
8
|
+
* owner, who tapped Yes without recognising it.
|
|
9
|
+
*
|
|
10
|
+
* A hold is read from (first match wins):
|
|
11
|
+
* - the `hold` frontmatter field (set through the ticket update path);
|
|
12
|
+
* - a hold label ({@link TICKET_HOLD_CONSTANTS.LABELS});
|
|
13
|
+
* - legacy Log lines: "HOLD: …", "on hold", "do not merge", "不要合并", "owner
|
|
14
|
+
* said no" — unless a later Log line lifts it ("hold lifted").
|
|
15
|
+
*
|
|
16
|
+
* Held work is matched by what it names: PR numbers, branches and worktrees
|
|
17
|
+
* (a worktree named `wt-crew257` also names ticket CREW-257). On held work the
|
|
18
|
+
* only allowed action is {@link TICKET_HOLD_CONSTANTS.ALLOWED_ACTIONS}.
|
|
19
|
+
*
|
|
20
|
+
* @module services/project-tickets/ticket-hold
|
|
21
|
+
*/
|
|
22
|
+
import { TICKET_HOLD_CONSTANTS } from '../../constants.js';
|
|
23
|
+
/** Uppercase HOLD as a word (not "holder", not "household"), and not "HOLD lifted". */
|
|
24
|
+
const HOLD_WORD = /(?:^|[\s:([\-—·*_"'`])HOLD\b(?![\s:]*(?:lifted|released|cleared|removed|off)\b)/;
|
|
25
|
+
/** Other ways to say it in a Log line. */
|
|
26
|
+
const HOLD_PHRASES = /\bon[\s-]hold\b|\b(?:do not|don't|dont|must not|mustn't|never|not to) (?:merge|ship|land)\b|\bowner (?:said|says|answered) (?:no|"no"|'no')\b|(?:不要|别|不准|先不|暂不|暂时不)(?:要)?(?:合并|合入|合进|merge)|暂停|搁置/iu;
|
|
27
|
+
/** A Log line that lifts a hold. */
|
|
28
|
+
const LIFT_PHRASES = /\bhold (?:lifted|released|cleared|removed)\b|\bunhold\b|\boff hold\b|\blift(?:ed)? the hold\b|解除(?:暂停|搁置|hold)|取消暂停/iu;
|
|
29
|
+
/**
|
|
30
|
+
* The message part of a Log line (`<iso> · <actor> · <message>`).
|
|
31
|
+
*
|
|
32
|
+
* @param line - Log line (without `- `)
|
|
33
|
+
* @returns The message
|
|
34
|
+
*/
|
|
35
|
+
function logMessage(line) {
|
|
36
|
+
const parts = line.split(' · ');
|
|
37
|
+
return parts.length >= 3 ? parts.slice(2).join(' · ') : line;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Clip a reason for quoting.
|
|
41
|
+
*
|
|
42
|
+
* @param s - Text
|
|
43
|
+
* @returns One line of at most {@link TICKET_HOLD_CONSTANTS.REASON_MAX_CHARS}
|
|
44
|
+
*/
|
|
45
|
+
export function clipHoldReason(s) {
|
|
46
|
+
const flat = s.replace(/\s+/g, ' ').trim();
|
|
47
|
+
const max = TICKET_HOLD_CONSTANTS.REASON_MAX_CHARS;
|
|
48
|
+
return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Whether a Log message puts the ticket on hold.
|
|
52
|
+
*
|
|
53
|
+
* @param message - Log message
|
|
54
|
+
* @returns True for "HOLD: …", "on hold", "do not merge", "不要合并", …
|
|
55
|
+
*/
|
|
56
|
+
export function isHoldLogMessage(message) {
|
|
57
|
+
if (LIFT_PHRASES.test(message))
|
|
58
|
+
return false;
|
|
59
|
+
return HOLD_WORD.test(message) || HOLD_PHRASES.test(message);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Whether a Log message lifts a hold.
|
|
63
|
+
*
|
|
64
|
+
* @param message - Log message
|
|
65
|
+
* @returns True for "hold lifted", "unhold", …
|
|
66
|
+
*/
|
|
67
|
+
export function isLiftLogMessage(message) {
|
|
68
|
+
return LIFT_PHRASES.test(message);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The ticket id in a linked hold reason ("held by CREW-257: …").
|
|
72
|
+
*
|
|
73
|
+
* @param reason - Hold reason
|
|
74
|
+
* @returns The id, or undefined
|
|
75
|
+
*/
|
|
76
|
+
function heldByOf(reason) {
|
|
77
|
+
const m = new RegExp(`^${TICKET_HOLD_CONSTANTS.LINKED_PREFIX}\\s+([A-Za-z0-9]+-\\d+)\\b`, 'i').exec(reason.trim());
|
|
78
|
+
return m ? m[1].toUpperCase() : undefined;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* A ticket's hold, or null when it is not held.
|
|
82
|
+
*
|
|
83
|
+
* @param t - Ticket
|
|
84
|
+
* @returns The hold
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* readTicketHold({ ...t, log: ['2026-10-06T10:00:00Z · crewly-orc · HOLD: PR #1138: do not merge'] })
|
|
88
|
+
* // → { reason: 'HOLD: PR #1138: do not merge', source: 'log' }
|
|
89
|
+
*/
|
|
90
|
+
export function readTicketHold(t) {
|
|
91
|
+
const field = typeof t.hold === 'string' ? t.hold.trim() : '';
|
|
92
|
+
if (field) {
|
|
93
|
+
const heldBy = heldByOf(field);
|
|
94
|
+
return { reason: clipHoldReason(field), source: 'field', ...(heldBy ? { heldBy } : {}) };
|
|
95
|
+
}
|
|
96
|
+
// The latest hold / lift line in the Log decides.
|
|
97
|
+
let fromLog = null;
|
|
98
|
+
for (const line of t.log ?? []) {
|
|
99
|
+
const message = logMessage(line);
|
|
100
|
+
if (isLiftLogMessage(message))
|
|
101
|
+
fromLog = null;
|
|
102
|
+
else if (isHoldLogMessage(message))
|
|
103
|
+
fromLog = message;
|
|
104
|
+
}
|
|
105
|
+
const labels = (t.labels ?? []).map((l) => l.toLowerCase());
|
|
106
|
+
if (labels.some((l) => TICKET_HOLD_CONSTANTS.LABELS.includes(l))) {
|
|
107
|
+
return { reason: clipHoldReason(fromLog ?? `labelled ${labels.find((l) => TICKET_HOLD_CONSTANTS.LABELS.includes(l))}`), source: 'label' };
|
|
108
|
+
}
|
|
109
|
+
return fromLog ? { reason: clipHoldReason(fromLog), source: 'log' } : null;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Ticket id a worktree folder names: `wt-crew257` / `wt-crew-257` → `CREW-257`.
|
|
113
|
+
*
|
|
114
|
+
* @param name - Worktree folder name
|
|
115
|
+
* @returns The id, or null
|
|
116
|
+
*/
|
|
117
|
+
export function ticketIdOfWorktree(name) {
|
|
118
|
+
const m = /^wt-([a-z][a-z0-9]{0,9}?)-?(\d{1,6})$/i.exec(name.trim());
|
|
119
|
+
return m ? `${m[1].toUpperCase()}-${Number(m[2])}` : null;
|
|
120
|
+
}
|
|
121
|
+
/** Branch prefixes that make a `<prefix>/<name>` word a branch. */
|
|
122
|
+
const BRANCH_PREFIX = '(?:feat|feature|fix|bugfix|hotfix|chore|docs|refactor|perf|test|tests|release|ci|build|style|crew|agent|wip)';
|
|
123
|
+
/**
|
|
124
|
+
* PR numbers, branches, worktrees and ticket ids named in a text.
|
|
125
|
+
*
|
|
126
|
+
* Conservative: a bare `#123` is not a PR (issues use it too); a PR is
|
|
127
|
+
* "PR #123", "PR 123", "pull request #123" or a `/pull/123` link. Ticket ids
|
|
128
|
+
* come only from worktree names (`wt-crew257`), not from free text — a ticket
|
|
129
|
+
* that merely mentions another one is not the same work.
|
|
130
|
+
*
|
|
131
|
+
* @param text - Any text
|
|
132
|
+
* @returns The refs (deduplicated)
|
|
133
|
+
*/
|
|
134
|
+
export function extractWorkRefs(text) {
|
|
135
|
+
const prs = new Set();
|
|
136
|
+
const branches = new Set();
|
|
137
|
+
const worktrees = new Set();
|
|
138
|
+
const tickets = new Set();
|
|
139
|
+
const src = String(text ?? '');
|
|
140
|
+
for (const m of src.matchAll(/\b(?:PR|pull request|pull)\s*#?\s*(\d{1,7})\b/gi))
|
|
141
|
+
prs.add(Number(m[1]));
|
|
142
|
+
for (const m of src.matchAll(/\/pull\/(\d{1,7})\b/g))
|
|
143
|
+
prs.add(Number(m[1]));
|
|
144
|
+
const clean = (b) => b.replace(/[.,;:)\]}'"`>]+$/, '').toLowerCase();
|
|
145
|
+
for (const m of src.matchAll(/\b(?:branch|分支)\s*[`'"]?([A-Za-z0-9._-]+\/[A-Za-z0-9._/-]+)/giu))
|
|
146
|
+
branches.add(clean(m[1]));
|
|
147
|
+
for (const m of src.matchAll(new RegExp(`(?:^|[\\s\`'"(\\[])(${BRANCH_PREFIX}\\/[A-Za-z0-9._/-]+)`, 'gi')))
|
|
148
|
+
branches.add(clean(m[1]));
|
|
149
|
+
for (const m of src.matchAll(/(?:^|[\s/`'"(\[])(wt-[A-Za-z0-9._-]+)/g)) {
|
|
150
|
+
const name = clean(m[1]);
|
|
151
|
+
worktrees.add(name);
|
|
152
|
+
const id = ticketIdOfWorktree(name);
|
|
153
|
+
if (id)
|
|
154
|
+
tickets.add(id);
|
|
155
|
+
}
|
|
156
|
+
return { prs: [...prs], branches: [...branches].filter((b) => b.length > 0), worktrees: [...worktrees], tickets: [...tickets] };
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Merge several refs.
|
|
160
|
+
*
|
|
161
|
+
* @param all - Refs
|
|
162
|
+
* @returns Union
|
|
163
|
+
*/
|
|
164
|
+
export function mergeWorkRefs(...all) {
|
|
165
|
+
const uniq = (xs) => [...new Set(xs)];
|
|
166
|
+
return {
|
|
167
|
+
prs: uniq(all.flatMap((r) => r.prs)),
|
|
168
|
+
branches: uniq(all.flatMap((r) => r.branches)),
|
|
169
|
+
worktrees: uniq(all.flatMap((r) => r.worktrees)),
|
|
170
|
+
tickets: uniq(all.flatMap((r) => r.tickets)),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Refs of a branch and worktree path (the janitor's view of a worktree).
|
|
175
|
+
*
|
|
176
|
+
* @param branch - Branch, or null
|
|
177
|
+
* @param worktreePath - Worktree path
|
|
178
|
+
* @returns Refs
|
|
179
|
+
*/
|
|
180
|
+
export function worktreeRefs(branch, worktreePath) {
|
|
181
|
+
const name = (worktreePath.replace(/[\\/]+$/, '').split(/[\\/]/).pop() ?? '').toLowerCase();
|
|
182
|
+
const id = ticketIdOfWorktree(name);
|
|
183
|
+
return { prs: [], branches: branch ? [branch.toLowerCase()] : [], worktrees: name ? [name] : [], tickets: id ? [id] : [] };
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Everything a ticket names: title, description, Log and the frontmatter keys
|
|
187
|
+
* a human may add (`pr`, `branch`, `worktree`).
|
|
188
|
+
*
|
|
189
|
+
* @param t - Ticket
|
|
190
|
+
* @returns Refs
|
|
191
|
+
*/
|
|
192
|
+
export function ticketWorkRefs(t) {
|
|
193
|
+
const extra = t.extra ?? {};
|
|
194
|
+
const prField = extra.pr !== undefined && extra.pr !== null && /^\d+$/.test(String(extra.pr)) ? `PR #${extra.pr}` : '';
|
|
195
|
+
const branch = typeof extra.branch === 'string' ? extra.branch.trim().toLowerCase() : '';
|
|
196
|
+
const worktreeField = typeof extra.worktree === 'string' && extra.worktree.trim() ? ` ${extra.worktree.trim()}` : '';
|
|
197
|
+
const fromText = extractWorkRefs([t.title, t.description, ...(t.log ?? []), prField, worktreeField].join('\n'));
|
|
198
|
+
return branch ? mergeWorkRefs(fromText, { prs: [], branches: [branch], worktrees: [], tickets: [] }) : fromText;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Which held tickets the given refs point at.
|
|
202
|
+
*
|
|
203
|
+
* @param refs - What the new work names
|
|
204
|
+
* @param tickets - Candidate tickets (any status)
|
|
205
|
+
* @param opts - `excludeId`: the ticket being checked itself
|
|
206
|
+
* @returns Matches, tickets held in their own right first
|
|
207
|
+
*/
|
|
208
|
+
export function findHeldMatches(refs, tickets, opts = {}) {
|
|
209
|
+
const out = [];
|
|
210
|
+
for (const t of tickets) {
|
|
211
|
+
if (opts.excludeId && t.id.toLowerCase() === opts.excludeId.toLowerCase())
|
|
212
|
+
continue;
|
|
213
|
+
const hold = readTicketHold(t);
|
|
214
|
+
if (!hold)
|
|
215
|
+
continue;
|
|
216
|
+
const own = ticketWorkRefs(t);
|
|
217
|
+
const matchedOn = [];
|
|
218
|
+
for (const n of refs.prs)
|
|
219
|
+
if (own.prs.includes(n))
|
|
220
|
+
matchedOn.push(`PR #${n}`);
|
|
221
|
+
for (const b of refs.branches)
|
|
222
|
+
if (own.branches.includes(b))
|
|
223
|
+
matchedOn.push(`branch ${b}`);
|
|
224
|
+
for (const w of refs.worktrees)
|
|
225
|
+
if (own.worktrees.includes(w))
|
|
226
|
+
matchedOn.push(`worktree ${w}`);
|
|
227
|
+
if (refs.tickets.includes(t.id.toUpperCase()))
|
|
228
|
+
matchedOn.push(`ticket ${t.id}`);
|
|
229
|
+
if (matchedOn.length === 0)
|
|
230
|
+
continue;
|
|
231
|
+
out.push({ ticketId: t.id, title: t.title, ...(t.projectPath ? { projectPath: t.projectPath } : {}), hold, matchedOn });
|
|
232
|
+
}
|
|
233
|
+
return out.sort((a, b) => Number(!!a.hold.heldBy) - Number(!!b.hold.heldBy));
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* The hold reason written on a ticket held through another one.
|
|
237
|
+
*
|
|
238
|
+
* @param match - The held ticket it references
|
|
239
|
+
* @returns `held by CREW-257: <reason>`
|
|
240
|
+
*/
|
|
241
|
+
export function linkedHoldReason(match) {
|
|
242
|
+
const root = match.hold.heldBy ?? match.ticketId;
|
|
243
|
+
const reason = match.hold.reason.replace(new RegExp(`^${TICKET_HOLD_CONSTANTS.LINKED_PREFIX}\\s+[A-Za-z0-9]+-\\d+:\\s*`, 'i'), '');
|
|
244
|
+
return clipHoldReason(`${TICKET_HOLD_CONSTANTS.LINKED_PREFIX} ${root}: ${reason}`);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* The note put at the top of a held follow-up ticket's description, so the
|
|
248
|
+
* agent who picks it up reads the hold before anything else.
|
|
249
|
+
*
|
|
250
|
+
* @param match - The held ticket
|
|
251
|
+
* @returns One paragraph
|
|
252
|
+
*/
|
|
253
|
+
export function heldDescriptionNote(match) {
|
|
254
|
+
const root = match.hold.heldBy ?? match.ticketId;
|
|
255
|
+
return (`ON HOLD (${root}, matched on ${match.matchedOn.join(', ')}): "${match.hold.reason}". ` +
|
|
256
|
+
`Allowed actions: ${TICKET_HOLD_CONSTANTS.ALLOWED_ACTIONS} only. Do not merge it, and do not ask the owner to merge it.`);
|
|
257
|
+
}
|
|
258
|
+
/** Merge-style words: the card would move held work forward. */
|
|
259
|
+
const MERGE_WORDS = /\bmerg(?:e|es|ed|ing)\b|\bship(?:ping)? it\b|\bland(?:ing)? it\b|\bgo ahead\b|\bproceed\b|\bcontinue\b|\bresume\b|\bdeploy\b|合并|合入|合进|上线|继续|部署/iu;
|
|
260
|
+
/** Close-style words. */
|
|
261
|
+
const CLOSE_WORDS = /\bclos(?:e|es|ed|ing)\b|\bdrop\b|\babandon\b|\bdiscard\b|\bremove\b|\bdelete\b|关闭|关掉|关了|删掉|删除|放弃|丢掉/iu;
|
|
262
|
+
/** Negated merge phrases that a close question may quote ("you said do not merge"). */
|
|
263
|
+
const NEGATED_MERGE = /\b(?:do not|don't|dont|not|never|no|without)\s+(?:merg(?:e|ing)|ship(?:ping)?|land(?:ing)?)\b|(?:不要|别|不|没|先不|暂不)(?:要)?(?:合并|合入|合进)/giu;
|
|
264
|
+
/**
|
|
265
|
+
* Whether a card only asks to close / drop held work.
|
|
266
|
+
*
|
|
267
|
+
* @param text - Question plus option labels
|
|
268
|
+
* @returns True for "Close PR #1138?" with no merge option
|
|
269
|
+
*/
|
|
270
|
+
export function isCloseOnlyAsk(text) {
|
|
271
|
+
const stripped = text.replace(NEGATED_MERGE, ' ');
|
|
272
|
+
return CLOSE_WORDS.test(stripped) && !MERGE_WORDS.test(stripped);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Why a decision card about held work is refused, or null when it may go up.
|
|
276
|
+
*
|
|
277
|
+
* @param text - Question, option labels and details
|
|
278
|
+
* @param matches - Held tickets it references
|
|
279
|
+
* @returns The refusal (quotes the hold), or null
|
|
280
|
+
*/
|
|
281
|
+
export function decisionHoldRefusal(text, matches) {
|
|
282
|
+
if (matches.length === 0 || isCloseOnlyAsk(text))
|
|
283
|
+
return null;
|
|
284
|
+
const m = matches[0];
|
|
285
|
+
const root = m.hold.heldBy ?? m.ticketId;
|
|
286
|
+
return (`${root} is on hold (${m.matchedOn.join(', ')}): "${m.hold.reason}". ` +
|
|
287
|
+
`The only allowed action is to ${TICKET_HOLD_CONSTANTS.ALLOWED_ACTIONS}. Do not ask the owner to merge or continue it. ` +
|
|
288
|
+
`If you need the owner, ask whether to close it (e.g. "Close PR …? You put it on hold on ${root}."), or lift the hold on ${root} first if the owner said so.`);
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* The line the janitor's unmerged-worktree notice carries for held work.
|
|
292
|
+
*
|
|
293
|
+
* @param match - The held ticket
|
|
294
|
+
* @returns One sentence
|
|
295
|
+
*/
|
|
296
|
+
export function heldWorktreeNoticeLine(match) {
|
|
297
|
+
const root = match.hold.heldBy ?? match.ticketId;
|
|
298
|
+
return (`This work is ON HOLD on ticket ${root}: "${match.hold.reason}". Do not merge it, do not open a new ticket about it ` +
|
|
299
|
+
`and do not ask the owner about merging: ${TICKET_HOLD_CONSTANTS.ALLOWED_ACTIONS} (log it on ${root}).`);
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=ticket-hold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket-hold.js","sourceRoot":"","sources":["../../../../../../backend/src/services/project-tickets/ticket-hold.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,10 +23,12 @@ export type DecisionSensitiveKind = 'email' | 'publish' | 'deploy' | 'spend' | '
|
|
|
23
23
|
* into a card on its behalf (specs/2026-10-01-reply-open-items.md)
|
|
24
24
|
* - `spend_cap`: an agent / team / all agents hit a daily token cap — boost it
|
|
25
25
|
* for today (+X or unlimited) or keep it stopped (specs/2026-10-02-spend-cap.md)
|
|
26
|
+
* - `gmail_send`: a drafted email an agent wants sent (CREW-257,
|
|
27
|
+
* specs/2026-10-06-gmail-approve-send-and-reply-wake.md)
|
|
26
28
|
* - `owner_receipt_format`: one real sample of the nightly receipt — turn it on
|
|
27
29
|
* in this format, or keep the per-ask format (specs/owner-receipt.md, #856)
|
|
28
30
|
*/
|
|
29
|
-
export type DecisionKind = 'browser_action' | 'runtime_terms' | 'reply_question' | 'spend_cap' | 'owner_receipt_format' | 'retro_harness_gaps' | 'app_collaborator' | 'app_template' | 'model_tier_change';
|
|
31
|
+
export type DecisionKind = 'browser_action' | 'runtime_terms' | 'reply_question' | 'spend_cap' | 'owner_receipt_format' | 'retro_harness_gaps' | 'app_collaborator' | 'app_template' | 'model_tier_change' | 'gmail_send';
|
|
30
32
|
/** How a decision came to be: asked live, or carded by the open-items backfill. */
|
|
31
33
|
export type DecisionSource = 'live' | 'backfill';
|
|
32
34
|
/** The Request open item a `reply_question` decision tracks. */
|
|
@@ -142,6 +144,36 @@ export interface BrowserActionSubject {
|
|
|
142
144
|
/** Why it was held ("submitting") */
|
|
143
145
|
matched: string;
|
|
144
146
|
}
|
|
147
|
+
/** The held email a `gmail_send` decision is about. */
|
|
148
|
+
export interface GmailSendSubject {
|
|
149
|
+
/** Agent that drafted it */
|
|
150
|
+
agentSession: string;
|
|
151
|
+
/** Display name ("Lyra") */
|
|
152
|
+
agentName: string;
|
|
153
|
+
/** Hold id (`agent:draftId`) in the Gmail send gate */
|
|
154
|
+
holdId: string;
|
|
155
|
+
/** Gmail draft the owner is approving */
|
|
156
|
+
draftId: string;
|
|
157
|
+
to: string;
|
|
158
|
+
subject: string;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* What the owner needs to answer a card without opening the PR or the ticket
|
|
162
|
+
* (crewly#1369 §3). Every field is one short line in the owner's language.
|
|
163
|
+
* Required on a merge card: at least {@link DecisionContext.runtimeChanges}.
|
|
164
|
+
*/
|
|
165
|
+
export interface DecisionContext {
|
|
166
|
+
/** Who asked for the work, and when ("Ella, Oct 6") */
|
|
167
|
+
requestedBy?: string;
|
|
168
|
+
/** What the owner said last about it, when known (quoted) */
|
|
169
|
+
ownerLastSaid?: string;
|
|
170
|
+
/** What changes at runtime once this is done / merged (new background jobs, scopes, polling) */
|
|
171
|
+
runtimeChanges?: string;
|
|
172
|
+
/** The PR / doc link, shown in the card's short details line */
|
|
173
|
+
link?: string;
|
|
174
|
+
}
|
|
175
|
+
/** Languages the harness writes a card's own text in (buttons, context line, reminders). */
|
|
176
|
+
export type DecisionLanguage = 'en' | 'zh';
|
|
145
177
|
/** One answer the owner can pick. */
|
|
146
178
|
export interface DecisionOption {
|
|
147
179
|
/** Stable key (`a`, `b`, `c`) carried in the button value */
|
|
@@ -217,6 +249,8 @@ export interface OwnerDecision {
|
|
|
217
249
|
kind?: DecisionKind;
|
|
218
250
|
/** The held browser action (kind `browser_action`) */
|
|
219
251
|
browser?: BrowserActionSubject;
|
|
252
|
+
/** The held email (kind `gmail_send`) */
|
|
253
|
+
gmail?: GmailSendSubject;
|
|
220
254
|
/** What the owner would grant (kind `app_collaborator`) */
|
|
221
255
|
appCollaborator?: AppCollaboratorSubject;
|
|
222
256
|
/** The template the owner would list (kind `app_template`) */
|
|
@@ -261,6 +295,17 @@ export interface OwnerDecision {
|
|
|
261
295
|
title?: string;
|
|
262
296
|
/** Extra mrkdwn sections shown under the question (system decisions) */
|
|
263
297
|
body?: string[];
|
|
298
|
+
/** Context the asker gave (who asked, what the owner said, what changes) — crewly#1369 §3 */
|
|
299
|
+
context?: DecisionContext;
|
|
300
|
+
/**
|
|
301
|
+
* Internal references taken out of the question at creation (PR numbers,
|
|
302
|
+
* links): shown only in the card's short details line (crewly#1367).
|
|
303
|
+
*/
|
|
304
|
+
details?: string[];
|
|
305
|
+
/** The card asks the owner to merge a PR */
|
|
306
|
+
merge?: boolean;
|
|
307
|
+
/** The owner's language when the card was asked: the harness's own card text uses it (absent = English) */
|
|
308
|
+
ownerLanguage?: DecisionLanguage;
|
|
264
309
|
status: DecisionStatus;
|
|
265
310
|
card?: DecisionCardRef;
|
|
266
311
|
/** Why the card could not be posted (shown in the dashboard; retried on the next tick) */
|
|
@@ -318,6 +363,8 @@ export interface AskOwnerInput {
|
|
|
318
363
|
/** Ticket id (with `project`) */
|
|
319
364
|
ticket?: unknown;
|
|
320
365
|
project?: unknown;
|
|
366
|
+
/** `{requestedBy?, ownerLastSaid?, runtimeChanges?, link?}` ({@link DecisionContext}) */
|
|
367
|
+
context?: unknown;
|
|
321
368
|
}
|
|
322
369
|
/** A validated ask. */
|
|
323
370
|
export interface ValidatedAsk {
|
|
@@ -328,6 +375,11 @@ export interface ValidatedAsk {
|
|
|
328
375
|
sensitive?: DecisionSensitiveKind;
|
|
329
376
|
ticketId?: string;
|
|
330
377
|
project?: string;
|
|
378
|
+
context?: DecisionContext;
|
|
379
|
+
/** Internal references stripped from the question (PR numbers, links) */
|
|
380
|
+
details?: string[];
|
|
381
|
+
/** The ask is about merging a PR */
|
|
382
|
+
merge?: boolean;
|
|
331
383
|
}
|
|
332
384
|
/** Button `value` JSON (also read by Cloud: only `i`). */
|
|
333
385
|
export interface DecisionButtonValue {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision.types.d.ts","sourceRoot":"","sources":["../../../../../backend/src/types/decision.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,6DAA6D;AAC7D,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,gBAAgB,GAAG,eAAe,GAAG,YAAY,CAAC;AAEjI
|
|
1
|
+
{"version":3,"file":"decision.types.d.ts","sourceRoot":"","sources":["../../../../../backend/src/types/decision.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
/**
|
|
11
11
|
* Valid agent lifecycle event types
|
|
12
12
|
*/
|
|
13
|
-
export declare const EVENT_TYPES: readonly ["agent:status_changed", "agent:idle", "agent:idle_after_registration", "agent:idle_after_task", "agent:busy", "agent:active", "agent:inactive", "agent:context_warning", "agent:context_critical", "agent:oauth_url", "agent:login_required", "agent:waiting_on_human", "agent:waiting_resolved", "task:submitted", "task:accepted", "task:working", "task:input_required", "task:verification_requested", "task:completed", "task:failed", "task:cancelled", "task:assigned", "task:done", "task:verified", "task:blocked", "task:needs_clarification", "team:all_tasks_done", "task:done_by_worker", "task:rejected", "mission:review_due", "mission:stale", "mission:replanned", "request:created", "request:sla_breached", "workitem:queued", "hierarchy:escalation", "hierarchy:delegation", "hierarchy:report_up", "system:backend_restarted", "system:memory_pressure", "task:queued_too_long", "team:budget_exceeded"];
|
|
13
|
+
export declare const EVENT_TYPES: readonly ["agent:status_changed", "agent:idle", "agent:idle_after_registration", "agent:idle_after_task", "agent:busy", "agent:active", "agent:inactive", "agent:context_warning", "agent:context_critical", "agent:oauth_url", "agent:login_required", "agent:waiting_on_human", "agent:waiting_resolved", "task:submitted", "task:accepted", "task:working", "task:input_required", "task:verification_requested", "task:completed", "task:failed", "task:cancelled", "task:assigned", "task:done", "task:verified", "task:blocked", "task:needs_clarification", "team:all_tasks_done", "task:done_by_worker", "task:rejected", "mission:review_due", "mission:stale", "mission:replanned", "request:created", "request:sla_breached", "workitem:queued", "hierarchy:escalation", "hierarchy:delegation", "hierarchy:report_up", "system:backend_restarted", "system:memory_pressure", "task:queued_too_long", "team:budget_exceeded", "gmail:reply_received"];
|
|
14
14
|
/**
|
|
15
15
|
* An agent lifecycle event type
|
|
16
16
|
*/
|
|
@@ -49,7 +49,7 @@ export declare function getCriticalEventTypes(): EventType[];
|
|
|
49
49
|
/**
|
|
50
50
|
* Fields that can trigger events when changed
|
|
51
51
|
*/
|
|
52
|
-
export type ChangedField = 'agentStatus' | 'workingStatus' | 'contextUsage' | 'oauthUrl' | 'loginRequired' | 'taskStatus' | 'hierarchyAction';
|
|
52
|
+
export type ChangedField = 'gmailReply' | 'agentStatus' | 'workingStatus' | 'contextUsage' | 'oauthUrl' | 'loginRequired' | 'taskStatus' | 'hierarchyAction';
|
|
53
53
|
/**
|
|
54
54
|
* An agent lifecycle event published to the event bus
|
|
55
55
|
*/
|
|
@@ -115,6 +115,8 @@ export interface AgentEvent {
|
|
|
115
115
|
* without a lookup (#926). Never used for matching.
|
|
116
116
|
*/
|
|
117
117
|
workItemTitle?: string;
|
|
118
|
+
/** Gmail thread id, on `gmail:reply_received` (matchable by watch-for-event filters). */
|
|
119
|
+
threadId?: string;
|
|
118
120
|
}
|
|
119
121
|
/**
|
|
120
122
|
* Filter criteria for matching events to subscriptions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.types.d.ts","sourceRoot":"","sources":["../../../../../backend/src/types/event-bus.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"event-bus.types.d.ts","sourceRoot":"","sources":["../../../../../backend/src/types/event-bus.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -135,6 +135,12 @@ export const EVENT_TYPES = [
|
|
|
135
135
|
// the cap itself (blocked). Owner-facing; pairs with a `[BUDGET]` queue
|
|
136
136
|
// message to the orchestrator.
|
|
137
137
|
'team:budget_exceeded',
|
|
138
|
+
// CREW-257: a new reply landed in a Gmail thread an agent is watching.
|
|
139
|
+
// Published by GmailReplyWatchService with sessionName 'gmail' (self-events
|
|
140
|
+
// are not delivered to the publisher's own session, so the owning agent
|
|
141
|
+
// must not be the event's session). `threadId` and `target` (the owning
|
|
142
|
+
// agent) ride along for watch-for-event filters.
|
|
143
|
+
'gmail:reply_received',
|
|
138
144
|
];
|
|
139
145
|
/**
|
|
140
146
|
* Critical event types that the orchestrator MUST receive.
|
|
@@ -192,6 +198,8 @@ export const CRITICAL_EVENT_TYPES = new Set([
|
|
|
192
198
|
'task:queued_too_long',
|
|
193
199
|
// Budget cap crossings are owner-visible money events.
|
|
194
200
|
'team:budget_exceeded',
|
|
201
|
+
// A reply from a real person is what the agent is waiting on.
|
|
202
|
+
'gmail:reply_received',
|
|
195
203
|
]);
|
|
196
204
|
/**
|
|
197
205
|
* Info event types that are noisy for the orchestrator terminal.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.types.js","sourceRoot":"","sources":["../../../../../backend/src/types/event-bus.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"event-bus.types.js","sourceRoot":"","sources":["../../../../../backend/src/types/event-bus.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,yBAAyB;IACzB,sBAAsB;IACtB,YAAY;IACZ,uEAAuE;IACvE,uEAAuE;IACvE,sEAAsE;IACtE,gEAAgE;IAChE,EAAE;IACF,kEAAkE;IAClE,gEAAgE;IAChE,wEAAwE;IACxE,kEAAkE;IAClE,qEAAqE;IACrE,kDAAkD;IAClD,qEAAqE;IACrE,kEAAkE;IAClE,EAAE;IACF,iEAAiE;IACjE,mEAAmE;IACnE,WAAW;IACX,+BAA+B;IAC/B,uBAAuB;IACvB,YAAY;IACZ,cAAc;IACd,gBAAgB;IAChB,uBAAuB;IACvB,wBAAwB;IACxB,iBAAiB;IACjB,mEAAmE;IACnE,uEAAuE;IACvE,sEAAsE;IACtE,sBAAsB;IACtB,sEAAsE;IACtE,wEAAwE;IACxE,wBAAwB;IACxB,8EAA8E;IAC9E,wBAAwB;IAExB,2BAA2B;IAC3B,gBAAgB;IAChB,eAAe;IACf,cAAc;IACd,qBAAqB;IACrB,6BAA6B;IAC7B,gBAAgB;IAChB,aAAa;IACb,gBAAgB;IAEhB,mDAAmD;IACnD,eAAe;IACf,WAAW;IACX,eAAe;IACf,cAAc;IACd,0BAA0B;IAC1B,qBAAqB;IAErB,6EAA6E;IAC7E,qEAAqE;IACrE,iFAAiF;IACjF,wEAAwE;IACxE,qBAAqB;IACrB,eAAe;IAEf,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,0CAA0C;IAC1C,oBAAoB;IACpB,eAAe;IACf,mBAAmB;IAEnB,yEAAyE;IACzE,kEAAkE;IAClE,uEAAuE;IACvE,+DAA+D;IAC/D,uEAAuE;IACvE,yEAAyE;IACzE,iBAAiB;IACjB,sBAAsB;IAEtB,4DAA4D;IAC5D,2EAA2E;IAC3E,2EAA2E;IAC3E,yEAAyE;IACzE,wEAAwE;IACxE,mEAAmE;IACnE,0DAA0D;IAC1D,iBAAiB;IAEjB,iCAAiC;IACjC,sBAAsB;IACtB,sBAAsB;IACtB,qBAAqB;IAErB,0EAA0E;IAC1E,0EAA0E;IAC1E,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,6EAA6E;IAC7E,0BAA0B;IAE1B,mEAAmE;IACnE,qEAAqE;IACrE,mEAAmE;IACnE,qEAAqE;IACrE,8DAA8D;IAC9D,mEAAmE;IACnE,oEAAoE;IACpE,wBAAwB;IAExB,wEAAwE;IACxE,oEAAoE;IACpE,qEAAqE;IACrE,kEAAkE;IAClE,oEAAoE;IACpE,qEAAqE;IACrE,oEAAoE;IACpE,kEAAkE;IAClE,qEAAqE;IACrE,gEAAgE;IAChE,oEAAoE;IACpE,qFAAqF;IACrF,sBAAsB;IAEtB,8DAA8D;IAC9D,mEAAmE;IACnE,wEAAwE;IACxE,wEAAwE;IACxE,+BAA+B;IAC/B,sBAAsB;IAEtB,uEAAuE;IACvE,4EAA4E;IAC5E,wEAAwE;IACxE,wEAAwE;IACxE,iDAAiD;IACjD,sBAAsB;CACd,CAAC;AAcX;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA2B,IAAI,GAAG,CAAC;IAClE,gBAAgB;IAChB,aAAa;IACb,gBAAgB;IAChB,qBAAqB;IACrB,YAAY;IACZ,+BAA+B;IAC/B,uBAAuB;IACvB,gBAAgB;IAChB,wBAAwB;IACxB,yEAAyE;IACzE,sDAAsD;IACtD,sBAAsB;IACtB,+EAA+E;IAC/E,wBAAwB;IACxB,sBAAsB;IACtB,4EAA4E;IAC5E,WAAW;IACX,eAAe;IACf,cAAc;IACd,0BAA0B;IAC1B,eAAe;IACf,qBAAqB;IACrB,2EAA2E;IAC3E,wEAAwE;IACxE,qBAAqB;IACrB,eAAe;IACf,oBAAoB;IACpB,eAAe;IACf,mBAAmB;IACnB,6DAA6D;IAC7D,2CAA2C;IAC3C,iBAAiB;IACjB,sBAAsB;IACtB,qEAAqE;IACrE,sEAAsE;IACtE,iBAAiB;IACjB,0EAA0E;IAC1E,sEAAsE;IACtE,0EAA0E;IAC1E,0BAA0B;IAC1B,sEAAsE;IACtE,mEAAmE;IACnE,6CAA6C;IAC7C,wBAAwB;IACxB,oEAAoE;IACpE,mEAAmE;IACnE,4DAA4D;IAC5D,sBAAsB;IACtB,uDAAuD;IACvD,sBAAsB;IACtB,8DAA8D;IAC9D,sBAAsB;CACvB,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA2B,IAAI,GAAG,CAAC;IAC9D,sBAAsB;IACtB,YAAY;IACZ,cAAc;IACd,uBAAuB;IACvB,iBAAiB;IACjB,wBAAwB;IACxB,gBAAgB;IAChB,eAAe;IACf,cAAc;IACd,6BAA6B;IAC7B,sBAAsB;IACtB,qBAAqB;CACtB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAA6B;IAC/D,OAAO,oBAAoB,CAAC,GAAG,CAAC,SAAsB,CAAC,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC1C,CAAC;AA+LD,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAkB,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B,CAAC,KAAc;IAC3D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,KAAgC,CAAC;IAE/C,wDAAwD;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6BAA6B;IAC7B,IAAI,OAAO,KAAK,CAAC,iBAAiB,KAAK,QAAQ,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/F,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+BAA+B;IAC/B,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;YAClE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oCAAoC;IACpC,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;QACrF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -48,6 +48,13 @@ export interface ProjectTicketFields {
|
|
|
48
48
|
* autopilot's triage; it is offered again afterwards. Absent / null = not deferred.
|
|
49
49
|
*/
|
|
50
50
|
deferUntil?: string | null;
|
|
51
|
+
/**
|
|
52
|
+
* Why the ticket is on hold (the owner's words, e.g. "do not merge PR #1138").
|
|
53
|
+
* A held ticket's PR / branch / worktree may only be closed and removed:
|
|
54
|
+
* follow-up tickets that reference them are held too and merge-style
|
|
55
|
+
* decision cards about them are refused (crewly#1369). Absent / null = not held.
|
|
56
|
+
*/
|
|
57
|
+
hold?: string | null;
|
|
51
58
|
}
|
|
52
59
|
/** Frontmatter keys the service writes, in the order new files list them. */
|
|
53
60
|
export declare const OWNED_TICKET_FIELDS: ReadonlyArray<keyof ProjectTicketFields>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-ticket.types.d.ts","sourceRoot":"","sources":["../../../../../backend/src/types/project-ticket.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,oCAAoC;AACpC,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,wBAAwB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAErF,mCAAmC;AACnC,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzF,2DAA2D;AAC3D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,iEAAiE;IACjE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,mEAAmE;IACnE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,oFAAoF;IACpF,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,8DAA8D;IAC9D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kFAAkF;IAClF,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,2EAA2E;IAC3E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"project-ticket.types.d.ts","sourceRoot":"","sources":["../../../../../backend/src/types/project-ticket.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-ticket.types.js","sourceRoot":"","sources":["../../../../../backend/src/types/project-ticket.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"project-ticket.types.js","sourceRoot":"","sources":["../../../../../backend/src/types/project-ticket.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAsD3D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAA6C;IAC3E,IAAI;IACJ,OAAO;IACP,QAAQ;IACR,UAAU;IACV,UAAU;IACV,MAAM;IACN,QAAQ;IACR,aAAa;IACb,WAAW;IACX,WAAW;IACX,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,MAAM;CACP,CAAC;AAwCF;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAA0E;IAC/G,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC;IAC9C,KAAK,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC;IAC9C,WAAW,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC;IAChE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;IACtC,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,SAAS,EAAE,CAAC,SAAS,CAAC;CACvB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,wBAAwB,CAAC,QAA8B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/G,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,8BAA8B,CAAC,IAAyB,EAAE,EAAuB;IAC/F,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,8BAA8B,CAAC,KAAc;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,IAAI,CAAC;QACV,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,MAAM;YACT,OAAO,IAAI,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;QACd;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,CAAwB;IAChE,OAAQ,wBAAwB,CAAC,UAAgC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAA6C;IACjF,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,CAAC;IACxE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,GAAiC,CAAC;IAC9D,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,WAAW,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAClG,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -50,7 +50,7 @@ export interface RequestOpenItem {
|
|
|
50
50
|
/** ISO — when the agent said it */
|
|
51
51
|
createdAt: string;
|
|
52
52
|
status: OpenItemStatus;
|
|
53
|
-
/** Commitment: when it is due (ISO, local time resolved at extraction) */
|
|
53
|
+
/** Commitment: when it is due (ISO, local time resolved at extraction); owner question: when an answer is expected */
|
|
54
54
|
due?: string;
|
|
55
55
|
/** Commitment: whether `due` came from the text or is the default */
|
|
56
56
|
dueSource?: 'text' | 'default';
|
|
@@ -78,6 +78,13 @@ export interface RequestOpenItem {
|
|
|
78
78
|
gateDecisionId?: string;
|
|
79
79
|
/** Commitment waiting on the owner: the question item from the same message whose answer opens it (CREW-440) */
|
|
80
80
|
gateItemId?: string;
|
|
81
|
+
/**
|
|
82
|
+
* Question: a yes/no decision asked in prose ("should I close PR #12?").
|
|
83
|
+
* Without a card it is due ({@link RequestOpenItem.due}) an answer: the
|
|
84
|
+
* owner's next message in the thread resolves it, and silence past the due
|
|
85
|
+
* time is followed up by the stall watcher (crewly#1369).
|
|
86
|
+
*/
|
|
87
|
+
ownerQuestion?: boolean;
|
|
81
88
|
/** Question: the decision card it became (`D-<n>`) */
|
|
82
89
|
decisionId?: string;
|
|
83
90
|
/** Question: the owner's answer (option label or words) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-item.types.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/types/v2/open-item.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,gCAAgC;AAChC,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,eAAe,GACf,OAAO,GACP,SAAS,GACT,WAAW,GACX,UAAU,GACV,YAAY,GACZ,SAAS,GACT,WAAW,GACX,SAAS,CAAC;AAEd,8DAA8D;AAC9D,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,cAAc,CAA0E,CAAC;AAE7I,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"open-item.types.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/types/v2/open-item.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,gCAAgC;AAChC,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,eAAe,GACf,OAAO,GACP,SAAS,GACT,WAAW,GACX,UAAU,GACV,YAAY,GACZ,SAAS,GACT,WAAW,GACX,SAAS,CAAC;AAEd,8DAA8D;AAC9D,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,cAAc,CAA0E,CAAC;AAE7I,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,sHAAsH;IACtH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wGAAwG;IACxG,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+GAA+G;IAC/G,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6GAA6G;IAC7G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4FAA4F;IAC5F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gHAAgH;IAChH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|