crewly 1.0.7 → 1.0.10
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 +1 -1
- package/README.md +50 -3
- package/config/constants.ts +59 -0
- package/config/index.ts +2 -0
- package/config/roles/architect/prompt.md +17 -5
- package/config/roles/backend-developer/prompt.md +35 -5
- package/config/roles/designer/prompt.md +17 -5
- package/config/roles/developer/prompt.md +43 -9
- package/config/roles/frontend-developer/prompt.md +35 -5
- package/config/roles/fullstack-dev/prompt.md +35 -5
- package/config/roles/generalist/prompt.md +18 -5
- package/config/roles/orchestrator/prompt.md +126 -3
- package/config/roles/product-manager/prompt.md +24 -9
- package/config/roles/qa/prompt.md +35 -5
- package/config/roles/qa-engineer/prompt.md +35 -5
- package/config/roles/sales/prompt.md +17 -5
- package/config/roles/support/prompt.md +17 -5
- package/config/roles/tpm/prompt.md +17 -5
- package/config/skills/agent/_common/lib.sh +4 -0
- package/config/skills/agent/core/accept-task/execute.sh +21 -0
- package/config/skills/agent/core/accept-task/instructions.md +20 -0
- package/config/skills/agent/core/accept-task/skill.json +20 -0
- package/config/skills/agent/core/block-task/execute.sh +26 -0
- package/config/skills/agent/core/block-task/instructions.md +22 -0
- package/config/skills/agent/core/block-task/skill.json +20 -0
- package/config/skills/agent/core/check-quality-gates/execute.sh +20 -0
- package/config/skills/agent/core/check-quality-gates/instructions.md +23 -0
- package/config/skills/agent/core/check-quality-gates/skill.json +20 -0
- package/config/skills/agent/core/complete-task/execute.sh +29 -0
- package/config/skills/agent/core/complete-task/instructions.md +53 -0
- package/config/skills/agent/core/complete-task/skill.json +20 -0
- package/config/skills/agent/core/get-my-context/execute.sh +23 -0
- package/config/skills/agent/core/get-my-context/instructions.md +21 -0
- package/config/skills/agent/core/get-my-context/skill.json +20 -0
- package/config/skills/agent/core/get-sops/execute.sh +24 -0
- package/config/skills/agent/core/get-sops/instructions.md +21 -0
- package/config/skills/agent/core/get-sops/skill.json +20 -0
- package/config/skills/agent/core/get-team-status/execute.sh +8 -0
- package/config/skills/agent/core/get-team-status/instructions.md +17 -0
- package/config/skills/agent/core/get-team-status/skill.json +20 -0
- package/config/skills/agent/core/heartbeat/execute.sh +22 -0
- package/config/skills/agent/core/heartbeat/instructions.md +23 -0
- package/config/skills/agent/core/heartbeat/skill.json +20 -0
- package/config/skills/agent/core/manage-knowledge/execute.sh +60 -0
- package/config/skills/agent/core/manage-knowledge/instructions.md +46 -0
- package/config/skills/agent/core/marketplace-search/execute.sh +77 -0
- package/config/skills/agent/core/marketplace-search/instructions.md +59 -0
- package/config/skills/agent/core/marketplace-search/skill.json +20 -0
- package/config/skills/agent/core/query-knowledge/execute.sh +30 -0
- package/config/skills/agent/core/query-knowledge/instructions.md +47 -0
- package/config/skills/agent/core/query-knowledge/skill.json +20 -0
- package/config/skills/agent/core/read-task/execute.sh +15 -0
- package/config/skills/agent/core/read-task/instructions.md +19 -0
- package/config/skills/agent/core/read-task/skill.json +20 -0
- package/config/skills/agent/core/recall/execute.sh +24 -0
- package/config/skills/agent/core/recall/instructions.md +23 -0
- package/config/skills/agent/core/recall/skill.json +20 -0
- package/config/skills/agent/core/record-learning/execute.sh +29 -0
- package/config/skills/agent/core/record-learning/instructions.md +24 -0
- package/config/skills/agent/core/record-learning/skill.json +20 -0
- package/config/skills/agent/core/register-self/execute.sh +28 -0
- package/config/skills/agent/core/register-self/instructions.md +18 -0
- package/config/skills/agent/core/register-self/skill.json +20 -0
- package/config/skills/agent/core/remember/execute.sh +29 -0
- package/config/skills/agent/core/remember/instructions.md +24 -0
- package/config/skills/agent/core/remember/skill.json +20 -0
- package/config/skills/agent/core/report-progress/execute.sh +28 -0
- package/config/skills/agent/core/report-progress/instructions.md +25 -0
- package/config/skills/agent/core/report-progress/skill.json +20 -0
- package/config/skills/agent/core/report-status/execute.sh +35 -0
- package/config/skills/agent/core/report-status/instructions.md +36 -0
- package/config/skills/agent/core/report-status/skill.json +20 -0
- package/config/skills/agent/core/send-chat-response/execute.sh +26 -0
- package/config/skills/agent/core/send-chat-response/instructions.md +22 -0
- package/config/skills/agent/core/send-chat-response/skill.json +20 -0
- package/config/skills/agent/core/send-message/execute.sh +17 -0
- package/config/skills/agent/core/send-message/instructions.md +20 -0
- package/config/skills/agent/core/send-message/skill.json +20 -0
- package/config/skills/orchestrator/complete-task/execute.sh +1 -0
- package/config/skills/orchestrator/delegate-task/execute.sh +1 -1
- package/config/skills/registry.json +850 -0
- package/config/templates/agent-claude-md.md +16 -0
- package/config/templates/research-team.json +22 -0
- package/config/templates/startup-team.json +22 -0
- package/config/templates/web-dev-team.json +22 -0
- package/dist/backend/backend/src/constants.d.ts +127 -1
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +119 -8
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/index.d.ts +1 -1
- package/dist/backend/backend/src/controllers/marketplace/index.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/index.js +1 -1
- package/dist/backend/backend/src/controllers/marketplace/index.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts +64 -8
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js +194 -96
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +7 -2
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +7 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +174 -4
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +34 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/modules/task-management.routes.js +2 -0
- package/dist/backend/backend/src/routes/modules/task-management.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +8 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +89 -17
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts +265 -0
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.js +811 -0
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js +11 -4
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts +11 -0
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js +18 -0
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +12 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +51 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts +6 -0
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -1
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js +10 -0
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -1
- package/dist/backend/backend/src/services/index.d.ts +3 -0
- package/dist/backend/backend/src/services/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/index.js +5 -0
- package/dist/backend/backend/src/services/index.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/index.d.ts +1 -0
- package/dist/backend/backend/src/services/marketplace/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/index.js +2 -0
- package/dist/backend/backend/src/services/marketplace/index.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts +10 -9
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js +262 -73
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace-submission.service.d.ts +71 -0
- package/dist/backend/backend/src/services/marketplace/marketplace-submission.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/marketplace/marketplace-submission.service.js +339 -0
- package/dist/backend/backend/src/services/marketplace/marketplace-submission.service.js.map +1 -0
- package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts +4 -15
- package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js +172 -27
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -1
- package/dist/backend/backend/src/services/mcp-client.d.ts +233 -0
- package/dist/backend/backend/src/services/mcp-client.d.ts.map +1 -0
- package/dist/backend/backend/src/services/mcp-client.js +297 -0
- package/dist/backend/backend/src/services/mcp-client.js.map +1 -0
- package/dist/backend/backend/src/services/mcp-server.d.ts +167 -0
- package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -0
- package/dist/backend/backend/src/services/mcp-server.js +586 -0
- package/dist/backend/backend/src/services/mcp-server.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts +32 -2
- package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/message-queue.service.js +85 -4
- package/dist/backend/backend/src/services/messaging/message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +10 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +129 -41
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +31 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
- package/dist/backend/backend/src/services/quality/index.d.ts +1 -0
- package/dist/backend/backend/src/services/quality/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/quality/index.js +1 -0
- package/dist/backend/backend/src/services/quality/index.js.map +1 -1
- package/dist/backend/backend/src/services/quality/task-output-validator.service.d.ts +84 -0
- package/dist/backend/backend/src/services/quality/task-output-validator.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/quality/task-output-validator.service.js +163 -0
- package/dist/backend/backend/src/services/quality/task-output-validator.service.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-adapter.d.ts +254 -0
- package/dist/backend/backend/src/services/runtime-adapter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-adapter.js +201 -0
- package/dist/backend/backend/src/services/runtime-adapter.js.map +1 -0
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +19 -0
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +31 -2
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-backend.interface.d.ts +14 -0
- package/dist/backend/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-backend.interface.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts +9 -0
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.js +24 -1
- package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts +7 -13
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js +38 -47
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill.service.d.ts +3 -0
- package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill.service.js +17 -0
- package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts +2 -2
- package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.js +2 -0
- package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +1 -0
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js +2 -0
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/types/marketplace.types.d.ts +37 -0
- package/dist/backend/backend/src/types/marketplace.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/messaging.types.d.ts +9 -6
- package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/messaging.types.js +10 -3
- package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
- package/dist/backend/backend/src/types/task-output.types.d.ts +78 -0
- package/dist/backend/backend/src/types/task-output.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/task-output.types.js +27 -0
- package/dist/backend/backend/src/types/task-output.types.js.map +1 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +13 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/terminal.gateway.js +12 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
- package/dist/backend/config/constants.d.ts +41 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +57 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/backend/config/index.d.ts +2 -2
- package/dist/backend/config/index.d.ts.map +1 -1
- package/dist/backend/config/index.js +2 -2
- package/dist/backend/config/index.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +817 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -0
- package/dist/cli/backend/src/constants.js +603 -0
- package/dist/cli/backend/src/constants.js.map +1 -0
- package/dist/cli/backend/src/models/Project.d.ts +18 -0
- package/dist/cli/backend/src/models/Project.d.ts.map +1 -0
- package/dist/cli/backend/src/models/Project.js +70 -0
- package/dist/cli/backend/src/models/Project.js.map +1 -0
- package/dist/cli/backend/src/models/ScheduledMessage.d.ts +27 -0
- package/dist/cli/backend/src/models/ScheduledMessage.d.ts.map +1 -0
- package/dist/cli/backend/src/models/ScheduledMessage.js +50 -0
- package/dist/cli/backend/src/models/ScheduledMessage.js.map +1 -0
- package/dist/cli/backend/src/models/Team.d.ts +20 -0
- package/dist/cli/backend/src/models/Team.d.ts.map +1 -0
- package/dist/cli/backend/src/models/Team.js +120 -0
- package/dist/cli/backend/src/models/Team.js.map +1 -0
- package/dist/cli/backend/src/models/Ticket.d.ts +24 -0
- package/dist/cli/backend/src/models/Ticket.d.ts.map +1 -0
- package/dist/cli/backend/src/models/Ticket.js +102 -0
- package/dist/cli/backend/src/models/Ticket.js.map +1 -0
- package/dist/cli/backend/src/models/index.d.ts +5 -0
- package/dist/cli/backend/src/models/index.d.ts.map +1 -0
- package/dist/cli/backend/src/models/index.js +5 -0
- package/dist/cli/backend/src/models/index.js.map +1 -0
- package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.d.ts +40 -0
- package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -0
- package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.js +74 -0
- package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -0
- package/dist/cli/backend/src/services/core/config.service.d.ts +91 -0
- package/dist/cli/backend/src/services/core/config.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/config.service.js +246 -0
- package/dist/cli/backend/src/services/core/config.service.js.map +1 -0
- package/dist/cli/backend/src/services/core/logger.service.d.ts +70 -0
- package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/logger.service.js +350 -0
- package/dist/cli/backend/src/services/core/logger.service.js.map +1 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts +269 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/storage.service.js +1406 -0
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -0
- package/dist/cli/backend/src/services/core/teams-backup.service.d.ts +92 -0
- package/dist/cli/backend/src/services/core/teams-backup.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/teams-backup.service.js +120 -0
- package/dist/cli/backend/src/services/core/teams-backup.service.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +125 -0
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +247 -0
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts +153 -0
- package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/knowledge/knowledge.service.js +409 -0
- package/dist/cli/backend/src/services/knowledge/knowledge.service.js.map +1 -0
- package/dist/cli/backend/src/services/mcp-server.d.ts +167 -0
- package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -0
- package/dist/cli/backend/src/services/mcp-server.js +586 -0
- package/dist/cli/backend/src/services/mcp-server.js.map +1 -0
- package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts +259 -0
- package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/agent-memory.service.js +539 -0
- package/dist/cli/backend/src/services/memory/agent-memory.service.js.map +1 -0
- package/dist/cli/backend/src/services/memory/memory.service.d.ts +306 -0
- package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/memory.service.js +517 -0
- package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -0
- package/dist/cli/backend/src/services/memory/project-memory.service.d.ts +252 -0
- package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/project-memory.service.js +600 -0
- package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -0
- package/dist/cli/backend/src/types/auto-assign.types.d.ts +271 -0
- package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/auto-assign.types.js +136 -0
- package/dist/cli/backend/src/types/auto-assign.types.js.map +1 -0
- package/dist/cli/backend/src/types/budget.types.d.ts +217 -0
- package/dist/cli/backend/src/types/budget.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/budget.types.js +82 -0
- package/dist/cli/backend/src/types/budget.types.js.map +1 -0
- package/dist/cli/backend/src/types/chat.types.d.ts +550 -0
- package/dist/cli/backend/src/types/chat.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/chat.types.js +743 -0
- package/dist/cli/backend/src/types/chat.types.js.map +1 -0
- package/dist/cli/backend/src/types/continuation.types.d.ts +237 -0
- package/dist/cli/backend/src/types/continuation.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/continuation.types.js +10 -0
- package/dist/cli/backend/src/types/continuation.types.js.map +1 -0
- package/dist/cli/backend/src/types/index.d.ts +164 -0
- package/dist/cli/backend/src/types/index.d.ts.map +1 -0
- package/dist/cli/backend/src/types/index.js +25 -0
- package/dist/cli/backend/src/types/index.js.map +1 -0
- package/dist/cli/backend/src/types/knowledge.types.d.ts +195 -0
- package/dist/cli/backend/src/types/knowledge.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/knowledge.types.js +38 -0
- package/dist/cli/backend/src/types/knowledge.types.js.map +1 -0
- package/dist/cli/backend/src/types/memory.types.d.ts +587 -0
- package/dist/cli/backend/src/types/memory.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/memory.types.js +47 -0
- package/dist/cli/backend/src/types/memory.types.js.map +1 -0
- package/dist/cli/backend/src/types/quality-gate.types.d.ts +171 -0
- package/dist/cli/backend/src/types/quality-gate.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/quality-gate.types.js +42 -0
- package/dist/cli/backend/src/types/quality-gate.types.js.map +1 -0
- package/dist/cli/backend/src/types/role.types.d.ts +260 -0
- package/dist/cli/backend/src/types/role.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/role.types.js +238 -0
- package/dist/cli/backend/src/types/role.types.js.map +1 -0
- package/dist/cli/backend/src/types/scheduler.types.d.ts +254 -0
- package/dist/cli/backend/src/types/scheduler.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/scheduler.types.js +32 -0
- package/dist/cli/backend/src/types/scheduler.types.js.map +1 -0
- package/dist/cli/backend/src/types/settings.types.d.ts +178 -0
- package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/settings.types.js +206 -0
- package/dist/cli/backend/src/types/settings.types.js.map +1 -0
- package/dist/cli/backend/src/types/skill.types.d.ts +515 -0
- package/dist/cli/backend/src/types/skill.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/skill.types.js +481 -0
- package/dist/cli/backend/src/types/skill.types.js.map +1 -0
- package/dist/cli/backend/src/types/sop.types.d.ts +224 -0
- package/dist/cli/backend/src/types/sop.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/sop.types.js +85 -0
- package/dist/cli/backend/src/types/sop.types.js.map +1 -0
- package/dist/cli/backend/src/types/task-output.types.d.ts +78 -0
- package/dist/cli/backend/src/types/task-output.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/task-output.types.js +27 -0
- package/dist/cli/backend/src/types/task-output.types.js.map +1 -0
- package/dist/cli/backend/src/utils/file-io.utils.d.ts +102 -0
- package/dist/cli/backend/src/utils/file-io.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/file-io.utils.js +214 -0
- package/dist/cli/backend/src/utils/file-io.utils.js.map +1 -0
- package/dist/cli/backend/src/utils/terminal-output.utils.d.ts +54 -0
- package/dist/cli/backend/src/utils/terminal-output.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/terminal-output.utils.js +97 -0
- package/dist/cli/backend/src/utils/terminal-output.utils.js.map +1 -0
- package/dist/cli/cli/src/commands/mcp-server.d.ts +38 -0
- package/dist/cli/cli/src/commands/mcp-server.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/mcp-server.js +49 -0
- package/dist/cli/cli/src/commands/mcp-server.js.map +1 -0
- package/dist/cli/cli/src/commands/onboard.d.ts +72 -8
- package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/onboard.js +306 -33
- package/dist/cli/cli/src/commands/onboard.js.map +1 -1
- package/dist/cli/cli/src/commands/publish.d.ts +35 -0
- package/dist/cli/cli/src/commands/publish.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/publish.js +93 -0
- package/dist/cli/cli/src/commands/publish.js.map +1 -0
- package/dist/cli/cli/src/commands/seed-marketplace.d.ts +28 -0
- package/dist/cli/cli/src/commands/seed-marketplace.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/seed-marketplace.js +148 -0
- package/dist/cli/cli/src/commands/seed-marketplace.js.map +1 -0
- package/dist/cli/cli/src/index.js +23 -0
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/cli/src/utils/archive-creator.d.ts +82 -0
- package/dist/cli/cli/src/utils/archive-creator.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/archive-creator.js +105 -0
- package/dist/cli/cli/src/utils/archive-creator.js.map +1 -0
- package/dist/cli/cli/src/utils/marketplace.d.ts +17 -4
- package/dist/cli/cli/src/utils/marketplace.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/marketplace.js +172 -58
- package/dist/cli/cli/src/utils/marketplace.js.map +1 -1
- package/dist/cli/cli/src/utils/package-validator.d.ts +62 -0
- package/dist/cli/cli/src/utils/package-validator.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/package-validator.js +122 -0
- package/dist/cli/cli/src/utils/package-validator.js.map +1 -0
- package/dist/cli/cli/src/utils/templates.d.ts +71 -0
- package/dist/cli/cli/src/utils/templates.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/templates.js +91 -0
- package/dist/cli/cli/src/utils/templates.js.map +1 -0
- package/dist/cli/config/constants.d.ts +41 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +57 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/index.d.ts +2 -2
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +2 -2
- package/dist/cli/config/index.js.map +1 -1
- package/frontend/dist/assets/{index-523c7fce.js → index-0a245b0d.js} +247 -247
- package/frontend/dist/assets/{index-4c050f52.css → index-6972eeee.css} +1 -1
- package/frontend/dist/assets/nunito-cyrillic-400-normal-e44e669f.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-400-normal-ff8e8bdd.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-500-normal-2159679b.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-500-normal-61a3b80e.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-600-normal-ac046097.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-600-normal-e61eb97b.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-700-normal-8fcefcc9.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-700-normal-b9684104.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-800-normal-40253beb.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-800-normal-d80292de.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-400-normal-20d73ae7.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-400-normal-d48c37c9.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-500-normal-16197abd.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-500-normal-9dcfe9b5.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-600-normal-d53e9851.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-600-normal-e3d0201f.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-700-normal-5936f6ac.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-700-normal-c8c02775.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-800-normal-217b8f51.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-800-normal-796cf7bd.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-400-normal-a5906e15.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-400-normal-b51e7635.woff +0 -0
- package/frontend/dist/assets/nunito-latin-500-normal-23ae3083.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-500-normal-be14dbc6.woff +0 -0
- package/frontend/dist/assets/nunito-latin-600-normal-06a9c8b3.woff +0 -0
- package/frontend/dist/assets/nunito-latin-600-normal-45f437de.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-700-normal-ce9107dc.woff +0 -0
- package/frontend/dist/assets/nunito-latin-700-normal-fa89300b.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-800-normal-0ca02785.woff +0 -0
- package/frontend/dist/assets/nunito-latin-800-normal-2363d3ed.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-ext-400-normal-67250a41.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-ext-400-normal-d7e2415e.woff +0 -0
- package/frontend/dist/assets/nunito-latin-ext-500-normal-06f35d1c.woff +0 -0
- package/frontend/dist/assets/nunito-latin-ext-500-normal-343e7adc.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-ext-600-normal-5a8efd17.woff +0 -0
- package/frontend/dist/assets/nunito-latin-ext-600-normal-a7ba5f4f.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-ext-700-normal-0a4e4a02.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-ext-700-normal-0c607961.woff +0 -0
- package/frontend/dist/assets/nunito-latin-ext-800-normal-39f54b55.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-ext-800-normal-466d0211.woff +0 -0
- package/frontend/dist/assets/nunito-vietnamese-400-normal-2a755616.woff2 +0 -0
- package/frontend/dist/assets/nunito-vietnamese-400-normal-9c01ea9f.woff +0 -0
- package/frontend/dist/assets/nunito-vietnamese-500-normal-452e5e08.woff +0 -0
- package/frontend/dist/assets/nunito-vietnamese-500-normal-dc98d965.woff2 +0 -0
- package/frontend/dist/assets/nunito-vietnamese-600-normal-2ffbb85f.woff +0 -0
- package/frontend/dist/assets/nunito-vietnamese-600-normal-cf95b95d.woff2 +0 -0
- package/frontend/dist/assets/nunito-vietnamese-700-normal-0e29c28c.woff2 +0 -0
- package/frontend/dist/assets/nunito-vietnamese-700-normal-7793b75e.woff +0 -0
- package/frontend/dist/assets/nunito-vietnamese-800-normal-5baf507e.woff +0 -0
- package/frontend/dist/assets/nunito-vietnamese-800-normal-fac6740e.woff2 +0 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +16 -6
- package/config/skills/chrome-browser/instructions.md +0 -42
- package/config/skills/chrome-browser/skill.json +0 -39
- package/config/skills/nano-banana-image/generate.sh +0 -73
- package/config/skills/nano-banana-image/instructions.md +0 -50
- package/config/skills/nano-banana-image/skill.json +0 -39
- package/config/skills/playwright-chrome-browser/instructions.md +0 -95
- package/config/skills/playwright-chrome-browser/skill.json +0 -44
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { existsSync } from 'fs';
|
|
4
|
+
import { ConfigService } from './config.service.js';
|
|
5
|
+
export class LoggerService {
|
|
6
|
+
static instance;
|
|
7
|
+
config;
|
|
8
|
+
logQueue = [];
|
|
9
|
+
flushTimer = null;
|
|
10
|
+
isShuttingDown = false;
|
|
11
|
+
LOG_LEVELS = {
|
|
12
|
+
error: 0,
|
|
13
|
+
warn: 1,
|
|
14
|
+
info: 2,
|
|
15
|
+
debug: 3
|
|
16
|
+
};
|
|
17
|
+
constructor() {
|
|
18
|
+
this.config = ConfigService.getInstance();
|
|
19
|
+
this.initializeLogDirectory();
|
|
20
|
+
this.startLogFlusher();
|
|
21
|
+
this.setupProcessHandlers();
|
|
22
|
+
}
|
|
23
|
+
static getInstance() {
|
|
24
|
+
if (!LoggerService.instance) {
|
|
25
|
+
LoggerService.instance = new LoggerService();
|
|
26
|
+
}
|
|
27
|
+
return LoggerService.instance;
|
|
28
|
+
}
|
|
29
|
+
async initializeLogDirectory() {
|
|
30
|
+
if (!this.config.get('logging').enableFileLogging)
|
|
31
|
+
return;
|
|
32
|
+
const logDir = this.config.get('logging').logDir;
|
|
33
|
+
try {
|
|
34
|
+
if (!existsSync(logDir)) {
|
|
35
|
+
await fs.mkdir(logDir, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.error('Failed to create log directory:', error);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
startLogFlusher() {
|
|
43
|
+
this.flushTimer = setInterval(() => {
|
|
44
|
+
this.flushLogs();
|
|
45
|
+
}, 5000); // Flush every 5 seconds
|
|
46
|
+
}
|
|
47
|
+
setupProcessHandlers() {
|
|
48
|
+
process.on('exit', () => {
|
|
49
|
+
this.shutdown();
|
|
50
|
+
});
|
|
51
|
+
process.on('SIGINT', () => {
|
|
52
|
+
this.shutdown();
|
|
53
|
+
});
|
|
54
|
+
process.on('SIGTERM', () => {
|
|
55
|
+
this.shutdown();
|
|
56
|
+
});
|
|
57
|
+
process.on('uncaughtException', (error) => {
|
|
58
|
+
this.error('Uncaught exception', { error: error.message, stack: error.stack });
|
|
59
|
+
this.flushLogs();
|
|
60
|
+
});
|
|
61
|
+
process.on('unhandledRejection', (reason, promise) => {
|
|
62
|
+
this.error('Unhandled promise rejection', {
|
|
63
|
+
reason: reason instanceof Error ? reason.message : String(reason),
|
|
64
|
+
stack: reason instanceof Error ? reason.stack : undefined,
|
|
65
|
+
promise: String(promise)
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
shouldLog(level) {
|
|
70
|
+
const configLevel = this.config.get('logging').level;
|
|
71
|
+
return this.LOG_LEVELS[level] <= this.LOG_LEVELS[configLevel];
|
|
72
|
+
}
|
|
73
|
+
formatLogEntry(entry) {
|
|
74
|
+
const logConfig = this.config.get('logging');
|
|
75
|
+
if (logConfig.format === 'json') {
|
|
76
|
+
return JSON.stringify(entry);
|
|
77
|
+
}
|
|
78
|
+
// Simple format
|
|
79
|
+
const timestamp = entry.timestamp;
|
|
80
|
+
const level = entry.level.toUpperCase().padEnd(5);
|
|
81
|
+
const component = entry.component ? `[${entry.component}]` : '';
|
|
82
|
+
const requestId = entry.requestId ? `[${entry.requestId}]` : '';
|
|
83
|
+
let logLine = `${timestamp} ${level} ${component}${requestId} ${entry.message}`;
|
|
84
|
+
if (entry.context && Object.keys(entry.context).length > 0) {
|
|
85
|
+
try {
|
|
86
|
+
logLine += ` | Context: ${JSON.stringify(entry.context)}`;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
logLine += ` | Context: [Circular/Unserializable]`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (entry.stack) {
|
|
93
|
+
logLine += `\n${entry.stack}`;
|
|
94
|
+
}
|
|
95
|
+
return logLine;
|
|
96
|
+
}
|
|
97
|
+
async writeToFile(entry) {
|
|
98
|
+
const logConfig = this.config.get('logging');
|
|
99
|
+
if (!logConfig.enableFileLogging)
|
|
100
|
+
return;
|
|
101
|
+
try {
|
|
102
|
+
const logDir = logConfig.logDir;
|
|
103
|
+
const date = new Date().toISOString().split('T')[0];
|
|
104
|
+
const filename = `crewly-${date}.log`;
|
|
105
|
+
const logPath = path.join(logDir, filename);
|
|
106
|
+
const formattedEntry = this.formatLogEntry(entry) + '\n';
|
|
107
|
+
await fs.appendFile(logPath, formattedEntry, 'utf-8');
|
|
108
|
+
// Check if we need to rotate logs
|
|
109
|
+
await this.rotateLogs();
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
console.error('Failed to write to log file:', error);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async rotateLogs() {
|
|
116
|
+
const logConfig = this.config.get('logging');
|
|
117
|
+
const logDir = logConfig.logDir;
|
|
118
|
+
try {
|
|
119
|
+
const files = await fs.readdir(logDir);
|
|
120
|
+
const logFiles = files
|
|
121
|
+
.filter(file => file.startsWith('crewly-') && file.endsWith('.log'))
|
|
122
|
+
.sort()
|
|
123
|
+
.reverse();
|
|
124
|
+
if (logFiles.length > logConfig.maxFiles) {
|
|
125
|
+
const filesToDelete = logFiles.slice(logConfig.maxFiles);
|
|
126
|
+
for (const file of filesToDelete) {
|
|
127
|
+
await fs.unlink(path.join(logDir, file));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
console.error('Failed to rotate logs:', error);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
log(level, message, context, options) {
|
|
136
|
+
if (!this.shouldLog(level))
|
|
137
|
+
return;
|
|
138
|
+
const entry = {
|
|
139
|
+
timestamp: new Date().toISOString(),
|
|
140
|
+
level,
|
|
141
|
+
message,
|
|
142
|
+
context,
|
|
143
|
+
component: options?.component,
|
|
144
|
+
requestId: options?.requestId,
|
|
145
|
+
userId: options?.userId
|
|
146
|
+
};
|
|
147
|
+
// Add stack trace for errors
|
|
148
|
+
if (level === 'error' && context?.error instanceof Error) {
|
|
149
|
+
entry.stack = context.error.stack;
|
|
150
|
+
}
|
|
151
|
+
// Console output (always enabled)
|
|
152
|
+
this.writeToConsole(entry);
|
|
153
|
+
// Queue for file logging
|
|
154
|
+
if (this.config.get('logging').enableFileLogging) {
|
|
155
|
+
this.logQueue.push(entry);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
writeToConsole(entry) {
|
|
159
|
+
const formatted = this.formatLogEntry(entry);
|
|
160
|
+
switch (entry.level) {
|
|
161
|
+
case 'error':
|
|
162
|
+
console.error(formatted);
|
|
163
|
+
break;
|
|
164
|
+
case 'warn':
|
|
165
|
+
console.warn(formatted);
|
|
166
|
+
break;
|
|
167
|
+
case 'info':
|
|
168
|
+
console.info(formatted);
|
|
169
|
+
break;
|
|
170
|
+
case 'debug':
|
|
171
|
+
console.debug(formatted);
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async flushLogs() {
|
|
176
|
+
if (this.logQueue.length === 0)
|
|
177
|
+
return;
|
|
178
|
+
const logsToFlush = [...this.logQueue];
|
|
179
|
+
this.logQueue = [];
|
|
180
|
+
for (const entry of logsToFlush) {
|
|
181
|
+
await this.writeToFile(entry);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Public logging methods
|
|
185
|
+
error(message, context, options) {
|
|
186
|
+
this.log('error', message, context, options);
|
|
187
|
+
}
|
|
188
|
+
warn(message, context, options) {
|
|
189
|
+
this.log('warn', message, context, options);
|
|
190
|
+
}
|
|
191
|
+
info(message, context, options) {
|
|
192
|
+
this.log('info', message, context, options);
|
|
193
|
+
}
|
|
194
|
+
debug(message, context, options) {
|
|
195
|
+
this.log('debug', message, context, options);
|
|
196
|
+
}
|
|
197
|
+
// Convenience methods for common scenarios
|
|
198
|
+
logHttpRequest(method, url, statusCode, duration, options) {
|
|
199
|
+
this.info('HTTP Request', {
|
|
200
|
+
method,
|
|
201
|
+
url,
|
|
202
|
+
statusCode,
|
|
203
|
+
duration,
|
|
204
|
+
type: 'http_request'
|
|
205
|
+
}, options);
|
|
206
|
+
}
|
|
207
|
+
logHttpError(method, url, statusCode, error, options) {
|
|
208
|
+
this.error('HTTP Error', {
|
|
209
|
+
method,
|
|
210
|
+
url,
|
|
211
|
+
statusCode,
|
|
212
|
+
error,
|
|
213
|
+
type: 'http_error'
|
|
214
|
+
}, options);
|
|
215
|
+
}
|
|
216
|
+
logAgentAction(agentId, action, success, details, options) {
|
|
217
|
+
const level = success ? 'info' : 'warn';
|
|
218
|
+
this.log(level, `Agent Action: ${action}`, {
|
|
219
|
+
agentId,
|
|
220
|
+
action,
|
|
221
|
+
success,
|
|
222
|
+
...details,
|
|
223
|
+
type: 'agent_action'
|
|
224
|
+
}, options);
|
|
225
|
+
}
|
|
226
|
+
logSystemMetric(metric, value, unit, options) {
|
|
227
|
+
this.info('System Metric', {
|
|
228
|
+
metric,
|
|
229
|
+
value,
|
|
230
|
+
unit,
|
|
231
|
+
type: 'system_metric'
|
|
232
|
+
}, options);
|
|
233
|
+
}
|
|
234
|
+
logSecurityEvent(event, details, options) {
|
|
235
|
+
this.warn('Security Event', {
|
|
236
|
+
event,
|
|
237
|
+
...details,
|
|
238
|
+
type: 'security_event'
|
|
239
|
+
}, options);
|
|
240
|
+
}
|
|
241
|
+
logDatabaseOperation(operation, table, duration, success, options) {
|
|
242
|
+
const level = success ? 'debug' : 'error';
|
|
243
|
+
this.log(level, 'Database Operation', {
|
|
244
|
+
operation,
|
|
245
|
+
table,
|
|
246
|
+
duration,
|
|
247
|
+
success,
|
|
248
|
+
type: 'database_operation'
|
|
249
|
+
}, options);
|
|
250
|
+
}
|
|
251
|
+
// Create scoped logger for a specific component
|
|
252
|
+
createComponentLogger(component) {
|
|
253
|
+
return new ComponentLogger(this, component);
|
|
254
|
+
}
|
|
255
|
+
// Create scoped logger for a specific request
|
|
256
|
+
createRequestLogger(requestId, userId) {
|
|
257
|
+
return new RequestLogger(this, requestId, userId);
|
|
258
|
+
}
|
|
259
|
+
// Get recent logs
|
|
260
|
+
async getRecentLogs(level, limit = 100) {
|
|
261
|
+
const logConfig = this.config.get('logging');
|
|
262
|
+
if (!logConfig.enableFileLogging) {
|
|
263
|
+
return [];
|
|
264
|
+
}
|
|
265
|
+
try {
|
|
266
|
+
const logDir = logConfig.logDir;
|
|
267
|
+
const today = new Date().toISOString().split('T')[0];
|
|
268
|
+
const logPath = path.join(logDir, `crewly-${today}.log`);
|
|
269
|
+
if (!existsSync(logPath)) {
|
|
270
|
+
return [];
|
|
271
|
+
}
|
|
272
|
+
const content = await fs.readFile(logPath, 'utf-8');
|
|
273
|
+
const lines = content.trim().split('\n');
|
|
274
|
+
const entries = [];
|
|
275
|
+
for (const line of lines.slice(-limit)) {
|
|
276
|
+
try {
|
|
277
|
+
if (logConfig.format === 'json') {
|
|
278
|
+
const entry = JSON.parse(line);
|
|
279
|
+
if (!level || entry.level === level) {
|
|
280
|
+
entries.push(entry);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
// Skip invalid JSON lines
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return entries;
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
this.error('Failed to read recent logs', { error: error instanceof Error ? error.message : String(error) });
|
|
292
|
+
return [];
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
shutdown() {
|
|
296
|
+
if (this.isShuttingDown)
|
|
297
|
+
return;
|
|
298
|
+
this.isShuttingDown = true;
|
|
299
|
+
if (this.flushTimer) {
|
|
300
|
+
clearInterval(this.flushTimer);
|
|
301
|
+
}
|
|
302
|
+
// Flush any remaining logs synchronously
|
|
303
|
+
this.flushLogs();
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
// Component-scoped logger
|
|
307
|
+
export class ComponentLogger {
|
|
308
|
+
logger;
|
|
309
|
+
component;
|
|
310
|
+
constructor(logger, component) {
|
|
311
|
+
this.logger = logger;
|
|
312
|
+
this.component = component;
|
|
313
|
+
}
|
|
314
|
+
error(message, context, options) {
|
|
315
|
+
this.logger.error(message, context, { ...options, component: this.component });
|
|
316
|
+
}
|
|
317
|
+
warn(message, context, options) {
|
|
318
|
+
this.logger.warn(message, context, { ...options, component: this.component });
|
|
319
|
+
}
|
|
320
|
+
info(message, context, options) {
|
|
321
|
+
this.logger.info(message, context, { ...options, component: this.component });
|
|
322
|
+
}
|
|
323
|
+
debug(message, context, options) {
|
|
324
|
+
this.logger.debug(message, context, { ...options, component: this.component });
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// Request-scoped logger
|
|
328
|
+
export class RequestLogger {
|
|
329
|
+
logger;
|
|
330
|
+
requestId;
|
|
331
|
+
userId;
|
|
332
|
+
constructor(logger, requestId, userId) {
|
|
333
|
+
this.logger = logger;
|
|
334
|
+
this.requestId = requestId;
|
|
335
|
+
this.userId = userId;
|
|
336
|
+
}
|
|
337
|
+
error(message, context, options) {
|
|
338
|
+
this.logger.error(message, context, { ...options, requestId: this.requestId, userId: this.userId });
|
|
339
|
+
}
|
|
340
|
+
warn(message, context, options) {
|
|
341
|
+
this.logger.warn(message, context, { ...options, requestId: this.requestId, userId: this.userId });
|
|
342
|
+
}
|
|
343
|
+
info(message, context, options) {
|
|
344
|
+
this.logger.info(message, context, { ...options, requestId: this.requestId, userId: this.userId });
|
|
345
|
+
}
|
|
346
|
+
debug(message, context, options) {
|
|
347
|
+
this.logger.debug(message, context, { ...options, requestId: this.requestId, userId: this.userId });
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=logger.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/core/logger.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { FSWatcher } from 'fs';
|
|
2
|
+
import { Team, TeamMember, Project, Ticket, TicketFilter, ScheduledCheck, ScheduledMessage, MessageDeliveryLog } from '../../types/index.js';
|
|
3
|
+
import { type AgentStatus, type WorkingStatus, type RuntimeType } from '../../constants.js';
|
|
4
|
+
export declare class StorageService {
|
|
5
|
+
private static instance;
|
|
6
|
+
private static instanceHome;
|
|
7
|
+
private crewlyHome;
|
|
8
|
+
/** @deprecated Use teamsDir instead - kept for migration */
|
|
9
|
+
private teamsFile;
|
|
10
|
+
/** Directory containing individual team files */
|
|
11
|
+
private teamsDir;
|
|
12
|
+
/** Orchestrator status file */
|
|
13
|
+
private orchestratorFile;
|
|
14
|
+
private projectsFile;
|
|
15
|
+
private runtimeFile;
|
|
16
|
+
private scheduledMessagesFile;
|
|
17
|
+
private deliveryLogsFile;
|
|
18
|
+
private recurringChecksFile;
|
|
19
|
+
private oneTimeChecksFile;
|
|
20
|
+
private logger;
|
|
21
|
+
/** Flag to track if migration has been performed */
|
|
22
|
+
private migrationDone;
|
|
23
|
+
/** Debounce timer for teams backup to avoid I/O storms */
|
|
24
|
+
private backupDebounceTimer;
|
|
25
|
+
private readonly BACKUP_DEBOUNCE_MS;
|
|
26
|
+
constructor(crewlyHome?: string);
|
|
27
|
+
/**
|
|
28
|
+
* Get singleton instance of StorageService to prevent multiple instances
|
|
29
|
+
* from interfering with each other's file operations
|
|
30
|
+
*/
|
|
31
|
+
static getInstance(crewlyHome?: string): StorageService;
|
|
32
|
+
/**
|
|
33
|
+
* Clear singleton instance (useful for testing)
|
|
34
|
+
*/
|
|
35
|
+
static clearInstance(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Ensures the crewly home and teams directories exist, creating them if necessary
|
|
38
|
+
*/
|
|
39
|
+
private ensureDirectories;
|
|
40
|
+
/**
|
|
41
|
+
* Get the directory path for a team.
|
|
42
|
+
*
|
|
43
|
+
* @param teamId - The team ID
|
|
44
|
+
* @returns Path to the team directory
|
|
45
|
+
*/
|
|
46
|
+
getTeamDir(teamId: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Get the prompts directory path for a team.
|
|
49
|
+
*
|
|
50
|
+
* @param teamId - The team ID
|
|
51
|
+
* @returns Path to the team's prompts directory
|
|
52
|
+
*/
|
|
53
|
+
getTeamPromptsDir(teamId: string): string;
|
|
54
|
+
/**
|
|
55
|
+
* Get the prompt file path for a team member.
|
|
56
|
+
*
|
|
57
|
+
* @param teamId - The team ID
|
|
58
|
+
* @param memberId - The member ID
|
|
59
|
+
* @returns Path to the member's prompt file
|
|
60
|
+
*/
|
|
61
|
+
getMemberPromptPath(teamId: string, memberId: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Get the orchestrator prompt file path.
|
|
64
|
+
*
|
|
65
|
+
* @returns Path to the orchestrator's prompt file
|
|
66
|
+
*/
|
|
67
|
+
getOrchestratorPromptPath(): string;
|
|
68
|
+
/**
|
|
69
|
+
* Migrate from old storage formats to new directory structure.
|
|
70
|
+
* Handles: teams.json -> teams/{team-id}/config.json
|
|
71
|
+
* teams/{team-id}.json -> teams/{team-id}/config.json
|
|
72
|
+
* teams/orchestrator.json -> teams/orchestrator/config.json
|
|
73
|
+
*/
|
|
74
|
+
private migrateFromLegacyTeamsFile;
|
|
75
|
+
/**
|
|
76
|
+
* Migrate flat team files (teams/{team-id}.json) to directory structure (teams/{team-id}/config.json).
|
|
77
|
+
*/
|
|
78
|
+
private migrateFlatTeamFiles;
|
|
79
|
+
/**
|
|
80
|
+
* Migrate a team to the new directory structure.
|
|
81
|
+
* Creates teams/{team-id}/config.json and teams/{team-id}/prompts/{member-id}.md
|
|
82
|
+
*/
|
|
83
|
+
private migrateTeamToDirectory;
|
|
84
|
+
/**
|
|
85
|
+
* Creates default orchestrator configuration object
|
|
86
|
+
* @returns Default orchestrator settings with inactive status
|
|
87
|
+
*/
|
|
88
|
+
private createDefaultOrchestrator;
|
|
89
|
+
/**
|
|
90
|
+
* Ensures a storage file exists and is valid JSON, creating or recovering it if needed
|
|
91
|
+
* @param filePath - Path to the storage file
|
|
92
|
+
* @param defaultContent - Default content to use if file needs to be created/recovered
|
|
93
|
+
*/
|
|
94
|
+
private ensureFile;
|
|
95
|
+
/**
|
|
96
|
+
* Get all teams from team directories.
|
|
97
|
+
* Each team is stored as teams/{teamId}/config.json for isolation.
|
|
98
|
+
*
|
|
99
|
+
* @returns Array of all teams
|
|
100
|
+
*/
|
|
101
|
+
getTeams(): Promise<Team[]>;
|
|
102
|
+
/**
|
|
103
|
+
* Save a team to its directory structure.
|
|
104
|
+
* Each team is stored as teams/{teamId}/config.json for isolation and resilience.
|
|
105
|
+
* Member prompts are saved to teams/{teamId}/prompts/{memberId}.md
|
|
106
|
+
*
|
|
107
|
+
* @param team - The team to save
|
|
108
|
+
*/
|
|
109
|
+
saveTeam(team: Team): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Save a member's prompt file.
|
|
112
|
+
*
|
|
113
|
+
* @param teamId - The team ID
|
|
114
|
+
* @param memberId - The member ID
|
|
115
|
+
* @param prompt - The prompt content
|
|
116
|
+
*/
|
|
117
|
+
saveMemberPrompt(teamId: string, memberId: string, prompt: string): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Get a member's prompt from file.
|
|
120
|
+
*
|
|
121
|
+
* @param teamId - The team ID
|
|
122
|
+
* @param memberId - The member ID
|
|
123
|
+
* @returns The prompt content or null if not found
|
|
124
|
+
*/
|
|
125
|
+
getMemberPrompt(teamId: string, memberId: string): Promise<string | null>;
|
|
126
|
+
/**
|
|
127
|
+
* Find a team member by their session name.
|
|
128
|
+
*
|
|
129
|
+
* @param sessionName - The session name to search for
|
|
130
|
+
* @returns Object with team and member, or null if not found
|
|
131
|
+
*/
|
|
132
|
+
findMemberBySessionName(sessionName: string): Promise<{
|
|
133
|
+
team: Team;
|
|
134
|
+
member: TeamMember;
|
|
135
|
+
} | null>;
|
|
136
|
+
/**
|
|
137
|
+
* Save the orchestrator's prompt file.
|
|
138
|
+
*
|
|
139
|
+
* @param prompt - The prompt content
|
|
140
|
+
*/
|
|
141
|
+
saveOrchestratorPrompt(prompt: string): Promise<void>;
|
|
142
|
+
/**
|
|
143
|
+
* Get the orchestrator's prompt from file.
|
|
144
|
+
*
|
|
145
|
+
* @returns The prompt content or null if not found
|
|
146
|
+
*/
|
|
147
|
+
getOrchestratorPrompt(): Promise<string | null>;
|
|
148
|
+
/**
|
|
149
|
+
* Delete a team by removing its directory.
|
|
150
|
+
*
|
|
151
|
+
* @param id - The team ID to delete
|
|
152
|
+
*/
|
|
153
|
+
deleteTeam(id: string): Promise<void>;
|
|
154
|
+
getProjects(): Promise<Project[]>;
|
|
155
|
+
addProject(projectPath: string): Promise<Project>;
|
|
156
|
+
saveProject(project: Project): Promise<void>;
|
|
157
|
+
deleteProject(id: string): Promise<void>;
|
|
158
|
+
getTickets(projectPath: string, filter?: TicketFilter): Promise<Ticket[]>;
|
|
159
|
+
saveTicket(projectPath: string, ticket: Ticket): Promise<void>;
|
|
160
|
+
deleteTicket(projectPath: string, ticketId: string): Promise<void>;
|
|
161
|
+
private parseTicketYAML;
|
|
162
|
+
watchProject(projectPath: string): FSWatcher;
|
|
163
|
+
getRuntimeState(): Promise<any>;
|
|
164
|
+
saveRuntimeState(state: any): Promise<void>;
|
|
165
|
+
/**
|
|
166
|
+
* Create template files for a new project
|
|
167
|
+
*/
|
|
168
|
+
private createProjectTemplateFiles;
|
|
169
|
+
getScheduledMessages(): Promise<ScheduledMessage[]>;
|
|
170
|
+
saveScheduledMessage(scheduledMessage: ScheduledMessage): Promise<void>;
|
|
171
|
+
getScheduledMessage(id: string): Promise<ScheduledMessage | undefined>;
|
|
172
|
+
deleteScheduledMessage(id: string): Promise<boolean>;
|
|
173
|
+
/**
|
|
174
|
+
* Get all persisted recurring checks.
|
|
175
|
+
*
|
|
176
|
+
* @returns Array of persisted ScheduledCheck entries
|
|
177
|
+
*/
|
|
178
|
+
getRecurringChecks(): Promise<ScheduledCheck[]>;
|
|
179
|
+
/**
|
|
180
|
+
* Save or update a recurring check entry on disk.
|
|
181
|
+
*
|
|
182
|
+
* @param check - The ScheduledCheck to persist
|
|
183
|
+
*/
|
|
184
|
+
saveRecurringCheck(check: ScheduledCheck): Promise<void>;
|
|
185
|
+
/**
|
|
186
|
+
* Delete a persisted recurring check by ID.
|
|
187
|
+
*
|
|
188
|
+
* @param id - The check ID to delete
|
|
189
|
+
* @returns true if the check was found and deleted
|
|
190
|
+
*/
|
|
191
|
+
deleteRecurringCheck(id: string): Promise<boolean>;
|
|
192
|
+
/**
|
|
193
|
+
* Clear all persisted recurring checks.
|
|
194
|
+
*/
|
|
195
|
+
clearRecurringChecks(): Promise<void>;
|
|
196
|
+
/**
|
|
197
|
+
* Get all persisted one-time checks.
|
|
198
|
+
*
|
|
199
|
+
* @returns Array of persisted ScheduledCheck entries
|
|
200
|
+
*/
|
|
201
|
+
getOneTimeChecks(): Promise<ScheduledCheck[]>;
|
|
202
|
+
/**
|
|
203
|
+
* Save or update a one-time check entry on disk.
|
|
204
|
+
*
|
|
205
|
+
* @param check - The ScheduledCheck to persist
|
|
206
|
+
*/
|
|
207
|
+
saveOneTimeCheck(check: ScheduledCheck): Promise<void>;
|
|
208
|
+
/**
|
|
209
|
+
* Delete a persisted one-time check by ID.
|
|
210
|
+
*
|
|
211
|
+
* @param id - The check ID to delete
|
|
212
|
+
* @returns true if the check was found and deleted
|
|
213
|
+
*/
|
|
214
|
+
deleteOneTimeCheck(id: string): Promise<boolean>;
|
|
215
|
+
/**
|
|
216
|
+
* Clear all persisted one-time checks.
|
|
217
|
+
*/
|
|
218
|
+
clearOneTimeChecks(): Promise<void>;
|
|
219
|
+
getDeliveryLogs(): Promise<MessageDeliveryLog[]>;
|
|
220
|
+
saveDeliveryLog(log: MessageDeliveryLog): Promise<void>;
|
|
221
|
+
clearDeliveryLogs(): Promise<void>;
|
|
222
|
+
/**
|
|
223
|
+
* Get orchestrator status from dedicated orchestrator.json file.
|
|
224
|
+
*
|
|
225
|
+
* @returns Orchestrator status object or null if not found
|
|
226
|
+
*/
|
|
227
|
+
getOrchestratorStatus(): Promise<{
|
|
228
|
+
sessionName: string;
|
|
229
|
+
agentStatus: AgentStatus;
|
|
230
|
+
workingStatus: WorkingStatus;
|
|
231
|
+
runtimeType: RuntimeType;
|
|
232
|
+
createdAt: string;
|
|
233
|
+
updatedAt: string;
|
|
234
|
+
} | null>;
|
|
235
|
+
/**
|
|
236
|
+
* Update agent status for orchestrator or any team member.
|
|
237
|
+
* Orchestrator status is stored in teams/orchestrator.json.
|
|
238
|
+
* Team member status is stored in the respective team's file.
|
|
239
|
+
*
|
|
240
|
+
* @param sessionName - Session name of the agent (CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME for orchestrator)
|
|
241
|
+
* @param status - New agent status (CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE | CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVATING | CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE)
|
|
242
|
+
*/
|
|
243
|
+
updateAgentStatus(sessionName: string, status: AgentStatus): Promise<void>;
|
|
244
|
+
/**
|
|
245
|
+
* Update team member runtime type
|
|
246
|
+
*/
|
|
247
|
+
updateTeamMemberRuntimeType(teamId: string, memberId: string, runtimeType: RuntimeType): Promise<void>;
|
|
248
|
+
/**
|
|
249
|
+
* Update orchestrator runtime type in teams/orchestrator.json.
|
|
250
|
+
*
|
|
251
|
+
* @param runtimeType - The runtime type to set
|
|
252
|
+
*/
|
|
253
|
+
updateOrchestratorRuntimeType(runtimeType: RuntimeType): Promise<void>;
|
|
254
|
+
/**
|
|
255
|
+
* Update the teams backup file asynchronously with debouncing.
|
|
256
|
+
*
|
|
257
|
+
* When many teams are saved in rapid succession (e.g. ActivityMonitor
|
|
258
|
+
* marking 14 stale agents), each saveTeam() call used to trigger a
|
|
259
|
+
* full getTeams() + backup, flooding the libuv thread pool with I/O
|
|
260
|
+
* and starving other requests. Debouncing collapses the burst into a
|
|
261
|
+
* single backup operation.
|
|
262
|
+
*/
|
|
263
|
+
private updateTeamsBackup;
|
|
264
|
+
/**
|
|
265
|
+
* @deprecated Use updateAgentStatus instead
|
|
266
|
+
*/
|
|
267
|
+
updateOrchestratorStatus(status: string): Promise<void>;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=storage.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/core/storage.service.ts"],"names":[],"mappings":"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"}
|