crewly 1.20.152 → 1.20.154
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/README.md +21 -3
- package/config/constants.ts +78 -0
- package/config/hooks/agent-status/report.sh +78 -0
- package/config/hooks/control-plane-guard/pretooluse-bash.sh +241 -0
- package/config/orchestrator_tasks/prompts/assign-task-orchestrator-prompt-template.md +19 -49
- package/config/orchestrator_tasks/prompts/checkin-orchestrator-prompt-template.md +25 -125
- package/config/orchestrator_tasks/prompts/project-start-orchestrator-prompt-template.md +29 -100
- package/config/roles/orchestrator/prompt.md +25 -2
- package/config/roles/team-leader/prompt.md +19 -3
- package/config/roles/team-leader/role.json +1 -1
- package/config/roles/team-leader/tl-addon.md +12 -3
- package/config/skills/agent/core/complete-task/SKILL.md +1 -1
- package/config/skills/agent/core/project-tickets/SKILL.md +127 -0
- package/config/skills/agent/core/project-tickets/execute.sh +182 -0
- package/config/skills/agent/core/project-tickets/execute.test.sh +116 -0
- package/config/skills/agent/core/recall/SKILL.md +1 -1
- package/config/skills/agent/core/recall/execute.sh +7 -0
- package/config/skills/agent/core/report-status/SKILL.md +3 -2
- package/config/skills/agent/core/report-status/execute.sh +37 -15
- package/config/skills/agent/core/split-ticket/SKILL.md +62 -0
- package/config/skills/agent/core/split-ticket/execute.sh +87 -0
- package/config/skills/agent/core/split-ticket/execute.test.sh +77 -0
- package/config/skills/agent/core/standing-update/SKILL.md +96 -0
- package/config/skills/agent/core/standing-update/execute.sh +107 -0
- package/config/skills/agent/onboarding/materialize-team/SKILL.md +1 -1
- package/config/skills/agent/onboarding/recommend-team/SKILL.md +1 -1
- package/config/skills/orchestrator/delegate-task/SKILL.md +4 -3
- package/config/skills/orchestrator/render-verdict/SKILL.md +62 -0
- package/config/skills/orchestrator/render-verdict/execute.sh +47 -0
- package/config/skills/orchestrator/render-verdict/execute.test.sh +121 -0
- package/config/skills/orchestrator/wiki-migrate/SKILL.md +0 -1
- package/config/skills/team-leader/aggregate-results/SKILL.md +1 -1
- package/config/skills/team-leader/assign-ticket/SKILL.md +47 -0
- package/config/skills/team-leader/assign-ticket/execute.sh +59 -0
- package/config/skills/team-leader/assign-ticket/execute.test.sh +64 -0
- package/config/skills/team-leader/decompose-goal/SKILL.md +4 -4
- package/config/skills/team-leader/delegate-task/SKILL.md +1 -1
- package/config/skills/team-leader/verify-output/SKILL.md +2 -2
- package/config/sops/developer/git-workflow.md +2 -1
- package/dist/backend/backend/src/constants.d.ts +451 -1
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +442 -2
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts +27 -0
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +55 -0
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.routes.d.ts +13 -0
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.routes.js +19 -0
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/api.controller.d.ts +0 -12
- package/dist/backend/backend/src/controllers/api.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/api.controller.js +0 -44
- package/dist/backend/backend/src/controllers/api.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts +27 -5
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.js +55 -15
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.routes.js +2 -0
- package/dist/backend/backend/src/controllers/approvals/approvals.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/expert/expert.controller.d.ts +13 -0
- package/dist/backend/backend/src/controllers/expert/expert.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/expert/expert.controller.js +67 -9
- package/dist/backend/backend/src/controllers/expert/expert.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts +41 -0
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js +146 -0
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.d.ts +20 -0
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.js +29 -0
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/project/project.controller.d.ts +2 -2
- package/dist/backend/backend/src/controllers/project/project.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project/project.controller.js +24 -7
- package/dist/backend/backend/src/controllers/project/project.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/project/project.routes.d.ts +2 -2
- package/dist/backend/backend/src/controllers/project/project.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project/project.routes.js +3 -36
- package/dist/backend/backend/src/controllers/project/project.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +93 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +252 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +34 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +51 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/request-types.d.ts +13 -0
- package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/standing/standing.controller.d.ts +49 -0
- package/dist/backend/backend/src/controllers/standing/standing.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/standing/standing.controller.js +100 -0
- package/dist/backend/backend/src/controllers/standing/standing.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +38 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +143 -8
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js +6 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts +2 -0
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +26 -6
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts +18 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +56 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts +1 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.js +3 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/types.d.ts +1 -2
- package/dist/backend/backend/src/controllers/types.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +2 -3
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +2 -3
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/worktree-janitor/worktree-janitor.routes.d.ts +29 -0
- package/dist/backend/backend/src/controllers/worktree-janitor/worktree-janitor.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/worktree-janitor/worktree-janitor.routes.js +63 -0
- package/dist/backend/backend/src/controllers/worktree-janitor/worktree-janitor.routes.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts +7 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +214 -9
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/middleware/api-token.middleware.d.ts +29 -0
- package/dist/backend/backend/src/middleware/api-token.middleware.d.ts.map +1 -1
- package/dist/backend/backend/src/middleware/api-token.middleware.js +38 -0
- package/dist/backend/backend/src/middleware/api-token.middleware.js.map +1 -1
- package/dist/backend/backend/src/models/index.d.ts +0 -1
- package/dist/backend/backend/src/models/index.d.ts.map +1 -1
- package/dist/backend/backend/src/models/index.js +0 -1
- package/dist/backend/backend/src/models/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +27 -3
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.d.ts +6 -2
- package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.d.ts.map +1 -1
- package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.js +6 -2
- package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +28 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +93 -34
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +169 -0
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +231 -0
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +1 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +9 -0
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +16 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +50 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts +9 -1
- package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux-command.service.js +12 -2
- package/dist/backend/backend/src/services/agent/tmux-command.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js +9 -8
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/active-work.module.d.ts +75 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/active-work.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/active-work.module.js +89 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/active-work.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +18 -3
- package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.js +28 -4
- package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +3 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js +3 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/project-reference.module.js +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +12 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +14 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +11 -7
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/session-briefing.module.d.ts +41 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/session-briefing.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/session-briefing.module.js +44 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/session-briefing.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts +67 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.js +146 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-template.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-template.service.js +9 -7
- package/dist/backend/backend/src/services/ai/prompt-template.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +7 -0
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/waiting-actions-inbound.service.d.ts +128 -0
- package/dist/backend/backend/src/services/cloud/waiting-actions-inbound.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/waiting-actions-inbound.service.js +279 -0
- package/dist/backend/backend/src/services/cloud/waiting-actions-inbound.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/waiting-items-sync.service.d.ts +122 -0
- package/dist/backend/backend/src/services/cloud/waiting-items-sync.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/waiting-items-sync.service.js +261 -0
- package/dist/backend/backend/src/services/cloud/waiting-items-sync.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/waiting-items.contract.d.ts +101 -0
- package/dist/backend/backend/src/services/cloud/waiting-items.contract.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/waiting-items.contract.js +113 -0
- package/dist/backend/backend/src/services/cloud/waiting-items.contract.js.map +1 -0
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts +7 -0
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -1
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js +9 -1
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -1
- package/dist/backend/backend/src/services/core/logger.service.d.ts +21 -0
- package/dist/backend/backend/src/services/core/logger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/logger.service.js +42 -4
- package/dist/backend/backend/src/services/core/logger.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +1 -5
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +5 -162
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +15 -9
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/index.d.ts +0 -4
- package/dist/backend/backend/src/services/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/index.js +0 -4
- package/dist/backend/backend/src/services/index.js.map +1 -1
- package/dist/backend/backend/src/services/intent-task/intent-task.service.d.ts +1 -1
- package/dist/backend/backend/src/services/intent-task/intent-task.service.js +1 -1
- package/dist/backend/backend/src/services/mcp-server.d.ts +19 -6
- package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -1
- package/dist/backend/backend/src/services/mcp-server.js +46 -16
- package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
- package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts.map +1 -1
- package/dist/backend/backend/src/services/mcp-tool-definitions.js +3 -2
- package/dist/backend/backend/src/services/mcp-tool-definitions.js.map +1 -1
- package/dist/backend/backend/src/services/memory/standing-answers.service.d.ts +247 -0
- package/dist/backend/backend/src/services/memory/standing-answers.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/standing-answers.service.js +534 -0
- package/dist/backend/backend/src/services/memory/standing-answers.service.js.map +1 -0
- package/dist/backend/backend/src/services/memory/standing-refresh.service.d.ts +104 -0
- package/dist/backend/backend/src/services/memory/standing-refresh.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/standing-refresh.service.js +218 -0
- package/dist/backend/backend/src/services/memory/standing-refresh.service.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts +35 -0
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +99 -1
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/agent-attention-registry.d.ts +75 -0
- package/dist/backend/backend/src/services/monitoring/agent-attention-registry.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/agent-attention-registry.js +80 -0
- package/dist/backend/backend/src/services/monitoring/agent-attention-registry.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/agent-attention.d.ts +114 -0
- package/dist/backend/backend/src/services/monitoring/agent-attention.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/agent-attention.js +165 -0
- package/dist/backend/backend/src/services/monitoring/agent-attention.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/agent-hook-state.d.ts +76 -0
- package/dist/backend/backend/src/services/monitoring/agent-hook-state.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/agent-hook-state.js +96 -0
- package/dist/backend/backend/src/services/monitoring/agent-hook-state.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +1 -1
- package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.d.ts +1 -1
- package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.js +13 -3
- package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.js +0 -4
- package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.js.map +1 -1
- package/dist/backend/backend/src/services/project/project-search.service.d.ts +22 -16
- package/dist/backend/backend/src/services/project/project-search.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project/project-search.service.js +30 -53
- package/dist/backend/backend/src/services/project/project-search.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts +381 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +839 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts +214 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +466 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-file.d.ts +121 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-file.js +468 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-file.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-folder-lock.d.ts +69 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-folder-lock.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-folder-lock.js +194 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-folder-lock.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-tracking.d.ts +47 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-tracking.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-tracking.js +83 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-tracking.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/v1-task-migration.d.ts +97 -0
- package/dist/backend/backend/src/services/project-tickets/v1-task-migration.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/v1-task-migration.js +201 -0
- package/dist/backend/backend/src/services/project-tickets/v1-task-migration.js.map +1 -0
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +86 -22
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +173 -28
- 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 +19 -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 +33 -4
- 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 +24 -12
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js +87 -19
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-adapter.d.ts +1 -1
- package/dist/backend/backend/src/services/runtime-adapter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-adapter.js +5 -9
- package/dist/backend/backend/src/services/runtime-adapter.js.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +26 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +33 -2
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +5 -0
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.js +8 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts +18 -0
- package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js +23 -0
- package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-backend.interface.d.ts +8 -0
- package/dist/backend/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-backend.interface.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts +12 -2
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.js +14 -2
- package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +2 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.d.ts +239 -0
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.js +395 -0
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.js.map +1 -0
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-stats.d.ts +53 -0
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-stats.d.ts.map +1 -0
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-stats.js +83 -0
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-stats.js.map +1 -0
- package/dist/backend/backend/src/services/task-pool/give-up/stop-classifier.d.ts +93 -0
- package/dist/backend/backend/src/services/task-pool/give-up/stop-classifier.d.ts.map +1 -0
- package/dist/backend/backend/src/services/task-pool/give-up/stop-classifier.js +244 -0
- package/dist/backend/backend/src/services/task-pool/give-up/stop-classifier.js.map +1 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +145 -19
- 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 +321 -53
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.js +11 -6
- package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +21 -4
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +53 -3
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation-router.service.d.ts +85 -6
- package/dist/backend/backend/src/services/v3/escalation-router.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation-router.service.js +188 -9
- package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation.service.js +1 -1
- package/dist/backend/backend/src/services/v3/escalation.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-executor.service.js +2 -2
- package/dist/backend/backend/src/services/v3/mission-executor.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.d.ts +184 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.js +420 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts +61 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.js +100 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.d.ts +36 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.js +239 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts +152 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js +209 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts +194 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js +85 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js.map +1 -0
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts +6 -4
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +15 -6
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request-status-update.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js +14 -5
- package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.d.ts +19 -0
- package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.js +38 -0
- package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-ask-classifier.d.ts +82 -0
- package/dist/backend/backend/src/services/v3/ticket-ask-classifier.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-ask-classifier.js +172 -0
- package/dist/backend/backend/src/services/v3/ticket-ask-classifier.js.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js +2 -0
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-intake-log.d.ts +87 -0
- package/dist/backend/backend/src/services/v3/ticket-intake-log.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-intake-log.js +116 -0
- package/dist/backend/backend/src/services/v3/ticket-intake-log.js.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts +133 -15
- package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-intake.service.js +263 -45
- package/dist/backend/backend/src/services/v3/ticket-intake.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts +3 -1
- package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-review.service.js +6 -2
- package/dist/backend/backend/src/services/v3/ticket-review.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/v3-data.service.js +9 -3
- package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +41 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +51 -2
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +13 -5
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +10 -9
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
- package/dist/backend/backend/src/services/worktree/workitem-worktree.service.d.ts +241 -0
- package/dist/backend/backend/src/services/worktree/workitem-worktree.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/worktree/workitem-worktree.service.js +511 -0
- package/dist/backend/backend/src/services/worktree/workitem-worktree.service.js.map +1 -0
- package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.d.ts +70 -0
- package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js +121 -0
- package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/worktree/worktree-git.d.ts +260 -0
- package/dist/backend/backend/src/services/worktree/worktree-git.d.ts.map +1 -0
- package/dist/backend/backend/src/services/worktree/worktree-git.js +569 -0
- package/dist/backend/backend/src/services/worktree/worktree-git.js.map +1 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.git.d.ts +131 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.git.d.ts.map +1 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.git.js +238 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.git.js.map +1 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +241 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +504 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -0
- package/dist/backend/backend/src/types/event-bus.types.d.ts +1 -1
- 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/index.d.ts +23 -18
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/types/intent-task.types.d.ts +1 -1
- package/dist/backend/backend/src/types/intent-task.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/project-ticket.types.d.ts +132 -0
- package/dist/backend/backend/src/types/project-ticket.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/project-ticket.types.js +120 -0
- package/dist/backend/backend/src/types/project-ticket.types.js.map +1 -0
- package/dist/backend/backend/src/types/review-reason.types.d.ts +3 -1
- package/dist/backend/backend/src/types/review-reason.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/review-reason.types.js +1 -0
- package/dist/backend/backend/src/types/review-reason.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +2 -2
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +1 -1
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/reconcile.types.d.ts +7 -0
- package/dist/backend/backend/src/types/v2/reconcile.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/reconcile.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.d.ts +18 -0
- package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.js +1 -0
- package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/ticket.types.d.ts +6 -2
- package/dist/backend/backend/src/types/v2/ticket.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/ticket.types.js +1 -1
- package/dist/backend/backend/src/types/v2/ticket.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +169 -14
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +263 -44
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/backend/src/utils/agent-caller.utils.d.ts +33 -0
- package/dist/backend/backend/src/utils/agent-caller.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/agent-caller.utils.js +37 -0
- package/dist/backend/backend/src/utils/agent-caller.utils.js.map +1 -1
- package/dist/backend/backend/src/utils/secret-env.d.ts +61 -0
- package/dist/backend/backend/src/utils/secret-env.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/secret-env.js +89 -0
- package/dist/backend/backend/src/utils/secret-env.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +71 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +77 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +451 -1
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +442 -2
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/models/index.d.ts +0 -1
- package/dist/cli/backend/src/models/index.d.ts.map +1 -1
- package/dist/cli/backend/src/models/index.js +0 -1
- package/dist/cli/backend/src/models/index.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +28 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +93 -34
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +169 -0
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +231 -0
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +16 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +50 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-builder.service.js +9 -8
- package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/active-work.module.d.ts +75 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/active-work.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/active-work.module.js +89 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/active-work.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +18 -3
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +28 -4
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +12 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +14 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +11 -7
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/session-briefing.module.d.ts +41 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/session-briefing.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/session-briefing.module.js +44 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/session-briefing.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts +67 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.js +146 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.js.map +1 -0
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.js +1 -0
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.d.ts +7 -0
- package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -1
- package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.js +9 -1
- package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -1
- package/dist/cli/backend/src/services/core/logger.service.d.ts +21 -0
- package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/logger.service.js +42 -4
- package/dist/cli/backend/src/services/core/logger.service.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +1 -5
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +5 -162
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/mcp-server.d.ts +19 -6
- package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -1
- package/dist/cli/backend/src/services/mcp-server.js +46 -16
- package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
- package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts.map +1 -1
- package/dist/cli/backend/src/services/mcp-tool-definitions.js +3 -2
- package/dist/cli/backend/src/services/mcp-tool-definitions.js.map +1 -1
- package/dist/cli/backend/src/services/memory/standing-answers.service.d.ts +247 -0
- package/dist/cli/backend/src/services/memory/standing-answers.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/standing-answers.service.js +534 -0
- package/dist/cli/backend/src/services/memory/standing-answers.service.js.map +1 -0
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts +35 -0
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js +99 -1
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/agent-attention-registry.d.ts +75 -0
- package/dist/cli/backend/src/services/monitoring/agent-attention-registry.d.ts.map +1 -0
- package/dist/cli/backend/src/services/monitoring/agent-attention-registry.js +80 -0
- package/dist/cli/backend/src/services/monitoring/agent-attention-registry.js.map +1 -0
- package/dist/cli/backend/src/services/monitoring/agent-attention.d.ts +114 -0
- package/dist/cli/backend/src/services/monitoring/agent-attention.d.ts.map +1 -0
- package/dist/cli/backend/src/services/monitoring/agent-attention.js +165 -0
- package/dist/cli/backend/src/services/monitoring/agent-attention.js.map +1 -0
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts +214 -0
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +466 -0
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-file.d.ts +121 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-file.js +468 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-file.js.map +1 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-folder-lock.d.ts +69 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-folder-lock.d.ts.map +1 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-folder-lock.js +194 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-folder-lock.js.map +1 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-tracking.d.ts +47 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-tracking.d.ts.map +1 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-tracking.js +83 -0
- package/dist/cli/backend/src/services/project-tickets/ticket-tracking.js.map +1 -0
- package/dist/cli/backend/src/services/project-tickets/v1-task-migration.d.ts +97 -0
- package/dist/cli/backend/src/services/project-tickets/v1-task-migration.d.ts.map +1 -0
- package/dist/cli/backend/src/services/project-tickets/v1-task-migration.js +201 -0
- package/dist/cli/backend/src/services/project-tickets/v1-task-migration.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +26 -1
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +33 -2
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +5 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.js +8 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +18 -0
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +23 -0
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +8 -0
- package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts +12 -2
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-command-helper.js +14 -2
- package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +145 -19
- 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 +321 -53
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/template/template.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/template/template.service.js +11 -6
- package/dist/cli/backend/src/services/template/template.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +85 -6
- package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/escalation-router.service.js +188 -9
- package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/mission-executor.service.js +2 -2
- package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +6 -4
- package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +15 -6
- package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.d.ts +19 -0
- package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.js +38 -0
- package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-ask-classifier.d.ts +82 -0
- package/dist/cli/backend/src/services/v3/ticket-ask-classifier.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-ask-classifier.js +172 -0
- package/dist/cli/backend/src/services/v3/ticket-ask-classifier.js.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js +2 -0
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-intake-log.d.ts +87 -0
- package/dist/cli/backend/src/services/v3/ticket-intake-log.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-intake-log.js +116 -0
- package/dist/cli/backend/src/services/v3/ticket-intake-log.js.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts +133 -15
- package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-intake.service.js +263 -45
- package/dist/cli/backend/src/services/v3/ticket-intake.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts +3 -1
- package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-review.service.js +6 -2
- package/dist/cli/backend/src/services/v3/ticket-review.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/v3-data.service.js +9 -3
- package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -1
- package/dist/cli/backend/src/services/worktree/worktree-git.d.ts +260 -0
- package/dist/cli/backend/src/services/worktree/worktree-git.d.ts.map +1 -0
- package/dist/cli/backend/src/services/worktree/worktree-git.js +569 -0
- package/dist/cli/backend/src/services/worktree/worktree-git.js.map +1 -0
- package/dist/cli/backend/src/types/event-bus.types.d.ts +1 -1
- 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/index.d.ts +23 -18
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/types/intent-task.types.d.ts +1 -1
- package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/project-ticket.types.d.ts +132 -0
- package/dist/cli/backend/src/types/project-ticket.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/project-ticket.types.js +120 -0
- package/dist/cli/backend/src/types/project-ticket.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/index.d.ts +2 -2
- package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/index.js +1 -1
- package/dist/cli/backend/src/types/v2/index.js.map +1 -1
- package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +7 -0
- package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.d.ts +18 -0
- package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.js +1 -0
- package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/ticket.types.d.ts +6 -2
- package/dist/cli/backend/src/types/v2/ticket.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/ticket.types.js +1 -1
- package/dist/cli/backend/src/types/v2/ticket.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +169 -14
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +263 -44
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/utils/secret-env.d.ts +61 -0
- package/dist/cli/backend/src/utils/secret-env.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/secret-env.js +89 -0
- package/dist/cli/backend/src/utils/secret-env.js.map +1 -0
- package/dist/cli/cli/src/commands/onboard.d.ts +1 -1
- package/dist/cli/cli/src/commands/onboard.js +3 -3
- package/dist/cli/cli/src/commands/onboard.js.map +1 -1
- package/dist/cli/cli/src/commands/publish.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/publish.js +4 -5
- package/dist/cli/cli/src/commands/publish.js.map +1 -1
- package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/service.js +5 -2
- package/dist/cli/cli/src/commands/service.js.map +1 -1
- package/dist/cli/cli/src/commands/tickets.d.ts +60 -0
- package/dist/cli/cli/src/commands/tickets.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/tickets.js +111 -0
- package/dist/cli/cli/src/commands/tickets.js.map +1 -0
- package/dist/cli/cli/src/index.js +12 -0
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/cli/src/utils/archive-creator.d.ts +7 -3
- package/dist/cli/cli/src/utils/archive-creator.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/archive-creator.js +17 -5
- package/dist/cli/cli/src/utils/archive-creator.js.map +1 -1
- package/dist/cli/cli/src/utils/cloud-submit.d.ts +1 -1
- package/dist/cli/cli/src/utils/cloud-submit.js +1 -1
- package/dist/cli/cli/src/utils/gh-submit.d.ts +10 -1
- package/dist/cli/cli/src/utils/gh-submit.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/gh-submit.js +20 -4
- package/dist/cli/cli/src/utils/gh-submit.js.map +1 -1
- package/dist/cli/cli/src/utils/package-validator.d.ts +29 -6
- package/dist/cli/cli/src/utils/package-validator.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/package-validator.js +88 -36
- package/dist/cli/cli/src/utils/package-validator.js.map +1 -1
- package/dist/cli/config/constants.d.ts +71 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +77 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/skills/marketplace-registry.d.ts +143 -0
- package/dist/cli/config/skills/marketplace-registry.d.ts.map +1 -0
- package/dist/cli/config/skills/marketplace-registry.js +192 -0
- package/dist/cli/config/skills/marketplace-registry.js.map +1 -0
- package/frontend/dist/assets/index-8d4b3ad2.js +4951 -0
- package/frontend/dist/assets/index-b6aded4c.css +42 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/config/task_starters/build_e2e_test_plan_prompt.json +0 -51
- package/config/task_starters/build_tasks_prompt.json +0 -55
- package/config/task_starters/prompts/build_tasks_step1_milestone_structure.md +0 -274
- package/config/task_starters/prompts/e2e_test_plan_step1_build_tests.md +0 -391
- package/config/task_starters/prompts/e2e_test_plan_step2_run_tests.md +0 -240
- package/config/templates/customer-loyalty-team.json +0 -44
- package/config/templates/dtc-viral-content-team.json +0 -58
- package/config/templates/expert-innovation-team.json +0 -60
- package/config/templates/pragmatic-mvp-dev-team.json +0 -58
- package/config/templates/pro-sops/norms/content-production-pipeline.md +0 -39
- package/config/templates/pro-sops/norms/customer-onboarding-sop.md +0 -40
- package/dist/backend/backend/src/controllers/task-management/tickets.controller.d.ts +0 -13
- package/dist/backend/backend/src/controllers/task-management/tickets.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/task-management/tickets.controller.js +0 -214
- package/dist/backend/backend/src/controllers/task-management/tickets.controller.js.map +0 -1
- package/dist/backend/backend/src/models/Ticket.d.ts +0 -24
- package/dist/backend/backend/src/models/Ticket.d.ts.map +0 -1
- package/dist/backend/backend/src/models/Ticket.js +0 -102
- package/dist/backend/backend/src/models/Ticket.js.map +0 -1
- package/dist/backend/backend/src/services/agent/task-planning.service.d.ts +0 -134
- package/dist/backend/backend/src/services/agent/task-planning.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/task-planning.service.js +0 -291
- package/dist/backend/backend/src/services/agent/task-planning.service.js.map +0 -1
- package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.d.ts +0 -71
- package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.js +0 -304
- package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.js.map +0 -1
- package/dist/backend/backend/src/services/project/task-folder.service.d.ts +0 -48
- package/dist/backend/backend/src/services/project/task-folder.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/project/task-folder.service.js +0 -193
- package/dist/backend/backend/src/services/project/task-folder.service.js.map +0 -1
- package/dist/backend/backend/src/services/project/task.service.d.ts +0 -47
- package/dist/backend/backend/src/services/project/task.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/project/task.service.js +0 -253
- package/dist/backend/backend/src/services/project/task.service.js.map +0 -1
- package/dist/backend/backend/src/services/project/ticket-editor.service.d.ts +0 -130
- package/dist/backend/backend/src/services/project/ticket-editor.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/project/ticket-editor.service.js +0 -406
- package/dist/backend/backend/src/services/project/ticket-editor.service.js.map +0 -1
- package/dist/cli/backend/src/models/Ticket.d.ts +0 -24
- package/dist/cli/backend/src/models/Ticket.d.ts.map +0 -1
- package/dist/cli/backend/src/models/Ticket.js +0 -102
- package/dist/cli/backend/src/models/Ticket.js.map +0 -1
- package/frontend/dist/assets/index-2bdb57b9.css +0 -42
- package/frontend/dist/assets/index-54f1061c.js +0 -4963
|
@@ -13,7 +13,7 @@ import { ClaimService } from './claim.service.js';
|
|
|
13
13
|
import { LoggerService } from '../core/logger.service.js';
|
|
14
14
|
import { formatError } from '../../utils/format-error.js';
|
|
15
15
|
import { TeamBudgetExceededError, } from '../budget/team-budget-gate.service.js';
|
|
16
|
-
import { isWorkItem, isValidWorkItemTransition,
|
|
16
|
+
import { isWorkItem, isValidWorkItemTransition, checkTransitionPermission, normalizeTransitionActor, describeTransitionActor, getWorkItemReviewer, ForbiddenTransitionError, VERDICT_TRANSITIONS, WORK_ITEM_REVIEWER_KEY, LAST_REQUEUED_AT_METADATA_KEY, DISPOSITION_METADATA_KEY, DISPOSITION_REQUIRED_STATUSES, getWorkItemDisposition, WORK_ITEM_BLOCK_SOURCES, isExplicitlyBlocked, TERMINAL_WORK_ITEM_STATUSES, } from '../../types/v2/work-item.types.js';
|
|
17
17
|
import { createTaskClaim, } from '../../types/v2/claim.types.js';
|
|
18
18
|
import { orderForAgent } from './ticket-claim-policy.js';
|
|
19
19
|
import { SUPERSEDED_BY_METADATA_KEY } from '../v3/request-completion.js';
|
|
@@ -144,6 +144,37 @@ export class TaskPoolService {
|
|
|
144
144
|
setEventBusService(bus) {
|
|
145
145
|
this.eventBus = bus;
|
|
146
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Listeners told after a WorkItem is newly claimed (not for an
|
|
149
|
+
* already-held claim). There is no claim event on the bus; the claim sites
|
|
150
|
+
* are the HTTP controller, AgentAutoClaim and the boot path, so the hook
|
|
151
|
+
* lives here. Listeners run fire-and-forget: a slow or failing listener
|
|
152
|
+
* never delays or fails the claim. Used by the per-WorkItem worktree
|
|
153
|
+
* service (#814).
|
|
154
|
+
*/
|
|
155
|
+
claimListeners = [];
|
|
156
|
+
/**
|
|
157
|
+
* Register a claim listener (see {@link claimListeners}).
|
|
158
|
+
*
|
|
159
|
+
* @param listener - Called with the claimed WorkItem and the claiming agent
|
|
160
|
+
* @returns Unsubscribe function
|
|
161
|
+
*/
|
|
162
|
+
onClaimed(listener) {
|
|
163
|
+
this.claimListeners.push(listener);
|
|
164
|
+
return () => {
|
|
165
|
+
this.claimListeners = this.claimListeners.filter((l) => l !== listener);
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/** Fire claim listeners without awaiting them; errors are logged, never thrown. */
|
|
169
|
+
notifyClaimed(workItem, agentId) {
|
|
170
|
+
for (const listener of this.claimListeners) {
|
|
171
|
+
Promise.resolve()
|
|
172
|
+
.then(() => listener(workItem, agentId))
|
|
173
|
+
.catch((err) => {
|
|
174
|
+
this.logger.warn('Claim listener failed (non-fatal)', { workItemId: workItem.id, error: formatError(err) });
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
147
178
|
/**
|
|
148
179
|
* Wire the Request-linker reference used by {@link addToPool} to
|
|
149
180
|
* intrinsically link the new WI into its parent `Request.workItemIds[]`
|
|
@@ -897,6 +928,7 @@ export class TaskPoolService {
|
|
|
897
928
|
title: selected.title,
|
|
898
929
|
});
|
|
899
930
|
await this.noteTicketSelfClaim(claimedItem, agentId);
|
|
931
|
+
this.notifyClaimed(claimedItem, agentId);
|
|
900
932
|
return {
|
|
901
933
|
workItem: claimedItem,
|
|
902
934
|
claim,
|
|
@@ -980,6 +1012,7 @@ export class TaskPoolService {
|
|
|
980
1012
|
await this.storage.flush();
|
|
981
1013
|
this.logger.info('WorkItem claimed (specific)', { workItemId, agentId, claimId: claim.id });
|
|
982
1014
|
await this.noteTicketSelfClaim(claimedItem, agentId);
|
|
1015
|
+
this.notifyClaimed(claimedItem, agentId);
|
|
983
1016
|
return { workItem: claimedItem, claim };
|
|
984
1017
|
});
|
|
985
1018
|
}
|
|
@@ -1094,6 +1127,9 @@ export class TaskPoolService {
|
|
|
1094
1127
|
* `done_by_worker` and wake the TL for sign-off.
|
|
1095
1128
|
* - All other types (`cron_run`, `notify`, `reconcile`, `check`,
|
|
1096
1129
|
* `confirm`, `review`, ...) default to simple completion (`done`).
|
|
1130
|
+
* - Bridge-auto maintenance items (`metadata.autoCreated`) and
|
|
1131
|
+
* trigger-fired check-ins (`triggerId`) complete as `done` too —
|
|
1132
|
+
* nothing reviews them (#813).
|
|
1097
1133
|
*
|
|
1098
1134
|
* The default is overridable via `wi.metadata.requiresVerification`:
|
|
1099
1135
|
* - `true` — force verification path even for non-delegate types
|
|
@@ -1110,6 +1146,17 @@ export class TaskPoolService {
|
|
|
1110
1146
|
return true;
|
|
1111
1147
|
if (metaFlag === false)
|
|
1112
1148
|
return false;
|
|
1149
|
+
// #813: bridge-auto maintenance items get no review item (the bridge
|
|
1150
|
+
// re-scans on its own tick), so parking them in done_by_worker only
|
|
1151
|
+
// stranded them until the TTL auto-verified them. Complete them as done.
|
|
1152
|
+
if (wi.metadata?.['autoCreated'] === true)
|
|
1153
|
+
return false;
|
|
1154
|
+
// #813: a trigger-fired item (schedule-followup / watch-for-event) is a
|
|
1155
|
+
// check-in the agent set for itself, created as `delegate` by default.
|
|
1156
|
+
// Nothing reviewed them — 123 of 293 verified items in the live pool on
|
|
1157
|
+
// 2026-09-26 were these, verified with no review item. Complete as done.
|
|
1158
|
+
if (wi.triggerId)
|
|
1159
|
+
return false;
|
|
1113
1160
|
return wi.type === 'delegate';
|
|
1114
1161
|
}
|
|
1115
1162
|
/**
|
|
@@ -1264,6 +1311,11 @@ export class TaskPoolService {
|
|
|
1264
1311
|
* the actor is not permitted to perform `running → done`.
|
|
1265
1312
|
*/
|
|
1266
1313
|
async completeSimpleItem(workItemId, actorRole, result) {
|
|
1314
|
+
// #813: completing a review item renders a verdict on its source. Check
|
|
1315
|
+
// that this caller may render it BEFORE the review item itself is marked
|
|
1316
|
+
// done — otherwise a refused verdict leaves a "done" review and a source
|
|
1317
|
+
// that nobody reviewed.
|
|
1318
|
+
const verdictPlan = await this.planReviewVerdict(workItemId, actorRole, result);
|
|
1267
1319
|
await this.releaseClaim(workItemId, 'completed');
|
|
1268
1320
|
const updated = await this.transitionStatus(workItemId, 'done', actorRole, (wi) => {
|
|
1269
1321
|
if (result)
|
|
@@ -1282,40 +1334,26 @@ export class TaskPoolService {
|
|
|
1282
1334
|
//
|
|
1283
1335
|
// When a verify WI completes (metadata.verifyOf points at its source),
|
|
1284
1336
|
// propagate the verdict to the source via verifyItem so the source
|
|
1285
|
-
// moves done_by_worker → verified AND its own dependents unblock.
|
|
1286
|
-
// the
|
|
1287
|
-
//
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
: undefined;
|
|
1291
|
-
if (verifyOf) {
|
|
1337
|
+
// moves done_by_worker → verified AND its own dependents unblock.
|
|
1338
|
+
// #813: the verdict is rendered AS THE CALLER who completed the review
|
|
1339
|
+
// item (it used to be 'system', which let anyone's completion certify
|
|
1340
|
+
// the source). {@link planReviewVerdict} already checked the caller.
|
|
1341
|
+
if (verdictPlan) {
|
|
1292
1342
|
try {
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
const feedback = typeof result?.feedback === 'string' && result.feedback.trim()
|
|
1301
|
-
? result.feedback.trim()
|
|
1302
|
-
: typeof result?.summary === 'string'
|
|
1303
|
-
? result.summary
|
|
1304
|
-
: undefined;
|
|
1305
|
-
await this.verifyItem(verifyOf, 'system', rejected ? 'rejected' : 'verified', rejected ? feedback : undefined);
|
|
1306
|
-
this.logger.info('Verify WI complete → propagated to source', {
|
|
1307
|
-
verifyWorkItemId: workItemId,
|
|
1308
|
-
sourceWorkItemId: verifyOf,
|
|
1309
|
-
verdict: rejected ? 'rejected' : 'verified',
|
|
1310
|
-
});
|
|
1311
|
-
}
|
|
1343
|
+
await this.verifyItem(verdictPlan.sourceId, verdictPlan.reviewer, verdictPlan.verdict, verdictPlan.verdict === 'rejected' ? verdictPlan.feedback : undefined);
|
|
1344
|
+
this.logger.info('Verify WI complete → propagated to source', {
|
|
1345
|
+
verifyWorkItemId: workItemId,
|
|
1346
|
+
sourceWorkItemId: verdictPlan.sourceId,
|
|
1347
|
+
verdict: verdictPlan.verdict,
|
|
1348
|
+
reviewer: describeTransitionActor(verdictPlan.reviewer),
|
|
1349
|
+
});
|
|
1312
1350
|
}
|
|
1313
1351
|
catch (err) {
|
|
1314
1352
|
// Propagation is best-effort — a failed propagate must NOT roll
|
|
1315
1353
|
// back the verify WI's own completion.
|
|
1316
1354
|
this.logger.warn('Verify-to-source propagation failed (non-fatal)', {
|
|
1317
1355
|
verifyWorkItemId: workItemId,
|
|
1318
|
-
sourceWorkItemId:
|
|
1356
|
+
sourceWorkItemId: verdictPlan.sourceId,
|
|
1319
1357
|
error: err instanceof Error ? err.message : String(err),
|
|
1320
1358
|
});
|
|
1321
1359
|
}
|
|
@@ -1331,6 +1369,130 @@ export class TaskPoolService {
|
|
|
1331
1369
|
}
|
|
1332
1370
|
return updated;
|
|
1333
1371
|
}
|
|
1372
|
+
/**
|
|
1373
|
+
* The verdict a review item's completion would render on its source, after
|
|
1374
|
+
* checking that the completing caller may render it (#813).
|
|
1375
|
+
*
|
|
1376
|
+
* A review item carries `metadata.verifyOf` = the source WorkItem id. The
|
|
1377
|
+
* caller completes the review as its assignee (`agent` role) or as the
|
|
1378
|
+
* orchestrator; on the source it acts as the REVIEWER, so the verdict is
|
|
1379
|
+
* checked as `team_lead`/`orchestrator` with the caller's session — the
|
|
1380
|
+
* reviewer rule then decides by identity, not by the claimed role.
|
|
1381
|
+
*
|
|
1382
|
+
* @param workItemId - The item being completed
|
|
1383
|
+
* @param actorInput - The caller completing it
|
|
1384
|
+
* @param result - The completion result (`verdict: 'rejected'` sends it back)
|
|
1385
|
+
* @returns The planned verdict, or null when this item reviews nothing that
|
|
1386
|
+
* is still awaiting review
|
|
1387
|
+
* @throws ForbiddenTransitionError when the caller may not render the verdict
|
|
1388
|
+
*/
|
|
1389
|
+
async planReviewVerdict(workItemId, actorInput, result) {
|
|
1390
|
+
const reviewItem = await this.storage.findWorkItem(workItemId);
|
|
1391
|
+
const verifyOf = reviewItem?.metadata && typeof reviewItem.metadata.verifyOf === 'string'
|
|
1392
|
+
? reviewItem.metadata.verifyOf
|
|
1393
|
+
: undefined;
|
|
1394
|
+
if (!verifyOf)
|
|
1395
|
+
return null;
|
|
1396
|
+
const source = await this.storage.findWorkItem(verifyOf);
|
|
1397
|
+
if (!source || source.status !== 'done_by_worker')
|
|
1398
|
+
return null;
|
|
1399
|
+
// Ticket loop Phase 3: a reviewer can send work back by completing the
|
|
1400
|
+
// review with `verdict: 'rejected'` (+ feedback).
|
|
1401
|
+
const verdict = result?.verdict === 'rejected' ? 'rejected' : 'verified';
|
|
1402
|
+
const feedback = typeof result?.feedback === 'string' && result.feedback.trim()
|
|
1403
|
+
? result.feedback.trim()
|
|
1404
|
+
: typeof result?.summary === 'string'
|
|
1405
|
+
? result.summary
|
|
1406
|
+
: undefined;
|
|
1407
|
+
const reviewer = TaskPoolService.reviewerActorFor(actorInput);
|
|
1408
|
+
// The review item's assignee is the reviewer of record for its source.
|
|
1409
|
+
await this.assertTransitionPermitted(source, verdict, reviewer, reviewItem?.target);
|
|
1410
|
+
// Persist the reviewer of record so the verdict below (and any later
|
|
1411
|
+
// audit) sees the same identity this check just accepted.
|
|
1412
|
+
if (reviewItem?.target && !getWorkItemReviewer(source)) {
|
|
1413
|
+
await this.storage.updateWorkItem(verifyOf, (wi) => {
|
|
1414
|
+
wi.metadata = { ...(wi.metadata ?? {}), [WORK_ITEM_REVIEWER_KEY]: reviewItem.target };
|
|
1415
|
+
});
|
|
1416
|
+
}
|
|
1417
|
+
return { sourceId: verifyOf, verdict, reviewer, ...(feedback ? { feedback } : {}) };
|
|
1418
|
+
}
|
|
1419
|
+
/**
|
|
1420
|
+
* Map the caller of a review item's completion to the actor that renders
|
|
1421
|
+
* the verdict on the source. `agent` → `team_lead` (it is reviewing, not
|
|
1422
|
+
* working); every other role is kept. A missing actor stays missing, so it
|
|
1423
|
+
* is refused.
|
|
1424
|
+
*
|
|
1425
|
+
* @param actorInput - The completing caller
|
|
1426
|
+
* @returns The reviewer actor (or undefined → refused by the gate)
|
|
1427
|
+
*/
|
|
1428
|
+
static reviewerActorFor(actorInput) {
|
|
1429
|
+
const actor = normalizeTransitionActor(actorInput);
|
|
1430
|
+
if (!actor)
|
|
1431
|
+
return actorInput;
|
|
1432
|
+
return {
|
|
1433
|
+
...actor,
|
|
1434
|
+
role: actor.role === 'agent' ? 'team_lead' : actor.role,
|
|
1435
|
+
via: actor.via ?? 'review-item-completion',
|
|
1436
|
+
};
|
|
1437
|
+
}
|
|
1438
|
+
/**
|
|
1439
|
+
* Run the closed permission gate for one transition and throw on refusal.
|
|
1440
|
+
*
|
|
1441
|
+
* For the verdict edges, an item that predates reviewer stamping gets its
|
|
1442
|
+
* reviewer from its review item (`<id>:verify:<id>`, targeted at the
|
|
1443
|
+
* reviewer when the bridge created it), so a lead can still review items
|
|
1444
|
+
* that were in flight when #813 shipped.
|
|
1445
|
+
*
|
|
1446
|
+
* @param item - The WorkItem as it is now
|
|
1447
|
+
* @param to - Target status
|
|
1448
|
+
* @param actorInput - The caller
|
|
1449
|
+
* @param reviewerHint - Reviewer of record when the caller already knows it
|
|
1450
|
+
* (the target of the review item being completed)
|
|
1451
|
+
* @throws ForbiddenTransitionError when refused
|
|
1452
|
+
*/
|
|
1453
|
+
async assertTransitionPermitted(item, to, actorInput, reviewerHint) {
|
|
1454
|
+
let subject = item;
|
|
1455
|
+
if (VERDICT_TRANSITIONS.has(`${item.status}→${to}`) && !getWorkItemReviewer(item)) {
|
|
1456
|
+
const reviewer = reviewerHint ?? (await this.storage.findWorkItem(`${item.id}:verify:${item.id}`))?.target;
|
|
1457
|
+
if (reviewer) {
|
|
1458
|
+
subject = { ...item, metadata: { ...(item.metadata ?? {}), [WORK_ITEM_REVIEWER_KEY]: reviewer } };
|
|
1459
|
+
}
|
|
1460
|
+
}
|
|
1461
|
+
const decision = checkTransitionPermission(subject, to, actorInput);
|
|
1462
|
+
if (!decision.allowed) {
|
|
1463
|
+
const actor = normalizeTransitionActor(actorInput);
|
|
1464
|
+
this.logger.warn('Refused WorkItem transition', {
|
|
1465
|
+
workItemId: item.id,
|
|
1466
|
+
from: item.status,
|
|
1467
|
+
to,
|
|
1468
|
+
actor: describeTransitionActor(actor),
|
|
1469
|
+
reason: decision.reason,
|
|
1470
|
+
});
|
|
1471
|
+
throw new ForbiddenTransitionError(item.id, item.status, to, actor, decision);
|
|
1472
|
+
}
|
|
1473
|
+
}
|
|
1474
|
+
/**
|
|
1475
|
+
* Stamp a review-escalation marker on a `done_by_worker` item (#813).
|
|
1476
|
+
*
|
|
1477
|
+
* The marker is what lets the next reviewer in the chain render the verdict
|
|
1478
|
+
* (the orchestrator after {@link REVIEW_ESCALATED_TO_ORC_KEY}), and it
|
|
1479
|
+
* makes each escalation fire once even across a backend restart — the
|
|
1480
|
+
* reconciler used to dedupe in memory only. Status is not touched.
|
|
1481
|
+
*
|
|
1482
|
+
* @param workItemId - The item under review
|
|
1483
|
+
* @param key - Metadata key to stamp (the orc or owner escalation key)
|
|
1484
|
+
* @param at - Timestamp to record (defaults to now)
|
|
1485
|
+
* @returns True when stamped, false when the item is gone or no longer awaiting review
|
|
1486
|
+
*/
|
|
1487
|
+
async stampReviewEscalation(workItemId, key, at = new Date().toISOString()) {
|
|
1488
|
+
const item = await this.storage.findWorkItem(workItemId);
|
|
1489
|
+
if (!item || item.status !== 'done_by_worker')
|
|
1490
|
+
return false;
|
|
1491
|
+
const ok = await this.storage.updateWorkItem(workItemId, (wi) => {
|
|
1492
|
+
wi.metadata = { ...(wi.metadata ?? {}), [key]: at };
|
|
1493
|
+
});
|
|
1494
|
+
return !!ok;
|
|
1495
|
+
}
|
|
1334
1496
|
/**
|
|
1335
1497
|
* TL records a verdict on a WorkItem in `done_by_worker` status.
|
|
1336
1498
|
*
|
|
@@ -1360,10 +1522,28 @@ export class TaskPoolService {
|
|
|
1360
1522
|
const updated = await this.transitionStatus(workItemId, verdict, actorRole, (wi) => {
|
|
1361
1523
|
if (comment)
|
|
1362
1524
|
wi.error = comment;
|
|
1525
|
+
// #813: record WHO rendered the verdict, so reports can show that a
|
|
1526
|
+
// verified item was reviewed and by whom.
|
|
1527
|
+
const by = normalizeTransitionActor(actorRole);
|
|
1528
|
+
wi.metadata = {
|
|
1529
|
+
...(wi.metadata ?? {}),
|
|
1530
|
+
reviewedBy: by?.session ?? by?.role,
|
|
1531
|
+
reviewedByRole: by?.role,
|
|
1532
|
+
reviewedAt: new Date().toISOString(),
|
|
1533
|
+
};
|
|
1363
1534
|
});
|
|
1364
1535
|
if (verdict === 'verified') {
|
|
1365
1536
|
await this.resolveBlockedDependents(workItemId);
|
|
1366
1537
|
}
|
|
1538
|
+
// #819: a verdict rendered THROUGH this method directly (POST /verdict,
|
|
1539
|
+
// or an escalation's owner resolution) never completes the tracking
|
|
1540
|
+
// `<id>:verify:<id>` review item — only the normal "TL completes their
|
|
1541
|
+
// review WorkItem" path does that (via completeSimpleItem's own call
|
|
1542
|
+
// into verifyItem). Left alone, that review item sits open in the
|
|
1543
|
+
// reviewer's queue forever even though its source is already decided.
|
|
1544
|
+
// No-op when the review item was already closed by that normal path
|
|
1545
|
+
// (its status is already terminal by the time we get here).
|
|
1546
|
+
await this.closeReviewItemAfterDirectVerdict(workItemId);
|
|
1367
1547
|
await this.storage.flush();
|
|
1368
1548
|
this.logger.info('WorkItem verdict recorded', { workItemId, verdict, actorRole });
|
|
1369
1549
|
// F1-BRIDGE-1: the `rejected` branch publishes task:rejected so the
|
|
@@ -1382,34 +1562,84 @@ export class TaskPoolService {
|
|
|
1382
1562
|
return updated;
|
|
1383
1563
|
}
|
|
1384
1564
|
/**
|
|
1385
|
-
*
|
|
1565
|
+
* Close the review item tracking a source WorkItem's verification, once
|
|
1566
|
+
* the verdict has been rendered directly on the source (#819) — e.g. via
|
|
1567
|
+
* `POST /verdict`, or the owner resolving an escalation — rather than by
|
|
1568
|
+
* completing the review item itself. Without this, `<id>:verify:<id>`
|
|
1569
|
+
* sits open in the reviewer's queue forever, even though its source has
|
|
1570
|
+
* already been verified or rejected.
|
|
1386
1571
|
*
|
|
1387
|
-
*
|
|
1388
|
-
*
|
|
1389
|
-
*
|
|
1390
|
-
*
|
|
1391
|
-
* {@link
|
|
1392
|
-
*
|
|
1572
|
+
* A review item still `running` (claimed by its reviewer) is completed the
|
|
1573
|
+
* same way a reviewer's own completion would ({@link completeSimpleItem});
|
|
1574
|
+
* `planReviewVerdict` is a safe no-op there because the source is no
|
|
1575
|
+
* longer `done_by_worker`, so this can never recurse back into
|
|
1576
|
+
* {@link verifyItem}. A review item never claimed (`queued`/`blocked`/
|
|
1577
|
+
* `scheduled`) is cancelled instead, since `→done` requires `running`.
|
|
1578
|
+
* Already-terminal or missing review items are left alone.
|
|
1393
1579
|
*
|
|
1394
|
-
*
|
|
1395
|
-
*
|
|
1396
|
-
*
|
|
1580
|
+
* Best-effort: any failure here is logged, never thrown — the real verdict
|
|
1581
|
+
* on the source has already been recorded, and that must not be
|
|
1582
|
+
* jeopardized by a failure to tidy up a secondary tracking item.
|
|
1583
|
+
*
|
|
1584
|
+
* @param sourceId - The WorkItem whose verdict was just rendered
|
|
1585
|
+
*/
|
|
1586
|
+
async closeReviewItemAfterDirectVerdict(sourceId) {
|
|
1587
|
+
const reviewId = `${sourceId}:verify:${sourceId}`;
|
|
1588
|
+
try {
|
|
1589
|
+
const reviewItem = await this.storage.findWorkItem(reviewId);
|
|
1590
|
+
if (!reviewItem || TERMINAL_WORK_ITEM_STATUSES.has(reviewItem.status))
|
|
1591
|
+
return;
|
|
1592
|
+
if (reviewItem.status === 'running') {
|
|
1593
|
+
await this.completeSimpleItem(reviewId, { role: 'system', via: 'verifyItem:auto-close-review' }, {
|
|
1594
|
+
summary: 'Auto-closed: the verdict was rendered directly on the source it reviews.',
|
|
1595
|
+
});
|
|
1596
|
+
}
|
|
1597
|
+
else {
|
|
1598
|
+
await this.transitionStatus(reviewId, 'cancelled', { role: 'system', via: 'verifyItem:auto-close-review' }, (wi) => {
|
|
1599
|
+
wi.metadata = {
|
|
1600
|
+
...(wi.metadata ?? {}),
|
|
1601
|
+
autoClosedReason: 'verdict rendered directly on the source it reviews',
|
|
1602
|
+
};
|
|
1603
|
+
});
|
|
1604
|
+
await this.storage.flush();
|
|
1605
|
+
}
|
|
1606
|
+
}
|
|
1607
|
+
catch (err) {
|
|
1608
|
+
this.logger.warn('Failed to auto-close review item after a direct verdict (non-fatal)', {
|
|
1609
|
+
sourceId,
|
|
1610
|
+
reviewId,
|
|
1611
|
+
error: err instanceof Error ? err.message : String(err),
|
|
1612
|
+
});
|
|
1613
|
+
}
|
|
1614
|
+
}
|
|
1615
|
+
/**
|
|
1616
|
+
* Completion facade — picks the verification path for the caller.
|
|
1617
|
+
*
|
|
1618
|
+
* Reads the WorkItem, applies the {@link requiresVerification} policy, and
|
|
1619
|
+
* dispatches to either {@link submitForVerification} (delegate items /
|
|
1620
|
+
* explicit opt-in) or {@link completeSimpleItem} (everything else).
|
|
1621
|
+
*
|
|
1622
|
+
* #813: the caller's actor is REQUIRED. It used to be hard-coded `'agent'`
|
|
1623
|
+
* with no identity, so a review item's completion could not tell its
|
|
1624
|
+
* reviewer from anyone else. Controllers resolve it server-side (see
|
|
1625
|
+
* `resolveTransitionActor` in the task-pool controller).
|
|
1397
1626
|
*
|
|
1398
1627
|
* @param workItemId - WorkItem id
|
|
1399
1628
|
* @param result - Optional result payload
|
|
1629
|
+
* @param actor - Who is completing it (role + session)
|
|
1400
1630
|
* @throws When the WorkItem is missing or the underlying transition
|
|
1401
|
-
* is rejected (invalid state, forbidden actor).
|
|
1631
|
+
* is rejected (invalid state, forbidden actor, not the reviewer).
|
|
1402
1632
|
*/
|
|
1403
|
-
async completeItem(workItemId, result) {
|
|
1633
|
+
async completeItem(workItemId, result, actor) {
|
|
1404
1634
|
const workItem = await this.storage.findWorkItem(workItemId);
|
|
1405
1635
|
if (!workItem) {
|
|
1406
1636
|
throw new Error(`WorkItem not found: ${workItemId}`);
|
|
1407
1637
|
}
|
|
1408
1638
|
if (this.requiresVerification(workItem)) {
|
|
1409
|
-
await this.submitForVerification(workItemId,
|
|
1639
|
+
await this.submitForVerification(workItemId, actor, result);
|
|
1410
1640
|
}
|
|
1411
1641
|
else {
|
|
1412
|
-
await this.completeSimpleItem(workItemId,
|
|
1642
|
+
await this.completeSimpleItem(workItemId, actor, result);
|
|
1413
1643
|
}
|
|
1414
1644
|
}
|
|
1415
1645
|
/**
|
|
@@ -1967,6 +2197,22 @@ export class TaskPoolService {
|
|
|
1967
2197
|
return null;
|
|
1968
2198
|
return (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
1969
2199
|
}
|
|
2200
|
+
/**
|
|
2201
|
+
* Shallow-merge keys into a WorkItem's metadata (no status change).
|
|
2202
|
+
*
|
|
2203
|
+
* @param workItemId - WorkItem id
|
|
2204
|
+
* @param patch - Keys to set on `metadata`
|
|
2205
|
+
* @returns The updated WorkItem, or null if not found
|
|
2206
|
+
*/
|
|
2207
|
+
async mergeItemMetadata(workItemId, patch) {
|
|
2208
|
+
const ok = await this.storage.updateWorkItem(workItemId, (wi) => {
|
|
2209
|
+
wi.metadata = { ...(wi.metadata ?? {}), ...patch };
|
|
2210
|
+
});
|
|
2211
|
+
if (!ok)
|
|
2212
|
+
return null;
|
|
2213
|
+
await this.storage.flush();
|
|
2214
|
+
return (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
2215
|
+
}
|
|
1970
2216
|
/**
|
|
1971
2217
|
* Re-point a queued WorkItem at another agent (its target went stale).
|
|
1972
2218
|
* Only `queued` items move: running work belongs to whoever holds it.
|
|
@@ -2059,6 +2305,25 @@ export class TaskPoolService {
|
|
|
2059
2305
|
this.logger.info('WorkItem handoff', { workItemId, fromAgent, newTarget });
|
|
2060
2306
|
return (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
2061
2307
|
}
|
|
2308
|
+
/**
|
|
2309
|
+
* Set one top-level metadata key on a WorkItem. Never changes its status
|
|
2310
|
+
* (this is not a transition), so it needs no actor. Used by the worktree
|
|
2311
|
+
* service to record `metadata.worktree` (#814).
|
|
2312
|
+
*
|
|
2313
|
+
* @param workItemId - WorkItem id
|
|
2314
|
+
* @param key - Metadata key
|
|
2315
|
+
* @param value - New value (replaces the old one)
|
|
2316
|
+
* @returns The updated WorkItem, or null when it does not exist
|
|
2317
|
+
*/
|
|
2318
|
+
async patchMetadata(workItemId, key, value) {
|
|
2319
|
+
const ok = await this.storage.updateWorkItem(workItemId, (wi) => {
|
|
2320
|
+
const existing = (wi.metadata && typeof wi.metadata === 'object' ? wi.metadata : {});
|
|
2321
|
+
wi.metadata = { ...existing, [key]: value };
|
|
2322
|
+
});
|
|
2323
|
+
if (!ok)
|
|
2324
|
+
return null;
|
|
2325
|
+
return (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
2326
|
+
}
|
|
2062
2327
|
/**
|
|
2063
2328
|
* Appends a working-state note to a WorkItem's metadata.notes array.
|
|
2064
2329
|
*
|
|
@@ -2183,7 +2448,7 @@ export class TaskPoolService {
|
|
|
2183
2448
|
* @throws Error if transition is invalid (state machine — see WORK_ITEM_TRANSITIONS)
|
|
2184
2449
|
* @throws Error if actor is not permitted (role check — see TRANSITION_PERMISSIONS)
|
|
2185
2450
|
*/
|
|
2186
|
-
async updateItemStatus(workItemId, newStatus, actorRole
|
|
2451
|
+
async updateItemStatus(workItemId, newStatus, actorRole,
|
|
2187
2452
|
/**
|
|
2188
2453
|
* Optional human-readable reason. Persisted on:
|
|
2189
2454
|
* - `WorkItem.cancelReason` when `newStatus === 'cancelled'`
|
|
@@ -2192,7 +2457,13 @@ export class TaskPoolService {
|
|
|
2192
2457
|
* explanation)
|
|
2193
2458
|
* - Ignored for other status transitions.
|
|
2194
2459
|
*/
|
|
2195
|
-
reason
|
|
2460
|
+
reason,
|
|
2461
|
+
/**
|
|
2462
|
+
* Optional `WorkItem.blockSource` to set atomically with a transition
|
|
2463
|
+
* INTO `blocked` (the waiting_on_human rule passes
|
|
2464
|
+
* WORK_ITEM_BLOCK_SOURCES.WAITING_ON_HUMAN, #815). Ignored otherwise.
|
|
2465
|
+
*/
|
|
2466
|
+
blockSource) {
|
|
2196
2467
|
const items = await this.storage.getWorkItems();
|
|
2197
2468
|
const item = items.find((wi) => wi.id === workItemId);
|
|
2198
2469
|
if (!item) {
|
|
@@ -2216,11 +2487,8 @@ export class TaskPoolService {
|
|
|
2216
2487
|
if (!isValidWorkItemTransition(item.status, newStatus)) {
|
|
2217
2488
|
throw new Error(`Invalid status transition for WorkItem ${workItemId}: ${item.status} → ${newStatus}`);
|
|
2218
2489
|
}
|
|
2219
|
-
// TRANS-1 V3:
|
|
2220
|
-
|
|
2221
|
-
throw new Error(`Forbidden transition for WorkItem ${workItemId}: actor='${actorRole}' ` +
|
|
2222
|
-
`not permitted to perform ${item.status} → ${newStatus}.`);
|
|
2223
|
-
}
|
|
2490
|
+
// TRANS-1 V3 + #813: closed, item-aware permission gate. No role bypasses it.
|
|
2491
|
+
await this.assertTransitionPermitted(item, newStatus, actorRole);
|
|
2224
2492
|
// Capture pre-write status. See transitionStatus's identical block
|
|
2225
2493
|
// for the writeup — storage.updateWorkItem mutates in place, so
|
|
2226
2494
|
// reading item.status after the write yields newStatus and the
|
|
@@ -2261,6 +2529,9 @@ export class TaskPoolService {
|
|
|
2261
2529
|
if (newStatus === 'blocked' && typeof reason === 'string' && reason.length > 0) {
|
|
2262
2530
|
wi.blockedReason = reason;
|
|
2263
2531
|
}
|
|
2532
|
+
if (newStatus === 'blocked' && blockSource) {
|
|
2533
|
+
wi.blockSource = blockSource;
|
|
2534
|
+
}
|
|
2264
2535
|
// Ticket loop Phase 3: an agent picks its own unblocked work back up
|
|
2265
2536
|
// before new work, so remember that this item was blocked.
|
|
2266
2537
|
if (fromStatus === 'blocked' && newStatus === 'queued') {
|
|
@@ -2362,10 +2633,7 @@ export class TaskPoolService {
|
|
|
2362
2633
|
if (!isValidWorkItemTransition(item.status, newStatus)) {
|
|
2363
2634
|
throw new Error(`Invalid status transition for WorkItem ${workItemId}: ${item.status} → ${newStatus}`);
|
|
2364
2635
|
}
|
|
2365
|
-
|
|
2366
|
-
throw new Error(`Forbidden transition for WorkItem ${workItemId}: actor='${actorRole}' ` +
|
|
2367
|
-
`not permitted to perform ${item.status} → ${newStatus}.`);
|
|
2368
|
-
}
|
|
2636
|
+
await this.assertTransitionPermitted(item, newStatus, actorRole);
|
|
2369
2637
|
// Capture the pre-write status into a local. `storage.updateWorkItem`
|
|
2370
2638
|
// mutates the same in-memory object that `findWorkItem` returned, so
|
|
2371
2639
|
// reading `item.status` AFTER the write yields the new value — which
|