crewly 1.20.153 → 1.20.155
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 +18 -2
- package/config/roles/team-leader/prompt.md +13 -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/delegate-task/execute.sh +17 -4
- package/config/skills/team-leader/verify-output/SKILL.md +2 -2
- package/config/sops/developer/git-workflow.md +1 -1
- package/dist/backend/backend/src/constants.d.ts +397 -1
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +388 -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/monitoring/terminal.controller.d.ts +32 -0
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +122 -8
- package/dist/backend/backend/src/controllers/monitoring/terminal.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/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +113 -7
- 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 +24 -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 +43 -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 +129 -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 +154 -2
- 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 +380 -22
- 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/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/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/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-bus.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js +6 -0
- package/dist/backend/backend/src/services/event-bus/event-bus.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/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 +323 -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.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.js +2 -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 +88 -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 +169 -5
- 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/types/event-bus.types.d.ts +6 -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 +397 -1
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +388 -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 +43 -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 +129 -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/fresh-task-conversation.service.d.ts +409 -0
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +961 -0
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.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/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/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/event-bus/event-bus.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/event-bus/event-bus.service.js +6 -0
- package/dist/cli/backend/src/services/event-bus/event-bus.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 +323 -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.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.js +2 -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 +6 -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[]`
|
|
@@ -530,6 +561,8 @@ export class TaskPoolService {
|
|
|
530
561
|
workItemId: workItem.id,
|
|
531
562
|
requestId: workItem.requestId,
|
|
532
563
|
missionId: workItem.missionId,
|
|
564
|
+
// The dispatcher pushes the task to this session on queue.
|
|
565
|
+
...(workItem.target ? { target: workItem.target } : {}),
|
|
533
566
|
});
|
|
534
567
|
}
|
|
535
568
|
catch (err) {
|
|
@@ -897,6 +930,7 @@ export class TaskPoolService {
|
|
|
897
930
|
title: selected.title,
|
|
898
931
|
});
|
|
899
932
|
await this.noteTicketSelfClaim(claimedItem, agentId);
|
|
933
|
+
this.notifyClaimed(claimedItem, agentId);
|
|
900
934
|
return {
|
|
901
935
|
workItem: claimedItem,
|
|
902
936
|
claim,
|
|
@@ -980,6 +1014,7 @@ export class TaskPoolService {
|
|
|
980
1014
|
await this.storage.flush();
|
|
981
1015
|
this.logger.info('WorkItem claimed (specific)', { workItemId, agentId, claimId: claim.id });
|
|
982
1016
|
await this.noteTicketSelfClaim(claimedItem, agentId);
|
|
1017
|
+
this.notifyClaimed(claimedItem, agentId);
|
|
983
1018
|
return { workItem: claimedItem, claim };
|
|
984
1019
|
});
|
|
985
1020
|
}
|
|
@@ -1094,6 +1129,9 @@ export class TaskPoolService {
|
|
|
1094
1129
|
* `done_by_worker` and wake the TL for sign-off.
|
|
1095
1130
|
* - All other types (`cron_run`, `notify`, `reconcile`, `check`,
|
|
1096
1131
|
* `confirm`, `review`, ...) default to simple completion (`done`).
|
|
1132
|
+
* - Bridge-auto maintenance items (`metadata.autoCreated`) and
|
|
1133
|
+
* trigger-fired check-ins (`triggerId`) complete as `done` too —
|
|
1134
|
+
* nothing reviews them (#813).
|
|
1097
1135
|
*
|
|
1098
1136
|
* The default is overridable via `wi.metadata.requiresVerification`:
|
|
1099
1137
|
* - `true` — force verification path even for non-delegate types
|
|
@@ -1110,6 +1148,17 @@ export class TaskPoolService {
|
|
|
1110
1148
|
return true;
|
|
1111
1149
|
if (metaFlag === false)
|
|
1112
1150
|
return false;
|
|
1151
|
+
// #813: bridge-auto maintenance items get no review item (the bridge
|
|
1152
|
+
// re-scans on its own tick), so parking them in done_by_worker only
|
|
1153
|
+
// stranded them until the TTL auto-verified them. Complete them as done.
|
|
1154
|
+
if (wi.metadata?.['autoCreated'] === true)
|
|
1155
|
+
return false;
|
|
1156
|
+
// #813: a trigger-fired item (schedule-followup / watch-for-event) is a
|
|
1157
|
+
// check-in the agent set for itself, created as `delegate` by default.
|
|
1158
|
+
// Nothing reviewed them — 123 of 293 verified items in the live pool on
|
|
1159
|
+
// 2026-09-26 were these, verified with no review item. Complete as done.
|
|
1160
|
+
if (wi.triggerId)
|
|
1161
|
+
return false;
|
|
1113
1162
|
return wi.type === 'delegate';
|
|
1114
1163
|
}
|
|
1115
1164
|
/**
|
|
@@ -1264,6 +1313,11 @@ export class TaskPoolService {
|
|
|
1264
1313
|
* the actor is not permitted to perform `running → done`.
|
|
1265
1314
|
*/
|
|
1266
1315
|
async completeSimpleItem(workItemId, actorRole, result) {
|
|
1316
|
+
// #813: completing a review item renders a verdict on its source. Check
|
|
1317
|
+
// that this caller may render it BEFORE the review item itself is marked
|
|
1318
|
+
// done — otherwise a refused verdict leaves a "done" review and a source
|
|
1319
|
+
// that nobody reviewed.
|
|
1320
|
+
const verdictPlan = await this.planReviewVerdict(workItemId, actorRole, result);
|
|
1267
1321
|
await this.releaseClaim(workItemId, 'completed');
|
|
1268
1322
|
const updated = await this.transitionStatus(workItemId, 'done', actorRole, (wi) => {
|
|
1269
1323
|
if (result)
|
|
@@ -1282,40 +1336,26 @@ export class TaskPoolService {
|
|
|
1282
1336
|
//
|
|
1283
1337
|
// When a verify WI completes (metadata.verifyOf points at its source),
|
|
1284
1338
|
// 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) {
|
|
1339
|
+
// moves done_by_worker → verified AND its own dependents unblock.
|
|
1340
|
+
// #813: the verdict is rendered AS THE CALLER who completed the review
|
|
1341
|
+
// item (it used to be 'system', which let anyone's completion certify
|
|
1342
|
+
// the source). {@link planReviewVerdict} already checked the caller.
|
|
1343
|
+
if (verdictPlan) {
|
|
1292
1344
|
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
|
-
}
|
|
1345
|
+
await this.verifyItem(verdictPlan.sourceId, verdictPlan.reviewer, verdictPlan.verdict, verdictPlan.verdict === 'rejected' ? verdictPlan.feedback : undefined);
|
|
1346
|
+
this.logger.info('Verify WI complete → propagated to source', {
|
|
1347
|
+
verifyWorkItemId: workItemId,
|
|
1348
|
+
sourceWorkItemId: verdictPlan.sourceId,
|
|
1349
|
+
verdict: verdictPlan.verdict,
|
|
1350
|
+
reviewer: describeTransitionActor(verdictPlan.reviewer),
|
|
1351
|
+
});
|
|
1312
1352
|
}
|
|
1313
1353
|
catch (err) {
|
|
1314
1354
|
// Propagation is best-effort — a failed propagate must NOT roll
|
|
1315
1355
|
// back the verify WI's own completion.
|
|
1316
1356
|
this.logger.warn('Verify-to-source propagation failed (non-fatal)', {
|
|
1317
1357
|
verifyWorkItemId: workItemId,
|
|
1318
|
-
sourceWorkItemId:
|
|
1358
|
+
sourceWorkItemId: verdictPlan.sourceId,
|
|
1319
1359
|
error: err instanceof Error ? err.message : String(err),
|
|
1320
1360
|
});
|
|
1321
1361
|
}
|
|
@@ -1331,6 +1371,130 @@ export class TaskPoolService {
|
|
|
1331
1371
|
}
|
|
1332
1372
|
return updated;
|
|
1333
1373
|
}
|
|
1374
|
+
/**
|
|
1375
|
+
* The verdict a review item's completion would render on its source, after
|
|
1376
|
+
* checking that the completing caller may render it (#813).
|
|
1377
|
+
*
|
|
1378
|
+
* A review item carries `metadata.verifyOf` = the source WorkItem id. The
|
|
1379
|
+
* caller completes the review as its assignee (`agent` role) or as the
|
|
1380
|
+
* orchestrator; on the source it acts as the REVIEWER, so the verdict is
|
|
1381
|
+
* checked as `team_lead`/`orchestrator` with the caller's session — the
|
|
1382
|
+
* reviewer rule then decides by identity, not by the claimed role.
|
|
1383
|
+
*
|
|
1384
|
+
* @param workItemId - The item being completed
|
|
1385
|
+
* @param actorInput - The caller completing it
|
|
1386
|
+
* @param result - The completion result (`verdict: 'rejected'` sends it back)
|
|
1387
|
+
* @returns The planned verdict, or null when this item reviews nothing that
|
|
1388
|
+
* is still awaiting review
|
|
1389
|
+
* @throws ForbiddenTransitionError when the caller may not render the verdict
|
|
1390
|
+
*/
|
|
1391
|
+
async planReviewVerdict(workItemId, actorInput, result) {
|
|
1392
|
+
const reviewItem = await this.storage.findWorkItem(workItemId);
|
|
1393
|
+
const verifyOf = reviewItem?.metadata && typeof reviewItem.metadata.verifyOf === 'string'
|
|
1394
|
+
? reviewItem.metadata.verifyOf
|
|
1395
|
+
: undefined;
|
|
1396
|
+
if (!verifyOf)
|
|
1397
|
+
return null;
|
|
1398
|
+
const source = await this.storage.findWorkItem(verifyOf);
|
|
1399
|
+
if (!source || source.status !== 'done_by_worker')
|
|
1400
|
+
return null;
|
|
1401
|
+
// Ticket loop Phase 3: a reviewer can send work back by completing the
|
|
1402
|
+
// review with `verdict: 'rejected'` (+ feedback).
|
|
1403
|
+
const verdict = result?.verdict === 'rejected' ? 'rejected' : 'verified';
|
|
1404
|
+
const feedback = typeof result?.feedback === 'string' && result.feedback.trim()
|
|
1405
|
+
? result.feedback.trim()
|
|
1406
|
+
: typeof result?.summary === 'string'
|
|
1407
|
+
? result.summary
|
|
1408
|
+
: undefined;
|
|
1409
|
+
const reviewer = TaskPoolService.reviewerActorFor(actorInput);
|
|
1410
|
+
// The review item's assignee is the reviewer of record for its source.
|
|
1411
|
+
await this.assertTransitionPermitted(source, verdict, reviewer, reviewItem?.target);
|
|
1412
|
+
// Persist the reviewer of record so the verdict below (and any later
|
|
1413
|
+
// audit) sees the same identity this check just accepted.
|
|
1414
|
+
if (reviewItem?.target && !getWorkItemReviewer(source)) {
|
|
1415
|
+
await this.storage.updateWorkItem(verifyOf, (wi) => {
|
|
1416
|
+
wi.metadata = { ...(wi.metadata ?? {}), [WORK_ITEM_REVIEWER_KEY]: reviewItem.target };
|
|
1417
|
+
});
|
|
1418
|
+
}
|
|
1419
|
+
return { sourceId: verifyOf, verdict, reviewer, ...(feedback ? { feedback } : {}) };
|
|
1420
|
+
}
|
|
1421
|
+
/**
|
|
1422
|
+
* Map the caller of a review item's completion to the actor that renders
|
|
1423
|
+
* the verdict on the source. `agent` → `team_lead` (it is reviewing, not
|
|
1424
|
+
* working); every other role is kept. A missing actor stays missing, so it
|
|
1425
|
+
* is refused.
|
|
1426
|
+
*
|
|
1427
|
+
* @param actorInput - The completing caller
|
|
1428
|
+
* @returns The reviewer actor (or undefined → refused by the gate)
|
|
1429
|
+
*/
|
|
1430
|
+
static reviewerActorFor(actorInput) {
|
|
1431
|
+
const actor = normalizeTransitionActor(actorInput);
|
|
1432
|
+
if (!actor)
|
|
1433
|
+
return actorInput;
|
|
1434
|
+
return {
|
|
1435
|
+
...actor,
|
|
1436
|
+
role: actor.role === 'agent' ? 'team_lead' : actor.role,
|
|
1437
|
+
via: actor.via ?? 'review-item-completion',
|
|
1438
|
+
};
|
|
1439
|
+
}
|
|
1440
|
+
/**
|
|
1441
|
+
* Run the closed permission gate for one transition and throw on refusal.
|
|
1442
|
+
*
|
|
1443
|
+
* For the verdict edges, an item that predates reviewer stamping gets its
|
|
1444
|
+
* reviewer from its review item (`<id>:verify:<id>`, targeted at the
|
|
1445
|
+
* reviewer when the bridge created it), so a lead can still review items
|
|
1446
|
+
* that were in flight when #813 shipped.
|
|
1447
|
+
*
|
|
1448
|
+
* @param item - The WorkItem as it is now
|
|
1449
|
+
* @param to - Target status
|
|
1450
|
+
* @param actorInput - The caller
|
|
1451
|
+
* @param reviewerHint - Reviewer of record when the caller already knows it
|
|
1452
|
+
* (the target of the review item being completed)
|
|
1453
|
+
* @throws ForbiddenTransitionError when refused
|
|
1454
|
+
*/
|
|
1455
|
+
async assertTransitionPermitted(item, to, actorInput, reviewerHint) {
|
|
1456
|
+
let subject = item;
|
|
1457
|
+
if (VERDICT_TRANSITIONS.has(`${item.status}→${to}`) && !getWorkItemReviewer(item)) {
|
|
1458
|
+
const reviewer = reviewerHint ?? (await this.storage.findWorkItem(`${item.id}:verify:${item.id}`))?.target;
|
|
1459
|
+
if (reviewer) {
|
|
1460
|
+
subject = { ...item, metadata: { ...(item.metadata ?? {}), [WORK_ITEM_REVIEWER_KEY]: reviewer } };
|
|
1461
|
+
}
|
|
1462
|
+
}
|
|
1463
|
+
const decision = checkTransitionPermission(subject, to, actorInput);
|
|
1464
|
+
if (!decision.allowed) {
|
|
1465
|
+
const actor = normalizeTransitionActor(actorInput);
|
|
1466
|
+
this.logger.warn('Refused WorkItem transition', {
|
|
1467
|
+
workItemId: item.id,
|
|
1468
|
+
from: item.status,
|
|
1469
|
+
to,
|
|
1470
|
+
actor: describeTransitionActor(actor),
|
|
1471
|
+
reason: decision.reason,
|
|
1472
|
+
});
|
|
1473
|
+
throw new ForbiddenTransitionError(item.id, item.status, to, actor, decision);
|
|
1474
|
+
}
|
|
1475
|
+
}
|
|
1476
|
+
/**
|
|
1477
|
+
* Stamp a review-escalation marker on a `done_by_worker` item (#813).
|
|
1478
|
+
*
|
|
1479
|
+
* The marker is what lets the next reviewer in the chain render the verdict
|
|
1480
|
+
* (the orchestrator after {@link REVIEW_ESCALATED_TO_ORC_KEY}), and it
|
|
1481
|
+
* makes each escalation fire once even across a backend restart — the
|
|
1482
|
+
* reconciler used to dedupe in memory only. Status is not touched.
|
|
1483
|
+
*
|
|
1484
|
+
* @param workItemId - The item under review
|
|
1485
|
+
* @param key - Metadata key to stamp (the orc or owner escalation key)
|
|
1486
|
+
* @param at - Timestamp to record (defaults to now)
|
|
1487
|
+
* @returns True when stamped, false when the item is gone or no longer awaiting review
|
|
1488
|
+
*/
|
|
1489
|
+
async stampReviewEscalation(workItemId, key, at = new Date().toISOString()) {
|
|
1490
|
+
const item = await this.storage.findWorkItem(workItemId);
|
|
1491
|
+
if (!item || item.status !== 'done_by_worker')
|
|
1492
|
+
return false;
|
|
1493
|
+
const ok = await this.storage.updateWorkItem(workItemId, (wi) => {
|
|
1494
|
+
wi.metadata = { ...(wi.metadata ?? {}), [key]: at };
|
|
1495
|
+
});
|
|
1496
|
+
return !!ok;
|
|
1497
|
+
}
|
|
1334
1498
|
/**
|
|
1335
1499
|
* TL records a verdict on a WorkItem in `done_by_worker` status.
|
|
1336
1500
|
*
|
|
@@ -1360,10 +1524,28 @@ export class TaskPoolService {
|
|
|
1360
1524
|
const updated = await this.transitionStatus(workItemId, verdict, actorRole, (wi) => {
|
|
1361
1525
|
if (comment)
|
|
1362
1526
|
wi.error = comment;
|
|
1527
|
+
// #813: record WHO rendered the verdict, so reports can show that a
|
|
1528
|
+
// verified item was reviewed and by whom.
|
|
1529
|
+
const by = normalizeTransitionActor(actorRole);
|
|
1530
|
+
wi.metadata = {
|
|
1531
|
+
...(wi.metadata ?? {}),
|
|
1532
|
+
reviewedBy: by?.session ?? by?.role,
|
|
1533
|
+
reviewedByRole: by?.role,
|
|
1534
|
+
reviewedAt: new Date().toISOString(),
|
|
1535
|
+
};
|
|
1363
1536
|
});
|
|
1364
1537
|
if (verdict === 'verified') {
|
|
1365
1538
|
await this.resolveBlockedDependents(workItemId);
|
|
1366
1539
|
}
|
|
1540
|
+
// #819: a verdict rendered THROUGH this method directly (POST /verdict,
|
|
1541
|
+
// or an escalation's owner resolution) never completes the tracking
|
|
1542
|
+
// `<id>:verify:<id>` review item — only the normal "TL completes their
|
|
1543
|
+
// review WorkItem" path does that (via completeSimpleItem's own call
|
|
1544
|
+
// into verifyItem). Left alone, that review item sits open in the
|
|
1545
|
+
// reviewer's queue forever even though its source is already decided.
|
|
1546
|
+
// No-op when the review item was already closed by that normal path
|
|
1547
|
+
// (its status is already terminal by the time we get here).
|
|
1548
|
+
await this.closeReviewItemAfterDirectVerdict(workItemId);
|
|
1367
1549
|
await this.storage.flush();
|
|
1368
1550
|
this.logger.info('WorkItem verdict recorded', { workItemId, verdict, actorRole });
|
|
1369
1551
|
// F1-BRIDGE-1: the `rejected` branch publishes task:rejected so the
|
|
@@ -1382,34 +1564,84 @@ export class TaskPoolService {
|
|
|
1382
1564
|
return updated;
|
|
1383
1565
|
}
|
|
1384
1566
|
/**
|
|
1385
|
-
*
|
|
1567
|
+
* Close the review item tracking a source WorkItem's verification, once
|
|
1568
|
+
* the verdict has been rendered directly on the source (#819) — e.g. via
|
|
1569
|
+
* `POST /verdict`, or the owner resolving an escalation — rather than by
|
|
1570
|
+
* completing the review item itself. Without this, `<id>:verify:<id>`
|
|
1571
|
+
* sits open in the reviewer's queue forever, even though its source has
|
|
1572
|
+
* already been verified or rejected.
|
|
1386
1573
|
*
|
|
1387
|
-
*
|
|
1388
|
-
*
|
|
1389
|
-
*
|
|
1390
|
-
*
|
|
1391
|
-
* {@link
|
|
1392
|
-
*
|
|
1574
|
+
* A review item still `running` (claimed by its reviewer) is completed the
|
|
1575
|
+
* same way a reviewer's own completion would ({@link completeSimpleItem});
|
|
1576
|
+
* `planReviewVerdict` is a safe no-op there because the source is no
|
|
1577
|
+
* longer `done_by_worker`, so this can never recurse back into
|
|
1578
|
+
* {@link verifyItem}. A review item never claimed (`queued`/`blocked`/
|
|
1579
|
+
* `scheduled`) is cancelled instead, since `→done` requires `running`.
|
|
1580
|
+
* Already-terminal or missing review items are left alone.
|
|
1393
1581
|
*
|
|
1394
|
-
*
|
|
1395
|
-
*
|
|
1396
|
-
*
|
|
1582
|
+
* Best-effort: any failure here is logged, never thrown — the real verdict
|
|
1583
|
+
* on the source has already been recorded, and that must not be
|
|
1584
|
+
* jeopardized by a failure to tidy up a secondary tracking item.
|
|
1585
|
+
*
|
|
1586
|
+
* @param sourceId - The WorkItem whose verdict was just rendered
|
|
1587
|
+
*/
|
|
1588
|
+
async closeReviewItemAfterDirectVerdict(sourceId) {
|
|
1589
|
+
const reviewId = `${sourceId}:verify:${sourceId}`;
|
|
1590
|
+
try {
|
|
1591
|
+
const reviewItem = await this.storage.findWorkItem(reviewId);
|
|
1592
|
+
if (!reviewItem || TERMINAL_WORK_ITEM_STATUSES.has(reviewItem.status))
|
|
1593
|
+
return;
|
|
1594
|
+
if (reviewItem.status === 'running') {
|
|
1595
|
+
await this.completeSimpleItem(reviewId, { role: 'system', via: 'verifyItem:auto-close-review' }, {
|
|
1596
|
+
summary: 'Auto-closed: the verdict was rendered directly on the source it reviews.',
|
|
1597
|
+
});
|
|
1598
|
+
}
|
|
1599
|
+
else {
|
|
1600
|
+
await this.transitionStatus(reviewId, 'cancelled', { role: 'system', via: 'verifyItem:auto-close-review' }, (wi) => {
|
|
1601
|
+
wi.metadata = {
|
|
1602
|
+
...(wi.metadata ?? {}),
|
|
1603
|
+
autoClosedReason: 'verdict rendered directly on the source it reviews',
|
|
1604
|
+
};
|
|
1605
|
+
});
|
|
1606
|
+
await this.storage.flush();
|
|
1607
|
+
}
|
|
1608
|
+
}
|
|
1609
|
+
catch (err) {
|
|
1610
|
+
this.logger.warn('Failed to auto-close review item after a direct verdict (non-fatal)', {
|
|
1611
|
+
sourceId,
|
|
1612
|
+
reviewId,
|
|
1613
|
+
error: err instanceof Error ? err.message : String(err),
|
|
1614
|
+
});
|
|
1615
|
+
}
|
|
1616
|
+
}
|
|
1617
|
+
/**
|
|
1618
|
+
* Completion facade — picks the verification path for the caller.
|
|
1619
|
+
*
|
|
1620
|
+
* Reads the WorkItem, applies the {@link requiresVerification} policy, and
|
|
1621
|
+
* dispatches to either {@link submitForVerification} (delegate items /
|
|
1622
|
+
* explicit opt-in) or {@link completeSimpleItem} (everything else).
|
|
1623
|
+
*
|
|
1624
|
+
* #813: the caller's actor is REQUIRED. It used to be hard-coded `'agent'`
|
|
1625
|
+
* with no identity, so a review item's completion could not tell its
|
|
1626
|
+
* reviewer from anyone else. Controllers resolve it server-side (see
|
|
1627
|
+
* `resolveTransitionActor` in the task-pool controller).
|
|
1397
1628
|
*
|
|
1398
1629
|
* @param workItemId - WorkItem id
|
|
1399
1630
|
* @param result - Optional result payload
|
|
1631
|
+
* @param actor - Who is completing it (role + session)
|
|
1400
1632
|
* @throws When the WorkItem is missing or the underlying transition
|
|
1401
|
-
* is rejected (invalid state, forbidden actor).
|
|
1633
|
+
* is rejected (invalid state, forbidden actor, not the reviewer).
|
|
1402
1634
|
*/
|
|
1403
|
-
async completeItem(workItemId, result) {
|
|
1635
|
+
async completeItem(workItemId, result, actor) {
|
|
1404
1636
|
const workItem = await this.storage.findWorkItem(workItemId);
|
|
1405
1637
|
if (!workItem) {
|
|
1406
1638
|
throw new Error(`WorkItem not found: ${workItemId}`);
|
|
1407
1639
|
}
|
|
1408
1640
|
if (this.requiresVerification(workItem)) {
|
|
1409
|
-
await this.submitForVerification(workItemId,
|
|
1641
|
+
await this.submitForVerification(workItemId, actor, result);
|
|
1410
1642
|
}
|
|
1411
1643
|
else {
|
|
1412
|
-
await this.completeSimpleItem(workItemId,
|
|
1644
|
+
await this.completeSimpleItem(workItemId, actor, result);
|
|
1413
1645
|
}
|
|
1414
1646
|
}
|
|
1415
1647
|
/**
|
|
@@ -1967,6 +2199,22 @@ export class TaskPoolService {
|
|
|
1967
2199
|
return null;
|
|
1968
2200
|
return (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
1969
2201
|
}
|
|
2202
|
+
/**
|
|
2203
|
+
* Shallow-merge keys into a WorkItem's metadata (no status change).
|
|
2204
|
+
*
|
|
2205
|
+
* @param workItemId - WorkItem id
|
|
2206
|
+
* @param patch - Keys to set on `metadata`
|
|
2207
|
+
* @returns The updated WorkItem, or null if not found
|
|
2208
|
+
*/
|
|
2209
|
+
async mergeItemMetadata(workItemId, patch) {
|
|
2210
|
+
const ok = await this.storage.updateWorkItem(workItemId, (wi) => {
|
|
2211
|
+
wi.metadata = { ...(wi.metadata ?? {}), ...patch };
|
|
2212
|
+
});
|
|
2213
|
+
if (!ok)
|
|
2214
|
+
return null;
|
|
2215
|
+
await this.storage.flush();
|
|
2216
|
+
return (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
2217
|
+
}
|
|
1970
2218
|
/**
|
|
1971
2219
|
* Re-point a queued WorkItem at another agent (its target went stale).
|
|
1972
2220
|
* Only `queued` items move: running work belongs to whoever holds it.
|
|
@@ -2059,6 +2307,25 @@ export class TaskPoolService {
|
|
|
2059
2307
|
this.logger.info('WorkItem handoff', { workItemId, fromAgent, newTarget });
|
|
2060
2308
|
return (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
2061
2309
|
}
|
|
2310
|
+
/**
|
|
2311
|
+
* Set one top-level metadata key on a WorkItem. Never changes its status
|
|
2312
|
+
* (this is not a transition), so it needs no actor. Used by the worktree
|
|
2313
|
+
* service to record `metadata.worktree` (#814).
|
|
2314
|
+
*
|
|
2315
|
+
* @param workItemId - WorkItem id
|
|
2316
|
+
* @param key - Metadata key
|
|
2317
|
+
* @param value - New value (replaces the old one)
|
|
2318
|
+
* @returns The updated WorkItem, or null when it does not exist
|
|
2319
|
+
*/
|
|
2320
|
+
async patchMetadata(workItemId, key, value) {
|
|
2321
|
+
const ok = await this.storage.updateWorkItem(workItemId, (wi) => {
|
|
2322
|
+
const existing = (wi.metadata && typeof wi.metadata === 'object' ? wi.metadata : {});
|
|
2323
|
+
wi.metadata = { ...existing, [key]: value };
|
|
2324
|
+
});
|
|
2325
|
+
if (!ok)
|
|
2326
|
+
return null;
|
|
2327
|
+
return (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
2328
|
+
}
|
|
2062
2329
|
/**
|
|
2063
2330
|
* Appends a working-state note to a WorkItem's metadata.notes array.
|
|
2064
2331
|
*
|
|
@@ -2183,7 +2450,7 @@ export class TaskPoolService {
|
|
|
2183
2450
|
* @throws Error if transition is invalid (state machine — see WORK_ITEM_TRANSITIONS)
|
|
2184
2451
|
* @throws Error if actor is not permitted (role check — see TRANSITION_PERMISSIONS)
|
|
2185
2452
|
*/
|
|
2186
|
-
async updateItemStatus(workItemId, newStatus, actorRole
|
|
2453
|
+
async updateItemStatus(workItemId, newStatus, actorRole,
|
|
2187
2454
|
/**
|
|
2188
2455
|
* Optional human-readable reason. Persisted on:
|
|
2189
2456
|
* - `WorkItem.cancelReason` when `newStatus === 'cancelled'`
|
|
@@ -2192,7 +2459,13 @@ export class TaskPoolService {
|
|
|
2192
2459
|
* explanation)
|
|
2193
2460
|
* - Ignored for other status transitions.
|
|
2194
2461
|
*/
|
|
2195
|
-
reason
|
|
2462
|
+
reason,
|
|
2463
|
+
/**
|
|
2464
|
+
* Optional `WorkItem.blockSource` to set atomically with a transition
|
|
2465
|
+
* INTO `blocked` (the waiting_on_human rule passes
|
|
2466
|
+
* WORK_ITEM_BLOCK_SOURCES.WAITING_ON_HUMAN, #815). Ignored otherwise.
|
|
2467
|
+
*/
|
|
2468
|
+
blockSource) {
|
|
2196
2469
|
const items = await this.storage.getWorkItems();
|
|
2197
2470
|
const item = items.find((wi) => wi.id === workItemId);
|
|
2198
2471
|
if (!item) {
|
|
@@ -2216,11 +2489,8 @@ export class TaskPoolService {
|
|
|
2216
2489
|
if (!isValidWorkItemTransition(item.status, newStatus)) {
|
|
2217
2490
|
throw new Error(`Invalid status transition for WorkItem ${workItemId}: ${item.status} → ${newStatus}`);
|
|
2218
2491
|
}
|
|
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
|
-
}
|
|
2492
|
+
// TRANS-1 V3 + #813: closed, item-aware permission gate. No role bypasses it.
|
|
2493
|
+
await this.assertTransitionPermitted(item, newStatus, actorRole);
|
|
2224
2494
|
// Capture pre-write status. See transitionStatus's identical block
|
|
2225
2495
|
// for the writeup — storage.updateWorkItem mutates in place, so
|
|
2226
2496
|
// reading item.status after the write yields newStatus and the
|
|
@@ -2261,6 +2531,9 @@ export class TaskPoolService {
|
|
|
2261
2531
|
if (newStatus === 'blocked' && typeof reason === 'string' && reason.length > 0) {
|
|
2262
2532
|
wi.blockedReason = reason;
|
|
2263
2533
|
}
|
|
2534
|
+
if (newStatus === 'blocked' && blockSource) {
|
|
2535
|
+
wi.blockSource = blockSource;
|
|
2536
|
+
}
|
|
2264
2537
|
// Ticket loop Phase 3: an agent picks its own unblocked work back up
|
|
2265
2538
|
// before new work, so remember that this item was blocked.
|
|
2266
2539
|
if (fromStatus === 'blocked' && newStatus === 'queued') {
|
|
@@ -2362,10 +2635,7 @@ export class TaskPoolService {
|
|
|
2362
2635
|
if (!isValidWorkItemTransition(item.status, newStatus)) {
|
|
2363
2636
|
throw new Error(`Invalid status transition for WorkItem ${workItemId}: ${item.status} → ${newStatus}`);
|
|
2364
2637
|
}
|
|
2365
|
-
|
|
2366
|
-
throw new Error(`Forbidden transition for WorkItem ${workItemId}: actor='${actorRole}' ` +
|
|
2367
|
-
`not permitted to perform ${item.status} → ${newStatus}.`);
|
|
2368
|
-
}
|
|
2638
|
+
await this.assertTransitionPermitted(item, newStatus, actorRole);
|
|
2369
2639
|
// Capture the pre-write status into a local. `storage.updateWorkItem`
|
|
2370
2640
|
// mutates the same in-memory object that `findWorkItem` returned, so
|
|
2371
2641
|
// reading `item.status` AFTER the write yields the new value — which
|