crewly 1.2.4 → 1.2.6
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/config/constants.ts +4 -2
- package/config/roles/auditor/prompt.md +84 -0
- package/config/roles/orchestrator/prompt.md +62 -7
- package/config/runtime_scripts/runtime-config.json +5 -5
- package/config/skills/orchestrator/cancel-all-schedules/execute.sh +24 -0
- package/config/skills/orchestrator/cancel-all-schedules/instructions.md +23 -0
- package/config/skills/orchestrator/cancel-all-schedules/skill.json +17 -0
- package/config/skills/orchestrator/list-schedules/execute.sh +19 -0
- package/config/skills/orchestrator/list-schedules/instructions.md +24 -0
- package/config/skills/orchestrator/list-schedules/skill.json +12 -0
- package/dist/backend/backend/src/constants.d.ts +53 -13
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +54 -16
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/auditor/auditor.controller.d.ts +37 -0
- package/dist/backend/backend/src/controllers/auditor/auditor.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/auditor/auditor.controller.js +64 -0
- package/dist/backend/backend/src/controllers/auditor/auditor.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/auditor/auditor.routes.d.ts +15 -0
- package/dist/backend/backend/src/controllers/auditor/auditor.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/auditor/auditor.routes.js +23 -0
- package/dist/backend/backend/src/controllers/auditor/auditor.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/admin/admin-auth.middleware.d.ts +23 -0
- package/dist/backend/backend/src/controllers/cloud/admin/admin-auth.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/admin/admin-auth.middleware.js +42 -0
- package/dist/backend/backend/src/controllers/cloud/admin/admin-auth.middleware.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/admin/admin.controller.d.ts +56 -0
- package/dist/backend/backend/src/controllers/cloud/admin/admin.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/admin/admin.controller.js +173 -0
- package/dist/backend/backend/src/controllers/cloud/admin/admin.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/admin/admin.routes.d.ts +22 -0
- package/dist/backend/backend/src/controllers/cloud/admin/admin.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/admin/admin.routes.js +33 -0
- package/dist/backend/backend/src/controllers/cloud/admin/admin.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/admin/index.d.ts +7 -0
- package/dist/backend/backend/src/controllers/cloud/admin/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/admin/index.js +7 -0
- package/dist/backend/backend/src/controllers/cloud/admin/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.d.ts +1 -1
- package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.js +5 -5
- package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.js +0 -3
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/index.d.ts +0 -5
- package/dist/backend/backend/src/controllers/cloud/index.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/index.js +0 -5
- package/dist/backend/backend/src/controllers/cloud/index.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/relay.controller.d.ts +6 -45
- package/dist/backend/backend/src/controllers/cloud/relay.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/relay.controller.js +6 -165
- package/dist/backend/backend/src/controllers/cloud/relay.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/relay.routes.d.ts +5 -9
- package/dist/backend/backend/src/controllers/cloud/relay.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/relay.routes.js +11 -21
- package/dist/backend/backend/src/controllers/cloud/relay.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/tasks/index.d.ts +5 -2
- package/dist/backend/backend/src/controllers/cloud/tasks/index.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/tasks/index.js +5 -2
- package/dist/backend/backend/src/controllers/cloud/tasks/index.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.d.ts +6 -2
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.js +12 -8
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +32 -4
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.controller.d.ts +16 -5
- package/dist/backend/backend/src/controllers/payment/payment.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.controller.js +6 -6
- package/dist/backend/backend/src/controllers/payment/payment.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.routes.d.ts +6 -2
- package/dist/backend/backend/src/controllers/payment/payment.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.routes.js +22 -8
- package/dist/backend/backend/src/controllers/payment/payment.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.types.d.ts +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.types.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.types.js +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.types.js.map +1 -1
- package/dist/backend/backend/src/controllers/request-types.d.ts +2 -2
- package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/scheduler.controller.d.ts +19 -0
- package/dist/backend/backend/src/controllers/system/scheduler.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/scheduler.controller.js +51 -0
- package/dist/backend/backend/src/controllers/system/scheduler.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +13 -5
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/template/template.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/template/template.controller.js +2 -2
- package/dist/backend/backend/src/controllers/template/template.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +31 -30
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +4 -12
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/routes/modules/log-rotation.routes.d.ts +8 -0
- package/dist/backend/backend/src/routes/modules/log-rotation.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/routes/modules/log-rotation.routes.js +62 -0
- package/dist/backend/backend/src/routes/modules/log-rotation.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/modules/scheduler.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/modules/scheduler.routes.js +2 -0
- package/dist/backend/backend/src/routes/modules/scheduler.routes.js.map +1 -1
- package/dist/backend/backend/src/scripts/run-log-rotation.d.ts +3 -0
- package/dist/backend/backend/src/scripts/run-log-rotation.d.ts.map +1 -0
- package/dist/backend/backend/src/scripts/run-log-rotation.js +31 -0
- package/dist/backend/backend/src/scripts/run-log-rotation.js.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +10 -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 +85 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts +150 -0
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +307 -0
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +105 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +199 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +68 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +131 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +29 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +229 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +127 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +242 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +95 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +130 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +14 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js +14 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +57 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +93 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +13 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +91 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +29 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +519 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +159 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js +63 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +56 -1
- 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 +273 -215
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-service.factory.js +8 -8
- package/dist/backend/backend/src/services/agent/runtime-service.factory.js.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.d.ts +7 -1
- package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.js +14 -5
- package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/admin-seed.service.d.ts +18 -0
- package/dist/backend/backend/src/services/cloud/admin-seed.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/admin-seed.service.js +50 -0
- package/dist/backend/backend/src/services/cloud/admin-seed.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-features.d.ts +19 -0
- package/dist/backend/backend/src/services/cloud/cloud-features.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-features.js +23 -0
- package/dist/backend/backend/src/services/cloud/cloud-features.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.d.ts +3 -3
- package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.js +10 -6
- package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/mongodb.service.d.ts +45 -0
- package/dist/backend/backend/src/services/cloud/mongodb.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/mongodb.service.js +76 -0
- package/dist/backend/backend/src/services/cloud/mongodb.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/relay-server.service.d.ts +0 -2
- package/dist/backend/backend/src/services/cloud/relay-server.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/relay-server.service.js +7 -36
- package/dist/backend/backend/src/services/cloud/relay-server.service.js.map +1 -1
- package/dist/backend/backend/src/services/continuation/continuation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/continuation/continuation.service.js +5 -10
- package/dist/backend/backend/src/services/continuation/continuation.service.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts +10 -2
- package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js +47 -12
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
- package/dist/backend/backend/src/services/mcp-server.js +1 -1
- package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
- 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 +1 -0
- 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.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +22 -4
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js +6 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -1
- package/dist/backend/backend/src/services/payment/stripe.service.d.ts +4 -43
- package/dist/backend/backend/src/services/payment/stripe.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/payment/stripe.service.js +56 -180
- package/dist/backend/backend/src/services/payment/stripe.service.js.map +1 -1
- package/dist/backend/backend/src/services/session/index.d.ts +2 -0
- package/dist/backend/backend/src/services/session/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/index.js +2 -0
- package/dist/backend/backend/src/services/session/index.js.map +1 -1
- package/dist/backend/backend/src/services/session/log-rotation.service.d.ts +163 -0
- package/dist/backend/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/log-rotation.service.js +362 -0
- package/dist/backend/backend/src/services/session/log-rotation.service.js.map +1 -0
- package/dist/backend/backend/src/services/settings/settings.service.js +1 -1
- package/dist/backend/backend/src/services/settings/settings.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +11 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +83 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.d.ts +9 -44
- package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.js +7 -80
- package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +35 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js +133 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/types/chat.types.d.ts +1 -1
- package/dist/backend/backend/src/types/chat.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/chat.types.js +21 -17
- package/dist/backend/backend/src/types/chat.types.js.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts +31 -0
- package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.js +50 -0
- package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +1 -1
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/messaging.types.d.ts +4 -0
- package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/settings.types.js +4 -4
- package/dist/backend/backend/src/types/settings.types.js.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.d.ts +2 -2
- package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.js +1 -1
- package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +4 -4
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/terminal.gateway.js +9 -6
- package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
- package/dist/backend/config/constants.d.ts +4 -2
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +4 -2
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +53 -13
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +54 -16
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/mcp-server.js +1 -1
- package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
- package/dist/cli/backend/src/types/chat.types.d.ts +1 -1
- package/dist/cli/backend/src/types/chat.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/chat.types.js +21 -17
- package/dist/cli/backend/src/types/chat.types.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +1 -1
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/settings.types.d.ts +1 -1
- package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/settings.types.js +4 -4
- package/dist/cli/backend/src/types/settings.types.js.map +1 -1
- package/dist/cli/config/constants.d.ts +4 -2
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +4 -2
- package/dist/cli/config/constants.js.map +1 -1
- package/frontend/dist/assets/index-3558d1a2.js +4919 -0
- package/frontend/dist/assets/index-4c4dcc31.css +33 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +15 -9
- package/frontend/dist/assets/index-510ab719.css +0 -33
- package/frontend/dist/assets/index-935cd846.js +0 -4961
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crewly Auditor Tool Registry
|
|
3
|
+
*
|
|
4
|
+
* Read-only tools for the Auditor agent. These tools allow the auditor
|
|
5
|
+
* to observe agent activity, read logs, check task alignment, and write
|
|
6
|
+
* structured bug reports — without any ability to modify system state.
|
|
7
|
+
*
|
|
8
|
+
* @module services/agent/crewly-agent/auditor-tools
|
|
9
|
+
*/
|
|
10
|
+
import { promises as fsPromises } from 'fs';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
/** Severity levels for audit findings */
|
|
14
|
+
const AUDIT_SEVERITIES = ['critical', 'high', 'medium', 'low'];
|
|
15
|
+
/**
|
|
16
|
+
* Create the auditor tool set for the Crewly Auditor agent.
|
|
17
|
+
*
|
|
18
|
+
* All tools are read-only except `write_audit_report` which appends
|
|
19
|
+
* to the audit log file.
|
|
20
|
+
*
|
|
21
|
+
* @param client - API client for Crewly REST API calls
|
|
22
|
+
* @param projectPath - Project root path for file operations
|
|
23
|
+
* @returns Object of named tools for the auditor agent
|
|
24
|
+
*/
|
|
25
|
+
export function createAuditorTools(client, projectPath) {
|
|
26
|
+
const auditDir = path.join(projectPath, '.crewly', 'audit');
|
|
27
|
+
const bugsFile = path.join(auditDir, 'bugs.md');
|
|
28
|
+
return {
|
|
29
|
+
get_team_status: {
|
|
30
|
+
description: 'Get status of all teams and their agents. Returns team names, member statuses, and runtime types.',
|
|
31
|
+
inputSchema: z.object({}),
|
|
32
|
+
execute: async () => {
|
|
33
|
+
const result = await client.get('/teams');
|
|
34
|
+
return result.success ? result.data : { error: result.error };
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
get_agent_logs: {
|
|
38
|
+
description: 'Get recent terminal output from an agent session. Use to inspect agent activity and detect errors.',
|
|
39
|
+
inputSchema: z.object({
|
|
40
|
+
sessionName: z.string().describe('Agent session name'),
|
|
41
|
+
lines: z.number().default(50).describe('Number of lines to retrieve'),
|
|
42
|
+
}),
|
|
43
|
+
execute: async (args) => {
|
|
44
|
+
const { sessionName, lines } = args;
|
|
45
|
+
const result = await client.get(`/terminal/${sessionName}/output?lines=${lines}`);
|
|
46
|
+
return result.success ? result.data : { error: result.error };
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
get_tasks: {
|
|
50
|
+
description: 'Get all tracked tasks for a project. Use to detect stale, failed, or orphaned tasks.',
|
|
51
|
+
inputSchema: z.object({
|
|
52
|
+
projectPath: z.string().describe('Project path'),
|
|
53
|
+
status: z.string().optional().describe('Filter by status (open, in_progress, done, failed)'),
|
|
54
|
+
}),
|
|
55
|
+
execute: async (args) => {
|
|
56
|
+
const { projectPath: pp, status } = args;
|
|
57
|
+
const query = status ? `?projectPath=${encodeURIComponent(pp)}&status=${status}` : `?projectPath=${encodeURIComponent(pp)}`;
|
|
58
|
+
const result = await client.get(`/task-management/tasks${query}`);
|
|
59
|
+
return result.success ? result.data : { error: result.error };
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
recall_goals: {
|
|
63
|
+
description: 'Retrieve current project goals, OKRs, and objectives from memory. Use to check goal alignment.',
|
|
64
|
+
inputSchema: z.object({
|
|
65
|
+
context: z.string().default('current project goals OKR objectives priorities').describe('Search context'),
|
|
66
|
+
}),
|
|
67
|
+
execute: async (args) => {
|
|
68
|
+
const { context } = args;
|
|
69
|
+
const result = await client.post('/memory/recall', {
|
|
70
|
+
context,
|
|
71
|
+
scope: 'project',
|
|
72
|
+
});
|
|
73
|
+
return result.success ? result.data : { error: result.error };
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
heartbeat: {
|
|
77
|
+
description: 'System health check. Returns teams, projects, and queue status in one call.',
|
|
78
|
+
inputSchema: z.object({}),
|
|
79
|
+
execute: async () => {
|
|
80
|
+
const [teams, projects] = await Promise.all([
|
|
81
|
+
client.get('/teams'),
|
|
82
|
+
client.get('/projects'),
|
|
83
|
+
]);
|
|
84
|
+
return {
|
|
85
|
+
teams: teams.success ? teams.data : { error: teams.error },
|
|
86
|
+
projects: projects.success ? projects.data : { error: projects.error },
|
|
87
|
+
timestamp: new Date().toISOString(),
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
get_agent_status: {
|
|
92
|
+
description: 'Get the current status of a specific agent by session name.',
|
|
93
|
+
inputSchema: z.object({
|
|
94
|
+
sessionName: z.string().describe('Agent session name to check'),
|
|
95
|
+
}),
|
|
96
|
+
execute: async (args) => {
|
|
97
|
+
const { sessionName } = args;
|
|
98
|
+
const result = await client.get('/teams');
|
|
99
|
+
if (!result.success)
|
|
100
|
+
return { error: result.error };
|
|
101
|
+
const teams = result.data;
|
|
102
|
+
for (const team of teams) {
|
|
103
|
+
const member = team.members?.find(m => m.sessionName === sessionName);
|
|
104
|
+
if (member)
|
|
105
|
+
return member;
|
|
106
|
+
}
|
|
107
|
+
return { error: `Agent '${sessionName}' not found` };
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
subscribe_event: {
|
|
111
|
+
description: 'Subscribe to agent lifecycle events for monitoring. Read-only observation.',
|
|
112
|
+
inputSchema: z.object({
|
|
113
|
+
eventType: z.string().describe('Event type (e.g., "agent:idle", "agent:busy", "agent:status_changed")'),
|
|
114
|
+
filter: z.record(z.string()).optional().describe('Event filter criteria'),
|
|
115
|
+
oneShot: z.boolean().default(false).describe('Auto-unsubscribe after first event'),
|
|
116
|
+
}),
|
|
117
|
+
execute: async (args) => {
|
|
118
|
+
const { eventType, filter, oneShot } = args;
|
|
119
|
+
const result = await client.post('/events/subscribe', {
|
|
120
|
+
eventType,
|
|
121
|
+
filter,
|
|
122
|
+
oneShot,
|
|
123
|
+
target: 'crewly-auditor',
|
|
124
|
+
});
|
|
125
|
+
return result.success ? result.data : { error: result.error };
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
write_audit_report: {
|
|
129
|
+
description: 'Append a structured audit finding to the bugs.md file. Use when you detect a problem.',
|
|
130
|
+
inputSchema: z.object({
|
|
131
|
+
severity: z.enum(AUDIT_SEVERITIES).describe('Problem severity level'),
|
|
132
|
+
agents: z.array(z.string()).describe('Session names of involved agents'),
|
|
133
|
+
title: z.string().describe('Short problem title'),
|
|
134
|
+
description: z.string().describe('Detailed problem description'),
|
|
135
|
+
evidence: z.string().describe('Log excerpts or data supporting the finding'),
|
|
136
|
+
suggestion: z.string().describe('Recommended fix or action'),
|
|
137
|
+
}),
|
|
138
|
+
execute: async (args) => {
|
|
139
|
+
const { severity, agents, title, description, evidence, suggestion } = args;
|
|
140
|
+
const timestamp = new Date().toISOString();
|
|
141
|
+
const severityIcon = severity === 'critical' ? '🔴' : severity === 'high' ? '🟠' : severity === 'medium' ? '🟡' : '🔵';
|
|
142
|
+
const entry = [
|
|
143
|
+
'',
|
|
144
|
+
`### ${severityIcon} [${severity.toUpperCase()}] ${title}`,
|
|
145
|
+
`**Time:** ${timestamp}`,
|
|
146
|
+
`**Agents:** ${agents.join(', ')}`,
|
|
147
|
+
'',
|
|
148
|
+
description,
|
|
149
|
+
'',
|
|
150
|
+
'**Evidence:**',
|
|
151
|
+
'```',
|
|
152
|
+
evidence,
|
|
153
|
+
'```',
|
|
154
|
+
'',
|
|
155
|
+
`**Suggestion:** ${suggestion}`,
|
|
156
|
+
'',
|
|
157
|
+
'---',
|
|
158
|
+
'',
|
|
159
|
+
].join('\n');
|
|
160
|
+
// Ensure audit directory exists
|
|
161
|
+
await fsPromises.mkdir(auditDir, { recursive: true });
|
|
162
|
+
// Append to bugs.md (create with header if new)
|
|
163
|
+
let existing = '';
|
|
164
|
+
try {
|
|
165
|
+
existing = await fsPromises.readFile(bugsFile, 'utf8');
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
existing = '# Crewly Audit — Bug Reports\n\nAutomated findings from the Crewly Auditor agent.\n\n---\n';
|
|
169
|
+
}
|
|
170
|
+
await fsPromises.writeFile(bugsFile, existing + entry, 'utf8');
|
|
171
|
+
return {
|
|
172
|
+
success: true,
|
|
173
|
+
file: bugsFile,
|
|
174
|
+
severity,
|
|
175
|
+
title,
|
|
176
|
+
timestamp,
|
|
177
|
+
};
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
reply_slack: {
|
|
181
|
+
description: 'Send a message directly to a Slack thread. Use this to respond to user questions when SLACK_CONTEXT is present. Supports Slack mrkdwn formatting.',
|
|
182
|
+
inputSchema: z.object({
|
|
183
|
+
text: z.string().describe('Message text in Slack mrkdwn format'),
|
|
184
|
+
channelId: z.string().describe('Slack channel ID from SLACK_CONTEXT'),
|
|
185
|
+
threadTs: z.string().describe('Slack thread timestamp from SLACK_CONTEXT'),
|
|
186
|
+
}),
|
|
187
|
+
execute: async (args) => {
|
|
188
|
+
const { text, channelId, threadTs } = args;
|
|
189
|
+
const result = await client.post('/slack/send', { channelId, text, threadTs });
|
|
190
|
+
return result.success ? { sent: true } : { error: result.error };
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
read_audit_history: {
|
|
194
|
+
description: 'Read previous audit findings from bugs.md. Use to avoid duplicate reports.',
|
|
195
|
+
inputSchema: z.object({
|
|
196
|
+
lastN: z.number().default(10).describe('Number of recent findings to return'),
|
|
197
|
+
}),
|
|
198
|
+
execute: async (args) => {
|
|
199
|
+
const { lastN } = args;
|
|
200
|
+
try {
|
|
201
|
+
const content = await fsPromises.readFile(bugsFile, 'utf8');
|
|
202
|
+
// Split on --- separator, take last N entries
|
|
203
|
+
const entries = content.split('---').filter(e => e.trim());
|
|
204
|
+
const recent = entries.slice(-lastN);
|
|
205
|
+
return {
|
|
206
|
+
totalFindings: entries.length - 1, // subtract header
|
|
207
|
+
recentFindings: recent.join('---'),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return { totalFindings: 0, recentFindings: 'No audit history found.' };
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Get the list of auditor tool names.
|
|
219
|
+
*
|
|
220
|
+
* @returns Array of auditor tool name strings
|
|
221
|
+
*/
|
|
222
|
+
export function getAuditorToolNames() {
|
|
223
|
+
return [
|
|
224
|
+
'get_team_status', 'get_agent_logs', 'get_tasks', 'recall_goals',
|
|
225
|
+
'heartbeat', 'get_agent_status', 'subscribe_event',
|
|
226
|
+
'write_audit_report', 'reply_slack', 'read_audit_history',
|
|
227
|
+
];
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=auditor-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auditor-tools.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/auditor-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crewly Agent Runtime Service
|
|
3
|
+
*
|
|
4
|
+
* Concrete RuntimeAgentService subclass for the in-process Crewly Agent.
|
|
5
|
+
* Unlike PTY-based runtimes (Claude Code, Gemini CLI), this runtime runs
|
|
6
|
+
* entirely inside the Node.js process using the Vercel AI SDK.
|
|
7
|
+
*
|
|
8
|
+
* No tmux session, no shell commands — messages are routed directly to
|
|
9
|
+
* the AgentRunnerService.handleMessage() method.
|
|
10
|
+
*
|
|
11
|
+
* @module services/agent/crewly-agent/crewly-agent-runtime.service
|
|
12
|
+
*/
|
|
13
|
+
import { RuntimeAgentService } from '../runtime-agent.service.abstract.js';
|
|
14
|
+
import { AgentRunnerService } from './agent-runner.service.js';
|
|
15
|
+
import { type RuntimeType } from '../../../constants.js';
|
|
16
|
+
import type { CrewlyAgentConfig, AgentRunResult } from './types.js';
|
|
17
|
+
import { SessionCommandHelper } from '../../session/index.js';
|
|
18
|
+
/**
|
|
19
|
+
* In-process Crewly Agent runtime powered by AI SDK generateText.
|
|
20
|
+
*
|
|
21
|
+
* Key differences from PTY-based runtimes:
|
|
22
|
+
* - No tmux session needed — runs in-process
|
|
23
|
+
* - Messages routed via handleMessage() instead of PTY write
|
|
24
|
+
* - System prompt loaded from config/roles/orchestrator/prompt.md
|
|
25
|
+
* - Ready immediately after initialization (no CLI startup wait)
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const runtime = new CrewlyAgentRuntimeService(sessionHelper, projectRoot);
|
|
30
|
+
* await runtime.initializeInProcess('crewly-orc');
|
|
31
|
+
* const result = await runtime.handleMessage('Check all team statuses');
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare class CrewlyAgentRuntimeService extends RuntimeAgentService {
|
|
35
|
+
private agentRunner;
|
|
36
|
+
private initialized;
|
|
37
|
+
private currentSessionName;
|
|
38
|
+
private logBuffer;
|
|
39
|
+
constructor(sessionHelper: SessionCommandHelper, projectRoot: string);
|
|
40
|
+
/**
|
|
41
|
+
* Get the runtime type identifier.
|
|
42
|
+
*
|
|
43
|
+
* @returns 'crewly-agent' runtime type constant
|
|
44
|
+
*/
|
|
45
|
+
protected getRuntimeType(): RuntimeType;
|
|
46
|
+
/**
|
|
47
|
+
* Detect if the Crewly Agent runtime is running.
|
|
48
|
+
* For in-process runtime, this checks if the AgentRunner is initialized.
|
|
49
|
+
*
|
|
50
|
+
* @param _sessionName - Session name (unused for in-process runtime)
|
|
51
|
+
* @returns True if the agent runner is initialized
|
|
52
|
+
*/
|
|
53
|
+
protected detectRuntimeSpecific(_sessionName: string): Promise<boolean>;
|
|
54
|
+
/**
|
|
55
|
+
* Get patterns that indicate the runtime is ready.
|
|
56
|
+
* For in-process runtime, there are no terminal patterns — readiness is checked programmatically.
|
|
57
|
+
*
|
|
58
|
+
* @returns Empty array (no terminal output to match)
|
|
59
|
+
*/
|
|
60
|
+
protected getRuntimeReadyPatterns(): string[];
|
|
61
|
+
/**
|
|
62
|
+
* Get patterns that indicate runtime errors.
|
|
63
|
+
*
|
|
64
|
+
* @returns Empty array (errors are thrown as exceptions, not terminal patterns)
|
|
65
|
+
*/
|
|
66
|
+
protected getRuntimeErrorPatterns(): string[];
|
|
67
|
+
/**
|
|
68
|
+
* Get patterns that indicate the runtime has exited.
|
|
69
|
+
*
|
|
70
|
+
* @returns Empty array (in-process runtime doesn't exit via terminal)
|
|
71
|
+
*/
|
|
72
|
+
protected getRuntimeExitPatterns(): RegExp[];
|
|
73
|
+
/**
|
|
74
|
+
* Initialize the in-process agent runtime.
|
|
75
|
+
*
|
|
76
|
+
* Loads the system prompt from config/roles/orchestrator/prompt.md,
|
|
77
|
+
* creates the AgentRunnerService, and initializes the model.
|
|
78
|
+
*
|
|
79
|
+
* @param sessionName - Session name for this agent instance
|
|
80
|
+
* @param config - Optional partial config overrides
|
|
81
|
+
* @param roleName - Role name for system prompt lookup (default: 'orchestrator')
|
|
82
|
+
*/
|
|
83
|
+
initializeInProcess(sessionName: string, config?: Partial<CrewlyAgentConfig>, roleName?: string): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Handle an incoming message by routing it to the AgentRunner.
|
|
86
|
+
*
|
|
87
|
+
* This is the primary entry point for message delivery, replacing
|
|
88
|
+
* the PTY write path used by other runtimes.
|
|
89
|
+
*
|
|
90
|
+
* @param message - The message to process
|
|
91
|
+
* @returns Agent run result with text response and tool call records
|
|
92
|
+
* @throws Error if the runtime is not initialized
|
|
93
|
+
*/
|
|
94
|
+
handleMessage(message: string): Promise<AgentRunResult>;
|
|
95
|
+
/**
|
|
96
|
+
* Check if the runtime is initialized and ready to handle messages.
|
|
97
|
+
*
|
|
98
|
+
* @returns True if initializeInProcess() has been called successfully
|
|
99
|
+
*/
|
|
100
|
+
isReady(): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Get the current agent runner instance (for inspection/testing).
|
|
103
|
+
*
|
|
104
|
+
* @returns The AgentRunnerService instance, or null if not initialized
|
|
105
|
+
*/
|
|
106
|
+
getAgentRunner(): AgentRunnerService | null;
|
|
107
|
+
/**
|
|
108
|
+
* Get the session name this runtime was initialized with.
|
|
109
|
+
*
|
|
110
|
+
* @returns Session name string, or null if not initialized
|
|
111
|
+
*/
|
|
112
|
+
getSessionName(): string | null;
|
|
113
|
+
/**
|
|
114
|
+
* Shut down the in-process runtime.
|
|
115
|
+
* Clears the agent runner and resets state.
|
|
116
|
+
*/
|
|
117
|
+
shutdown(): void;
|
|
118
|
+
/**
|
|
119
|
+
* Load the system prompt for a given role from file.
|
|
120
|
+
*
|
|
121
|
+
* @param roleName - Role name (maps to config/roles/{roleName}/prompt.md)
|
|
122
|
+
* @returns System prompt content
|
|
123
|
+
* @throws Error if the prompt file cannot be read
|
|
124
|
+
*/
|
|
125
|
+
private loadSystemPrompt;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=crewly-agent-runtime.service.d.ts.map
|
package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crewly-agent-runtime.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,yBAA0B,SAAQ,mBAAmB;IAChE,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,SAAS,CAAqB;gBAE1B,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM;IAOpE;;;;OAIG;IACH,SAAS,CAAC,cAAc,IAAI,WAAW;IAIvC;;;;;;OAMG;cACa,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7E;;;;;OAKG;IACH,SAAS,CAAC,uBAAuB,IAAI,MAAM,EAAE;IAI7C;;;;OAIG;IACH,SAAS,CAAC,uBAAuB,IAAI,MAAM,EAAE;IAI7C;;;;OAIG;IACH,SAAS,CAAC,sBAAsB,IAAI,MAAM,EAAE;IAM5C;;;;;;;;;OASG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACnC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAgChB;;;;;;;;;OASG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA8C7D;;;;OAIG;IACH,OAAO,IAAI,OAAO;IAIlB;;;;OAIG;IACH,cAAc,IAAI,kBAAkB,GAAG,IAAI;IAI3C;;;;OAIG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B;;;OAGG;IACH,QAAQ,IAAI,IAAI;IAehB;;;;;;OAMG;YACW,gBAAgB;CAiB/B"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crewly Agent Runtime Service
|
|
3
|
+
*
|
|
4
|
+
* Concrete RuntimeAgentService subclass for the in-process Crewly Agent.
|
|
5
|
+
* Unlike PTY-based runtimes (Claude Code, Gemini CLI), this runtime runs
|
|
6
|
+
* entirely inside the Node.js process using the Vercel AI SDK.
|
|
7
|
+
*
|
|
8
|
+
* No tmux session, no shell commands — messages are routed directly to
|
|
9
|
+
* the AgentRunnerService.handleMessage() method.
|
|
10
|
+
*
|
|
11
|
+
* @module services/agent/crewly-agent/crewly-agent-runtime.service
|
|
12
|
+
*/
|
|
13
|
+
import { promises as fs } from 'fs';
|
|
14
|
+
import * as path from 'path';
|
|
15
|
+
import { RuntimeAgentService } from '../runtime-agent.service.abstract.js';
|
|
16
|
+
import { AgentRunnerService } from './agent-runner.service.js';
|
|
17
|
+
import { RUNTIME_TYPES } from '../../../constants.js';
|
|
18
|
+
import { CREWLY_AGENT_DEFAULTS } from './types.js';
|
|
19
|
+
import { InProcessLogBuffer } from './in-process-log-buffer.js';
|
|
20
|
+
/**
|
|
21
|
+
* In-process Crewly Agent runtime powered by AI SDK generateText.
|
|
22
|
+
*
|
|
23
|
+
* Key differences from PTY-based runtimes:
|
|
24
|
+
* - No tmux session needed — runs in-process
|
|
25
|
+
* - Messages routed via handleMessage() instead of PTY write
|
|
26
|
+
* - System prompt loaded from config/roles/orchestrator/prompt.md
|
|
27
|
+
* - Ready immediately after initialization (no CLI startup wait)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const runtime = new CrewlyAgentRuntimeService(sessionHelper, projectRoot);
|
|
32
|
+
* await runtime.initializeInProcess('crewly-orc');
|
|
33
|
+
* const result = await runtime.handleMessage('Check all team statuses');
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class CrewlyAgentRuntimeService extends RuntimeAgentService {
|
|
37
|
+
agentRunner = null;
|
|
38
|
+
initialized = false;
|
|
39
|
+
currentSessionName = null;
|
|
40
|
+
logBuffer;
|
|
41
|
+
constructor(sessionHelper, projectRoot) {
|
|
42
|
+
super(sessionHelper, projectRoot);
|
|
43
|
+
this.logBuffer = InProcessLogBuffer.getInstance();
|
|
44
|
+
}
|
|
45
|
+
// ===== Abstract method implementations =====
|
|
46
|
+
/**
|
|
47
|
+
* Get the runtime type identifier.
|
|
48
|
+
*
|
|
49
|
+
* @returns 'crewly-agent' runtime type constant
|
|
50
|
+
*/
|
|
51
|
+
getRuntimeType() {
|
|
52
|
+
return RUNTIME_TYPES.CREWLY_AGENT;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Detect if the Crewly Agent runtime is running.
|
|
56
|
+
* For in-process runtime, this checks if the AgentRunner is initialized.
|
|
57
|
+
*
|
|
58
|
+
* @param _sessionName - Session name (unused for in-process runtime)
|
|
59
|
+
* @returns True if the agent runner is initialized
|
|
60
|
+
*/
|
|
61
|
+
async detectRuntimeSpecific(_sessionName) {
|
|
62
|
+
return this.initialized && this.agentRunner !== null && this.agentRunner.isInitialized();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get patterns that indicate the runtime is ready.
|
|
66
|
+
* For in-process runtime, there are no terminal patterns — readiness is checked programmatically.
|
|
67
|
+
*
|
|
68
|
+
* @returns Empty array (no terminal output to match)
|
|
69
|
+
*/
|
|
70
|
+
getRuntimeReadyPatterns() {
|
|
71
|
+
return ['Crewly Agent Ready'];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get patterns that indicate runtime errors.
|
|
75
|
+
*
|
|
76
|
+
* @returns Empty array (errors are thrown as exceptions, not terminal patterns)
|
|
77
|
+
*/
|
|
78
|
+
getRuntimeErrorPatterns() {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get patterns that indicate the runtime has exited.
|
|
83
|
+
*
|
|
84
|
+
* @returns Empty array (in-process runtime doesn't exit via terminal)
|
|
85
|
+
*/
|
|
86
|
+
getRuntimeExitPatterns() {
|
|
87
|
+
return [];
|
|
88
|
+
}
|
|
89
|
+
// ===== In-process lifecycle methods =====
|
|
90
|
+
/**
|
|
91
|
+
* Initialize the in-process agent runtime.
|
|
92
|
+
*
|
|
93
|
+
* Loads the system prompt from config/roles/orchestrator/prompt.md,
|
|
94
|
+
* creates the AgentRunnerService, and initializes the model.
|
|
95
|
+
*
|
|
96
|
+
* @param sessionName - Session name for this agent instance
|
|
97
|
+
* @param config - Optional partial config overrides
|
|
98
|
+
* @param roleName - Role name for system prompt lookup (default: 'orchestrator')
|
|
99
|
+
*/
|
|
100
|
+
async initializeInProcess(sessionName, config, roleName) {
|
|
101
|
+
this.currentSessionName = sessionName;
|
|
102
|
+
// Load system prompt from file (role-specific)
|
|
103
|
+
const systemPrompt = await this.loadSystemPrompt(roleName || 'orchestrator');
|
|
104
|
+
// Build full config with defaults
|
|
105
|
+
const fullConfig = {
|
|
106
|
+
model: config?.model || CREWLY_AGENT_DEFAULTS.DEFAULT_MODEL,
|
|
107
|
+
maxSteps: config?.maxSteps || CREWLY_AGENT_DEFAULTS.MAX_STEPS,
|
|
108
|
+
sessionName,
|
|
109
|
+
apiBaseUrl: config?.apiBaseUrl || CREWLY_AGENT_DEFAULTS.API_BASE_URL,
|
|
110
|
+
systemPrompt: config?.systemPrompt || systemPrompt,
|
|
111
|
+
maxHistoryMessages: config?.maxHistoryMessages || CREWLY_AGENT_DEFAULTS.MAX_HISTORY_MESSAGES,
|
|
112
|
+
compactionThreshold: config?.compactionThreshold || CREWLY_AGENT_DEFAULTS.COMPACTION_THRESHOLD,
|
|
113
|
+
};
|
|
114
|
+
this.agentRunner = new AgentRunnerService(fullConfig);
|
|
115
|
+
await this.agentRunner.initialize();
|
|
116
|
+
this.initialized = true;
|
|
117
|
+
// Register in-process session for frontend terminal visibility
|
|
118
|
+
this.logBuffer.registerSession(sessionName);
|
|
119
|
+
this.logBuffer.append(sessionName, 'info', `Crewly Agent initialized (${fullConfig.model.provider}/${fullConfig.model.modelId})`);
|
|
120
|
+
this.logger.info('Crewly Agent runtime initialized', {
|
|
121
|
+
sessionName,
|
|
122
|
+
model: `${fullConfig.model.provider}/${fullConfig.model.modelId}`,
|
|
123
|
+
maxSteps: fullConfig.maxSteps,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Handle an incoming message by routing it to the AgentRunner.
|
|
128
|
+
*
|
|
129
|
+
* This is the primary entry point for message delivery, replacing
|
|
130
|
+
* the PTY write path used by other runtimes.
|
|
131
|
+
*
|
|
132
|
+
* @param message - The message to process
|
|
133
|
+
* @returns Agent run result with text response and tool call records
|
|
134
|
+
* @throws Error if the runtime is not initialized
|
|
135
|
+
*/
|
|
136
|
+
async handleMessage(message) {
|
|
137
|
+
if (!this.agentRunner || !this.initialized) {
|
|
138
|
+
throw new Error('Crewly Agent runtime not initialized. Call initializeInProcess() first.');
|
|
139
|
+
}
|
|
140
|
+
const session = this.currentSessionName;
|
|
141
|
+
this.logBuffer.append(session, 'info', `← Message received (${message.length} chars)`);
|
|
142
|
+
this.logger.debug('Handling message', {
|
|
143
|
+
sessionName: session,
|
|
144
|
+
messageLength: message.length,
|
|
145
|
+
historyLength: this.agentRunner.getHistoryLength(),
|
|
146
|
+
});
|
|
147
|
+
try {
|
|
148
|
+
const result = await this.agentRunner.run(message);
|
|
149
|
+
// Log tool calls to buffer for frontend visibility
|
|
150
|
+
for (const tc of result.toolCalls) {
|
|
151
|
+
const argsPreview = JSON.stringify(tc.args).substring(0, 120);
|
|
152
|
+
this.logBuffer.append(session, 'info', `🔧 ${tc.toolName}(${argsPreview})`);
|
|
153
|
+
const resultPreview = tc.result ? JSON.stringify(tc.result).substring(0, 200) : 'void';
|
|
154
|
+
this.logBuffer.append(session, 'debug', ` → ${resultPreview}`);
|
|
155
|
+
}
|
|
156
|
+
// Log response summary
|
|
157
|
+
const textPreview = result.text ? result.text.substring(0, 150) : '(no text)';
|
|
158
|
+
this.logBuffer.append(session, 'info', `→ Response (${result.steps} steps, ${result.toolCalls.length} tools): ${textPreview}`);
|
|
159
|
+
this.logBuffer.append(session, 'debug', ` Tokens: ${result.usage.input}in/${result.usage.output}out`);
|
|
160
|
+
this.logger.info('Message processed', {
|
|
161
|
+
sessionName: session,
|
|
162
|
+
steps: result.steps,
|
|
163
|
+
toolCalls: result.toolCalls.length,
|
|
164
|
+
usage: result.usage,
|
|
165
|
+
finishReason: result.finishReason,
|
|
166
|
+
});
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
171
|
+
this.logBuffer.append(session, 'error', `Agent error: ${errMsg}`);
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Check if the runtime is initialized and ready to handle messages.
|
|
177
|
+
*
|
|
178
|
+
* @returns True if initializeInProcess() has been called successfully
|
|
179
|
+
*/
|
|
180
|
+
isReady() {
|
|
181
|
+
return this.initialized && this.agentRunner !== null && this.agentRunner.isInitialized();
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get the current agent runner instance (for inspection/testing).
|
|
185
|
+
*
|
|
186
|
+
* @returns The AgentRunnerService instance, or null if not initialized
|
|
187
|
+
*/
|
|
188
|
+
getAgentRunner() {
|
|
189
|
+
return this.agentRunner;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get the session name this runtime was initialized with.
|
|
193
|
+
*
|
|
194
|
+
* @returns Session name string, or null if not initialized
|
|
195
|
+
*/
|
|
196
|
+
getSessionName() {
|
|
197
|
+
return this.currentSessionName;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Shut down the in-process runtime.
|
|
201
|
+
* Clears the agent runner and resets state.
|
|
202
|
+
*/
|
|
203
|
+
shutdown() {
|
|
204
|
+
this.logger.info('Shutting down Crewly Agent runtime', {
|
|
205
|
+
sessionName: this.currentSessionName,
|
|
206
|
+
});
|
|
207
|
+
if (this.currentSessionName) {
|
|
208
|
+
this.logBuffer.append(this.currentSessionName, 'info', 'Crewly Agent shutting down');
|
|
209
|
+
this.logBuffer.removeSession(this.currentSessionName);
|
|
210
|
+
}
|
|
211
|
+
this.agentRunner = null;
|
|
212
|
+
this.initialized = false;
|
|
213
|
+
this.currentSessionName = null;
|
|
214
|
+
}
|
|
215
|
+
// ===== Private helpers =====
|
|
216
|
+
/**
|
|
217
|
+
* Load the system prompt for a given role from file.
|
|
218
|
+
*
|
|
219
|
+
* @param roleName - Role name (maps to config/roles/{roleName}/prompt.md)
|
|
220
|
+
* @returns System prompt content
|
|
221
|
+
* @throws Error if the prompt file cannot be read
|
|
222
|
+
*/
|
|
223
|
+
async loadSystemPrompt(roleName = 'orchestrator') {
|
|
224
|
+
const promptPath = path.join(this.projectRoot, 'config', 'roles', roleName, 'prompt.md');
|
|
225
|
+
try {
|
|
226
|
+
const content = await fs.readFile(promptPath, 'utf8');
|
|
227
|
+
this.logger.debug('System prompt loaded', {
|
|
228
|
+
promptPath,
|
|
229
|
+
length: content.length,
|
|
230
|
+
});
|
|
231
|
+
return content;
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
this.logger.warn('Failed to load system prompt, using fallback', {
|
|
235
|
+
promptPath,
|
|
236
|
+
error: error instanceof Error ? error.message : String(error),
|
|
237
|
+
});
|
|
238
|
+
return 'You are the Crewly orchestrator agent. Manage teams and delegate tasks.';
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=crewly-agent-runtime.service.js.map
|
package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crewly-agent-runtime.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.ts"],"names":[],"mappings":"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"}
|