crewly 1.20.153 → 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 +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/verify-output/SKILL.md +2 -2
- package/config/sops/developer/git-workflow.md +1 -1
- package/dist/backend/backend/src/constants.d.ts +359 -1
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +350 -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/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +100 -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 +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/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-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 +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.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 +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/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 +359 -1
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +350 -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/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/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.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 +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
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# project-tickets — a project's own backlog (<project>/.crewly/tickets/)
|
|
4
|
+
#
|
|
5
|
+
# Backed by /api/project-tickets (specs/2026-09-28-project-tickets.md §6).
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# bash execute.sh list [--project P] [--status ready]
|
|
9
|
+
# bash execute.sh show --project P --id APP-12
|
|
10
|
+
# bash execute.sh create --project P --title "…" [--description "…"] [--acceptance "…" …]
|
|
11
|
+
# [--priority P1] [--labels a,b] [--team <teamId>] [--status ready]
|
|
12
|
+
# [--source request:TKT-012] [--request-id <id>] [--owner-review]
|
|
13
|
+
# bash execute.sh update --project P --id APP-12 [--title …] [--priority …] [--labels …]
|
|
14
|
+
# [--description …] [--acceptance "…" …] [--status …] [--note "…"]
|
|
15
|
+
# bash execute.sh claim --project P --id APP-12
|
|
16
|
+
# bash execute.sh release --project P --id APP-12 [--note "why"]
|
|
17
|
+
# bash execute.sh assign --project P --id APP-12 --to <session> [--no-start] (owner / orc / lead)
|
|
18
|
+
# bash execute.sh log --project P --id APP-12 --note "progress"
|
|
19
|
+
# bash execute.sh '{"action":"create","project":"P","title":"…"}'
|
|
20
|
+
#
|
|
21
|
+
# P = project id, name, or absolute path.
|
|
22
|
+
# =============================================================================
|
|
23
|
+
set -euo pipefail
|
|
24
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
25
|
+
source "${SCRIPT_DIR}/../../_common/lib.sh"
|
|
26
|
+
|
|
27
|
+
print_usage() {
|
|
28
|
+
cat <<'EOF_USAGE'
|
|
29
|
+
Usage:
|
|
30
|
+
bash execute.sh list [--project P] [--status ready] Tickets of a project (or of all your teams' projects)
|
|
31
|
+
bash execute.sh show --project P --id APP-12 One ticket with its full body
|
|
32
|
+
bash execute.sh create --project P --title "…" [--description "…"] [--acceptance "…" …]
|
|
33
|
+
[--priority P0-P3] [--labels a,b] [--team <teamId>] [--status backlog|ready]
|
|
34
|
+
[--source request:TKT-012] [--request-id <id>] [--owner-review]
|
|
35
|
+
bash execute.sh update --project P --id APP-12 [--title …] [--priority …] [--labels …]
|
|
36
|
+
[--description …] [--acceptance "…" …] [--status …] [--note "…"]
|
|
37
|
+
bash execute.sh claim --project P --id APP-12 Take a ready ticket (creates your WorkItem)
|
|
38
|
+
bash execute.sh release --project P --id APP-12 [--note …] Give your ticket back (→ ready)
|
|
39
|
+
bash execute.sh assign --project P --id APP-12 --to <session> [--no-start]
|
|
40
|
+
Orchestrator / team lead: put someone on it
|
|
41
|
+
bash execute.sh log --project P --id APP-12 --note "…" Add a progress note to the ticket's Log
|
|
42
|
+
|
|
43
|
+
P = project id, name or absolute path. Workers' new tickets start in backlog;
|
|
44
|
+
the owner, the orchestrator or a team lead makes them ready.
|
|
45
|
+
EOF_USAGE
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
ACTION=""; PROJECT=""; ID=""; TITLE=""; DESCRIPTION=""; PRIORITY=""; LABELS=""; TEAM=""
|
|
49
|
+
STATUS=""; SOURCE=""; REQUEST_ID=""; NOTE=""; OWNER_REVIEW=""; ASSIGNEE=""; START="true"
|
|
50
|
+
ACCEPTANCE_JSON="null"
|
|
51
|
+
HAS_DESCRIPTION=0
|
|
52
|
+
|
|
53
|
+
if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
|
|
54
|
+
J="$1"; shift
|
|
55
|
+
ACTION=$(printf '%s' "$J" | jq -r '.action // empty')
|
|
56
|
+
PROJECT=$(printf '%s' "$J" | jq -r '.project // .projectPath // .projectId // empty')
|
|
57
|
+
ID=$(printf '%s' "$J" | jq -r '.id // .ticket // empty')
|
|
58
|
+
TITLE=$(printf '%s' "$J" | jq -r '.title // empty')
|
|
59
|
+
if printf '%s' "$J" | jq -e 'has("description")' >/dev/null; then
|
|
60
|
+
DESCRIPTION=$(printf '%s' "$J" | jq -r '.description // ""'); HAS_DESCRIPTION=1
|
|
61
|
+
fi
|
|
62
|
+
PRIORITY=$(printf '%s' "$J" | jq -r '.priority // empty')
|
|
63
|
+
LABELS=$(printf '%s' "$J" | jq -r 'if (.labels|type) == "array" then (.labels|join(",")) else (.labels // empty) end')
|
|
64
|
+
TEAM=$(printf '%s' "$J" | jq -r '.team // empty')
|
|
65
|
+
STATUS=$(printf '%s' "$J" | jq -r '.status // empty')
|
|
66
|
+
SOURCE=$(printf '%s' "$J" | jq -r '.source // empty')
|
|
67
|
+
REQUEST_ID=$(printf '%s' "$J" | jq -r '.requestId // empty')
|
|
68
|
+
NOTE=$(printf '%s' "$J" | jq -r '.note // empty')
|
|
69
|
+
OWNER_REVIEW=$(printf '%s' "$J" | jq -r 'if .ownerReview == true then "true" else empty end')
|
|
70
|
+
ACCEPTANCE_JSON=$(printf '%s' "$J" | jq -c 'if (.acceptance|type) == "array" then .acceptance else null end')
|
|
71
|
+
ASSIGNEE=$(printf '%s' "$J" | jq -r '.to // .assignee // empty')
|
|
72
|
+
START=$(printf '%s' "$J" | jq -r 'if .start == false then "false" else "true" end')
|
|
73
|
+
fi
|
|
74
|
+
if [[ -z "$ACTION" && $# -gt 0 && ${1:0:1} != '-' ]]; then ACTION="$1"; shift; fi
|
|
75
|
+
|
|
76
|
+
while [[ $# -gt 0 ]]; do
|
|
77
|
+
case "$1" in
|
|
78
|
+
--project|-p) [ $# -ge 2 ] || error_exit "--project requires a value"; PROJECT="$2"; shift 2 ;;
|
|
79
|
+
--id|--ticket) [ $# -ge 2 ] || error_exit "--id requires a value"; ID="$2"; shift 2 ;;
|
|
80
|
+
--title) [ $# -ge 2 ] || error_exit "--title requires a value"; TITLE="$2"; shift 2 ;;
|
|
81
|
+
--description) [ $# -ge 2 ] || error_exit "--description requires a value"; DESCRIPTION="$2"; HAS_DESCRIPTION=1; shift 2 ;;
|
|
82
|
+
--acceptance) [ $# -ge 2 ] || error_exit "--acceptance requires a value"
|
|
83
|
+
ACCEPTANCE_JSON=$(jq -c --arg a "$2" 'if . == null then [$a] else . + [$a] end' <<<"$ACCEPTANCE_JSON"); shift 2 ;;
|
|
84
|
+
--priority) [ $# -ge 2 ] || error_exit "--priority requires a value"; PRIORITY="$2"; shift 2 ;;
|
|
85
|
+
--labels) [ $# -ge 2 ] || error_exit "--labels requires a value"; LABELS="$2"; shift 2 ;;
|
|
86
|
+
--team) [ $# -ge 2 ] || error_exit "--team requires a value"; TEAM="$2"; shift 2 ;;
|
|
87
|
+
--status) [ $# -ge 2 ] || error_exit "--status requires a value"; STATUS="$2"; shift 2 ;;
|
|
88
|
+
--source) [ $# -ge 2 ] || error_exit "--source requires a value"; SOURCE="$2"; shift 2 ;;
|
|
89
|
+
--request-id) [ $# -ge 2 ] || error_exit "--request-id requires a value"; REQUEST_ID="$2"; shift 2 ;;
|
|
90
|
+
--note) [ $# -ge 2 ] || error_exit "--note requires a value"; NOTE="$2"; shift 2 ;;
|
|
91
|
+
--owner-review) OWNER_REVIEW="true"; shift ;;
|
|
92
|
+
--to|--assignee) [ $# -ge 2 ] || error_exit "--to requires a value"; ASSIGNEE="$2"; shift 2 ;;
|
|
93
|
+
--no-start) START="false"; shift ;;
|
|
94
|
+
--full) shift ;;
|
|
95
|
+
--help|-h) print_usage; exit 0 ;;
|
|
96
|
+
*) error_exit "Unknown option: $1" ;;
|
|
97
|
+
esac
|
|
98
|
+
done
|
|
99
|
+
|
|
100
|
+
[ -n "$ACTION" ] || { print_usage >&2; error_exit "Missing action: list | show | create | update | claim | release | assign | log"; }
|
|
101
|
+
|
|
102
|
+
# URL-encode a path segment (project paths contain slashes).
|
|
103
|
+
enc() { jq -rn --arg v "$1" '$v|@uri'; }
|
|
104
|
+
|
|
105
|
+
# Compact one-line-per-ticket view for lists.
|
|
106
|
+
TICKET_ROW='{id, title, status, priority, assignee, labels, workItemId}'
|
|
107
|
+
|
|
108
|
+
case "$ACTION" in
|
|
109
|
+
list)
|
|
110
|
+
if [ -n "$PROJECT" ]; then
|
|
111
|
+
QS=""; [ -n "$STATUS" ] && QS="?status=$(enc "$STATUS")"
|
|
112
|
+
api_call GET "/project-tickets/$(enc "$PROJECT")${QS}" | jq "{success, project: .data.project, tickets: [.data.tickets[] | ${TICKET_ROW}], invalid: .data.invalid}"
|
|
113
|
+
else
|
|
114
|
+
QS=""; [ -n "$STATUS" ] && QS="?status=$(enc "$STATUS")"
|
|
115
|
+
api_call GET "/project-tickets${QS}" | jq "{success, projects: [.data[] | {project, tickets: [.tickets[] | ${TICKET_ROW}]}]}"
|
|
116
|
+
fi
|
|
117
|
+
;;
|
|
118
|
+
show)
|
|
119
|
+
require_param "project" "$PROJECT"; require_param "id" "$ID"
|
|
120
|
+
api_call GET "/project-tickets/$(enc "$PROJECT")/$(enc "$ID")" | jq '{success, ticket: (.data | del(.extra))}'
|
|
121
|
+
;;
|
|
122
|
+
create)
|
|
123
|
+
require_param "project" "$PROJECT"; require_param "title" "$TITLE"
|
|
124
|
+
BODY=$(jq -n --arg title "$TITLE" --arg description "$DESCRIPTION" --argjson hasDescription "$HAS_DESCRIPTION" \
|
|
125
|
+
--arg priority "$PRIORITY" --arg labels "$LABELS" --arg team "$TEAM" --arg status "$STATUS" \
|
|
126
|
+
--arg source "$SOURCE" --arg requestId "$REQUEST_ID" --arg ownerReview "$OWNER_REVIEW" --argjson acceptance "$ACCEPTANCE_JSON" \
|
|
127
|
+
'{title: $title}
|
|
128
|
+
+ (if $hasDescription == 1 then {description: $description} else {} end)
|
|
129
|
+
+ (if $acceptance != null then {acceptance: $acceptance} else {} end)
|
|
130
|
+
+ (if $priority != "" then {priority: $priority} else {} end)
|
|
131
|
+
+ (if $labels != "" then {labels: ($labels | split(",") | map(gsub("^\\s+|\\s+$"; "")))} else {} end)
|
|
132
|
+
+ (if $team != "" then {team: $team} else {} end)
|
|
133
|
+
+ (if $status != "" then {status: $status} else {} end)
|
|
134
|
+
+ (if $source != "" then {source: $source} else {} end)
|
|
135
|
+
+ (if $requestId != "" then {requestId: $requestId} else {} end)
|
|
136
|
+
+ (if $ownerReview == "true" then {ownerReview: true} else {} end)')
|
|
137
|
+
api_call POST "/project-tickets/$(enc "$PROJECT")" "$BODY" | jq "{success, ticket: (.data | ${TICKET_ROW} + {fileName})}"
|
|
138
|
+
;;
|
|
139
|
+
update)
|
|
140
|
+
require_param "project" "$PROJECT"; require_param "id" "$ID"
|
|
141
|
+
BODY=$(jq -n --arg title "$TITLE" --arg description "$DESCRIPTION" --argjson hasDescription "$HAS_DESCRIPTION" \
|
|
142
|
+
--arg priority "$PRIORITY" --arg labels "$LABELS" --arg team "$TEAM" --arg status "$STATUS" \
|
|
143
|
+
--arg note "$NOTE" --arg ownerReview "$OWNER_REVIEW" --argjson acceptance "$ACCEPTANCE_JSON" \
|
|
144
|
+
'{}
|
|
145
|
+
+ (if $title != "" then {title: $title} else {} end)
|
|
146
|
+
+ (if $hasDescription == 1 then {description: $description} else {} end)
|
|
147
|
+
+ (if $acceptance != null then {acceptance: $acceptance} else {} end)
|
|
148
|
+
+ (if $priority != "" then {priority: $priority} else {} end)
|
|
149
|
+
+ (if $labels != "" then {labels: ($labels | split(",") | map(gsub("^\\s+|\\s+$"; "")))} else {} end)
|
|
150
|
+
+ (if $team != "" then {team: $team} else {} end)
|
|
151
|
+
+ (if $status != "" then {status: $status} else {} end)
|
|
152
|
+
+ (if $note != "" then {note: $note} else {} end)
|
|
153
|
+
+ (if $ownerReview == "true" then {ownerReview: true} else {} end)')
|
|
154
|
+
[ "$BODY" != "{}" ] || error_exit "Nothing to update"
|
|
155
|
+
api_call POST "/project-tickets/$(enc "$PROJECT")/$(enc "$ID")/update" "$BODY" | jq "{success, ticket: (.data | ${TICKET_ROW})}"
|
|
156
|
+
;;
|
|
157
|
+
claim)
|
|
158
|
+
require_param "project" "$PROJECT"; require_param "id" "$ID"
|
|
159
|
+
api_call POST "/project-tickets/$(enc "$PROJECT")/$(enc "$ID")/claim" '{}' \
|
|
160
|
+
| jq "{success, claimed: .data.claimed, workItemId: .data.workItem.id, ticket: (.data.ticket | ${TICKET_ROW}),
|
|
161
|
+
next: \"Do the work; when done, complete this WorkItem (complete-task / report-status with workItemId). The ticket closes when it is verified.\"}"
|
|
162
|
+
;;
|
|
163
|
+
release)
|
|
164
|
+
require_param "project" "$PROJECT"; require_param "id" "$ID"
|
|
165
|
+
BODY=$(jq -n --arg note "$NOTE" '{status: "ready"} + (if $note != "" then {note: $note} else {} end)')
|
|
166
|
+
api_call POST "/project-tickets/$(enc "$PROJECT")/$(enc "$ID")/transition" "$BODY" | jq "{success, ticket: (.data | ${TICKET_ROW})}"
|
|
167
|
+
;;
|
|
168
|
+
assign)
|
|
169
|
+
require_param "project" "$PROJECT"; require_param "id" "$ID"; require_param "to" "$ASSIGNEE"
|
|
170
|
+
BODY=$(jq -n --arg to "$ASSIGNEE" --argjson start "$START" '{assignee: $to, start: $start}')
|
|
171
|
+
api_call POST "/project-tickets/$(enc "$PROJECT")/$(enc "$ID")/assign" "$BODY" \
|
|
172
|
+
| jq "{success, workItemId: (.data.workItem.id // null), ticket: (.data.ticket | ${TICKET_ROW})}"
|
|
173
|
+
;;
|
|
174
|
+
log)
|
|
175
|
+
require_param "project" "$PROJECT"; require_param "id" "$ID"; require_param "note" "$NOTE"
|
|
176
|
+
BODY=$(jq -n --arg note "$NOTE" '{note: $note}')
|
|
177
|
+
api_call POST "/project-tickets/$(enc "$PROJECT")/$(enc "$ID")/log" "$BODY" | jq '{success, lastLog: (.data.log | last)}'
|
|
178
|
+
;;
|
|
179
|
+
*)
|
|
180
|
+
error_exit "Unknown action: $ACTION (use list | show | create | update | claim | release | assign | log)"
|
|
181
|
+
;;
|
|
182
|
+
esac
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Tests for project-tickets — run with: bash execute.test.sh
|
|
3
|
+
# A python HTTP stub plays the backend; asserts the calls and the output.
|
|
4
|
+
set -u
|
|
5
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
EXEC="$HERE/execute.sh"
|
|
7
|
+
PASS=0; FAIL=0
|
|
8
|
+
check() {
|
|
9
|
+
local name="$1"; local got="$2"; local want="$3"
|
|
10
|
+
if [ "$got" = "$want" ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); echo "FAIL: $name"; echo " want: $want"; echo " got: $got"; fi
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
PORT=18841
|
|
14
|
+
STUB_LOG="$(mktemp)"; export STUB_LOG; export STUB_PORT="$PORT"
|
|
15
|
+
python3 -u <<'PY' >/dev/null 2>&1 &
|
|
16
|
+
from http.server import BaseHTTPRequestHandler, HTTPServer
|
|
17
|
+
import json, os
|
|
18
|
+
LOG = os.environ['STUB_LOG']; PORT = int(os.environ['STUB_PORT'])
|
|
19
|
+
T = {'id': 'APP-1', 'title': 'Export CSV', 'status': 'ready', 'priority': 'P1', 'assignee': None,
|
|
20
|
+
'labels': ['ui'], 'workItemId': None, 'fileName': 'APP-1-export-csv.md', 'extra': {'x': 1},
|
|
21
|
+
'log': ['a · owner · created', 'b · dev · note']}
|
|
22
|
+
class H(BaseHTTPRequestHandler):
|
|
23
|
+
def reply(self, code, obj):
|
|
24
|
+
self.send_response(code); self.send_header('Content-Type', 'application/json'); self.end_headers()
|
|
25
|
+
self.wfile.write(json.dumps(obj).encode())
|
|
26
|
+
def record(self, body=None):
|
|
27
|
+
open(LOG, 'w').write(json.dumps({'method': self.command, 'path': self.path, 'body': body, 'agent': self.headers.get('X-Agent-Session')}))
|
|
28
|
+
def do_GET(self):
|
|
29
|
+
self.record()
|
|
30
|
+
if self.path.startswith('/api/project-tickets/'):
|
|
31
|
+
if self.path.count('/') >= 4 and not self.path.split('?')[0].endswith('%2Fapp'):
|
|
32
|
+
return self.reply(200, {'success': True, 'data': T})
|
|
33
|
+
return self.reply(200, {'success': True, 'data': {'project': {'id': 'p1'}, 'tickets': [T], 'invalid': []}})
|
|
34
|
+
if self.path.startswith('/api/project-tickets'):
|
|
35
|
+
return self.reply(200, {'success': True, 'data': [{'project': {'id': 'p1'}, 'tickets': [T]}]})
|
|
36
|
+
return self.reply(404, {'success': False, 'error': 'nope'})
|
|
37
|
+
def do_POST(self):
|
|
38
|
+
n = int(self.headers.get('content-length', '0')); body = json.loads(self.rfile.read(n).decode() or '{}')
|
|
39
|
+
self.record(body)
|
|
40
|
+
if self.path.endswith('/claim'):
|
|
41
|
+
return self.reply(200, {'success': True, 'data': {'claimed': True, 'workItem': {'id': 'wi-9'}, 'ticket': dict(T, status='in_progress', assignee='dev-ann', workItemId='wi-9')}})
|
|
42
|
+
if 'forbidden' in self.path:
|
|
43
|
+
return self.reply(403, {'success': False, 'error': 'Not allowed'})
|
|
44
|
+
return self.reply(200, {'success': True, 'data': T})
|
|
45
|
+
def log_message(self, *a, **k): pass
|
|
46
|
+
HTTPServer(('127.0.0.1', PORT), H).serve_forever()
|
|
47
|
+
PY
|
|
48
|
+
STUB_PID=$!
|
|
49
|
+
disown "$STUB_PID" 2>/dev/null || true
|
|
50
|
+
trap 'kill "$STUB_PID" >/dev/null 2>&1; rm -f "$STUB_LOG"' EXIT
|
|
51
|
+
for i in $(seq 1 30); do curl -s -o /dev/null -m 0.2 "http://127.0.0.1:${PORT}/" 2>/dev/null && break; sleep 0.1; done
|
|
52
|
+
|
|
53
|
+
run() { CREWLY_SESSION_NAME=dev-ann CREWLY_API_URL="http://127.0.0.1:${PORT}" bash "$EXEC" "$@" 2>/dev/null; }
|
|
54
|
+
run_err() { CREWLY_SESSION_NAME=dev-ann CREWLY_API_URL="http://127.0.0.1:${PORT}" bash "$EXEC" "$@" 2>&1 >/dev/null; }
|
|
55
|
+
last() { jq -r "$1" "$STUB_LOG"; }
|
|
56
|
+
|
|
57
|
+
# --- list: one project (path is URL-encoded), and across my teams' projects ---
|
|
58
|
+
OUT=$(run list --project /work/app --status ready)
|
|
59
|
+
check "list: path" "$(last .path)" "/api/project-tickets/%2Fwork%2Fapp?status=ready"
|
|
60
|
+
check "list: rows" "$(printf '%s' "$OUT" | jq -c '[.tickets[] | [.id, .status]]')" '[["APP-1","ready"]]'
|
|
61
|
+
check "list: agent header" "$(last .agent)" "dev-ann"
|
|
62
|
+
OUT=$(run list)
|
|
63
|
+
check "list mine: path" "$(last .path)" "/api/project-tickets"
|
|
64
|
+
check "list mine: grouped" "$(printf '%s' "$OUT" | jq -c '[.projects[] | .project.id]')" '["p1"]'
|
|
65
|
+
|
|
66
|
+
# --- show drops the extra frontmatter noise ---
|
|
67
|
+
OUT=$(run show --project p1 --id APP-1)
|
|
68
|
+
check "show: path" "$(last .path)" "/api/project-tickets/p1/APP-1"
|
|
69
|
+
check "show: no extra" "$(printf '%s' "$OUT" | jq -c '.ticket | has("extra")')" "false"
|
|
70
|
+
|
|
71
|
+
# --- create with repeated acceptance and labels ---
|
|
72
|
+
run create --project p1 --title "Export CSV" --description "why" --acceptance "header row" --acceptance "opens in Excel" --priority P1 --labels "ui, export" --source request:TKT-012 >/dev/null
|
|
73
|
+
check "create: path" "$(last .path)" "/api/project-tickets/p1"
|
|
74
|
+
check "create: body" "$(last '.body | tostring')" '{"title":"Export CSV","description":"why","acceptance":["header row","opens in Excel"],"priority":"P1","labels":["ui","export"],"source":"request:TKT-012"}'
|
|
75
|
+
|
|
76
|
+
# --- create from JSON input ---
|
|
77
|
+
run '{"action":"create","project":"p1","title":"From JSON","status":"ready","ownerReview":true}' >/dev/null
|
|
78
|
+
check "create json: body" "$(last '.body | tostring')" '{"title":"From JSON","status":"ready","ownerReview":true}'
|
|
79
|
+
|
|
80
|
+
# --- update only sends what was given ---
|
|
81
|
+
run update --project p1 --id APP-1 --priority P0 --status ready --note groomed >/dev/null
|
|
82
|
+
check "update: path" "$(last .path)" "/api/project-tickets/p1/APP-1/update"
|
|
83
|
+
check "update: body" "$(last '.body | tostring')" '{"priority":"P0","status":"ready","note":"groomed"}'
|
|
84
|
+
check "update: nothing" "$(run_err update --project p1 --id APP-1 | grep -c 'Nothing to update')" "1"
|
|
85
|
+
|
|
86
|
+
# --- claim returns the WorkItem id and what to do next ---
|
|
87
|
+
OUT=$(run claim --project p1 --id APP-1)
|
|
88
|
+
check "claim: path" "$(last .path)" "/api/project-tickets/p1/APP-1/claim"
|
|
89
|
+
check "claim: output" "$(printf '%s' "$OUT" | jq -c '[.claimed, .workItemId, .ticket.status]')" '[true,"wi-9","in_progress"]'
|
|
90
|
+
|
|
91
|
+
# --- release = transition to ready ---
|
|
92
|
+
run release --project p1 --id APP-1 --note "blocked on design" >/dev/null
|
|
93
|
+
check "release: path" "$(last .path)" "/api/project-tickets/p1/APP-1/transition"
|
|
94
|
+
check "release: body" "$(last '.body | tostring')" '{"status":"ready","note":"blocked on design"}'
|
|
95
|
+
|
|
96
|
+
# --- assign (orchestrator / lead) ---
|
|
97
|
+
run assign --project p1 --id APP-1 --to dev-bo >/dev/null
|
|
98
|
+
check "assign: path" "$(last .path)" "/api/project-tickets/p1/APP-1/assign"
|
|
99
|
+
check "assign: body" "$(last '.body | tostring')" '{"assignee":"dev-bo","start":true}'
|
|
100
|
+
run '{"action":"assign","project":"p1","id":"APP-1","to":"Steve","start":false}' >/dev/null
|
|
101
|
+
check "assign json no-start" "$(last '.body | tostring')" '{"assignee":"Steve","start":false}'
|
|
102
|
+
check "assign: missing to" "$(run_err assign --project p1 --id APP-1 | grep -c 'to')" "1"
|
|
103
|
+
|
|
104
|
+
# --- log ---
|
|
105
|
+
OUT=$(run log --project p1 --id APP-1 --note "halfway")
|
|
106
|
+
check "log: body" "$(last '.body | tostring')" '{"note":"halfway"}'
|
|
107
|
+
check "log: last line" "$(printf '%s' "$OUT" | jq -r .lastLog)" "b · dev · note"
|
|
108
|
+
|
|
109
|
+
# --- errors ---
|
|
110
|
+
check "missing action" "$(run_err | grep -c 'Missing action')" "1"
|
|
111
|
+
check "unknown action" "$(run_err explode | grep -c 'Unknown action')" "1"
|
|
112
|
+
check "missing project" "$(run_err show --id APP-1 | grep -c 'project')" "1"
|
|
113
|
+
check "server 403 surfaces" "$(run_err claim --project forbidden --id APP-1 >/dev/null; CREWLY_SESSION_NAME=dev-ann CREWLY_API_URL="http://127.0.0.1:${PORT}" bash "$EXEC" log --project forbidden --id APP-1 --note x 2>&1 >/dev/null | grep -c '403')" "1"
|
|
114
|
+
|
|
115
|
+
echo "project-tickets: ${PASS} passed, ${FAIL} failed"
|
|
116
|
+
[ "$FAIL" -eq 0 ]
|
|
@@ -55,7 +55,7 @@ Retrieve stored memories relevant to a given context or query. Use this to look
|
|
|
55
55
|
| `--context` / `-c` | `context` | Yes | Search query (or pipe via stdin) |
|
|
56
56
|
| `--scope` / `-s` | `scope` | No | Filter: `project`, `team`, or `global` |
|
|
57
57
|
| `--limit` / `-l` | `limit` | No | Max number of results |
|
|
58
|
-
| `--project` / `-p` | `projectPath` | No | Filter by project path |
|
|
58
|
+
| `--project` / `-p` | `projectPath` | No | Filter by project path (default: `$CREWLY_PROJECT_PATH` when set) |
|
|
59
59
|
|
|
60
60
|
## Examples — CLI Flags (preferred)
|
|
61
61
|
|
|
@@ -83,6 +83,13 @@ if [ -n "$INPUT_JSON" ]; then
|
|
|
83
83
|
[ -z "$PROJECT_PATH" ] && PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
|
|
84
84
|
fi
|
|
85
85
|
|
|
86
|
+
# #816: Auto-inject projectPath from CREWLY_PROJECT_PATH when not provided,
|
|
87
|
+
# the same default remember applies (#187). Without it a recall from an agent
|
|
88
|
+
# shell searches agent memory only and never sees the project's knowledge.
|
|
89
|
+
if [ -z "$PROJECT_PATH" ] && [ -n "${CREWLY_PROJECT_PATH:-}" ]; then
|
|
90
|
+
PROJECT_PATH="$CREWLY_PROJECT_PATH"
|
|
91
|
+
fi
|
|
92
|
+
|
|
86
93
|
require_param "agentId (--agent)" "$AGENT_ID"
|
|
87
94
|
require_param "context (--context)" "$CONTEXT"
|
|
88
95
|
|
|
@@ -41,7 +41,7 @@ execution:
|
|
|
41
41
|
|
|
42
42
|
Proactively notify the orchestrator when a task is done, blocked, or failed. Use this skill to keep the orchestrator informed without waiting for a scheduled check-in.
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Pass the `workItemId` of the work you are reporting on (from your `[CREWLY-DISPATCH]` notice or `get-my-tasks`) so the right WorkItem is closed. When that WorkItem belongs to a project ticket, the ticket follows it (done once the WorkItem is verified). The old `taskPath` field is still accepted but no longer moves any file.
|
|
45
45
|
|
|
46
46
|
## Parameters
|
|
47
47
|
|
|
@@ -52,6 +52,7 @@ When `status` is `done` and a `taskPath` is provided, the task file is automatic
|
|
|
52
52
|
| `--summary` / `-m` | `summary` | Yes | Brief description (or pipe via stdin) |
|
|
53
53
|
| `--summary-file` | — | No | Read summary from a file path |
|
|
54
54
|
| `--project` / `-p` | `projectPath` | No | Project path for auto-remember on completion |
|
|
55
|
+
| `--role` / `-r` | `role` | No | Agent role recorded with the learning (default: `$CREWLY_ROLE`, else `agent`) |
|
|
55
56
|
| `--task-path` | `taskPath` | No | Task file path; auto-moves to `done/` on completion |
|
|
56
57
|
| `--task-id` | `taskId` | No | Task ID (for structured StatusReport format) |
|
|
57
58
|
| `--progress` | `progress` | No | Progress percentage 0-100 |
|
|
@@ -112,7 +113,7 @@ bash execute.sh --session dev-1 --status done --summary-file /tmp/summary.txt --
|
|
|
112
113
|
## Examples — Legacy JSON (backward compatible)
|
|
113
114
|
|
|
114
115
|
```bash
|
|
115
|
-
bash execute.sh '{"sessionName":"dev-1","status":"done","summary":"Finished implementing auth module","
|
|
116
|
+
bash execute.sh '{"sessionName":"dev-1","status":"done","summary":"Finished implementing auth module","workItemId":"<your WorkItem id>"}'
|
|
116
117
|
```
|
|
117
118
|
|
|
118
119
|
## Output
|
|
@@ -31,6 +31,7 @@ Options:
|
|
|
31
31
|
--summary | -m Status summary text (required unless piped via stdin)
|
|
32
32
|
--summary-file Read summary from file path
|
|
33
33
|
--project | -p Project path for auto-remember on completion
|
|
34
|
+
--role | -r Agent role for the recorded learning (default: $CREWLY_ROLE, else "agent")
|
|
34
35
|
--task-path Task file path to auto-complete
|
|
35
36
|
--task-id Task ID (for structured StatusReport format)
|
|
36
37
|
--progress Progress percentage (0-100, for structured format)
|
|
@@ -45,6 +46,7 @@ SESSION_NAME=""
|
|
|
45
46
|
STATUS=""
|
|
46
47
|
SUMMARY=""
|
|
47
48
|
PROJECT_PATH=""
|
|
49
|
+
AGENT_ROLE=""
|
|
48
50
|
TASK_PATH=""
|
|
49
51
|
TASK_ID=""
|
|
50
52
|
WORK_ITEM_ID=""
|
|
@@ -79,6 +81,10 @@ while [[ $# -gt 0 ]]; do
|
|
|
79
81
|
PROJECT_PATH="$2"
|
|
80
82
|
shift 2
|
|
81
83
|
;;
|
|
84
|
+
--role|-r)
|
|
85
|
+
AGENT_ROLE="$2"
|
|
86
|
+
shift 2
|
|
87
|
+
;;
|
|
82
88
|
--task-path)
|
|
83
89
|
TASK_PATH="$2"
|
|
84
90
|
shift 2
|
|
@@ -143,6 +149,7 @@ if [ -n "$INPUT_JSON" ]; then
|
|
|
143
149
|
[ -z "$WORK_ITEM_ID" ] && WORK_ITEM_ID=$(printf '%s' "$INPUT" | jq -r '.workItemId // empty')
|
|
144
150
|
[ -z "$PROGRESS" ] && PROGRESS=$(printf '%s' "$INPUT" | jq -r '.progress // empty')
|
|
145
151
|
[ -z "$PROJECT_PATH" ] && PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
|
|
152
|
+
[ -z "$AGENT_ROLE" ] && AGENT_ROLE=$(printf '%s' "$INPUT" | jq -r '.role // .agentRole // empty')
|
|
146
153
|
ARTIFACTS=$(printf '%s' "$INPUT" | jq -c '.artifacts // empty')
|
|
147
154
|
BLOCKERS=$(printf '%s' "$INPUT" | jq -c '.blockers // empty')
|
|
148
155
|
USE_STRUCTURED=$(printf '%s' "$INPUT" | jq -r '.structured // "false"')
|
|
@@ -156,6 +163,11 @@ require_param "sessionName (--session)" "$SESSION_NAME"
|
|
|
156
163
|
require_param "status (--status)" "$STATUS"
|
|
157
164
|
require_param "summary (--summary)" "$SUMMARY"
|
|
158
165
|
|
|
166
|
+
# The agent's role labels its learnings. Agent sessions carry it in
|
|
167
|
+
# CREWLY_ROLE (set by the backend at session creation); /memory/record-learning
|
|
168
|
+
# rejects an empty agentRole, so fall back to a generic label.
|
|
169
|
+
[ -z "$AGENT_ROLE" ] && AGENT_ROLE="${CREWLY_ROLE:-agent}"
|
|
170
|
+
|
|
159
171
|
# Gate: milestone summaries must carry a real "WHAT shipped + WHAT it means
|
|
160
172
|
# for the owner" — see config/sops/common/mid-flight-milestone-surface.md
|
|
161
173
|
# (issue #435). Reject anything that looks like "task done" boilerplate
|
|
@@ -297,6 +309,28 @@ if [ "$STATUS" = "done" ]; then
|
|
|
297
309
|
fi
|
|
298
310
|
fi
|
|
299
311
|
|
|
312
|
+
# record_task_learning <label> <summary>
|
|
313
|
+
#
|
|
314
|
+
# Records the report as a project learning via POST /memory/record-learning.
|
|
315
|
+
# The controller requires {agentId, agentRole, projectPath, learning}; this
|
|
316
|
+
# call used to send {agentId, content, type}, so every one 400'd and the
|
|
317
|
+
# `2>/dev/null || true` hid it (#816). A failure is still non-fatal (the
|
|
318
|
+
# status report itself already went out) but is now surfaced on stderr.
|
|
319
|
+
record_task_learning() {
|
|
320
|
+
local label="$1" text="$2" body result
|
|
321
|
+
body=$(jq -n \
|
|
322
|
+
--arg agentId "$SESSION_NAME" \
|
|
323
|
+
--arg agentRole "$AGENT_ROLE" \
|
|
324
|
+
--arg projectPath "$PROJECT_PATH" \
|
|
325
|
+
--arg learning "${label}: ${text}" \
|
|
326
|
+
--arg relatedTask "${WORK_ITEM_ID:-$TASK_ID}" \
|
|
327
|
+
'{agentId: $agentId, agentRole: $agentRole, projectPath: $projectPath, learning: $learning}
|
|
328
|
+
+ (if $relatedTask != "" then {relatedTask: $relatedTask} else {} end)')
|
|
329
|
+
if ! result=$(api_call POST "/memory/record-learning" "$body" 2>&1 >/dev/null); then
|
|
330
|
+
jq -n --arg err "$result" '{warning: "status reported, but recording the learning FAILED", error: $err}' >&2
|
|
331
|
+
fi
|
|
332
|
+
}
|
|
333
|
+
|
|
300
334
|
# Auto-persist key findings as project knowledge when task is done (#127, #219).
|
|
301
335
|
if [ "$STATUS" = "done" ] && [ -n "$SUMMARY" ]; then
|
|
302
336
|
auto_remember "$SESSION_NAME" "[COMPLETED] Task completed by ${SESSION_NAME}: ${SUMMARY}" "decision" "project" "$PROJECT_PATH"
|
|
@@ -306,14 +340,8 @@ fi
|
|
|
306
340
|
# Uses existing APIs — no additional LLM calls. The agent's own summary
|
|
307
341
|
# is the learning input; keyword extraction identifies growth areas.
|
|
308
342
|
if [ "$STATUS" = "done" ] && [ -n "$SUMMARY" ] && [ -n "$PROJECT_PATH" ]; then
|
|
309
|
-
# Record as a
|
|
310
|
-
|
|
311
|
-
--arg agentId "$SESSION_NAME" \
|
|
312
|
-
--arg content "$SUMMARY" \
|
|
313
|
-
--arg projectPath "$PROJECT_PATH" \
|
|
314
|
-
--arg type "success" \
|
|
315
|
-
'{agentId: $agentId, content: $content, projectPath: $projectPath, type: $type}')
|
|
316
|
-
api_call POST "/memory/record-learning" "$LEARN_BODY" 2>/dev/null || true
|
|
343
|
+
# Record as a project learning (POST /memory/record-learning).
|
|
344
|
+
record_task_learning "Task completed" "$SUMMARY"
|
|
317
345
|
|
|
318
346
|
# Extract growth areas from summary (keyword-based, no LLM)
|
|
319
347
|
GROWTH_BODY=$(jq -n \
|
|
@@ -326,12 +354,6 @@ fi
|
|
|
326
354
|
# Growth: record failures for learning when task fails or is blocked.
|
|
327
355
|
if [ "$STATUS" = "failed" ] || [ "$STATUS" = "blocked" ]; then
|
|
328
356
|
if [ -n "$SUMMARY" ] && [ -n "$PROJECT_PATH" ]; then
|
|
329
|
-
|
|
330
|
-
--arg agentId "$SESSION_NAME" \
|
|
331
|
-
--arg content "$SUMMARY" \
|
|
332
|
-
--arg projectPath "$PROJECT_PATH" \
|
|
333
|
-
--arg type "failure" \
|
|
334
|
-
'{agentId: $agentId, content: $content, projectPath: $projectPath, type: $type}')
|
|
335
|
-
api_call POST "/memory/record-learning" "$FAIL_BODY" 2>/dev/null || true
|
|
357
|
+
record_task_learning "Task ${STATUS}" "$SUMMARY"
|
|
336
358
|
fi
|
|
337
359
|
fi
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Split Ticket
|
|
3
|
+
description: Move an ask that landed in another ticket's discussion out into its own ticket, keeping the thread link.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
category: task-management
|
|
6
|
+
skillType: claude-skill
|
|
7
|
+
assignableRoles:
|
|
8
|
+
- developer
|
|
9
|
+
- qa
|
|
10
|
+
- tpm
|
|
11
|
+
- designer
|
|
12
|
+
- frontend-developer
|
|
13
|
+
- backend-developer
|
|
14
|
+
- fullstack-dev
|
|
15
|
+
- qa-engineer
|
|
16
|
+
- product-manager
|
|
17
|
+
- architect
|
|
18
|
+
- generalist
|
|
19
|
+
- sales
|
|
20
|
+
- support
|
|
21
|
+
- orchestrator
|
|
22
|
+
- team-leader
|
|
23
|
+
triggers:
|
|
24
|
+
- split ticket
|
|
25
|
+
- new ask in thread
|
|
26
|
+
- separate ticket
|
|
27
|
+
- TKT
|
|
28
|
+
tags:
|
|
29
|
+
- ticket
|
|
30
|
+
- intake
|
|
31
|
+
execution:
|
|
32
|
+
type: script
|
|
33
|
+
script:
|
|
34
|
+
file: execute.sh
|
|
35
|
+
interpreter: bash
|
|
36
|
+
timeoutMs: 15000
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
# Split Ticket
|
|
40
|
+
|
|
41
|
+
Every distinct ask from the owner should be its own ticket, so the owner can
|
|
42
|
+
say it and move on. Intake opens a new ticket for a new ask said in an
|
|
43
|
+
existing ticket's thread. When it is unsure, it **appends** instead, because a
|
|
44
|
+
ticket per stray remark is worse than a missed split. If an ask landed in a
|
|
45
|
+
ticket where it does not belong, split it out:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# See the ticket's follow-ups and their refs
|
|
49
|
+
bash execute.sh --ticket TKT-039 --list
|
|
50
|
+
|
|
51
|
+
# Move one of them out into its own ticket
|
|
52
|
+
bash execute.sh --ticket TKT-039 --discussion-ref slackch-C0C2QCGE9K9-1790433421.1
|
|
53
|
+
|
|
54
|
+
# Or open one from text (a pure information question: add --question)
|
|
55
|
+
bash execute.sh --ticket TKT-039 --text "research how Opus makes video" --assignee <session>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- The new ticket stays in the same thread and records the old one as its
|
|
59
|
+
parent. Later follow-ups in that thread still find a ticket.
|
|
60
|
+
- `--question` means a pure information question. It gets no acceptance step.
|
|
61
|
+
- Split only a real new ask with its own deliverable. Answers, "好的",
|
|
62
|
+
clarifications and "send it as a PDF" belong to the ticket they were said in.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# split-ticket — move an ask out of a ticket into its own ticket (#827)
|
|
4
|
+
#
|
|
5
|
+
# Backed by GET /api/tickets/:tkt (list mode) and POST /api/tickets/:id/split
|
|
6
|
+
# (specs/ticket-loop.md, "New asks in a thread").
|
|
7
|
+
#
|
|
8
|
+
# Usage:
|
|
9
|
+
# bash execute.sh --ticket TKT-039 --list
|
|
10
|
+
# bash execute.sh --ticket TKT-039 --discussion-ref <ref> [--title "…"] [--assignee <session>] [--question]
|
|
11
|
+
# bash execute.sh --ticket TKT-039 --text "research X" [--title "…"] [--assignee <session>] [--question]
|
|
12
|
+
# bash execute.sh '{"ticket":"TKT-039","discussionRef":"<ref>"}'
|
|
13
|
+
# =============================================================================
|
|
14
|
+
set -euo pipefail
|
|
15
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
16
|
+
source "${SCRIPT_DIR}/../../_common/lib.sh"
|
|
17
|
+
|
|
18
|
+
print_usage() {
|
|
19
|
+
cat <<'EOF_USAGE'
|
|
20
|
+
Usage:
|
|
21
|
+
bash execute.sh --ticket TKT-039 --list Show the ticket's follow-ups (with their refs)
|
|
22
|
+
bash execute.sh --ticket TKT-039 --discussion-ref <ref> Move that follow-up out into its own ticket
|
|
23
|
+
bash execute.sh --ticket TKT-039 --text "the new ask" Open a new ticket from text
|
|
24
|
+
|
|
25
|
+
Options:
|
|
26
|
+
--ticket TKT-039, 39 or the ticket id (required)
|
|
27
|
+
--list List the follow-ups instead of splitting
|
|
28
|
+
--discussion-ref ref of the follow-up to move out (from --list)
|
|
29
|
+
--text Text of the new ask (when not moving a follow-up)
|
|
30
|
+
--title Title for the new ticket
|
|
31
|
+
--assignee Agent session that takes it (default: the source ticket's assignee)
|
|
32
|
+
--question A pure information question: no acceptance step
|
|
33
|
+
--help | -h Show this help
|
|
34
|
+
EOF_USAGE
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
TICKET=""; LIST=""; DREF=""; TEXT=""; TITLE=""; ASSIGNEE=""; QUESTION="false"
|
|
38
|
+
if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
|
|
39
|
+
TICKET=$(printf '%s' "$1" | jq -r '.ticket // .requestId // empty')
|
|
40
|
+
DREF=$(printf '%s' "$1" | jq -r '.discussionRef // empty')
|
|
41
|
+
TEXT=$(printf '%s' "$1" | jq -r '.text // empty')
|
|
42
|
+
TITLE=$(printf '%s' "$1" | jq -r '.title // empty')
|
|
43
|
+
ASSIGNEE=$(printf '%s' "$1" | jq -r '.assignee // empty')
|
|
44
|
+
QUESTION=$(printf '%s' "$1" | jq -r 'if .question == true then "true" else "false" end')
|
|
45
|
+
LIST=$(printf '%s' "$1" | jq -r 'if .list == true then "1" else empty end')
|
|
46
|
+
shift || true
|
|
47
|
+
fi
|
|
48
|
+
while [[ $# -gt 0 ]]; do
|
|
49
|
+
case "$1" in
|
|
50
|
+
--ticket|--request-id) [ $# -ge 2 ] || error_exit "--ticket requires a value"; TICKET="$2"; shift 2 ;;
|
|
51
|
+
--list) LIST="1"; shift ;;
|
|
52
|
+
--discussion-ref) [ $# -ge 2 ] || error_exit "--discussion-ref requires a value"; DREF="$2"; shift 2 ;;
|
|
53
|
+
--text) [ $# -ge 2 ] || error_exit "--text requires a value"; TEXT="$2"; shift 2 ;;
|
|
54
|
+
--title) [ $# -ge 2 ] || error_exit "--title requires a value"; TITLE="$2"; shift 2 ;;
|
|
55
|
+
--assignee) [ $# -ge 2 ] || error_exit "--assignee requires a value"; ASSIGNEE="$2"; shift 2 ;;
|
|
56
|
+
--question) QUESTION="true"; shift ;;
|
|
57
|
+
--help|-h) print_usage; exit 0 ;;
|
|
58
|
+
*) error_exit "Unknown option: $1" ;;
|
|
59
|
+
esac
|
|
60
|
+
done
|
|
61
|
+
|
|
62
|
+
require_param "ticket" "$TICKET"
|
|
63
|
+
|
|
64
|
+
# List mode: the follow-ups, with the ref to pass to --discussion-ref.
|
|
65
|
+
if [ -n "$LIST" ]; then
|
|
66
|
+
api_call GET "/tickets/${TICKET}" | jq '(.data.ticket // {}) as $t | {
|
|
67
|
+
tkt: (.data.board.tkt // null),
|
|
68
|
+
title: ($t.title // null),
|
|
69
|
+
followUps: [($t.discussion // [])[] | {ref, at, text: (.text | .[0:200])}]
|
|
70
|
+
} | . + {count: (.followUps | length)}'
|
|
71
|
+
exit 0
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
[ -n "$DREF" ] || [ -n "$TEXT" ] || error_exit "Give --discussion-ref <ref> (move a follow-up out) or --text \"…\" (see --list)"
|
|
75
|
+
|
|
76
|
+
BODY=$(jq -n --arg d "$DREF" --arg t "$TEXT" --arg title "$TITLE" --arg a "$ASSIGNEE" --argjson q "$QUESTION" \
|
|
77
|
+
'{question: $q}
|
|
78
|
+
+ (if $d == "" then {} else {discussionRef: $d} end)
|
|
79
|
+
+ (if $t == "" then {} else {text: $t} end)
|
|
80
|
+
+ (if $title == "" then {} else {title: $title} end)
|
|
81
|
+
+ (if $a == "" then {} else {assignee: $a} end)')
|
|
82
|
+
api_call POST "/tickets/${TICKET}/split" "$BODY" | jq '{
|
|
83
|
+
success,
|
|
84
|
+
newTicket: (.data.ticket | if . then {id, ticketNumber, title, parentTicketId, threadRef: .origin.threadRef} else null end),
|
|
85
|
+
moved: (.data.moved // false),
|
|
86
|
+
error: (.error // null)
|
|
87
|
+
}'
|