crewly 1.0.0
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/LICENSE +21 -0
- package/README.md +96 -0
- package/config/auto-assign/default-config.yaml +74 -0
- package/config/constants.d.ts.map +1 -0
- package/config/constants.test.ts +469 -0
- package/config/constants.ts +827 -0
- package/config/continuation/prompts/continue-work.md +60 -0
- package/config/continuation/prompts/max-iterations.md +41 -0
- package/config/continuation/prompts/quality-gates-failed.md +37 -0
- package/config/continuation/prompts/retry-error.md +59 -0
- package/config/continuation/prompts/task-assignment.md +60 -0
- package/config/index.d.ts.map +1 -0
- package/config/index.ts +87 -0
- package/config/orchestrator_tasks/prompts/assign-task-orchestrator-prompt-template.md +70 -0
- package/config/orchestrator_tasks/prompts/checkin-orchestrator-prompt-template.md +138 -0
- package/config/orchestrator_tasks/prompts/orchestrator-prompt.md +68 -0
- package/config/orchestrator_tasks/prompts/project-start-orchestrator-prompt-template.md +104 -0
- package/config/quality-gates/default-gates.test.ts +246 -0
- package/config/quality-gates/default-gates.ts +191 -0
- package/config/quality-gates/index.ts +21 -0
- package/config/roles/_common/memory-instructions.md +56 -0
- package/config/roles/architect/prompt.md +87 -0
- package/config/roles/architect/role.json +13 -0
- package/config/roles/backend-developer/prompt.md +86 -0
- package/config/roles/backend-developer/role.json +13 -0
- package/config/roles/designer/prompt.md +86 -0
- package/config/roles/designer/role.json +13 -0
- package/config/roles/developer/prompt.md +94 -0
- package/config/roles/developer/role.json +13 -0
- package/config/roles/frontend-developer/prompt.md +86 -0
- package/config/roles/frontend-developer/role.json +13 -0
- package/config/roles/fullstack-dev/prompt.md +86 -0
- package/config/roles/fullstack-dev/role.json +13 -0
- package/config/roles/generalist/prompt.md +87 -0
- package/config/roles/generalist/role.json +13 -0
- package/config/roles/orchestrator/prompt.md +865 -0
- package/config/roles/orchestrator/role.json +13 -0
- package/config/roles/product-manager/prompt.md +86 -0
- package/config/roles/product-manager/role.json +13 -0
- package/config/roles/qa/prompt.md +86 -0
- package/config/roles/qa/role.json +13 -0
- package/config/roles/qa-engineer/prompt.md +86 -0
- package/config/roles/qa-engineer/role.json +13 -0
- package/config/roles/sales/prompt.md +86 -0
- package/config/roles/sales/role.json +13 -0
- package/config/roles/support/prompt.md +86 -0
- package/config/roles/support/role.json +13 -0
- package/config/roles/tpm/prompt.md +87 -0
- package/config/roles/tpm/role.json +13 -0
- package/config/runtime_scripts/initialize_claude.sh +14 -0
- package/config/runtime_scripts/initialize_codex.sh +14 -0
- package/config/runtime_scripts/runtime-config.json +26 -0
- package/config/skills/_common/lib.sh +64 -0
- package/config/skills/agent/_common/lib.sh +4 -0
- package/config/skills/agent/accept-task/execute.sh +21 -0
- package/config/skills/agent/accept-task/instructions.md +20 -0
- package/config/skills/agent/accept-task/skill.json +20 -0
- package/config/skills/agent/block-task/execute.sh +26 -0
- package/config/skills/agent/block-task/instructions.md +22 -0
- package/config/skills/agent/block-task/skill.json +20 -0
- package/config/skills/agent/check-quality-gates/execute.sh +20 -0
- package/config/skills/agent/check-quality-gates/instructions.md +23 -0
- package/config/skills/agent/check-quality-gates/skill.json +20 -0
- package/config/skills/agent/complete-task/execute.sh +26 -0
- package/config/skills/agent/complete-task/instructions.md +22 -0
- package/config/skills/agent/complete-task/skill.json +20 -0
- package/config/skills/agent/get-my-context/execute.sh +23 -0
- package/config/skills/agent/get-my-context/instructions.md +21 -0
- package/config/skills/agent/get-my-context/skill.json +20 -0
- package/config/skills/agent/get-sops/execute.sh +24 -0
- package/config/skills/agent/get-sops/instructions.md +21 -0
- package/config/skills/agent/get-sops/skill.json +20 -0
- package/config/skills/agent/get-team-status/execute.sh +8 -0
- package/config/skills/agent/get-team-status/instructions.md +17 -0
- package/config/skills/agent/get-team-status/skill.json +20 -0
- package/config/skills/agent/manage-knowledge/execute.sh +60 -0
- package/config/skills/agent/manage-knowledge/instructions.md +46 -0
- package/config/skills/agent/nano-banana-image/.env +2 -0
- package/config/skills/agent/nano-banana-image/.env.example +6 -0
- package/config/skills/agent/nano-banana-image/generate.sh +73 -0
- package/config/skills/agent/nano-banana-image/instructions.md +50 -0
- package/config/skills/agent/nano-banana-image/skill.json +39 -0
- package/config/skills/agent/query-knowledge/execute.sh +30 -0
- package/config/skills/agent/query-knowledge/instructions.md +47 -0
- package/config/skills/agent/query-knowledge/skill.json +20 -0
- package/config/skills/agent/read-task/execute.sh +15 -0
- package/config/skills/agent/read-task/instructions.md +19 -0
- package/config/skills/agent/read-task/skill.json +20 -0
- package/config/skills/agent/recall/execute.sh +24 -0
- package/config/skills/agent/recall/instructions.md +23 -0
- package/config/skills/agent/recall/skill.json +20 -0
- package/config/skills/agent/record-learning/execute.sh +29 -0
- package/config/skills/agent/record-learning/instructions.md +24 -0
- package/config/skills/agent/record-learning/skill.json +20 -0
- package/config/skills/agent/register-self/execute.sh +28 -0
- package/config/skills/agent/register-self/instructions.md +18 -0
- package/config/skills/agent/register-self/skill.json +20 -0
- package/config/skills/agent/remember/execute.sh +29 -0
- package/config/skills/agent/remember/instructions.md +24 -0
- package/config/skills/agent/remember/skill.json +20 -0
- package/config/skills/agent/report-progress/execute.sh +28 -0
- package/config/skills/agent/report-progress/instructions.md +25 -0
- package/config/skills/agent/report-progress/skill.json +20 -0
- package/config/skills/agent/report-status/execute.sh +35 -0
- package/config/skills/agent/report-status/instructions.md +36 -0
- package/config/skills/agent/report-status/skill.json +20 -0
- package/config/skills/agent/send-chat-response/execute.sh +26 -0
- package/config/skills/agent/send-chat-response/instructions.md +22 -0
- package/config/skills/agent/send-chat-response/skill.json +20 -0
- package/config/skills/agent/send-message/execute.sh +17 -0
- package/config/skills/agent/send-message/instructions.md +20 -0
- package/config/skills/agent/send-message/skill.json +20 -0
- package/config/skills/agent/send-pdf-to-slack/execute.sh +182 -0
- package/config/skills/agent/send-pdf-to-slack/instructions.md +49 -0
- package/config/skills/agent/send-pdf-to-slack/skill.json +20 -0
- package/config/skills/chrome-browser/instructions.md +42 -0
- package/config/skills/chrome-browser/skill.json +39 -0
- package/config/skills/nano-banana-image/.env +2 -0
- package/config/skills/nano-banana-image/.env.example +6 -0
- package/config/skills/nano-banana-image/generate.sh +73 -0
- package/config/skills/nano-banana-image/instructions.md +50 -0
- package/config/skills/nano-banana-image/skill.json +39 -0
- package/config/skills/orchestrator/_common/lib.sh +4 -0
- package/config/skills/orchestrator/assign-task/execute.sh +11 -0
- package/config/skills/orchestrator/assign-task/instructions.md +17 -0
- package/config/skills/orchestrator/assign-task/skill.json +20 -0
- package/config/skills/orchestrator/assign-team-to-project/execute.sh +14 -0
- package/config/skills/orchestrator/assign-team-to-project/instructions.md +20 -0
- package/config/skills/orchestrator/assign-team-to-project/skill.json +20 -0
- package/config/skills/orchestrator/broadcast/execute.sh +35 -0
- package/config/skills/orchestrator/broadcast/instructions.md +19 -0
- package/config/skills/orchestrator/broadcast/skill.json +20 -0
- package/config/skills/orchestrator/cancel-schedule/execute.sh +13 -0
- package/config/skills/orchestrator/cancel-schedule/instructions.md +19 -0
- package/config/skills/orchestrator/cancel-schedule/skill.json +20 -0
- package/config/skills/orchestrator/complete-task/execute.sh +10 -0
- package/config/skills/orchestrator/complete-task/instructions.md +17 -0
- package/config/skills/orchestrator/complete-task/skill.json +20 -0
- package/config/skills/orchestrator/create-project/execute.sh +14 -0
- package/config/skills/orchestrator/create-project/instructions.md +21 -0
- package/config/skills/orchestrator/create-project/skill.json +20 -0
- package/config/skills/orchestrator/create-team/execute.sh +14 -0
- package/config/skills/orchestrator/create-team/instructions.md +21 -0
- package/config/skills/orchestrator/create-team/skill.json +20 -0
- package/config/skills/orchestrator/delegate-task/execute.sh +37 -0
- package/config/skills/orchestrator/delegate-task/instructions.md +23 -0
- package/config/skills/orchestrator/delegate-task/skill.json +20 -0
- package/config/skills/orchestrator/get-agent-logs/execute.sh +14 -0
- package/config/skills/orchestrator/get-agent-logs/instructions.md +20 -0
- package/config/skills/orchestrator/get-agent-logs/skill.json +20 -0
- package/config/skills/orchestrator/get-agent-status/execute.sh +22 -0
- package/config/skills/orchestrator/get-agent-status/instructions.md +19 -0
- package/config/skills/orchestrator/get-agent-status/skill.json +20 -0
- package/config/skills/orchestrator/get-project-overview/execute.sh +7 -0
- package/config/skills/orchestrator/get-project-overview/instructions.md +17 -0
- package/config/skills/orchestrator/get-project-overview/skill.json +20 -0
- package/config/skills/orchestrator/get-tasks/execute.sh +27 -0
- package/config/skills/orchestrator/get-tasks/instructions.md +17 -0
- package/config/skills/orchestrator/get-tasks/skill.json +20 -0
- package/config/skills/orchestrator/get-team-status/execute.sh +7 -0
- package/config/skills/orchestrator/get-team-status/instructions.md +17 -0
- package/config/skills/orchestrator/get-team-status/skill.json +20 -0
- package/config/skills/orchestrator/heartbeat/execute.sh +37 -0
- package/config/skills/orchestrator/heartbeat/instructions.md +24 -0
- package/config/skills/orchestrator/heartbeat/skill.json +20 -0
- package/config/skills/orchestrator/list-subscriptions/execute.sh +7 -0
- package/config/skills/orchestrator/list-subscriptions/instructions.md +17 -0
- package/config/skills/orchestrator/list-subscriptions/skill.json +20 -0
- package/config/skills/orchestrator/query-knowledge/execute.sh +30 -0
- package/config/skills/orchestrator/query-knowledge/instructions.md +47 -0
- package/config/skills/orchestrator/query-knowledge/skill.json +20 -0
- package/config/skills/orchestrator/recall/execute.sh +13 -0
- package/config/skills/orchestrator/recall/instructions.md +23 -0
- package/config/skills/orchestrator/recall/skill.json +20 -0
- package/config/skills/orchestrator/record-failure/execute.sh +13 -0
- package/config/skills/orchestrator/record-failure/instructions.md +22 -0
- package/config/skills/orchestrator/record-failure/skill.json +20 -0
- package/config/skills/orchestrator/record-learning/execute.sh +13 -0
- package/config/skills/orchestrator/record-learning/instructions.md +23 -0
- package/config/skills/orchestrator/record-learning/skill.json +20 -0
- package/config/skills/orchestrator/record-success/execute.sh +13 -0
- package/config/skills/orchestrator/record-success/instructions.md +22 -0
- package/config/skills/orchestrator/record-success/skill.json +20 -0
- package/config/skills/orchestrator/register-self/execute.sh +24 -0
- package/config/skills/orchestrator/register-self/instructions.md +21 -0
- package/config/skills/orchestrator/register-self/skill.json +20 -0
- package/config/skills/orchestrator/remember/execute.sh +15 -0
- package/config/skills/orchestrator/remember/instructions.md +24 -0
- package/config/skills/orchestrator/remember/skill.json +20 -0
- package/config/skills/orchestrator/reply-slack/execute.sh +174 -0
- package/config/skills/orchestrator/reply-slack/instructions.md +52 -0
- package/config/skills/orchestrator/reply-slack/skill.json +20 -0
- package/config/skills/orchestrator/restart-crewly/execute.sh +7 -0
- package/config/skills/orchestrator/restart-crewly/instructions.md +23 -0
- package/config/skills/orchestrator/restart-crewly/skill.json +20 -0
- package/config/skills/orchestrator/resume-session/execute.sh +22 -0
- package/config/skills/orchestrator/resume-session/instructions.md +31 -0
- package/config/skills/orchestrator/resume-session/skill.json +20 -0
- package/config/skills/orchestrator/schedule-check/execute.sh +35 -0
- package/config/skills/orchestrator/schedule-check/instructions.md +35 -0
- package/config/skills/orchestrator/schedule-check/skill.json +20 -0
- package/config/skills/orchestrator/send-key/execute.sh +17 -0
- package/config/skills/orchestrator/send-message/execute.sh +17 -0
- package/config/skills/orchestrator/send-message/instructions.md +20 -0
- package/config/skills/orchestrator/send-message/skill.json +20 -0
- package/config/skills/orchestrator/send-pdf-to-slack/execute.sh +182 -0
- package/config/skills/orchestrator/send-pdf-to-slack/instructions.md +49 -0
- package/config/skills/orchestrator/send-pdf-to-slack/skill.json +20 -0
- package/config/skills/orchestrator/set-goal/execute.sh +13 -0
- package/config/skills/orchestrator/set-goal/instructions.md +21 -0
- package/config/skills/orchestrator/set-goal/skill.json +20 -0
- package/config/skills/orchestrator/start-agent/execute.sh +15 -0
- package/config/skills/orchestrator/start-agent/instructions.md +20 -0
- package/config/skills/orchestrator/start-agent/skill.json +20 -0
- package/config/skills/orchestrator/start-team/execute.sh +14 -0
- package/config/skills/orchestrator/start-team/instructions.md +20 -0
- package/config/skills/orchestrator/start-team/skill.json +20 -0
- package/config/skills/orchestrator/stop-agent/execute.sh +15 -0
- package/config/skills/orchestrator/stop-agent/instructions.md +20 -0
- package/config/skills/orchestrator/stop-agent/skill.json +20 -0
- package/config/skills/orchestrator/stop-team/execute.sh +13 -0
- package/config/skills/orchestrator/stop-team/instructions.md +19 -0
- package/config/skills/orchestrator/stop-team/skill.json +20 -0
- package/config/skills/orchestrator/subscribe-event/execute.sh +19 -0
- package/config/skills/orchestrator/subscribe-event/instructions.md +21 -0
- package/config/skills/orchestrator/subscribe-event/skill.json +20 -0
- package/config/skills/orchestrator/terminate-agent/execute.sh +13 -0
- package/config/skills/orchestrator/terminate-agent/instructions.md +19 -0
- package/config/skills/orchestrator/terminate-agent/skill.json +20 -0
- package/config/skills/orchestrator/unsubscribe-event/execute.sh +13 -0
- package/config/skills/orchestrator/unsubscribe-event/instructions.md +19 -0
- package/config/skills/orchestrator/unsubscribe-event/skill.json +20 -0
- package/config/skills/orchestrator/update-focus/execute.sh +13 -0
- package/config/skills/orchestrator/update-focus/instructions.md +21 -0
- package/config/skills/orchestrator/update-focus/skill.json +20 -0
- package/config/skills/playwright-chrome-browser/instructions.md +95 -0
- package/config/skills/playwright-chrome-browser/skill.json +44 -0
- package/config/sops/common/blocker-handling.md +55 -0
- package/config/sops/common/communication-protocol.md +52 -0
- package/config/sops/developer/coding-standards.md +54 -0
- package/config/sops/developer/git-workflow.md +58 -0
- package/config/sops/developer/testing-requirements.md +62 -0
- package/config/sops/pm/progress-tracking.md +57 -0
- package/config/sops/pm/task-decomposition.md +59 -0
- package/config/sops/qa/testing-procedures.md +60 -0
- package/config/task_assignment/prompts/target-agent-assignment-prompt.md +119 -0
- package/config/task_starters/build_e2e_test_plan_prompt.json +51 -0
- package/config/task_starters/build_spec_prompt.json +79 -0
- package/config/task_starters/build_tasks_prompt.json +55 -0
- package/config/task_starters/prompts/build_spec_step1_project_requirements.md +120 -0
- package/config/task_starters/prompts/build_spec_step2_technical_design.md +147 -0
- package/config/task_starters/prompts/build_spec_step3_integration_testing.md +196 -0
- package/config/task_starters/prompts/build_tasks_step1_milestone_structure.md +274 -0
- package/config/task_starters/prompts/e2e_test_plan_step1_build_tests.md +391 -0
- package/config/task_starters/prompts/e2e_test_plan_step2_run_tests.md +240 -0
- package/dist/backend/backend/src/constants.d.ts +669 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -0
- package/dist/backend/backend/src/constants.js +482 -0
- package/dist/backend/backend/src/constants.js.map +1 -0
- package/dist/backend/backend/src/controllers/api.controller.d.ts +115 -0
- package/dist/backend/backend/src/controllers/api.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/api.controller.js +427 -0
- package/dist/backend/backend/src/controllers/api.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts +160 -0
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +555 -0
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/chat/chat.routes.d.ts +18 -0
- package/dist/backend/backend/src/controllers/chat/chat.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/chat/chat.routes.js +39 -0
- package/dist/backend/backend/src/controllers/chat/chat.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/chat/index.d.ts +10 -0
- package/dist/backend/backend/src/controllers/chat/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/chat/index.js +10 -0
- package/dist/backend/backend/src/controllers/chat/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/event-bus/event-bus.controller.d.ts +54 -0
- package/dist/backend/backend/src/controllers/event-bus/event-bus.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/event-bus/event-bus.controller.js +123 -0
- package/dist/backend/backend/src/controllers/event-bus/event-bus.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/event-bus/event-bus.routes.d.ts +15 -0
- package/dist/backend/backend/src/controllers/event-bus/event-bus.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/event-bus/event-bus.routes.js +27 -0
- package/dist/backend/backend/src/controllers/event-bus/event-bus.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/index.d.ts +10 -0
- package/dist/backend/backend/src/controllers/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/index.js +37 -0
- package/dist/backend/backend/src/controllers/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/knowledge/index.d.ts +7 -0
- package/dist/backend/backend/src/controllers/knowledge/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/knowledge/index.js +7 -0
- package/dist/backend/backend/src/controllers/knowledge/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts +71 -0
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js +237 -0
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts +24 -0
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js +34 -0
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/marketplace/index.d.ts +11 -0
- package/dist/backend/backend/src/controllers/marketplace/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/marketplace/index.js +11 -0
- package/dist/backend/backend/src/controllers/marketplace/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts +135 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js +228 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts +30 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +44 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/memory/index.d.ts +11 -0
- package/dist/backend/backend/src/controllers/memory/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/memory/index.js +11 -0
- package/dist/backend/backend/src/controllers/memory/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts +183 -0
- package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/memory/memory.controller.js +505 -0
- package/dist/backend/backend/src/controllers/memory/memory.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/memory/memory.routes.d.ts +30 -0
- package/dist/backend/backend/src/controllers/memory/memory.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/memory/memory.routes.js +46 -0
- package/dist/backend/backend/src/controllers/memory/memory.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/messaging/delivery-logs.controller.d.ts +5 -0
- package/dist/backend/backend/src/controllers/messaging/delivery-logs.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/messaging/delivery-logs.controller.js +21 -0
- package/dist/backend/backend/src/controllers/messaging/delivery-logs.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/messaging/messaging.controller.d.ts +72 -0
- package/dist/backend/backend/src/controllers/messaging/messaging.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/messaging/messaging.controller.js +164 -0
- package/dist/backend/backend/src/controllers/messaging/messaging.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/messaging/messaging.routes.d.ts +15 -0
- package/dist/backend/backend/src/controllers/messaging/messaging.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/messaging/messaging.routes.js +31 -0
- package/dist/backend/backend/src/controllers/messaging/messaging.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/messaging/scheduled-messages.controller.d.ts +10 -0
- package/dist/backend/backend/src/controllers/messaging/scheduled-messages.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/messaging/scheduled-messages.controller.js +223 -0
- package/dist/backend/backend/src/controllers/messaging/scheduled-messages.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/monitoring/file-watcher.controller.d.ts +121 -0
- package/dist/backend/backend/src/controllers/monitoring/file-watcher.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/monitoring/file-watcher.controller.js +392 -0
- package/dist/backend/backend/src/controllers/monitoring/file-watcher.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.d.ts +9 -0
- package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.js +15 -0
- package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +117 -0
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +705 -0
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.d.ts +22 -0
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js +465 -0
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.routes.d.ts +9 -0
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.routes.js +26 -0
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/project/git.controller.d.ts +10 -0
- package/dist/backend/backend/src/controllers/project/git.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/project/git.controller.js +160 -0
- package/dist/backend/backend/src/controllers/project/git.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/project/project.controller.d.ts +41 -0
- package/dist/backend/backend/src/controllers/project/project.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/project/project.controller.js +1126 -0
- package/dist/backend/backend/src/controllers/project/project.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/project/project.routes.d.ts +19 -0
- package/dist/backend/backend/src/controllers/project/project.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/project/project.routes.js +141 -0
- package/dist/backend/backend/src/controllers/project/project.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.d.ts +32 -0
- package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.js +57 -0
- package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/request-types.d.ts +225 -0
- package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/request-types.js +8 -0
- package/dist/backend/backend/src/controllers/request-types.js.map +1 -0
- package/dist/backend/backend/src/controllers/self-improvement/index.d.ts +9 -0
- package/dist/backend/backend/src/controllers/self-improvement/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/self-improvement/index.js +9 -0
- package/dist/backend/backend/src/controllers/self-improvement/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/self-improvement/self-improvement.controller.d.ts +11 -0
- package/dist/backend/backend/src/controllers/self-improvement/self-improvement.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/self-improvement/self-improvement.controller.js +166 -0
- package/dist/backend/backend/src/controllers/self-improvement/self-improvement.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/session/session.controller.d.ts +80 -0
- package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/session/session.controller.js +275 -0
- package/dist/backend/backend/src/controllers/session/session.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/session/session.routes.d.ts +19 -0
- package/dist/backend/backend/src/controllers/session/session.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/session/session.routes.js +33 -0
- package/dist/backend/backend/src/controllers/session/session.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/settings/index.d.ts +18 -0
- package/dist/backend/backend/src/controllers/settings/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/settings/index.js +27 -0
- package/dist/backend/backend/src/controllers/settings/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/settings/role.controller.d.ts +10 -0
- package/dist/backend/backend/src/controllers/settings/role.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/settings/role.controller.js +365 -0
- package/dist/backend/backend/src/controllers/settings/role.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/settings/settings.controller.d.ts +10 -0
- package/dist/backend/backend/src/controllers/settings/settings.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/settings/settings.controller.js +176 -0
- package/dist/backend/backend/src/controllers/settings/settings.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/skill/index.d.ts +17 -0
- package/dist/backend/backend/src/controllers/skill/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/skill/index.js +18 -0
- package/dist/backend/backend/src/controllers/skill/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/skill/skill.controller.d.ts +10 -0
- package/dist/backend/backend/src/controllers/skill/skill.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/skill/skill.controller.js +423 -0
- package/dist/backend/backend/src/controllers/skill/skill.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/slack/index.d.ts +17 -0
- package/dist/backend/backend/src/controllers/slack/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/slack/index.js +18 -0
- package/dist/backend/backend/src/controllers/slack/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/slack/slack-thread.controller.d.ts +22 -0
- package/dist/backend/backend/src/controllers/slack/slack-thread.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/slack/slack-thread.controller.js +59 -0
- package/dist/backend/backend/src/controllers/slack/slack-thread.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/slack/slack-thread.routes.d.ts +15 -0
- package/dist/backend/backend/src/controllers/slack/slack-thread.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/slack/slack-thread.routes.js +21 -0
- package/dist/backend/backend/src/controllers/slack/slack-thread.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts +11 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +416 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/system/config.controller.d.ts +4 -0
- package/dist/backend/backend/src/controllers/system/config.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/system/config.controller.js +48 -0
- package/dist/backend/backend/src/controllers/system/config.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/system/errors.controller.d.ts +8 -0
- package/dist/backend/backend/src/controllers/system/errors.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/system/errors.controller.js +99 -0
- package/dist/backend/backend/src/controllers/system/errors.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/system/scheduler.controller.d.ts +13 -0
- package/dist/backend/backend/src/controllers/system/scheduler.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/system/scheduler.controller.js +63 -0
- package/dist/backend/backend/src/controllers/system/scheduler.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/system/system.controller.d.ts +67 -0
- package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/system/system.controller.js +390 -0
- package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/system/system.routes.d.ts +9 -0
- package/dist/backend/backend/src/controllers/system/system.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/system/system.routes.js +16 -0
- package/dist/backend/backend/src/controllers/system/system.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/task-management/assignments.controller.d.ts +5 -0
- package/dist/backend/backend/src/controllers/task-management/assignments.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/task-management/assignments.controller.js +56 -0
- package/dist/backend/backend/src/controllers/task-management/assignments.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.d.ts +10 -0
- package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.js +43 -0
- package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +95 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +1034 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts +8 -0
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.js +117 -0
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/task-management/tickets.controller.d.ts +13 -0
- package/dist/backend/backend/src/controllers/task-management/tickets.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/task-management/tickets.controller.js +212 -0
- package/dist/backend/backend/src/controllers/task-management/tickets.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts +35 -0
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js +1629 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/team/team.routes.d.ts +9 -0
- package/dist/backend/backend/src/controllers/team/team.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/team/team.routes.js +41 -0
- package/dist/backend/backend/src/controllers/team/team.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.d.ts +32 -0
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.js +99 -0
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.d.ts +15 -0
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.js +23 -0
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/types.d.ts +18 -0
- package/dist/backend/backend/src/controllers/types.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/types.js +2 -0
- package/dist/backend/backend/src/controllers/types.js.map +1 -0
- package/dist/backend/backend/src/controllers/utils/file-utils.d.ts +3 -0
- package/dist/backend/backend/src/controllers/utils/file-utils.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/utils/file-utils.js +98 -0
- package/dist/backend/backend/src/controllers/utils/file-utils.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts +60 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -0
- package/dist/backend/backend/src/index.js +872 -0
- package/dist/backend/backend/src/index.js.map +1 -0
- package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.d.ts +22 -0
- package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.js +36 -0
- package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.js.map +1 -0
- package/dist/backend/backend/src/models/Project.d.ts +18 -0
- package/dist/backend/backend/src/models/Project.d.ts.map +1 -0
- package/dist/backend/backend/src/models/Project.js +70 -0
- package/dist/backend/backend/src/models/Project.js.map +1 -0
- package/dist/backend/backend/src/models/ScheduledMessage.d.ts +27 -0
- package/dist/backend/backend/src/models/ScheduledMessage.d.ts.map +1 -0
- package/dist/backend/backend/src/models/ScheduledMessage.js +50 -0
- package/dist/backend/backend/src/models/ScheduledMessage.js.map +1 -0
- package/dist/backend/backend/src/models/Team.d.ts +20 -0
- package/dist/backend/backend/src/models/Team.d.ts.map +1 -0
- package/dist/backend/backend/src/models/Team.js +120 -0
- package/dist/backend/backend/src/models/Team.js.map +1 -0
- package/dist/backend/backend/src/models/Ticket.d.ts +24 -0
- package/dist/backend/backend/src/models/Ticket.d.ts.map +1 -0
- package/dist/backend/backend/src/models/Ticket.js +102 -0
- package/dist/backend/backend/src/models/Ticket.js.map +1 -0
- package/dist/backend/backend/src/models/index.d.ts +5 -0
- package/dist/backend/backend/src/models/index.d.ts.map +1 -0
- package/dist/backend/backend/src/models/index.js +5 -0
- package/dist/backend/backend/src/models/index.js.map +1 -0
- package/dist/backend/backend/src/routes/api.routes.d.ts +9 -0
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/api.routes.js +81 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/factory.routes.d.ts +19 -0
- package/dist/backend/backend/src/routes/factory.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/factory.routes.js +103 -0
- package/dist/backend/backend/src/routes/factory.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/modules/assignments.routes.d.ts +4 -0
- package/dist/backend/backend/src/routes/modules/assignments.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/modules/assignments.routes.js +7 -0
- package/dist/backend/backend/src/routes/modules/assignments.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/modules/config.routes.d.ts +4 -0
- package/dist/backend/backend/src/routes/modules/config.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/modules/config.routes.js +6 -0
- package/dist/backend/backend/src/routes/modules/config.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/modules/delivery-logs.routes.d.ts +4 -0
- package/dist/backend/backend/src/routes/modules/delivery-logs.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/modules/delivery-logs.routes.js +7 -0
- package/dist/backend/backend/src/routes/modules/delivery-logs.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/modules/errors.routes.d.ts +4 -0
- package/dist/backend/backend/src/routes/modules/errors.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/modules/errors.routes.js +10 -0
- package/dist/backend/backend/src/routes/modules/errors.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/modules/quality-gate.routes.d.ts +20 -0
- package/dist/backend/backend/src/routes/modules/quality-gate.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/modules/quality-gate.routes.js +25 -0
- package/dist/backend/backend/src/routes/modules/quality-gate.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/modules/scheduled-messages.routes.d.ts +4 -0
- package/dist/backend/backend/src/routes/modules/scheduled-messages.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/modules/scheduled-messages.routes.js +12 -0
- package/dist/backend/backend/src/routes/modules/scheduled-messages.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/modules/scheduler.routes.d.ts +4 -0
- package/dist/backend/backend/src/routes/modules/scheduler.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/modules/scheduler.routes.js +9 -0
- package/dist/backend/backend/src/routes/modules/scheduler.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/modules/system.routes.d.ts +4 -0
- package/dist/backend/backend/src/routes/modules/system.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/modules/system.routes.js +24 -0
- package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts +4 -0
- package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/modules/task-management.routes.js +25 -0
- package/dist/backend/backend/src/routes/modules/task-management.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/modules/terminal.routes.d.ts +29 -0
- package/dist/backend/backend/src/routes/modules/terminal.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/modules/terminal.routes.js +49 -0
- package/dist/backend/backend/src/routes/modules/terminal.routes.js.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-heartbeat.service.d.ts +240 -0
- package/dist/backend/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-heartbeat.service.js +524 -0
- package/dist/backend/backend/src/services/agent/agent-heartbeat.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +398 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +2863 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-suspend.service.d.ts +118 -0
- package/dist/backend/backend/src/services/agent/agent-suspend.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-suspend.service.js +304 -0
- package/dist/backend/backend/src/services/agent/agent-suspend.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts +71 -0
- package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/claude-runtime.service.js +220 -0
- package/dist/backend/backend/src/services/agent/claude-runtime.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts +43 -0
- package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/codex-runtime.service.js +118 -0
- package/dist/backend/backend/src/services/agent/codex-runtime.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/disk-cleanup.service.d.ts +79 -0
- package/dist/backend/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/disk-cleanup.service.js +137 -0
- package/dist/backend/backend/src/services/agent/disk-cleanup.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/file-watcher.service.d.ts +87 -0
- package/dist/backend/backend/src/services/agent/file-watcher.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/file-watcher.service.js +312 -0
- package/dist/backend/backend/src/services/agent/file-watcher.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts +83 -0
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.js +300 -0
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/git-integration.service.d.ts +131 -0
- package/dist/backend/backend/src/services/agent/git-integration.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/git-integration.service.js +368 -0
- package/dist/backend/backend/src/services/agent/git-integration.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +54 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.js +156 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts +77 -0
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js +104 -0
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +114 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +437 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +81 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +284 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/runtime-service.factory.d.ts +71 -0
- package/dist/backend/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/runtime-service.factory.js +165 -0
- package/dist/backend/backend/src/services/agent/runtime-service.factory.js.map +1 -0
- package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts +163 -0
- package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/tmux-command.service.js +962 -0
- package/dist/backend/backend/src/services/agent/tmux-command.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/tmux.service.d.ts +189 -0
- package/dist/backend/backend/src/services/agent/tmux.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/tmux.service.js +673 -0
- package/dist/backend/backend/src/services/agent/tmux.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/context-loader.service.d.ts +40 -0
- package/dist/backend/backend/src/services/ai/context-loader.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/context-loader.service.js +311 -0
- package/dist/backend/backend/src/services/ai/context-loader.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +183 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js +591 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-template.service.d.ts +51 -0
- package/dist/backend/backend/src/services/ai/prompt-template.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-template.service.js +99 -0
- package/dist/backend/backend/src/services/ai/prompt-template.service.js.map +1 -0
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts +429 -0
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js +852 -0
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js.map +1 -0
- package/dist/backend/backend/src/services/autonomous/budget.service.d.ts +319 -0
- package/dist/backend/backend/src/services/autonomous/budget.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/autonomous/budget.service.js +594 -0
- package/dist/backend/backend/src/services/autonomous/budget.service.js.map +1 -0
- package/dist/backend/backend/src/services/autonomous/index.d.ts +11 -0
- package/dist/backend/backend/src/services/autonomous/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/autonomous/index.js +11 -0
- package/dist/backend/backend/src/services/autonomous/index.js.map +1 -0
- package/dist/backend/backend/src/services/chat/chat.service.d.ts +358 -0
- package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat/chat.service.js +727 -0
- package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -0
- package/dist/backend/backend/src/services/chat/index.d.ts +10 -0
- package/dist/backend/backend/src/services/chat/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat/index.js +10 -0
- package/dist/backend/backend/src/services/chat/index.js.map +1 -0
- package/dist/backend/backend/src/services/continuation/continuation-events.service.d.ts +152 -0
- package/dist/backend/backend/src/services/continuation/continuation-events.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/continuation/continuation-events.service.js +293 -0
- package/dist/backend/backend/src/services/continuation/continuation-events.service.js.map +1 -0
- package/dist/backend/backend/src/services/continuation/continuation.service.d.ts +278 -0
- package/dist/backend/backend/src/services/continuation/continuation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/continuation/continuation.service.js +616 -0
- package/dist/backend/backend/src/services/continuation/continuation.service.js.map +1 -0
- package/dist/backend/backend/src/services/continuation/index.d.ts +14 -0
- package/dist/backend/backend/src/services/continuation/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/continuation/index.js +15 -0
- package/dist/backend/backend/src/services/continuation/index.js.map +1 -0
- package/dist/backend/backend/src/services/continuation/output-analyzer.service.d.ts +199 -0
- package/dist/backend/backend/src/services/continuation/output-analyzer.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/continuation/output-analyzer.service.js +390 -0
- package/dist/backend/backend/src/services/continuation/output-analyzer.service.js.map +1 -0
- package/dist/backend/backend/src/services/continuation/patterns/completion-patterns.d.ts +44 -0
- package/dist/backend/backend/src/services/continuation/patterns/completion-patterns.d.ts.map +1 -0
- package/dist/backend/backend/src/services/continuation/patterns/completion-patterns.js +82 -0
- package/dist/backend/backend/src/services/continuation/patterns/completion-patterns.js.map +1 -0
- package/dist/backend/backend/src/services/continuation/patterns/error-patterns.d.ts +37 -0
- package/dist/backend/backend/src/services/continuation/patterns/error-patterns.d.ts.map +1 -0
- package/dist/backend/backend/src/services/continuation/patterns/error-patterns.js +105 -0
- package/dist/backend/backend/src/services/continuation/patterns/error-patterns.js.map +1 -0
- package/dist/backend/backend/src/services/continuation/patterns/idle-patterns.d.ts +29 -0
- package/dist/backend/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
- package/dist/backend/backend/src/services/continuation/patterns/idle-patterns.js +49 -0
- package/dist/backend/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
- package/dist/backend/backend/src/services/continuation/patterns/index.d.ts +12 -0
- package/dist/backend/backend/src/services/continuation/patterns/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/continuation/patterns/index.js +12 -0
- package/dist/backend/backend/src/services/continuation/patterns/index.js.map +1 -0
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts +34 -0
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -0
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js +64 -0
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -0
- package/dist/backend/backend/src/services/continuation/template-loader.service.d.ts +196 -0
- package/dist/backend/backend/src/services/continuation/template-loader.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/continuation/template-loader.service.js +323 -0
- package/dist/backend/backend/src/services/continuation/template-loader.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/config.service.d.ts +85 -0
- package/dist/backend/backend/src/services/core/config.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/config.service.js +226 -0
- package/dist/backend/backend/src/services/core/config.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/error-tracking.service.d.ts +98 -0
- package/dist/backend/backend/src/services/core/error-tracking.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/error-tracking.service.js +291 -0
- package/dist/backend/backend/src/services/core/error-tracking.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/logger.service.d.ts +70 -0
- package/dist/backend/backend/src/services/core/logger.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/logger.service.js +350 -0
- package/dist/backend/backend/src/services/core/logger.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts +261 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/storage.service.js +1390 -0
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/teams-backup.service.d.ts +92 -0
- package/dist/backend/backend/src/services/core/teams-backup.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/teams-backup.service.js +120 -0
- package/dist/backend/backend/src/services/core/teams-backup.service.js.map +1 -0
- package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts +144 -0
- package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js +337 -0
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -0
- package/dist/backend/backend/src/services/event-bus/index.d.ts +7 -0
- package/dist/backend/backend/src/services/event-bus/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/event-bus/index.js +7 -0
- package/dist/backend/backend/src/services/event-bus/index.js.map +1 -0
- package/dist/backend/backend/src/services/factory/factory-sse.service.d.ts +163 -0
- package/dist/backend/backend/src/services/factory/factory-sse.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/factory/factory-sse.service.js +274 -0
- package/dist/backend/backend/src/services/factory/factory-sse.service.js.map +1 -0
- package/dist/backend/backend/src/services/factory.service.d.ts +157 -0
- package/dist/backend/backend/src/services/factory.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/factory.service.js +545 -0
- package/dist/backend/backend/src/services/factory.service.js.map +1 -0
- package/dist/backend/backend/src/services/index.d.ts +37 -0
- package/dist/backend/backend/src/services/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/index.js +50 -0
- package/dist/backend/backend/src/services/index.js.map +1 -0
- package/dist/backend/backend/src/services/knowledge/index.d.ts +7 -0
- package/dist/backend/backend/src/services/knowledge/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/knowledge/index.js +7 -0
- package/dist/backend/backend/src/services/knowledge/index.js.map +1 -0
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +125 -0
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +247 -0
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +1 -0
- package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts +153 -0
- package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/knowledge/knowledge.service.js +409 -0
- package/dist/backend/backend/src/services/knowledge/knowledge.service.js.map +1 -0
- package/dist/backend/backend/src/services/marketplace/index.d.ts +11 -0
- package/dist/backend/backend/src/services/marketplace/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/marketplace/index.js +13 -0
- package/dist/backend/backend/src/services/marketplace/index.js.map +1 -0
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts +47 -0
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js +127 -0
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -0
- package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts +101 -0
- package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js +207 -0
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -0
- package/dist/backend/backend/src/services/memory/agent-memory.service.d.ts +259 -0
- package/dist/backend/backend/src/services/memory/agent-memory.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/agent-memory.service.js +539 -0
- package/dist/backend/backend/src/services/memory/agent-memory.service.js.map +1 -0
- package/dist/backend/backend/src/services/memory/daily-log.service.d.ts +159 -0
- package/dist/backend/backend/src/services/memory/daily-log.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/daily-log.service.js +272 -0
- package/dist/backend/backend/src/services/memory/daily-log.service.js.map +1 -0
- package/dist/backend/backend/src/services/memory/goal-tracking.service.d.ts +239 -0
- package/dist/backend/backend/src/services/memory/goal-tracking.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/goal-tracking.service.js +353 -0
- package/dist/backend/backend/src/services/memory/goal-tracking.service.js.map +1 -0
- package/dist/backend/backend/src/services/memory/index.d.ts +16 -0
- package/dist/backend/backend/src/services/memory/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/index.js +15 -0
- package/dist/backend/backend/src/services/memory/index.js.map +1 -0
- package/dist/backend/backend/src/services/memory/learning-accumulation.service.d.ts +228 -0
- package/dist/backend/backend/src/services/memory/learning-accumulation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/learning-accumulation.service.js +336 -0
- package/dist/backend/backend/src/services/memory/learning-accumulation.service.js.map +1 -0
- package/dist/backend/backend/src/services/memory/memory.service.d.ts +306 -0
- package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/memory.service.js +517 -0
- package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -0
- package/dist/backend/backend/src/services/memory/project-memory.service.d.ts +252 -0
- package/dist/backend/backend/src/services/memory/project-memory.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/project-memory.service.js +600 -0
- package/dist/backend/backend/src/services/memory/project-memory.service.js.map +1 -0
- package/dist/backend/backend/src/services/memory/session-memory.service.d.ts +197 -0
- package/dist/backend/backend/src/services/memory/session-memory.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/session-memory.service.js +369 -0
- package/dist/backend/backend/src/services/memory/session-memory.service.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/index.d.ts +9 -0
- package/dist/backend/backend/src/services/messaging/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/messaging/index.js +9 -0
- package/dist/backend/backend/src/services/messaging/index.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts +198 -0
- package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/messaging/message-queue.service.js +445 -0
- package/dist/backend/backend/src/services/messaging/message-queue.service.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +90 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +324 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/response-router.service.d.ts +56 -0
- package/dist/backend/backend/src/services/messaging/response-router.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/messaging/response-router.service.js +134 -0
- package/dist/backend/backend/src/services/messaging/response-router.service.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +84 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +136 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts +113 -0
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +473 -0
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/monitoring.service.d.ts +129 -0
- package/dist/backend/backend/src/services/monitoring/monitoring.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/monitoring.service.js +469 -0
- package/dist/backend/backend/src/services/monitoring/monitoring.service.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts +48 -0
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js +151 -0
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.d.ts +71 -0
- package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.js +304 -0
- package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.d.ts +100 -0
- package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.js +285 -0
- package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.d.ts +107 -0
- package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.js +568 -0
- package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.d.ts +231 -0
- package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.js +344 -0
- package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/improvement-startup.service.d.ts +156 -0
- package/dist/backend/backend/src/services/orchestrator/improvement-startup.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/improvement-startup.service.js +481 -0
- package/dist/backend/backend/src/services/orchestrator/improvement-startup.service.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/index.d.ts +15 -0
- package/dist/backend/backend/src/services/orchestrator/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/index.js +15 -0
- package/dist/backend/backend/src/services/orchestrator/index.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +112 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js +244 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +61 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +156 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/safe-restart.service.d.ts +191 -0
- package/dist/backend/backend/src/services/orchestrator/safe-restart.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/safe-restart.service.js +393 -0
- package/dist/backend/backend/src/services/orchestrator/safe-restart.service.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/self-improvement.service.d.ts +200 -0
- package/dist/backend/backend/src/services/orchestrator/self-improvement.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/self-improvement.service.js +394 -0
- package/dist/backend/backend/src/services/orchestrator/self-improvement.service.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/state-persistence.service.d.ts +226 -0
- package/dist/backend/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/state-persistence.service.js +504 -0
- package/dist/backend/backend/src/services/orchestrator/state-persistence.service.js.map +1 -0
- package/dist/backend/backend/src/services/project/active-projects.service.d.ts +39 -0
- package/dist/backend/backend/src/services/project/active-projects.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project/active-projects.service.js +295 -0
- package/dist/backend/backend/src/services/project/active-projects.service.js.map +1 -0
- package/dist/backend/backend/src/services/project/task-folder.service.d.ts +48 -0
- package/dist/backend/backend/src/services/project/task-folder.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project/task-folder.service.js +193 -0
- package/dist/backend/backend/src/services/project/task-folder.service.js.map +1 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +47 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.js +330 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.js.map +1 -0
- package/dist/backend/backend/src/services/project/task.service.d.ts +31 -0
- package/dist/backend/backend/src/services/project/task.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project/task.service.js +193 -0
- package/dist/backend/backend/src/services/project/task.service.js.map +1 -0
- package/dist/backend/backend/src/services/project/ticket-editor.service.d.ts +129 -0
- package/dist/backend/backend/src/services/project/ticket-editor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project/ticket-editor.service.js +405 -0
- package/dist/backend/backend/src/services/project/ticket-editor.service.js.map +1 -0
- package/dist/backend/backend/src/services/prompt/index.d.ts +7 -0
- package/dist/backend/backend/src/services/prompt/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/prompt/index.js +7 -0
- package/dist/backend/backend/src/services/prompt/index.js.map +1 -0
- package/dist/backend/backend/src/services/prompt/prompt-generator.service.d.ts +106 -0
- package/dist/backend/backend/src/services/prompt/prompt-generator.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/prompt/prompt-generator.service.js +287 -0
- package/dist/backend/backend/src/services/prompt/prompt-generator.service.js.map +1 -0
- package/dist/backend/backend/src/services/quality/index.d.ts +10 -0
- package/dist/backend/backend/src/services/quality/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/quality/index.js +10 -0
- package/dist/backend/backend/src/services/quality/index.js.map +1 -0
- package/dist/backend/backend/src/services/quality/quality-gate.service.d.ts +223 -0
- package/dist/backend/backend/src/services/quality/quality-gate.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/quality/quality-gate.service.js +388 -0
- package/dist/backend/backend/src/services/quality/quality-gate.service.js.map +1 -0
- package/dist/backend/backend/src/services/session/index.d.ts +43 -0
- package/dist/backend/backend/src/services/session/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/index.js +46 -0
- package/dist/backend/backend/src/services/session/index.js.map +1 -0
- package/dist/backend/backend/src/services/session/pty/index.d.ts +11 -0
- package/dist/backend/backend/src/services/session/pty/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/pty/index.js +11 -0
- package/dist/backend/backend/src/services/session/pty/index.js.map +1 -0
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +258 -0
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +435 -0
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -0
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +196 -0
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/pty/pty-session.js +393 -0
- package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -0
- package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts +241 -0
- package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js +351 -0
- package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -0
- package/dist/backend/backend/src/services/session/session-backend.factory.d.ts +127 -0
- package/dist/backend/backend/src/services/session/session-backend.factory.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/session-backend.factory.js +226 -0
- package/dist/backend/backend/src/services/session/session-backend.factory.js.map +1 -0
- package/dist/backend/backend/src/services/session/session-backend.interface.d.ts +358 -0
- package/dist/backend/backend/src/services/session/session-backend.interface.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/session-backend.interface.js +19 -0
- package/dist/backend/backend/src/services/session/session-backend.interface.js.map +1 -0
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts +327 -0
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/session-command-helper.js +687 -0
- package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -0
- package/dist/backend/backend/src/services/session/session-state-persistence.d.ts +228 -0
- package/dist/backend/backend/src/services/session/session-state-persistence.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/session-state-persistence.js +394 -0
- package/dist/backend/backend/src/services/session/session-state-persistence.js.map +1 -0
- package/dist/backend/backend/src/services/settings/index.d.ts +10 -0
- package/dist/backend/backend/src/services/settings/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/settings/index.js +12 -0
- package/dist/backend/backend/src/services/settings/index.js.map +1 -0
- package/dist/backend/backend/src/services/settings/role.service.d.ts +276 -0
- package/dist/backend/backend/src/services/settings/role.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/settings/role.service.js +726 -0
- package/dist/backend/backend/src/services/settings/role.service.js.map +1 -0
- package/dist/backend/backend/src/services/settings/settings.service.d.ts +160 -0
- package/dist/backend/backend/src/services/settings/settings.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/settings/settings.service.js +294 -0
- package/dist/backend/backend/src/services/settings/settings.service.js.map +1 -0
- package/dist/backend/backend/src/services/skill/index.d.ts +10 -0
- package/dist/backend/backend/src/services/skill/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/skill/index.js +10 -0
- package/dist/backend/backend/src/services/skill/index.js.map +1 -0
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts +236 -0
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js +550 -0
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -0
- package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts +135 -0
- package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/skill/skill-executor.service.js +493 -0
- package/dist/backend/backend/src/services/skill/skill-executor.service.js.map +1 -0
- package/dist/backend/backend/src/services/skill/skill.service.d.ts +241 -0
- package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/skill/skill.service.js +542 -0
- package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/index.d.ts +13 -0
- package/dist/backend/backend/src/services/slack/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/index.js +13 -0
- package/dist/backend/backend/src/services/slack/index.js.map +1 -0
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts +63 -0
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js +182 -0
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-image.service.d.ts +113 -0
- package/dist/backend/backend/src/services/slack/slack-image.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-image.service.js +329 -0
- package/dist/backend/backend/src/services/slack/slack-image.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +71 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.js +106 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +302 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +806 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-thread-store.service.d.ts +147 -0
- package/dist/backend/backend/src/services/slack/slack-thread-store.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-thread-store.service.js +258 -0
- package/dist/backend/backend/src/services/slack/slack-thread-store.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +219 -0
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack.service.js +551 -0
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -0
- package/dist/backend/backend/src/services/sop/index.d.ts +9 -0
- package/dist/backend/backend/src/services/sop/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/sop/index.js +9 -0
- package/dist/backend/backend/src/services/sop/index.js.map +1 -0
- package/dist/backend/backend/src/services/sop/sop.service.d.ts +286 -0
- package/dist/backend/backend/src/services/sop/sop.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/sop/sop.service.js +583 -0
- package/dist/backend/backend/src/services/sop/sop.service.js.map +1 -0
- package/dist/backend/backend/src/services/system/version-check.service.d.ts +112 -0
- package/dist/backend/backend/src/services/system/version-check.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/system/version-check.service.js +195 -0
- package/dist/backend/backend/src/services/system/version-check.service.js.map +1 -0
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts +99 -0
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +408 -0
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +300 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.js +924 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -0
- package/dist/backend/backend/src/types/auto-assign.types.d.ts +271 -0
- package/dist/backend/backend/src/types/auto-assign.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/auto-assign.types.js +136 -0
- package/dist/backend/backend/src/types/auto-assign.types.js.map +1 -0
- package/dist/backend/backend/src/types/budget.types.d.ts +217 -0
- package/dist/backend/backend/src/types/budget.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/budget.types.js +82 -0
- package/dist/backend/backend/src/types/budget.types.js.map +1 -0
- package/dist/backend/backend/src/types/chat.types.d.ts +550 -0
- package/dist/backend/backend/src/types/chat.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/chat.types.js +743 -0
- package/dist/backend/backend/src/types/chat.types.js.map +1 -0
- package/dist/backend/backend/src/types/continuation.types.d.ts +237 -0
- package/dist/backend/backend/src/types/continuation.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/continuation.types.js +10 -0
- package/dist/backend/backend/src/types/continuation.types.js.map +1 -0
- package/dist/backend/backend/src/types/event-bus.types.d.ts +112 -0
- package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/event-bus.types.js +82 -0
- package/dist/backend/backend/src/types/event-bus.types.js.map +1 -0
- package/dist/backend/backend/src/types/index.d.ts +161 -0
- package/dist/backend/backend/src/types/index.d.ts.map +1 -0
- package/dist/backend/backend/src/types/index.js +23 -0
- package/dist/backend/backend/src/types/index.js.map +1 -0
- package/dist/backend/backend/src/types/knowledge.types.d.ts +195 -0
- package/dist/backend/backend/src/types/knowledge.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/knowledge.types.js +38 -0
- package/dist/backend/backend/src/types/knowledge.types.js.map +1 -0
- package/dist/backend/backend/src/types/marketplace.types.d.ts +68 -0
- package/dist/backend/backend/src/types/marketplace.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/marketplace.types.js +6 -0
- package/dist/backend/backend/src/types/marketplace.types.js.map +1 -0
- package/dist/backend/backend/src/types/memory.types.d.ts +587 -0
- package/dist/backend/backend/src/types/memory.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/memory.types.js +47 -0
- package/dist/backend/backend/src/types/memory.types.js.map +1 -0
- package/dist/backend/backend/src/types/messaging.types.d.ts +216 -0
- package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/messaging.types.js +224 -0
- package/dist/backend/backend/src/types/messaging.types.js.map +1 -0
- package/dist/backend/backend/src/types/orchestrator-state.types.d.ts +482 -0
- package/dist/backend/backend/src/types/orchestrator-state.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/orchestrator-state.types.js +83 -0
- package/dist/backend/backend/src/types/orchestrator-state.types.js.map +1 -0
- package/dist/backend/backend/src/types/quality-gate.types.d.ts +171 -0
- package/dist/backend/backend/src/types/quality-gate.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/quality-gate.types.js +42 -0
- package/dist/backend/backend/src/types/quality-gate.types.js.map +1 -0
- package/dist/backend/backend/src/types/role.types.d.ts +260 -0
- package/dist/backend/backend/src/types/role.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/role.types.js +238 -0
- package/dist/backend/backend/src/types/role.types.js.map +1 -0
- package/dist/backend/backend/src/types/scheduler.types.d.ts +237 -0
- package/dist/backend/backend/src/types/scheduler.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/scheduler.types.js +32 -0
- package/dist/backend/backend/src/types/scheduler.types.js.map +1 -0
- package/dist/backend/backend/src/types/settings.types.d.ts +178 -0
- package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/settings.types.js +206 -0
- package/dist/backend/backend/src/types/settings.types.js.map +1 -0
- package/dist/backend/backend/src/types/skill.types.d.ts +515 -0
- package/dist/backend/backend/src/types/skill.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/skill.types.js +481 -0
- package/dist/backend/backend/src/types/skill.types.js.map +1 -0
- package/dist/backend/backend/src/types/slack.types.d.ts +329 -0
- package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/slack.types.js +66 -0
- package/dist/backend/backend/src/types/slack.types.js.map +1 -0
- package/dist/backend/backend/src/types/sop.types.d.ts +224 -0
- package/dist/backend/backend/src/types/sop.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/sop.types.js +85 -0
- package/dist/backend/backend/src/types/sop.types.js.map +1 -0
- package/dist/backend/backend/src/types/task-tracking.types.d.ts +91 -0
- package/dist/backend/backend/src/types/task-tracking.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/task-tracking.types.js +5 -0
- package/dist/backend/backend/src/types/task-tracking.types.js.map +1 -0
- package/dist/backend/backend/src/utils/async.utils.d.ts +68 -0
- package/dist/backend/backend/src/utils/async.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/async.utils.js +80 -0
- package/dist/backend/backend/src/utils/async.utils.js.map +1 -0
- package/dist/backend/backend/src/utils/defaultPrompts.d.ts +5 -0
- package/dist/backend/backend/src/utils/defaultPrompts.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/defaultPrompts.js +285 -0
- package/dist/backend/backend/src/utils/defaultPrompts.js.map +1 -0
- package/dist/backend/backend/src/utils/file-io.utils.d.ts +102 -0
- package/dist/backend/backend/src/utils/file-io.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/file-io.utils.js +214 -0
- package/dist/backend/backend/src/utils/file-io.utils.js.map +1 -0
- package/dist/backend/backend/src/utils/package-root.d.ts +15 -0
- package/dist/backend/backend/src/utils/package-root.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/package-root.js +38 -0
- package/dist/backend/backend/src/utils/package-root.js.map +1 -0
- package/dist/backend/backend/src/utils/process-recovery.d.ts +81 -0
- package/dist/backend/backend/src/utils/process-recovery.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/process-recovery.js +283 -0
- package/dist/backend/backend/src/utils/process-recovery.js.map +1 -0
- package/dist/backend/backend/src/utils/prompt-resolver.d.ts +79 -0
- package/dist/backend/backend/src/utils/prompt-resolver.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/prompt-resolver.js +132 -0
- package/dist/backend/backend/src/utils/prompt-resolver.js.map +1 -0
- package/dist/backend/backend/src/utils/resource-monitor.d.ts +177 -0
- package/dist/backend/backend/src/utils/resource-monitor.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/resource-monitor.js +404 -0
- package/dist/backend/backend/src/utils/resource-monitor.js.map +1 -0
- package/dist/backend/backend/src/utils/security.d.ts +194 -0
- package/dist/backend/backend/src/utils/security.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/security.js +533 -0
- package/dist/backend/backend/src/utils/security.js.map +1 -0
- package/dist/backend/backend/src/utils/terminal-output.utils.d.ts +54 -0
- package/dist/backend/backend/src/utils/terminal-output.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/terminal-output.utils.js +97 -0
- package/dist/backend/backend/src/utils/terminal-output.utils.js.map +1 -0
- package/dist/backend/backend/src/websocket/chat.gateway.d.ts +127 -0
- package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -0
- package/dist/backend/backend/src/websocket/chat.gateway.js +306 -0
- package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -0
- package/dist/backend/backend/src/websocket/file-watcher.gateway.d.ts +54 -0
- package/dist/backend/backend/src/websocket/file-watcher.gateway.d.ts.map +1 -0
- package/dist/backend/backend/src/websocket/file-watcher.gateway.js +202 -0
- package/dist/backend/backend/src/websocket/file-watcher.gateway.js.map +1 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +310 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.js +980 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -0
- package/dist/backend/config/constants.d.ts +722 -0
- package/dist/backend/config/constants.d.ts.map +1 -0
- package/dist/backend/config/constants.js +752 -0
- package/dist/backend/config/constants.js.map +1 -0
- package/dist/backend/config/index.d.ts +344 -0
- package/dist/backend/config/index.d.ts.map +1 -0
- package/dist/backend/config/index.js +42 -0
- package/dist/backend/config/index.js.map +1 -0
- package/dist/backend/config/quality-gates/default-gates.d.ts +71 -0
- package/dist/backend/config/quality-gates/default-gates.d.ts.map +1 -0
- package/dist/backend/config/quality-gates/default-gates.js +168 -0
- package/dist/backend/config/quality-gates/default-gates.js.map +1 -0
- package/dist/cli/cli/src/commands/logs.d.ts +7 -0
- package/dist/cli/cli/src/commands/logs.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/logs.js +198 -0
- package/dist/cli/cli/src/commands/logs.js.map +1 -0
- package/dist/cli/cli/src/commands/start.d.ts +8 -0
- package/dist/cli/cli/src/commands/start.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/start.js +254 -0
- package/dist/cli/cli/src/commands/start.js.map +1 -0
- package/dist/cli/cli/src/commands/status.d.ts +6 -0
- package/dist/cli/cli/src/commands/status.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/status.js +130 -0
- package/dist/cli/cli/src/commands/status.js.map +1 -0
- package/dist/cli/cli/src/commands/stop.d.ts +6 -0
- package/dist/cli/cli/src/commands/stop.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/stop.js +140 -0
- package/dist/cli/cli/src/commands/stop.js.map +1 -0
- package/dist/cli/cli/src/commands/upgrade.d.ts +26 -0
- package/dist/cli/cli/src/commands/upgrade.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/upgrade.js +54 -0
- package/dist/cli/cli/src/commands/upgrade.js.map +1 -0
- package/dist/cli/cli/src/constants.d.ts +106 -0
- package/dist/cli/cli/src/constants.d.ts.map +1 -0
- package/dist/cli/cli/src/constants.js +88 -0
- package/dist/cli/cli/src/constants.js.map +1 -0
- package/dist/cli/cli/src/index.d.ts +3 -0
- package/dist/cli/cli/src/index.d.ts.map +1 -0
- package/dist/cli/cli/src/index.js +60 -0
- package/dist/cli/cli/src/index.js.map +1 -0
- package/dist/cli/cli/src/utils/version-check.d.ts +66 -0
- package/dist/cli/cli/src/utils/version-check.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/version-check.js +192 -0
- package/dist/cli/cli/src/utils/version-check.js.map +1 -0
- package/dist/cli/config/constants.d.ts +722 -0
- package/dist/cli/config/constants.d.ts.map +1 -0
- package/dist/cli/config/constants.js +752 -0
- package/dist/cli/config/constants.js.map +1 -0
- package/dist/cli/config/index.d.ts +344 -0
- package/dist/cli/config/index.d.ts.map +1 -0
- package/dist/cli/config/index.js +42 -0
- package/dist/cli/config/index.js.map +1 -0
- package/frontend/dist/assets/index-5ddf71c8.css +33 -0
- package/frontend/dist/assets/index-77b6a2a0.js +4919 -0
- package/frontend/dist/index.html +19 -0
- package/frontend/dist/logo/crewly-icon.svg +118 -0
- package/package.json +121 -0
|
@@ -0,0 +1,1390 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { existsSync, mkdirSync, watch } from 'fs';
|
|
4
|
+
import { parse as parseYAML } from 'yaml';
|
|
5
|
+
import { TeamModel, ProjectModel, TicketModel } from '../../models/index.js';
|
|
6
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
7
|
+
import * as os from 'os';
|
|
8
|
+
import { CREWLY_CONSTANTS, RUNTIME_TYPES } from '../../constants.js';
|
|
9
|
+
import { LoggerService } from './logger.service.js';
|
|
10
|
+
import { TeamsBackupService } from './teams-backup.service.js';
|
|
11
|
+
import { atomicWriteFile, withOperationLock } from '../../utils/file-io.utils.js';
|
|
12
|
+
export class StorageService {
|
|
13
|
+
static instance = null;
|
|
14
|
+
static instanceHome = null;
|
|
15
|
+
crewlyHome;
|
|
16
|
+
/** @deprecated Use teamsDir instead - kept for migration */
|
|
17
|
+
teamsFile;
|
|
18
|
+
/** Directory containing individual team files */
|
|
19
|
+
teamsDir;
|
|
20
|
+
/** Orchestrator status file */
|
|
21
|
+
orchestratorFile;
|
|
22
|
+
projectsFile;
|
|
23
|
+
runtimeFile;
|
|
24
|
+
scheduledMessagesFile;
|
|
25
|
+
deliveryLogsFile;
|
|
26
|
+
recurringChecksFile;
|
|
27
|
+
oneTimeChecksFile;
|
|
28
|
+
logger;
|
|
29
|
+
/** Flag to track if migration has been performed */
|
|
30
|
+
migrationDone = false;
|
|
31
|
+
constructor(crewlyHome) {
|
|
32
|
+
this.logger = LoggerService.getInstance().createComponentLogger('StorageService');
|
|
33
|
+
this.crewlyHome = crewlyHome || path.join(os.homedir(), '.crewly');
|
|
34
|
+
this.teamsFile = path.join(this.crewlyHome, 'teams.json'); // Legacy, kept for migration
|
|
35
|
+
this.teamsDir = path.join(this.crewlyHome, 'teams');
|
|
36
|
+
// Orchestrator now uses directory structure: teams/orchestrator/config.json
|
|
37
|
+
this.orchestratorFile = path.join(this.teamsDir, 'orchestrator', 'config.json');
|
|
38
|
+
this.projectsFile = path.join(this.crewlyHome, 'projects.json');
|
|
39
|
+
this.runtimeFile = path.join(this.crewlyHome, 'runtime.json');
|
|
40
|
+
this.scheduledMessagesFile = path.join(this.crewlyHome, 'scheduled-messages.json');
|
|
41
|
+
this.deliveryLogsFile = path.join(this.crewlyHome, 'message-delivery-logs.json');
|
|
42
|
+
this.recurringChecksFile = path.join(this.crewlyHome, 'recurring-checks.json');
|
|
43
|
+
this.oneTimeChecksFile = path.join(this.crewlyHome, 'one-time-checks.json');
|
|
44
|
+
this.ensureDirectories();
|
|
45
|
+
this.logger.info('StorageService initialized', { crewlyHome: this.crewlyHome });
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get singleton instance of StorageService to prevent multiple instances
|
|
49
|
+
* from interfering with each other's file operations
|
|
50
|
+
*/
|
|
51
|
+
static getInstance(crewlyHome) {
|
|
52
|
+
const homeDir = crewlyHome || path.join(os.homedir(), '.crewly');
|
|
53
|
+
// Return existing instance if it matches the same home directory
|
|
54
|
+
if (StorageService.instance && StorageService.instanceHome === homeDir) {
|
|
55
|
+
return StorageService.instance;
|
|
56
|
+
}
|
|
57
|
+
// Create new instance if none exists or home directory changed
|
|
58
|
+
StorageService.instance = new StorageService(homeDir);
|
|
59
|
+
StorageService.instanceHome = homeDir;
|
|
60
|
+
return StorageService.instance;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Clear singleton instance (useful for testing)
|
|
64
|
+
*/
|
|
65
|
+
static clearInstance() {
|
|
66
|
+
StorageService.instance = null;
|
|
67
|
+
StorageService.instanceHome = null;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Ensures the crewly home and teams directories exist, creating them if necessary
|
|
71
|
+
*/
|
|
72
|
+
ensureDirectories() {
|
|
73
|
+
if (!existsSync(this.crewlyHome)) {
|
|
74
|
+
mkdirSync(this.crewlyHome, { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
if (!existsSync(this.teamsDir)) {
|
|
77
|
+
mkdirSync(this.teamsDir, { recursive: true });
|
|
78
|
+
}
|
|
79
|
+
// Ensure orchestrator directory exists
|
|
80
|
+
const orchestratorDir = path.join(this.teamsDir, 'orchestrator');
|
|
81
|
+
if (!existsSync(orchestratorDir)) {
|
|
82
|
+
mkdirSync(orchestratorDir, { recursive: true });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get the directory path for a team.
|
|
87
|
+
*
|
|
88
|
+
* @param teamId - The team ID
|
|
89
|
+
* @returns Path to the team directory
|
|
90
|
+
*/
|
|
91
|
+
getTeamDir(teamId) {
|
|
92
|
+
return path.join(this.teamsDir, teamId);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get the prompts directory path for a team.
|
|
96
|
+
*
|
|
97
|
+
* @param teamId - The team ID
|
|
98
|
+
* @returns Path to the team's prompts directory
|
|
99
|
+
*/
|
|
100
|
+
getTeamPromptsDir(teamId) {
|
|
101
|
+
return path.join(this.teamsDir, teamId, 'prompts');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get the prompt file path for a team member.
|
|
105
|
+
*
|
|
106
|
+
* @param teamId - The team ID
|
|
107
|
+
* @param memberId - The member ID
|
|
108
|
+
* @returns Path to the member's prompt file
|
|
109
|
+
*/
|
|
110
|
+
getMemberPromptPath(teamId, memberId) {
|
|
111
|
+
return path.join(this.getTeamPromptsDir(teamId), `${memberId}.md`);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get the orchestrator prompt file path.
|
|
115
|
+
*
|
|
116
|
+
* @returns Path to the orchestrator's prompt file
|
|
117
|
+
*/
|
|
118
|
+
getOrchestratorPromptPath() {
|
|
119
|
+
return path.join(this.teamsDir, 'orchestrator', 'prompt.md');
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Migrate from old storage formats to new directory structure.
|
|
123
|
+
* Handles: teams.json -> teams/{team-id}/config.json
|
|
124
|
+
* teams/{team-id}.json -> teams/{team-id}/config.json
|
|
125
|
+
* teams/orchestrator.json -> teams/orchestrator/config.json
|
|
126
|
+
*/
|
|
127
|
+
async migrateFromLegacyTeamsFile() {
|
|
128
|
+
if (this.migrationDone) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
this.migrationDone = true;
|
|
132
|
+
// Migration 1: From old teams.json (single file with all teams)
|
|
133
|
+
if (existsSync(this.teamsFile)) {
|
|
134
|
+
try {
|
|
135
|
+
const content = await fs.readFile(this.teamsFile, 'utf-8');
|
|
136
|
+
const data = JSON.parse(content);
|
|
137
|
+
// Migrate orchestrator to directory structure
|
|
138
|
+
if (data.orchestrator) {
|
|
139
|
+
const orchestratorDir = path.join(this.teamsDir, 'orchestrator');
|
|
140
|
+
if (!existsSync(orchestratorDir)) {
|
|
141
|
+
mkdirSync(orchestratorDir, { recursive: true });
|
|
142
|
+
}
|
|
143
|
+
if (!existsSync(this.orchestratorFile)) {
|
|
144
|
+
await atomicWriteFile(this.orchestratorFile, JSON.stringify(data.orchestrator, null, 2));
|
|
145
|
+
this.logger.info('Migrated orchestrator to directory structure');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Migrate teams to directory structure
|
|
149
|
+
const teams = data.teams || (Array.isArray(data) ? data : []);
|
|
150
|
+
for (const team of teams) {
|
|
151
|
+
if (team.id) {
|
|
152
|
+
await this.migrateTeamToDirectory(team);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Backup legacy file
|
|
156
|
+
const backupPath = `${this.teamsFile}.migrated.${Date.now()}`;
|
|
157
|
+
await fs.rename(this.teamsFile, backupPath);
|
|
158
|
+
this.logger.info('Legacy teams.json backed up after migration', { backupPath });
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
this.logger.warn('Error during legacy teams.json migration (non-fatal)', {
|
|
162
|
+
error: error instanceof Error ? error.message : String(error),
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Migration 2: From flat team files (teams/{team-id}.json) to directory structure
|
|
167
|
+
await this.migrateFlatTeamFiles();
|
|
168
|
+
// Migration 3: From flat orchestrator file (teams/orchestrator.json) to directory
|
|
169
|
+
const flatOrchestratorFile = path.join(this.teamsDir, 'orchestrator.json');
|
|
170
|
+
if (existsSync(flatOrchestratorFile) && !existsSync(this.orchestratorFile)) {
|
|
171
|
+
try {
|
|
172
|
+
const content = await fs.readFile(flatOrchestratorFile, 'utf-8');
|
|
173
|
+
const orchestrator = JSON.parse(content);
|
|
174
|
+
const orchestratorDir = path.join(this.teamsDir, 'orchestrator');
|
|
175
|
+
if (!existsSync(orchestratorDir)) {
|
|
176
|
+
mkdirSync(orchestratorDir, { recursive: true });
|
|
177
|
+
}
|
|
178
|
+
await atomicWriteFile(this.orchestratorFile, JSON.stringify(orchestrator, null, 2));
|
|
179
|
+
await fs.rename(flatOrchestratorFile, `${flatOrchestratorFile}.migrated.${Date.now()}`);
|
|
180
|
+
this.logger.info('Migrated flat orchestrator.json to directory structure');
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
this.logger.warn('Error migrating flat orchestrator.json (non-fatal)', {
|
|
184
|
+
error: error instanceof Error ? error.message : String(error),
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Migrate flat team files (teams/{team-id}.json) to directory structure (teams/{team-id}/config.json).
|
|
191
|
+
*/
|
|
192
|
+
async migrateFlatTeamFiles() {
|
|
193
|
+
try {
|
|
194
|
+
const files = await fs.readdir(this.teamsDir);
|
|
195
|
+
for (const file of files) {
|
|
196
|
+
// Skip directories and non-json files
|
|
197
|
+
if (!file.endsWith('.json') || file === 'orchestrator.json')
|
|
198
|
+
continue;
|
|
199
|
+
const filePath = path.join(this.teamsDir, file);
|
|
200
|
+
const stat = await fs.stat(filePath);
|
|
201
|
+
if (stat.isDirectory())
|
|
202
|
+
continue;
|
|
203
|
+
try {
|
|
204
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
205
|
+
const team = JSON.parse(content);
|
|
206
|
+
if (team.id) {
|
|
207
|
+
await this.migrateTeamToDirectory(team);
|
|
208
|
+
// Backup flat file
|
|
209
|
+
await fs.rename(filePath, `${filePath}.migrated.${Date.now()}`);
|
|
210
|
+
this.logger.info('Migrated flat team file to directory', { teamId: team.id });
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
this.logger.warn('Error migrating flat team file (non-fatal)', {
|
|
215
|
+
file,
|
|
216
|
+
error: error instanceof Error ? error.message : String(error),
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
this.logger.warn('Error scanning for flat team files (non-fatal)', {
|
|
223
|
+
error: error instanceof Error ? error.message : String(error),
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Migrate a team to the new directory structure.
|
|
229
|
+
* Creates teams/{team-id}/config.json and teams/{team-id}/prompts/{member-id}.md
|
|
230
|
+
*/
|
|
231
|
+
async migrateTeamToDirectory(team) {
|
|
232
|
+
const teamDir = this.getTeamDir(team.id);
|
|
233
|
+
const teamConfigFile = path.join(teamDir, 'config.json');
|
|
234
|
+
const promptsDir = this.getTeamPromptsDir(team.id);
|
|
235
|
+
// Create team directory structure
|
|
236
|
+
if (!existsSync(teamDir)) {
|
|
237
|
+
mkdirSync(teamDir, { recursive: true });
|
|
238
|
+
}
|
|
239
|
+
if (!existsSync(promptsDir)) {
|
|
240
|
+
mkdirSync(promptsDir, { recursive: true });
|
|
241
|
+
}
|
|
242
|
+
// Save team config (without inline prompts if they exist)
|
|
243
|
+
if (!existsSync(teamConfigFile)) {
|
|
244
|
+
await atomicWriteFile(teamConfigFile, JSON.stringify(team, null, 2));
|
|
245
|
+
}
|
|
246
|
+
// Extract member prompts to individual files
|
|
247
|
+
for (const member of team.members || []) {
|
|
248
|
+
if (member.systemPrompt) {
|
|
249
|
+
const promptPath = this.getMemberPromptPath(team.id, member.id);
|
|
250
|
+
if (!existsSync(promptPath)) {
|
|
251
|
+
await atomicWriteFile(promptPath, member.systemPrompt);
|
|
252
|
+
this.logger.debug('Extracted member prompt to file', {
|
|
253
|
+
teamId: team.id,
|
|
254
|
+
memberId: member.id,
|
|
255
|
+
promptPath,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
this.logger.info('Migrated team to directory structure', {
|
|
261
|
+
teamId: team.id,
|
|
262
|
+
teamName: team.name,
|
|
263
|
+
memberCount: team.members?.length || 0,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Creates default orchestrator configuration object
|
|
268
|
+
* @returns Default orchestrator settings with inactive status
|
|
269
|
+
*/
|
|
270
|
+
createDefaultOrchestrator() {
|
|
271
|
+
return {
|
|
272
|
+
sessionName: CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME,
|
|
273
|
+
agentStatus: CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE,
|
|
274
|
+
workingStatus: CREWLY_CONSTANTS.WORKING_STATUSES.IDLE,
|
|
275
|
+
runtimeType: RUNTIME_TYPES.CLAUDE_CODE,
|
|
276
|
+
createdAt: new Date().toISOString(),
|
|
277
|
+
updatedAt: new Date().toISOString()
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Ensures a storage file exists and is valid JSON, creating or recovering it if needed
|
|
282
|
+
* @param filePath - Path to the storage file
|
|
283
|
+
* @param defaultContent - Default content to use if file needs to be created/recovered
|
|
284
|
+
*/
|
|
285
|
+
async ensureFile(filePath, defaultContent = []) {
|
|
286
|
+
const fileName = path.basename(filePath);
|
|
287
|
+
if (!existsSync(filePath)) {
|
|
288
|
+
this.logger.info('Creating new storage file', { file: fileName });
|
|
289
|
+
await atomicWriteFile(filePath, JSON.stringify(defaultContent, null, 2));
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
// File exists - validate it's not corrupted
|
|
293
|
+
try {
|
|
294
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
295
|
+
const parsed = JSON.parse(content);
|
|
296
|
+
// If file is empty or has invalid content (null/undefined), reinitialize with defaults
|
|
297
|
+
if (!content.trim() || parsed === null || parsed === undefined) {
|
|
298
|
+
this.logger.warn('Storage file exists but appears empty/corrupted, creating backup and initializing with defaults', {
|
|
299
|
+
file: fileName,
|
|
300
|
+
contentLength: content?.length || 0,
|
|
301
|
+
});
|
|
302
|
+
// Backup even empty files for debugging
|
|
303
|
+
const backupPath = `${filePath}.empty.${Date.now()}`;
|
|
304
|
+
try {
|
|
305
|
+
await fs.copyFile(filePath, backupPath);
|
|
306
|
+
this.logger.info('Backed up empty file', { backupPath });
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
// Ignore backup errors
|
|
310
|
+
}
|
|
311
|
+
await atomicWriteFile(filePath, JSON.stringify(defaultContent, null, 2));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
catch (error) {
|
|
315
|
+
// File exists but can't be parsed - back it up and create new one
|
|
316
|
+
this.logger.warn('Storage file exists but cannot be parsed, backing up and reinitializing', {
|
|
317
|
+
file: fileName,
|
|
318
|
+
error: error instanceof Error ? error.message : String(error),
|
|
319
|
+
});
|
|
320
|
+
const backupPath = `${filePath}.backup.${Date.now()}`;
|
|
321
|
+
try {
|
|
322
|
+
await fs.copyFile(filePath, backupPath);
|
|
323
|
+
this.logger.info('Backed up corrupted file', { backupPath });
|
|
324
|
+
}
|
|
325
|
+
catch (backupError) {
|
|
326
|
+
this.logger.error('Failed to backup corrupted file', {
|
|
327
|
+
error: backupError instanceof Error ? backupError.message : String(backupError),
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
await atomicWriteFile(filePath, JSON.stringify(defaultContent, null, 2));
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// Team management
|
|
335
|
+
/**
|
|
336
|
+
* Get all teams from team directories.
|
|
337
|
+
* Each team is stored as teams/{teamId}/config.json for isolation.
|
|
338
|
+
*
|
|
339
|
+
* @returns Array of all teams
|
|
340
|
+
*/
|
|
341
|
+
async getTeams() {
|
|
342
|
+
try {
|
|
343
|
+
// Migrate from legacy format if needed
|
|
344
|
+
await this.migrateFromLegacyTeamsFile();
|
|
345
|
+
// Ensure teams directory exists
|
|
346
|
+
if (!existsSync(this.teamsDir)) {
|
|
347
|
+
mkdirSync(this.teamsDir, { recursive: true });
|
|
348
|
+
return [];
|
|
349
|
+
}
|
|
350
|
+
// Read all team directories
|
|
351
|
+
const entries = await fs.readdir(this.teamsDir, { withFileTypes: true });
|
|
352
|
+
const teamDirs = entries.filter(e => e.isDirectory() && e.name !== 'orchestrator');
|
|
353
|
+
const teams = [];
|
|
354
|
+
for (const dir of teamDirs) {
|
|
355
|
+
try {
|
|
356
|
+
const configPath = path.join(this.teamsDir, dir.name, 'config.json');
|
|
357
|
+
if (!existsSync(configPath)) {
|
|
358
|
+
continue; // Skip directories without config.json
|
|
359
|
+
}
|
|
360
|
+
const content = await fs.readFile(configPath, 'utf-8');
|
|
361
|
+
const team = JSON.parse(content);
|
|
362
|
+
const processedTeam = TeamModel.fromJSON(team).toJSON();
|
|
363
|
+
teams.push(processedTeam);
|
|
364
|
+
}
|
|
365
|
+
catch (fileError) {
|
|
366
|
+
this.logger.warn('Error reading team config, skipping', {
|
|
367
|
+
teamDir: dir.name,
|
|
368
|
+
error: fileError instanceof Error ? fileError.message : String(fileError),
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
this.logger.debug('Retrieved teams from storage', { count: teams.length });
|
|
373
|
+
return teams;
|
|
374
|
+
}
|
|
375
|
+
catch (error) {
|
|
376
|
+
this.logger.error('Error reading teams', {
|
|
377
|
+
error: error instanceof Error ? error.message : String(error),
|
|
378
|
+
});
|
|
379
|
+
return [];
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Save a team to its directory structure.
|
|
384
|
+
* Each team is stored as teams/{teamId}/config.json for isolation and resilience.
|
|
385
|
+
* Member prompts are saved to teams/{teamId}/prompts/{memberId}.md
|
|
386
|
+
*
|
|
387
|
+
* @param team - The team to save
|
|
388
|
+
*/
|
|
389
|
+
async saveTeam(team) {
|
|
390
|
+
const teamDir = this.getTeamDir(team.id);
|
|
391
|
+
const teamFile = path.join(teamDir, 'config.json');
|
|
392
|
+
const promptsDir = this.getTeamPromptsDir(team.id);
|
|
393
|
+
// Use operation lock on the team directory
|
|
394
|
+
return withOperationLock(teamDir, async () => {
|
|
395
|
+
try {
|
|
396
|
+
// Ensure team directory structure exists
|
|
397
|
+
if (!existsSync(teamDir)) {
|
|
398
|
+
mkdirSync(teamDir, { recursive: true });
|
|
399
|
+
}
|
|
400
|
+
if (!existsSync(promptsDir)) {
|
|
401
|
+
mkdirSync(promptsDir, { recursive: true });
|
|
402
|
+
}
|
|
403
|
+
// Check if this is an update or create
|
|
404
|
+
const isUpdate = existsSync(teamFile);
|
|
405
|
+
// Write team config to file
|
|
406
|
+
await atomicWriteFile(teamFile, JSON.stringify(team, null, 2));
|
|
407
|
+
// Save member prompts to individual files
|
|
408
|
+
for (const member of team.members || []) {
|
|
409
|
+
if (member.systemPrompt) {
|
|
410
|
+
const promptPath = this.getMemberPromptPath(team.id, member.id);
|
|
411
|
+
await atomicWriteFile(promptPath, member.systemPrompt);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
this.logger.info('Team saved successfully', {
|
|
415
|
+
teamId: team.id,
|
|
416
|
+
teamName: team.name,
|
|
417
|
+
action: isUpdate ? 'updated' : 'created',
|
|
418
|
+
memberCount: team.members?.length || 0,
|
|
419
|
+
filePath: teamFile,
|
|
420
|
+
});
|
|
421
|
+
// Update teams backup (fire-and-forget, non-blocking)
|
|
422
|
+
this.updateTeamsBackup();
|
|
423
|
+
}
|
|
424
|
+
catch (error) {
|
|
425
|
+
this.logger.error('Error saving team', {
|
|
426
|
+
teamId: team.id,
|
|
427
|
+
teamName: team.name,
|
|
428
|
+
error: error instanceof Error ? error.message : String(error),
|
|
429
|
+
filePath: teamFile,
|
|
430
|
+
});
|
|
431
|
+
throw error;
|
|
432
|
+
}
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Save a member's prompt file.
|
|
437
|
+
*
|
|
438
|
+
* @param teamId - The team ID
|
|
439
|
+
* @param memberId - The member ID
|
|
440
|
+
* @param prompt - The prompt content
|
|
441
|
+
*/
|
|
442
|
+
async saveMemberPrompt(teamId, memberId, prompt) {
|
|
443
|
+
const promptsDir = this.getTeamPromptsDir(teamId);
|
|
444
|
+
const promptPath = this.getMemberPromptPath(teamId, memberId);
|
|
445
|
+
if (!existsSync(promptsDir)) {
|
|
446
|
+
mkdirSync(promptsDir, { recursive: true });
|
|
447
|
+
}
|
|
448
|
+
await atomicWriteFile(promptPath, prompt);
|
|
449
|
+
this.logger.debug('Saved member prompt', { teamId, memberId, promptPath });
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Get a member's prompt from file.
|
|
453
|
+
*
|
|
454
|
+
* @param teamId - The team ID
|
|
455
|
+
* @param memberId - The member ID
|
|
456
|
+
* @returns The prompt content or null if not found
|
|
457
|
+
*/
|
|
458
|
+
async getMemberPrompt(teamId, memberId) {
|
|
459
|
+
const promptPath = this.getMemberPromptPath(teamId, memberId);
|
|
460
|
+
if (!existsSync(promptPath)) {
|
|
461
|
+
return null;
|
|
462
|
+
}
|
|
463
|
+
try {
|
|
464
|
+
return await fs.readFile(promptPath, 'utf-8');
|
|
465
|
+
}
|
|
466
|
+
catch (error) {
|
|
467
|
+
this.logger.warn('Error reading member prompt', {
|
|
468
|
+
teamId,
|
|
469
|
+
memberId,
|
|
470
|
+
error: error instanceof Error ? error.message : String(error),
|
|
471
|
+
});
|
|
472
|
+
return null;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Find a team member by their session name.
|
|
477
|
+
*
|
|
478
|
+
* @param sessionName - The session name to search for
|
|
479
|
+
* @returns Object with team and member, or null if not found
|
|
480
|
+
*/
|
|
481
|
+
async findMemberBySessionName(sessionName) {
|
|
482
|
+
try {
|
|
483
|
+
const teams = await this.getTeams();
|
|
484
|
+
for (const team of teams) {
|
|
485
|
+
for (const member of team.members || []) {
|
|
486
|
+
if (member.sessionName === sessionName) {
|
|
487
|
+
return { team, member };
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
return null;
|
|
492
|
+
}
|
|
493
|
+
catch (error) {
|
|
494
|
+
this.logger.error('Error finding member by session name', {
|
|
495
|
+
sessionName,
|
|
496
|
+
error: error instanceof Error ? error.message : String(error),
|
|
497
|
+
});
|
|
498
|
+
return null;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Save the orchestrator's prompt file.
|
|
503
|
+
*
|
|
504
|
+
* @param prompt - The prompt content
|
|
505
|
+
*/
|
|
506
|
+
async saveOrchestratorPrompt(prompt) {
|
|
507
|
+
const orchestratorDir = path.join(this.teamsDir, 'orchestrator');
|
|
508
|
+
if (!existsSync(orchestratorDir)) {
|
|
509
|
+
mkdirSync(orchestratorDir, { recursive: true });
|
|
510
|
+
}
|
|
511
|
+
const promptPath = this.getOrchestratorPromptPath();
|
|
512
|
+
await atomicWriteFile(promptPath, prompt);
|
|
513
|
+
this.logger.debug('Saved orchestrator prompt', { promptPath });
|
|
514
|
+
}
|
|
515
|
+
/**
|
|
516
|
+
* Get the orchestrator's prompt from file.
|
|
517
|
+
*
|
|
518
|
+
* @returns The prompt content or null if not found
|
|
519
|
+
*/
|
|
520
|
+
async getOrchestratorPrompt() {
|
|
521
|
+
const promptPath = this.getOrchestratorPromptPath();
|
|
522
|
+
if (!existsSync(promptPath)) {
|
|
523
|
+
return null;
|
|
524
|
+
}
|
|
525
|
+
try {
|
|
526
|
+
return await fs.readFile(promptPath, 'utf-8');
|
|
527
|
+
}
|
|
528
|
+
catch (error) {
|
|
529
|
+
this.logger.warn('Error reading orchestrator prompt', {
|
|
530
|
+
error: error instanceof Error ? error.message : String(error),
|
|
531
|
+
});
|
|
532
|
+
return null;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* Delete a team by removing its directory.
|
|
537
|
+
*
|
|
538
|
+
* @param id - The team ID to delete
|
|
539
|
+
*/
|
|
540
|
+
async deleteTeam(id) {
|
|
541
|
+
const teamDir = this.getTeamDir(id);
|
|
542
|
+
try {
|
|
543
|
+
if (existsSync(teamDir)) {
|
|
544
|
+
// Remove team directory recursively
|
|
545
|
+
await fs.rm(teamDir, { recursive: true, force: true });
|
|
546
|
+
this.logger.info('Team deleted successfully', { teamId: id, teamDir });
|
|
547
|
+
// Update teams backup (fire-and-forget, non-blocking)
|
|
548
|
+
this.updateTeamsBackup();
|
|
549
|
+
}
|
|
550
|
+
else {
|
|
551
|
+
this.logger.warn('Team directory not found for deletion', { teamId: id, teamDir });
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
catch (error) {
|
|
555
|
+
this.logger.error('Error deleting team', {
|
|
556
|
+
teamId: id,
|
|
557
|
+
error: error instanceof Error ? error.message : String(error),
|
|
558
|
+
});
|
|
559
|
+
throw error;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
// Project management
|
|
563
|
+
async getProjects() {
|
|
564
|
+
try {
|
|
565
|
+
await this.ensureFile(this.projectsFile);
|
|
566
|
+
const content = await fs.readFile(this.projectsFile, 'utf-8');
|
|
567
|
+
const projects = JSON.parse(content);
|
|
568
|
+
this.logger.debug('Retrieved projects from storage', { count: projects.length });
|
|
569
|
+
return projects.map(project => ProjectModel.fromJSON(project).toJSON());
|
|
570
|
+
}
|
|
571
|
+
catch (error) {
|
|
572
|
+
this.logger.error('Error reading projects', {
|
|
573
|
+
error: error instanceof Error ? error.message : String(error),
|
|
574
|
+
});
|
|
575
|
+
return [];
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
async addProject(projectPath) {
|
|
579
|
+
try {
|
|
580
|
+
// Resolve to absolute path to ensure .crewly is created in the correct location
|
|
581
|
+
// If path is relative, resolve it relative to the parent directory of the current working directory
|
|
582
|
+
let resolvedProjectPath;
|
|
583
|
+
if (path.isAbsolute(projectPath)) {
|
|
584
|
+
resolvedProjectPath = projectPath;
|
|
585
|
+
}
|
|
586
|
+
else {
|
|
587
|
+
// Resolve relative to parent directory (where sibling projects should be)
|
|
588
|
+
const parentDir = path.dirname(process.cwd());
|
|
589
|
+
resolvedProjectPath = path.resolve(parentDir, projectPath);
|
|
590
|
+
}
|
|
591
|
+
const projectName = path.basename(resolvedProjectPath);
|
|
592
|
+
const projectId = uuidv4();
|
|
593
|
+
const project = new ProjectModel({
|
|
594
|
+
id: projectId,
|
|
595
|
+
name: projectName,
|
|
596
|
+
path: resolvedProjectPath,
|
|
597
|
+
teams: {},
|
|
598
|
+
status: 'stopped',
|
|
599
|
+
});
|
|
600
|
+
// Ensure project directory and .crewly structure exists with template files
|
|
601
|
+
mkdirSync(resolvedProjectPath, { recursive: true });
|
|
602
|
+
const crewlyDir = path.join(resolvedProjectPath, '.crewly');
|
|
603
|
+
if (!existsSync(crewlyDir)) {
|
|
604
|
+
mkdirSync(crewlyDir, { recursive: true });
|
|
605
|
+
mkdirSync(path.join(crewlyDir, 'tasks'), { recursive: true });
|
|
606
|
+
mkdirSync(path.join(crewlyDir, 'specs'), { recursive: true });
|
|
607
|
+
mkdirSync(path.join(crewlyDir, 'memory'), { recursive: true });
|
|
608
|
+
mkdirSync(path.join(crewlyDir, 'prompts'), { recursive: true });
|
|
609
|
+
// Create template files
|
|
610
|
+
await this.createProjectTemplateFiles(crewlyDir, projectName);
|
|
611
|
+
}
|
|
612
|
+
await this.saveProject(project.toJSON());
|
|
613
|
+
return project.toJSON();
|
|
614
|
+
}
|
|
615
|
+
catch (error) {
|
|
616
|
+
console.error('Error adding project:', error);
|
|
617
|
+
throw error;
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
async saveProject(project) {
|
|
621
|
+
try {
|
|
622
|
+
const projects = await this.getProjects();
|
|
623
|
+
const existingIndex = projects.findIndex(p => p.id === project.id);
|
|
624
|
+
const isUpdate = existingIndex >= 0;
|
|
625
|
+
if (isUpdate) {
|
|
626
|
+
projects[existingIndex] = project;
|
|
627
|
+
}
|
|
628
|
+
else {
|
|
629
|
+
projects.push(project);
|
|
630
|
+
}
|
|
631
|
+
const newContent = JSON.stringify(projects, null, 2);
|
|
632
|
+
await atomicWriteFile(this.projectsFile, newContent);
|
|
633
|
+
this.logger.info('Project saved successfully', {
|
|
634
|
+
projectId: project.id,
|
|
635
|
+
projectName: project.name,
|
|
636
|
+
action: isUpdate ? 'updated' : 'created',
|
|
637
|
+
totalProjects: projects.length,
|
|
638
|
+
filePath: this.projectsFile,
|
|
639
|
+
});
|
|
640
|
+
}
|
|
641
|
+
catch (error) {
|
|
642
|
+
this.logger.error('Error saving project', {
|
|
643
|
+
projectId: project.id,
|
|
644
|
+
projectName: project.name,
|
|
645
|
+
error: error instanceof Error ? error.message : String(error),
|
|
646
|
+
filePath: this.projectsFile,
|
|
647
|
+
});
|
|
648
|
+
throw error;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
async deleteProject(id) {
|
|
652
|
+
try {
|
|
653
|
+
const projects = await this.getProjects();
|
|
654
|
+
const filteredProjects = projects.filter(p => p.id !== id);
|
|
655
|
+
await atomicWriteFile(this.projectsFile, JSON.stringify(filteredProjects, null, 2));
|
|
656
|
+
}
|
|
657
|
+
catch (error) {
|
|
658
|
+
console.error('Error deleting project:', error);
|
|
659
|
+
throw error;
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
// Ticket management
|
|
663
|
+
async getTickets(projectPath, filter) {
|
|
664
|
+
try {
|
|
665
|
+
const resolvedProjectPath = path.resolve(projectPath);
|
|
666
|
+
const ticketsDir = path.join(resolvedProjectPath, '.crewly', 'tasks');
|
|
667
|
+
if (!existsSync(ticketsDir)) {
|
|
668
|
+
return [];
|
|
669
|
+
}
|
|
670
|
+
const files = await fs.readdir(ticketsDir);
|
|
671
|
+
const yamlFiles = files.filter(file => file.endsWith('.yaml') || file.endsWith('.yml'));
|
|
672
|
+
const tickets = [];
|
|
673
|
+
for (const file of yamlFiles) {
|
|
674
|
+
try {
|
|
675
|
+
const filePath = path.join(ticketsDir, file);
|
|
676
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
677
|
+
const ticket = this.parseTicketYAML(content);
|
|
678
|
+
tickets.push(ticket);
|
|
679
|
+
}
|
|
680
|
+
catch (error) {
|
|
681
|
+
console.error(`Error parsing ticket file ${file}:`, error);
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
// Apply filters
|
|
685
|
+
let filteredTickets = tickets;
|
|
686
|
+
if (filter) {
|
|
687
|
+
if (filter.status) {
|
|
688
|
+
filteredTickets = filteredTickets.filter(t => t.status === filter.status);
|
|
689
|
+
}
|
|
690
|
+
if (filter.assignedTo) {
|
|
691
|
+
filteredTickets = filteredTickets.filter(t => t.assignedTo === filter.assignedTo);
|
|
692
|
+
}
|
|
693
|
+
if (filter.projectId) {
|
|
694
|
+
filteredTickets = filteredTickets.filter(t => t.projectId === filter.projectId);
|
|
695
|
+
}
|
|
696
|
+
if (filter.priority) {
|
|
697
|
+
filteredTickets = filteredTickets.filter(t => t.priority === filter.priority);
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
return filteredTickets.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
|
701
|
+
}
|
|
702
|
+
catch (error) {
|
|
703
|
+
console.error('Error reading tickets:', error);
|
|
704
|
+
return [];
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
async saveTicket(projectPath, ticket) {
|
|
708
|
+
try {
|
|
709
|
+
const resolvedProjectPath = path.resolve(projectPath);
|
|
710
|
+
const ticketsDir = path.join(resolvedProjectPath, '.crewly', 'tasks');
|
|
711
|
+
if (!existsSync(ticketsDir)) {
|
|
712
|
+
mkdirSync(ticketsDir, { recursive: true });
|
|
713
|
+
}
|
|
714
|
+
const ticketModel = TicketModel.fromJSON(ticket);
|
|
715
|
+
const filename = `${ticket.id}.yaml`;
|
|
716
|
+
const filePath = path.join(ticketsDir, filename);
|
|
717
|
+
await fs.writeFile(filePath, ticketModel.toYAML());
|
|
718
|
+
}
|
|
719
|
+
catch (error) {
|
|
720
|
+
console.error('Error saving ticket:', error);
|
|
721
|
+
throw error;
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
async deleteTicket(projectPath, ticketId) {
|
|
725
|
+
try {
|
|
726
|
+
const resolvedProjectPath = path.resolve(projectPath);
|
|
727
|
+
const ticketsDir = path.join(resolvedProjectPath, '.crewly', 'tasks');
|
|
728
|
+
const filename = `${ticketId}.yaml`;
|
|
729
|
+
const filePath = path.join(ticketsDir, filename);
|
|
730
|
+
if (existsSync(filePath)) {
|
|
731
|
+
await fs.unlink(filePath);
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
catch (error) {
|
|
735
|
+
console.error('Error deleting ticket:', error);
|
|
736
|
+
throw error;
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
parseTicketYAML(content) {
|
|
740
|
+
const lines = content.split('\n');
|
|
741
|
+
let frontmatterEnd = -1;
|
|
742
|
+
let frontmatterStart = -1;
|
|
743
|
+
// Find YAML frontmatter
|
|
744
|
+
for (let i = 0; i < lines.length; i++) {
|
|
745
|
+
if (lines[i].trim() === '---') {
|
|
746
|
+
if (frontmatterStart === -1) {
|
|
747
|
+
frontmatterStart = i;
|
|
748
|
+
}
|
|
749
|
+
else {
|
|
750
|
+
frontmatterEnd = i;
|
|
751
|
+
break;
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
let frontmatter = {};
|
|
756
|
+
let description = '';
|
|
757
|
+
if (frontmatterStart !== -1 && frontmatterEnd !== -1) {
|
|
758
|
+
const yamlContent = lines.slice(frontmatterStart + 1, frontmatterEnd).join('\n');
|
|
759
|
+
frontmatter = parseYAML(yamlContent) || {};
|
|
760
|
+
description = lines.slice(frontmatterEnd + 1).join('\n').trim();
|
|
761
|
+
}
|
|
762
|
+
else {
|
|
763
|
+
description = content.trim();
|
|
764
|
+
}
|
|
765
|
+
return {
|
|
766
|
+
id: frontmatter.id || uuidv4(),
|
|
767
|
+
title: frontmatter.title || 'Untitled',
|
|
768
|
+
description: description,
|
|
769
|
+
status: frontmatter.status || 'open',
|
|
770
|
+
assignedTo: frontmatter.assignedTo,
|
|
771
|
+
priority: frontmatter.priority || 'medium',
|
|
772
|
+
labels: frontmatter.labels || [],
|
|
773
|
+
projectId: frontmatter.projectId || '',
|
|
774
|
+
createdAt: frontmatter.createdAt || new Date().toISOString(),
|
|
775
|
+
updatedAt: frontmatter.updatedAt || new Date().toISOString(),
|
|
776
|
+
};
|
|
777
|
+
}
|
|
778
|
+
// File watching
|
|
779
|
+
watchProject(projectPath) {
|
|
780
|
+
const resolvedProjectPath = path.resolve(projectPath);
|
|
781
|
+
const crewlyDir = path.join(resolvedProjectPath, '.crewly');
|
|
782
|
+
return watch(crewlyDir, { recursive: true }, (eventType, filename) => {
|
|
783
|
+
if (filename) {
|
|
784
|
+
console.log(`File ${eventType}: ${filename} in project ${resolvedProjectPath}`);
|
|
785
|
+
// Emit events that can be handled by WebSocket gateway
|
|
786
|
+
}
|
|
787
|
+
});
|
|
788
|
+
}
|
|
789
|
+
// Runtime state management
|
|
790
|
+
async getRuntimeState() {
|
|
791
|
+
try {
|
|
792
|
+
await this.ensureFile(this.runtimeFile, {});
|
|
793
|
+
const content = await fs.readFile(this.runtimeFile, 'utf-8');
|
|
794
|
+
return JSON.parse(content);
|
|
795
|
+
}
|
|
796
|
+
catch (error) {
|
|
797
|
+
console.error('Error reading runtime state:', error);
|
|
798
|
+
return {};
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
async saveRuntimeState(state) {
|
|
802
|
+
try {
|
|
803
|
+
await atomicWriteFile(this.runtimeFile, JSON.stringify(state, null, 2));
|
|
804
|
+
}
|
|
805
|
+
catch (error) {
|
|
806
|
+
console.error('Error saving runtime state:', error);
|
|
807
|
+
throw error;
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
/**
|
|
811
|
+
* Create template files for a new project
|
|
812
|
+
*/
|
|
813
|
+
async createProjectTemplateFiles(crewlyDir, projectName) {
|
|
814
|
+
try {
|
|
815
|
+
// Project specification template
|
|
816
|
+
const projectSpecPath = path.join(crewlyDir, 'specs', 'project.md');
|
|
817
|
+
const projectSpecTemplate = `# ${projectName} - Project Specification
|
|
818
|
+
|
|
819
|
+
## Overview
|
|
820
|
+
Brief description of ${projectName} and its goals.
|
|
821
|
+
|
|
822
|
+
## Requirements
|
|
823
|
+
- List key functional requirements
|
|
824
|
+
- Non-functional requirements
|
|
825
|
+
- Technical constraints
|
|
826
|
+
|
|
827
|
+
## Architecture
|
|
828
|
+
High-level system architecture and technology stack.
|
|
829
|
+
|
|
830
|
+
## Implementation Plan
|
|
831
|
+
### Phase 1: Foundation
|
|
832
|
+
- Core functionality setup
|
|
833
|
+
- Basic project structure
|
|
834
|
+
- Initial testing framework
|
|
835
|
+
|
|
836
|
+
### Phase 2: Features
|
|
837
|
+
- Main feature implementation
|
|
838
|
+
- Integration and testing
|
|
839
|
+
- Performance optimization
|
|
840
|
+
|
|
841
|
+
### Phase 3: Polish
|
|
842
|
+
- UI/UX improvements
|
|
843
|
+
- Documentation completion
|
|
844
|
+
- Deployment preparation
|
|
845
|
+
|
|
846
|
+
## Acceptance Criteria
|
|
847
|
+
- [ ] All requirements implemented
|
|
848
|
+
- [ ] Tests passing (>90% coverage)
|
|
849
|
+
- [ ] Documentation complete
|
|
850
|
+
- [ ] Performance targets met
|
|
851
|
+
- [ ] Security review completed
|
|
852
|
+
`;
|
|
853
|
+
await fs.writeFile(projectSpecPath, projectSpecTemplate, 'utf8');
|
|
854
|
+
// README for the .crewly directory
|
|
855
|
+
const readmePath = path.join(crewlyDir, 'README.md');
|
|
856
|
+
const readmeTemplate = `# Crewly Project Directory
|
|
857
|
+
|
|
858
|
+
This directory contains Crewly-specific files for **${projectName}** project orchestration.
|
|
859
|
+
|
|
860
|
+
## Structure
|
|
861
|
+
|
|
862
|
+
- **specs/**: Project specifications and requirements
|
|
863
|
+
- **tasks/**: Task items in YAML + Markdown format
|
|
864
|
+
- **memory/**: Agent memory and context files
|
|
865
|
+
- **prompts/**: Custom system prompts for team members
|
|
866
|
+
|
|
867
|
+
## Usage
|
|
868
|
+
|
|
869
|
+
Crewly agents automatically read from these directories to understand:
|
|
870
|
+
- Project requirements and specifications
|
|
871
|
+
- Current tasks and their status
|
|
872
|
+
- Historical context and decisions
|
|
873
|
+
- Role-specific instructions
|
|
874
|
+
|
|
875
|
+
All files in this directory are monitored by Crewly for real-time updates.
|
|
876
|
+
|
|
877
|
+
## Getting Started
|
|
878
|
+
|
|
879
|
+
1. Update \`specs/project.md\` with your project requirements
|
|
880
|
+
2. Create task items in \`tasks/\` directory for specific tasks
|
|
881
|
+
3. Customize team member prompts in \`prompts/\` as needed
|
|
882
|
+
4. Let Crewly orchestrate your development workflow!
|
|
883
|
+
`;
|
|
884
|
+
await fs.writeFile(readmePath, readmeTemplate, 'utf8');
|
|
885
|
+
// Sample ticket template
|
|
886
|
+
const sampleTicketPath = path.join(crewlyDir, 'tasks', 'sample-setup-task.yaml');
|
|
887
|
+
const ticketTemplate = `---
|
|
888
|
+
id: sample-setup-task
|
|
889
|
+
title: Project Setup and Configuration
|
|
890
|
+
status: todo
|
|
891
|
+
priority: high
|
|
892
|
+
assignedTo: ""
|
|
893
|
+
estimatedHours: 4
|
|
894
|
+
createdAt: ${new Date().toISOString()}
|
|
895
|
+
updatedAt: ${new Date().toISOString()}
|
|
896
|
+
tags:
|
|
897
|
+
- setup
|
|
898
|
+
- configuration
|
|
899
|
+
- infrastructure
|
|
900
|
+
---
|
|
901
|
+
|
|
902
|
+
# Project Setup and Configuration
|
|
903
|
+
|
|
904
|
+
## Description
|
|
905
|
+
Set up the basic project infrastructure and configuration for ${projectName}.
|
|
906
|
+
|
|
907
|
+
## Acceptance Criteria
|
|
908
|
+
- [ ] Project structure created
|
|
909
|
+
- [ ] Build system configured
|
|
910
|
+
- [ ] Testing framework set up
|
|
911
|
+
- [ ] CI/CD pipeline configured
|
|
912
|
+
- [ ] Documentation structure established
|
|
913
|
+
- [ ] Development environment documented
|
|
914
|
+
|
|
915
|
+
## Implementation Notes
|
|
916
|
+
This is a foundational task that should be completed first before other development work begins.
|
|
917
|
+
|
|
918
|
+
## Test Plan
|
|
919
|
+
- Verify build process works correctly
|
|
920
|
+
- Confirm tests can be run successfully
|
|
921
|
+
- Check all documentation is accessible
|
|
922
|
+
- Validate development environment setup instructions
|
|
923
|
+
`;
|
|
924
|
+
await fs.writeFile(sampleTicketPath, ticketTemplate, 'utf8');
|
|
925
|
+
console.log(`Created Crewly template files for project: ${projectName}`);
|
|
926
|
+
}
|
|
927
|
+
catch (error) {
|
|
928
|
+
console.error('Error creating project template files:', error);
|
|
929
|
+
// Don't throw - project can still work without template files
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
// Scheduled Messages management
|
|
933
|
+
async getScheduledMessages() {
|
|
934
|
+
try {
|
|
935
|
+
await this.ensureFile(this.scheduledMessagesFile, []);
|
|
936
|
+
const content = await fs.readFile(this.scheduledMessagesFile, 'utf-8');
|
|
937
|
+
// Handle empty content or malformed JSON
|
|
938
|
+
if (!content.trim()) {
|
|
939
|
+
await atomicWriteFile(this.scheduledMessagesFile, JSON.stringify([], null, 2));
|
|
940
|
+
return [];
|
|
941
|
+
}
|
|
942
|
+
try {
|
|
943
|
+
return JSON.parse(content);
|
|
944
|
+
}
|
|
945
|
+
catch (parseError) {
|
|
946
|
+
console.error('Error parsing scheduled messages JSON, resetting file:', parseError);
|
|
947
|
+
// Reset the file with empty array if JSON is corrupted
|
|
948
|
+
await atomicWriteFile(this.scheduledMessagesFile, JSON.stringify([], null, 2));
|
|
949
|
+
return [];
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
catch (error) {
|
|
953
|
+
console.error('Error reading scheduled messages:', error);
|
|
954
|
+
return [];
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
async saveScheduledMessage(scheduledMessage) {
|
|
958
|
+
try {
|
|
959
|
+
const messages = await this.getScheduledMessages();
|
|
960
|
+
const existingIndex = messages.findIndex(m => m.id === scheduledMessage.id);
|
|
961
|
+
if (existingIndex >= 0) {
|
|
962
|
+
messages[existingIndex] = scheduledMessage;
|
|
963
|
+
}
|
|
964
|
+
else {
|
|
965
|
+
messages.push(scheduledMessage);
|
|
966
|
+
}
|
|
967
|
+
await atomicWriteFile(this.scheduledMessagesFile, JSON.stringify(messages, null, 2));
|
|
968
|
+
}
|
|
969
|
+
catch (error) {
|
|
970
|
+
console.error('Error saving scheduled message:', error);
|
|
971
|
+
throw error;
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
async getScheduledMessage(id) {
|
|
975
|
+
try {
|
|
976
|
+
const messages = await this.getScheduledMessages();
|
|
977
|
+
return messages.find(m => m.id === id);
|
|
978
|
+
}
|
|
979
|
+
catch (error) {
|
|
980
|
+
console.error('Error getting scheduled message:', error);
|
|
981
|
+
return undefined;
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
async deleteScheduledMessage(id) {
|
|
985
|
+
try {
|
|
986
|
+
const messages = await this.getScheduledMessages();
|
|
987
|
+
const filteredMessages = messages.filter(m => m.id !== id);
|
|
988
|
+
if (filteredMessages.length === messages.length) {
|
|
989
|
+
return false; // Message not found
|
|
990
|
+
}
|
|
991
|
+
await atomicWriteFile(this.scheduledMessagesFile, JSON.stringify(filteredMessages, null, 2));
|
|
992
|
+
return true;
|
|
993
|
+
}
|
|
994
|
+
catch (error) {
|
|
995
|
+
console.error('Error deleting scheduled message:', error);
|
|
996
|
+
throw error;
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
// Recurring Checks persistence
|
|
1000
|
+
/**
|
|
1001
|
+
* Get all persisted recurring checks.
|
|
1002
|
+
*
|
|
1003
|
+
* @returns Array of persisted ScheduledCheck entries
|
|
1004
|
+
*/
|
|
1005
|
+
async getRecurringChecks() {
|
|
1006
|
+
try {
|
|
1007
|
+
await this.ensureFile(this.recurringChecksFile, []);
|
|
1008
|
+
const content = await fs.readFile(this.recurringChecksFile, 'utf-8');
|
|
1009
|
+
if (!content.trim()) {
|
|
1010
|
+
await atomicWriteFile(this.recurringChecksFile, JSON.stringify([], null, 2));
|
|
1011
|
+
return [];
|
|
1012
|
+
}
|
|
1013
|
+
try {
|
|
1014
|
+
return JSON.parse(content);
|
|
1015
|
+
}
|
|
1016
|
+
catch (parseError) {
|
|
1017
|
+
this.logger.error('Error parsing recurring checks JSON, resetting file', {
|
|
1018
|
+
error: parseError instanceof Error ? parseError.message : String(parseError),
|
|
1019
|
+
});
|
|
1020
|
+
await atomicWriteFile(this.recurringChecksFile, JSON.stringify([], null, 2));
|
|
1021
|
+
return [];
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1024
|
+
catch (error) {
|
|
1025
|
+
this.logger.error('Error reading recurring checks', {
|
|
1026
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1027
|
+
});
|
|
1028
|
+
return [];
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
/**
|
|
1032
|
+
* Save or update a recurring check entry on disk.
|
|
1033
|
+
*
|
|
1034
|
+
* @param check - The ScheduledCheck to persist
|
|
1035
|
+
*/
|
|
1036
|
+
async saveRecurringCheck(check) {
|
|
1037
|
+
try {
|
|
1038
|
+
const checks = await this.getRecurringChecks();
|
|
1039
|
+
const existingIndex = checks.findIndex(c => c.id === check.id);
|
|
1040
|
+
if (existingIndex >= 0) {
|
|
1041
|
+
checks[existingIndex] = check;
|
|
1042
|
+
}
|
|
1043
|
+
else {
|
|
1044
|
+
checks.push(check);
|
|
1045
|
+
}
|
|
1046
|
+
await atomicWriteFile(this.recurringChecksFile, JSON.stringify(checks, null, 2));
|
|
1047
|
+
}
|
|
1048
|
+
catch (error) {
|
|
1049
|
+
this.logger.error('Error saving recurring check', {
|
|
1050
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1051
|
+
});
|
|
1052
|
+
throw error;
|
|
1053
|
+
}
|
|
1054
|
+
}
|
|
1055
|
+
/**
|
|
1056
|
+
* Delete a persisted recurring check by ID.
|
|
1057
|
+
*
|
|
1058
|
+
* @param id - The check ID to delete
|
|
1059
|
+
* @returns true if the check was found and deleted
|
|
1060
|
+
*/
|
|
1061
|
+
async deleteRecurringCheck(id) {
|
|
1062
|
+
try {
|
|
1063
|
+
const checks = await this.getRecurringChecks();
|
|
1064
|
+
const filtered = checks.filter(c => c.id !== id);
|
|
1065
|
+
if (filtered.length === checks.length) {
|
|
1066
|
+
return false;
|
|
1067
|
+
}
|
|
1068
|
+
await atomicWriteFile(this.recurringChecksFile, JSON.stringify(filtered, null, 2));
|
|
1069
|
+
return true;
|
|
1070
|
+
}
|
|
1071
|
+
catch (error) {
|
|
1072
|
+
this.logger.error('Error deleting recurring check', {
|
|
1073
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1074
|
+
});
|
|
1075
|
+
throw error;
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
/**
|
|
1079
|
+
* Clear all persisted recurring checks.
|
|
1080
|
+
*/
|
|
1081
|
+
async clearRecurringChecks() {
|
|
1082
|
+
try {
|
|
1083
|
+
await atomicWriteFile(this.recurringChecksFile, JSON.stringify([], null, 2));
|
|
1084
|
+
}
|
|
1085
|
+
catch (error) {
|
|
1086
|
+
this.logger.error('Error clearing recurring checks', {
|
|
1087
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1088
|
+
});
|
|
1089
|
+
throw error;
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
1092
|
+
// One-Time Checks persistence
|
|
1093
|
+
/**
|
|
1094
|
+
* Get all persisted one-time checks.
|
|
1095
|
+
*
|
|
1096
|
+
* @returns Array of persisted ScheduledCheck entries
|
|
1097
|
+
*/
|
|
1098
|
+
async getOneTimeChecks() {
|
|
1099
|
+
try {
|
|
1100
|
+
await this.ensureFile(this.oneTimeChecksFile, []);
|
|
1101
|
+
const content = await fs.readFile(this.oneTimeChecksFile, 'utf-8');
|
|
1102
|
+
if (!content.trim()) {
|
|
1103
|
+
await atomicWriteFile(this.oneTimeChecksFile, JSON.stringify([], null, 2));
|
|
1104
|
+
return [];
|
|
1105
|
+
}
|
|
1106
|
+
try {
|
|
1107
|
+
return JSON.parse(content);
|
|
1108
|
+
}
|
|
1109
|
+
catch (parseError) {
|
|
1110
|
+
this.logger.error('Error parsing one-time checks JSON, resetting file', {
|
|
1111
|
+
error: parseError instanceof Error ? parseError.message : String(parseError),
|
|
1112
|
+
});
|
|
1113
|
+
await atomicWriteFile(this.oneTimeChecksFile, JSON.stringify([], null, 2));
|
|
1114
|
+
return [];
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
catch (error) {
|
|
1118
|
+
this.logger.error('Error reading one-time checks', {
|
|
1119
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1120
|
+
});
|
|
1121
|
+
return [];
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
/**
|
|
1125
|
+
* Save or update a one-time check entry on disk.
|
|
1126
|
+
*
|
|
1127
|
+
* @param check - The ScheduledCheck to persist
|
|
1128
|
+
*/
|
|
1129
|
+
async saveOneTimeCheck(check) {
|
|
1130
|
+
try {
|
|
1131
|
+
const checks = await this.getOneTimeChecks();
|
|
1132
|
+
const existingIndex = checks.findIndex(c => c.id === check.id);
|
|
1133
|
+
if (existingIndex >= 0) {
|
|
1134
|
+
checks[existingIndex] = check;
|
|
1135
|
+
}
|
|
1136
|
+
else {
|
|
1137
|
+
checks.push(check);
|
|
1138
|
+
}
|
|
1139
|
+
await atomicWriteFile(this.oneTimeChecksFile, JSON.stringify(checks, null, 2));
|
|
1140
|
+
}
|
|
1141
|
+
catch (error) {
|
|
1142
|
+
this.logger.error('Error saving one-time check', {
|
|
1143
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1144
|
+
});
|
|
1145
|
+
throw error;
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
/**
|
|
1149
|
+
* Delete a persisted one-time check by ID.
|
|
1150
|
+
*
|
|
1151
|
+
* @param id - The check ID to delete
|
|
1152
|
+
* @returns true if the check was found and deleted
|
|
1153
|
+
*/
|
|
1154
|
+
async deleteOneTimeCheck(id) {
|
|
1155
|
+
try {
|
|
1156
|
+
const checks = await this.getOneTimeChecks();
|
|
1157
|
+
const filtered = checks.filter(c => c.id !== id);
|
|
1158
|
+
if (filtered.length === checks.length) {
|
|
1159
|
+
return false;
|
|
1160
|
+
}
|
|
1161
|
+
await atomicWriteFile(this.oneTimeChecksFile, JSON.stringify(filtered, null, 2));
|
|
1162
|
+
return true;
|
|
1163
|
+
}
|
|
1164
|
+
catch (error) {
|
|
1165
|
+
this.logger.error('Error deleting one-time check', {
|
|
1166
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1167
|
+
});
|
|
1168
|
+
throw error;
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
/**
|
|
1172
|
+
* Clear all persisted one-time checks.
|
|
1173
|
+
*/
|
|
1174
|
+
async clearOneTimeChecks() {
|
|
1175
|
+
try {
|
|
1176
|
+
await atomicWriteFile(this.oneTimeChecksFile, JSON.stringify([], null, 2));
|
|
1177
|
+
}
|
|
1178
|
+
catch (error) {
|
|
1179
|
+
this.logger.error('Error clearing one-time checks', {
|
|
1180
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1181
|
+
});
|
|
1182
|
+
throw error;
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
// Message Delivery Logs management
|
|
1186
|
+
async getDeliveryLogs() {
|
|
1187
|
+
try {
|
|
1188
|
+
await this.ensureFile(this.deliveryLogsFile);
|
|
1189
|
+
const content = await fs.readFile(this.deliveryLogsFile, 'utf-8');
|
|
1190
|
+
const logs = JSON.parse(content);
|
|
1191
|
+
// Sort by sentAt (newest first)
|
|
1192
|
+
return logs.sort((a, b) => new Date(b.sentAt).getTime() - new Date(a.sentAt).getTime());
|
|
1193
|
+
}
|
|
1194
|
+
catch (error) {
|
|
1195
|
+
console.error('Error reading delivery logs:', error);
|
|
1196
|
+
return [];
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
async saveDeliveryLog(log) {
|
|
1200
|
+
try {
|
|
1201
|
+
const logs = await this.getDeliveryLogs();
|
|
1202
|
+
logs.unshift(log); // Add to beginning for newest first order
|
|
1203
|
+
// Keep only last 1000 logs to prevent file from getting too large
|
|
1204
|
+
const trimmedLogs = logs.slice(0, 1000);
|
|
1205
|
+
await atomicWriteFile(this.deliveryLogsFile, JSON.stringify(trimmedLogs, null, 2));
|
|
1206
|
+
}
|
|
1207
|
+
catch (error) {
|
|
1208
|
+
console.error('Error saving delivery log:', error);
|
|
1209
|
+
throw error;
|
|
1210
|
+
}
|
|
1211
|
+
}
|
|
1212
|
+
async clearDeliveryLogs() {
|
|
1213
|
+
try {
|
|
1214
|
+
await atomicWriteFile(this.deliveryLogsFile, JSON.stringify([], null, 2));
|
|
1215
|
+
}
|
|
1216
|
+
catch (error) {
|
|
1217
|
+
console.error('Error clearing delivery logs:', error);
|
|
1218
|
+
throw error;
|
|
1219
|
+
}
|
|
1220
|
+
}
|
|
1221
|
+
// Orchestrator management
|
|
1222
|
+
/**
|
|
1223
|
+
* Get orchestrator status from dedicated orchestrator.json file.
|
|
1224
|
+
*
|
|
1225
|
+
* @returns Orchestrator status object or null if not found
|
|
1226
|
+
*/
|
|
1227
|
+
async getOrchestratorStatus() {
|
|
1228
|
+
try {
|
|
1229
|
+
// Migrate from legacy format if needed
|
|
1230
|
+
await this.migrateFromLegacyTeamsFile();
|
|
1231
|
+
// Check if orchestrator file exists
|
|
1232
|
+
if (!existsSync(this.orchestratorFile)) {
|
|
1233
|
+
// Create default orchestrator
|
|
1234
|
+
const orchestrator = this.createDefaultOrchestrator();
|
|
1235
|
+
await atomicWriteFile(this.orchestratorFile, JSON.stringify(orchestrator, null, 2));
|
|
1236
|
+
return orchestrator;
|
|
1237
|
+
}
|
|
1238
|
+
const content = await fs.readFile(this.orchestratorFile, 'utf-8');
|
|
1239
|
+
const orchestrator = JSON.parse(content);
|
|
1240
|
+
return orchestrator;
|
|
1241
|
+
}
|
|
1242
|
+
catch (error) {
|
|
1243
|
+
this.logger.error('Error reading orchestrator status', {
|
|
1244
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1245
|
+
});
|
|
1246
|
+
return null;
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1249
|
+
/**
|
|
1250
|
+
* Update agent status for orchestrator or any team member.
|
|
1251
|
+
* Orchestrator status is stored in teams/orchestrator.json.
|
|
1252
|
+
* Team member status is stored in the respective team's file.
|
|
1253
|
+
*
|
|
1254
|
+
* @param sessionName - Session name of the agent (CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME for orchestrator)
|
|
1255
|
+
* @param status - New agent status (CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE | CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVATING | CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE)
|
|
1256
|
+
*/
|
|
1257
|
+
async updateAgentStatus(sessionName, status) {
|
|
1258
|
+
// Handle orchestrator separately
|
|
1259
|
+
if (sessionName === CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME) {
|
|
1260
|
+
return withOperationLock(this.orchestratorFile, async () => {
|
|
1261
|
+
try {
|
|
1262
|
+
let orchestrator;
|
|
1263
|
+
if (existsSync(this.orchestratorFile)) {
|
|
1264
|
+
const content = await fs.readFile(this.orchestratorFile, 'utf-8');
|
|
1265
|
+
orchestrator = JSON.parse(content);
|
|
1266
|
+
}
|
|
1267
|
+
else {
|
|
1268
|
+
orchestrator = this.createDefaultOrchestrator();
|
|
1269
|
+
}
|
|
1270
|
+
orchestrator.agentStatus = status;
|
|
1271
|
+
orchestrator.updatedAt = new Date().toISOString();
|
|
1272
|
+
await atomicWriteFile(this.orchestratorFile, JSON.stringify(orchestrator, null, 2));
|
|
1273
|
+
this.logger.debug('Updated orchestrator status', { status });
|
|
1274
|
+
}
|
|
1275
|
+
catch (error) {
|
|
1276
|
+
this.logger.error('Error updating orchestrator status', {
|
|
1277
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1278
|
+
});
|
|
1279
|
+
throw error;
|
|
1280
|
+
}
|
|
1281
|
+
});
|
|
1282
|
+
}
|
|
1283
|
+
// Handle regular team members - find the team containing this member
|
|
1284
|
+
try {
|
|
1285
|
+
const teams = await this.getTeams();
|
|
1286
|
+
let memberFound = false;
|
|
1287
|
+
for (const team of teams) {
|
|
1288
|
+
for (const member of team.members || []) {
|
|
1289
|
+
if (member.sessionName === sessionName) {
|
|
1290
|
+
member.agentStatus = status;
|
|
1291
|
+
member.updatedAt = new Date().toISOString();
|
|
1292
|
+
memberFound = true;
|
|
1293
|
+
// Save the updated team
|
|
1294
|
+
await this.saveTeam(team);
|
|
1295
|
+
this.logger.debug('Updated team member status', {
|
|
1296
|
+
sessionName,
|
|
1297
|
+
status,
|
|
1298
|
+
teamId: team.id,
|
|
1299
|
+
});
|
|
1300
|
+
break;
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
if (memberFound)
|
|
1304
|
+
break;
|
|
1305
|
+
}
|
|
1306
|
+
if (!memberFound) {
|
|
1307
|
+
this.logger.warn('Agent not found in teams data', { sessionName });
|
|
1308
|
+
}
|
|
1309
|
+
}
|
|
1310
|
+
catch (error) {
|
|
1311
|
+
this.logger.error('Error updating agent status', {
|
|
1312
|
+
sessionName,
|
|
1313
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1314
|
+
});
|
|
1315
|
+
throw error;
|
|
1316
|
+
}
|
|
1317
|
+
}
|
|
1318
|
+
/**
|
|
1319
|
+
* Update team member runtime type
|
|
1320
|
+
*/
|
|
1321
|
+
async updateTeamMemberRuntimeType(teamId, memberId, runtimeType) {
|
|
1322
|
+
try {
|
|
1323
|
+
const teams = await this.getTeams();
|
|
1324
|
+
const team = teams.find(t => t.id === teamId);
|
|
1325
|
+
if (!team) {
|
|
1326
|
+
throw new Error(`Team not found: ${teamId}`);
|
|
1327
|
+
}
|
|
1328
|
+
const member = team.members.find(m => m.id === memberId);
|
|
1329
|
+
if (!member) {
|
|
1330
|
+
throw new Error(`Team member not found: ${memberId} in team ${teamId}`);
|
|
1331
|
+
}
|
|
1332
|
+
member.runtimeType = runtimeType;
|
|
1333
|
+
member.updatedAt = new Date().toISOString();
|
|
1334
|
+
await this.saveTeam(team);
|
|
1335
|
+
}
|
|
1336
|
+
catch (error) {
|
|
1337
|
+
console.error('Error updating team member runtime type:', error);
|
|
1338
|
+
throw error;
|
|
1339
|
+
}
|
|
1340
|
+
}
|
|
1341
|
+
/**
|
|
1342
|
+
* Update orchestrator runtime type in teams/orchestrator.json.
|
|
1343
|
+
*
|
|
1344
|
+
* @param runtimeType - The runtime type to set
|
|
1345
|
+
*/
|
|
1346
|
+
async updateOrchestratorRuntimeType(runtimeType) {
|
|
1347
|
+
return withOperationLock(this.orchestratorFile, async () => {
|
|
1348
|
+
try {
|
|
1349
|
+
let orchestrator;
|
|
1350
|
+
if (existsSync(this.orchestratorFile)) {
|
|
1351
|
+
const content = await fs.readFile(this.orchestratorFile, 'utf-8');
|
|
1352
|
+
orchestrator = JSON.parse(content);
|
|
1353
|
+
}
|
|
1354
|
+
else {
|
|
1355
|
+
orchestrator = this.createDefaultOrchestrator();
|
|
1356
|
+
}
|
|
1357
|
+
orchestrator.runtimeType = runtimeType;
|
|
1358
|
+
orchestrator.updatedAt = new Date().toISOString();
|
|
1359
|
+
await atomicWriteFile(this.orchestratorFile, JSON.stringify(orchestrator, null, 2));
|
|
1360
|
+
this.logger.debug('Updated orchestrator runtime type', { runtimeType });
|
|
1361
|
+
}
|
|
1362
|
+
catch (error) {
|
|
1363
|
+
this.logger.error('Error updating orchestrator runtime type', {
|
|
1364
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1365
|
+
});
|
|
1366
|
+
throw error;
|
|
1367
|
+
}
|
|
1368
|
+
});
|
|
1369
|
+
}
|
|
1370
|
+
/**
|
|
1371
|
+
* Update the teams backup file asynchronously.
|
|
1372
|
+
* Reads current teams and writes backup. Errors are logged but not thrown.
|
|
1373
|
+
*/
|
|
1374
|
+
updateTeamsBackup() {
|
|
1375
|
+
this.getTeams()
|
|
1376
|
+
.then((teams) => TeamsBackupService.getInstance().updateBackup(teams))
|
|
1377
|
+
.catch((error) => {
|
|
1378
|
+
this.logger.warn('Failed to update teams backup', {
|
|
1379
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1380
|
+
});
|
|
1381
|
+
});
|
|
1382
|
+
}
|
|
1383
|
+
/**
|
|
1384
|
+
* @deprecated Use updateAgentStatus instead
|
|
1385
|
+
*/
|
|
1386
|
+
async updateOrchestratorStatus(status) {
|
|
1387
|
+
return this.updateAgentStatus(CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME, status);
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
//# sourceMappingURL=storage.service.js.map
|