crewly 1.3.31 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/constants.ts +18 -3
- package/config/hooks/install-hooks.sh +88 -0
- package/config/hooks/pre-commit +104 -0
- package/config/orchestrator_tasks/prompts/orchestrator-prompt.md +17 -24
- package/config/roles/auditor/role.json +13 -0
- package/config/roles/orchestrator/prompt.md +25 -0
- package/config/roles/product-manager/prompt.md +18 -1
- package/config/roles/researcher/prompt.md +110 -0
- package/config/roles/team-leader/prompt.md +31 -8
- package/config/roles/team-leader/tl-addon.md +40 -9
- package/config/roles/ux-designer/prompt.md +111 -0
- package/config/skills/_common/lib.sh +33 -0
- package/config/skills/agent/browse-stealth/{instructions.md → SKILL.md} +40 -0
- package/config/skills/agent/chrome-attach/SKILL.md +84 -0
- package/config/skills/agent/chrome-attach/execute.sh +279 -0
- package/config/skills/agent/competitor-content-tracker/{instructions.md → SKILL.md} +34 -0
- package/config/skills/agent/computer-use/{instructions.md → SKILL.md} +43 -0
- package/config/skills/agent/content-calendar/{instructions.md → SKILL.md} +32 -0
- package/config/skills/agent/content-repurposer/{instructions.md → SKILL.md} +38 -0
- package/config/skills/agent/content-writer/{instructions.md → SKILL.md} +38 -0
- package/config/skills/agent/core/accept-task/{instructions.md → SKILL.md} +37 -0
- package/config/skills/agent/core/block-task/{instructions.md → SKILL.md} +37 -0
- package/config/skills/agent/core/check-quality-gates/{instructions.md → SKILL.md} +40 -0
- package/config/skills/agent/core/complete-task/{instructions.md → SKILL.md} +37 -0
- package/config/skills/agent/core/complete-task/execute.sh +15 -0
- package/config/skills/agent/core/generate-pdf/{instructions.md → SKILL.md} +42 -0
- package/config/skills/agent/core/get-my-context/{instructions.md → SKILL.md} +38 -0
- package/config/skills/agent/core/get-sops/{instructions.md → SKILL.md} +38 -0
- package/config/skills/agent/core/get-team-norms/execute.sh +106 -0
- package/config/skills/agent/core/get-team-status/SKILL.md +55 -0
- package/config/skills/agent/core/handoff-task/execute.sh +150 -0
- package/config/skills/agent/core/heartbeat/{instructions.md → SKILL.md} +27 -0
- package/config/skills/agent/core/marketplace-search/{instructions.md → SKILL.md} +41 -0
- package/config/skills/agent/core/query-knowledge/{instructions.md → SKILL.md} +40 -0
- package/config/skills/agent/core/read-task/SKILL.md +56 -0
- package/config/skills/agent/core/recall/{instructions.md → SKILL.md} +38 -0
- package/config/skills/agent/core/record-learning/{instructions.md → SKILL.md} +38 -0
- package/config/skills/agent/core/register-self/SKILL.md +54 -0
- package/config/skills/agent/core/remember/{instructions.md → SKILL.md} +37 -0
- package/config/skills/agent/core/remember/execute.sh +6 -0
- package/config/skills/agent/core/reply-chat/{instructions.md → SKILL.md} +37 -0
- package/config/skills/agent/core/report-progress/{instructions.md → SKILL.md} +38 -0
- package/config/skills/agent/core/report-status/{instructions.md → SKILL.md} +39 -0
- package/config/skills/agent/core/send-chat-response/{instructions.md → SKILL.md} +37 -0
- package/config/skills/agent/core/send-message/SKILL.md +58 -0
- package/config/skills/agent/core/update-team-norm/execute.sh +115 -0
- package/config/skills/agent/desktop-app-control/{instructions.md → SKILL.md} +42 -0
- package/config/skills/agent/trend-monitor/{instructions.md → SKILL.md} +34 -0
- package/config/skills/agent/vnc-browser/{instructions.md → SKILL.md} +38 -0
- package/config/skills/auditor/score-task/SKILL.md +28 -0
- package/config/skills/auditor/score-task/execute.sh +21 -0
- package/config/skills/examples/enterprise-skill-example.json +22 -0
- package/config/skills/examples/premium-skill-example.json +22 -0
- package/config/skills/orchestrator/assign-task/SKILL.md +41 -0
- package/config/skills/orchestrator/assign-team-to-project/{instructions.md → SKILL.md} +25 -0
- package/config/skills/orchestrator/broadcast/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/broadcast-to-org/{instructions.md → SKILL.md} +25 -0
- package/config/skills/orchestrator/cancel-all-schedules/{instructions.md → SKILL.md} +5 -0
- package/config/skills/orchestrator/cancel-schedule/SKILL.md +43 -0
- package/config/skills/orchestrator/complete-task/SKILL.md +41 -0
- package/config/skills/orchestrator/create-project/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/create-team/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/delegate-task/{instructions.md → SKILL.md} +27 -0
- package/config/skills/orchestrator/delegate-task/execute.sh +31 -2
- package/config/skills/orchestrator/get-agent-logs/{instructions.md → SKILL.md} +25 -0
- package/config/skills/orchestrator/get-agent-status/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/get-project-overview/SKILL.md +41 -0
- package/config/skills/orchestrator/get-tasks/SKILL.md +41 -0
- package/config/skills/orchestrator/get-team-status/SKILL.md +43 -0
- package/config/skills/orchestrator/handle-agent-failure/{instructions.md → SKILL.md} +27 -0
- package/config/skills/orchestrator/heartbeat/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/list-schedules/{instructions.md → SKILL.md} +5 -0
- package/config/skills/orchestrator/list-subscriptions/SKILL.md +41 -0
- package/config/skills/orchestrator/query-knowledge/{instructions.md → SKILL.md} +28 -0
- package/config/skills/orchestrator/read-session-logs/{instructions.md → SKILL.md} +26 -0
- package/config/skills/orchestrator/read-system-logs/{instructions.md → SKILL.md} +25 -0
- package/config/skills/orchestrator/recall/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/record-failure/{instructions.md → SKILL.md} +27 -0
- package/config/skills/orchestrator/record-learning/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/record-success/{instructions.md → SKILL.md} +26 -0
- package/config/skills/orchestrator/register-self/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/remember/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/reply-chat/{instructions.md → SKILL.md} +25 -0
- package/config/skills/orchestrator/reply-chat/execute.sh +0 -13
- package/config/skills/orchestrator/reply-gchat/{instructions.md → SKILL.md} +25 -0
- package/config/skills/orchestrator/reply-gchat/execute.sh +0 -18
- package/config/skills/orchestrator/reply-slack/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/reply-slack/execute.sh +18 -31
- package/config/skills/orchestrator/report-bug/{instructions.md → SKILL.md} +26 -0
- package/config/skills/orchestrator/restart-crewly/{instructions.md → SKILL.md} +26 -0
- package/config/skills/orchestrator/resume-session/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/schedule-check/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/send-key/{instructions.md → SKILL.md} +26 -0
- package/config/skills/orchestrator/send-message/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/send-pdf-to-slack/{instructions.md → SKILL.md} +27 -0
- package/config/skills/orchestrator/set-goal/{instructions.md → SKILL.md} +26 -0
- package/config/skills/orchestrator/start-agent/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/start-team/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/stop-agent/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/stop-team/SKILL.md +43 -0
- package/config/skills/orchestrator/subscribe-event/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/terminate-agent/{instructions.md → SKILL.md} +24 -0
- package/config/skills/orchestrator/unsubscribe-event/SKILL.md +42 -0
- package/config/skills/orchestrator/update-focus/{instructions.md → SKILL.md} +26 -0
- package/config/skills/orchestrator/update-team/{instructions.md → SKILL.md} +24 -0
- package/config/skills/team-leader/aggregate-results/{instructions.md → SKILL.md} +26 -0
- package/config/skills/team-leader/decompose-goal/{instructions.md → SKILL.md} +26 -0
- package/config/skills/team-leader/delegate-task/{instructions.md → SKILL.md} +26 -0
- package/config/skills/team-leader/delegate-task/execute.sh +14 -6
- package/config/skills/team-leader/delegate-task/execute.test.sh +401 -0
- package/config/skills/team-leader/handle-failure/{instructions.md → SKILL.md} +27 -0
- package/config/skills/team-leader/schedule-check/{instructions.md → SKILL.md} +26 -0
- package/config/skills/team-leader/start-agent/{instructions.md → SKILL.md} +26 -0
- package/config/skills/team-leader/stop-agent/{instructions.md → SKILL.md} +26 -0
- package/config/skills/team-leader/verify-output/{instructions.md → SKILL.md} +27 -0
- package/config/templates/agent-agents-md.md +35 -0
- package/config/templates/agent-gemini-md.md +35 -0
- package/config/templates/code-review-team/team-config.json +7 -0
- package/config/templates/content-generation-team/norms/brand-guidelines.md +64 -0
- package/config/templates/content-generation-team/norms/content-review.md +66 -0
- package/config/templates/content-generation-team/norms/publish-checklist.md +58 -0
- package/config/templates/content-generation-team/team-config.json +8 -0
- package/config/templates/dev-fullstack/norms/code-commit-sop.md +40 -0
- package/config/templates/dev-fullstack/norms/quality-gates.md +35 -0
- package/config/templates/dev-fullstack/template.json +17 -1
- package/config/templates/education-smb/template.json +10 -1
- package/config/templates/insurance-smb/template.json +10 -1
- package/config/templates/research-analysis/norms/research-methodology.md +36 -0
- package/config/templates/research-analysis/norms/source-citation.md +33 -0
- package/config/templates/research-analysis/template.json +17 -1
- package/config/templates/security-audit-team.json +67 -0
- package/config/templates/social-media-ops/norms/engagement-rules.md +35 -0
- package/config/templates/social-media-ops/norms/posting-schedule.md +43 -0
- package/config/templates/social-media-ops/template.json +17 -1
- package/config/templates/video-production/template.json +10 -1
- package/dist/backend/backend/src/constants.d.ts +80 -11
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +85 -11
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts +99 -0
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.js +183 -0
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/approvals/approvals.routes.d.ts +15 -0
- package/dist/backend/backend/src/controllers/approvals/approvals.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/approvals/approvals.routes.js +27 -0
- package/dist/backend/backend/src/controllers/approvals/approvals.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-google-auth.controller.d.ts +70 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-google-auth.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-google-auth.controller.js +368 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-google-auth.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts +24 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +195 -3
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts +9 -4
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.js +19 -5
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/index.d.ts +1 -0
- package/dist/backend/backend/src/controllers/cloud/index.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/index.js +1 -0
- package/dist/backend/backend/src/controllers/cloud/index.js.map +1 -1
- package/dist/backend/backend/src/controllers/index.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/index.js +2 -0
- package/dist/backend/backend/src/controllers/index.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.d.ts +3 -3
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.js +9 -9
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/memory/memory.controller.js +6 -6
- package/dist/backend/backend/src/controllers/memory/memory.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.d.ts +0 -7
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.js +2 -135
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +14 -0
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +96 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/oauth/oauth.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/oauth/oauth.routes.js +8 -1
- package/dist/backend/backend/src/controllers/oauth/oauth.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.controller.js +2 -2
- package/dist/backend/backend/src/controllers/payment/payment.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.routes.d.ts +3 -3
- package/dist/backend/backend/src/controllers/payment/payment.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.routes.js +4 -14
- package/dist/backend/backend/src/controllers/payment/payment.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.types.d.ts +15 -94
- package/dist/backend/backend/src/controllers/payment/payment.types.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/payment/payment.types.js +11 -35
- package/dist/backend/backend/src/controllers/payment/payment.types.js.map +1 -1
- package/dist/backend/backend/src/controllers/pr-review/pr-review.controller.d.ts +49 -0
- package/dist/backend/backend/src/controllers/pr-review/pr-review.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/pr-review/pr-review.controller.js +138 -0
- package/dist/backend/backend/src/controllers/pr-review/pr-review.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/pr-review/pr-review.routes.d.ts +20 -0
- package/dist/backend/backend/src/controllers/pr-review/pr-review.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/pr-review/pr-review.routes.js +30 -0
- package/dist/backend/backend/src/controllers/pr-review/pr-review.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.d.ts +12 -0
- package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.js +107 -0
- package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/request-types.d.ts +20 -1
- package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +11 -5
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +46 -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 +598 -326
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts +12 -0
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +105 -36
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.routes.js +2 -1
- package/dist/backend/backend/src/controllers/team/team.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/template/template.controller.d.ts +11 -0
- package/dist/backend/backend/src/controllers/template/template.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/template/template.controller.js +59 -0
- package/dist/backend/backend/src/controllers/template/template.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/template/template.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/template/template.routes.js +2 -1
- package/dist/backend/backend/src/controllers/template/template.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/workspace/workspace.controller.d.ts +39 -0
- package/dist/backend/backend/src/controllers/workspace/workspace.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/workspace/workspace.controller.js +120 -0
- package/dist/backend/backend/src/controllers/workspace/workspace.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/workspace/workspace.routes.d.ts +18 -0
- package/dist/backend/backend/src/controllers/workspace/workspace.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/workspace/workspace.routes.js +27 -0
- package/dist/backend/backend/src/controllers/workspace/workspace.routes.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +108 -15
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/middleware/require-auth.middleware.d.ts +20 -0
- package/dist/backend/backend/src/middleware/require-auth.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/middleware/require-auth.middleware.js +21 -0
- package/dist/backend/backend/src/middleware/require-auth.middleware.js.map +1 -0
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +18 -5
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/routes/modules/quality-gate.routes.d.ts +2 -1
- package/dist/backend/backend/src/routes/modules/quality-gate.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/modules/quality-gate.routes.js +4 -2
- package/dist/backend/backend/src/routes/modules/quality-gate.routes.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 +8 -0
- package/dist/backend/backend/src/routes/modules/task-management.routes.js.map +1 -1
- package/dist/backend/backend/src/routes/modules/terminal.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/modules/terminal.routes.js +4 -0
- package/dist/backend/backend/src/routes/modules/terminal.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/adaptive-heartbeat.service.d.ts +149 -0
- package/dist/backend/backend/src/services/agent/adaptive-heartbeat.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/adaptive-heartbeat.service.js +200 -0
- package/dist/backend/backend/src/services/agent/adaptive-heartbeat.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.d.ts +13 -0
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js +65 -6
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +36 -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 +174 -52
- 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 +66 -20
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +261 -60
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts +19 -0
- package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.js +80 -0
- package/dist/backend/backend/src/services/agent/claude-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts +11 -0
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.js +49 -1
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +74 -3
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +248 -18
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/approval-queue.service.d.ts +161 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/approval-queue.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/approval-queue.service.js +237 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/approval-queue.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts +74 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js +140 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +50 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +16 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +45 -5
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +3 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js +3 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +135 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +185 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +10 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +22 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +143 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +264 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +2 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +55 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +660 -45
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +75 -3
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js +49 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -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 +17 -2
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +37 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js +170 -3
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/chrome-discovery.service.d.ts +108 -0
- package/dist/backend/backend/src/services/browser/chrome-discovery.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/browser/chrome-discovery.service.js +251 -0
- package/dist/backend/backend/src/services/browser/chrome-discovery.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts +12 -0
- package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-client.service.js +19 -0
- package/dist/backend/backend/src/services/cloud/cloud-client.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts +191 -0
- package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js +415 -0
- package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/device-identity.service.d.ts +89 -0
- package/dist/backend/backend/src/services/cloud/device-identity.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/device-identity.service.js +148 -0
- package/dist/backend/backend/src/services/cloud/device-identity.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/tracing.service.d.ts +127 -0
- package/dist/backend/backend/src/services/core/tracing.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/tracing.service.js +238 -0
- package/dist/backend/backend/src/services/core/tracing.service.js.map +1 -0
- 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 +11 -3
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
- package/dist/backend/backend/src/services/index.d.ts +1 -0
- package/dist/backend/backend/src/services/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/index.js +1 -0
- package/dist/backend/backend/src/services/index.js.map +1 -1
- package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts +78 -0
- package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts.map +1 -0
- package/dist/backend/backend/src/services/knowledge/embedding-provider.js +164 -0
- package/dist/backend/backend/src/services/knowledge/embedding-provider.js.map +1 -0
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +39 -13
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +114 -17
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
- package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts +170 -23
- package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js +565 -73
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +1 -1
- 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 +8 -11
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js +1 -0
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/context-flush.service.d.ts +73 -0
- package/dist/backend/backend/src/services/memory/context-flush.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/context-flush.service.js +131 -0
- package/dist/backend/backend/src/services/memory/context-flush.service.js.map +1 -0
- package/dist/backend/backend/src/services/memory/learning-accumulation.service.d.ts +23 -2
- package/dist/backend/backend/src/services/memory/learning-accumulation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/learning-accumulation.service.js +78 -16
- package/dist/backend/backend/src/services/memory/learning-accumulation.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.d.ts +38 -0
- package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.js +121 -2
- package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts +29 -207
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js +97 -683
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/google-chat-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/google-chat-initializer.js +13 -12
- package/dist/backend/backend/src/services/messaging/google-chat-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/messenger-adapter.interface.d.ts +2 -0
- package/dist/backend/backend/src/services/messaging/messenger-adapter.interface.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +6 -23
- 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 +48 -184
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +51 -5
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/index.d.ts +1 -1
- package/dist/backend/backend/src/services/orchestrator/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/index.js +1 -1
- package/dist/backend/backend/src/services/orchestrator/index.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts +65 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js +165 -2
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +8 -0
- 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 +23 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
- package/dist/backend/backend/src/services/payment/stripe.service.d.ts +95 -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 +229 -190
- package/dist/backend/backend/src/services/payment/stripe.service.js.map +1 -1
- package/dist/backend/backend/src/services/pr-review/pr-review.service.d.ts +181 -0
- package/dist/backend/backend/src/services/pr-review/pr-review.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/pr-review/pr-review.service.js +336 -0
- package/dist/backend/backend/src/services/pr-review/pr-review.service.js.map +1 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +23 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project/task-tracking.service.js +88 -0
- package/dist/backend/backend/src/services/project/task-tracking.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/session-handoff.service.d.ts +260 -0
- package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/session-handoff.service.js +565 -0
- package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -0
- package/dist/backend/backend/src/services/skill/index.d.ts +1 -0
- package/dist/backend/backend/src/services/skill/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/index.js +1 -0
- package/dist/backend/backend/src/services/skill/index.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts +25 -6
- 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 +78 -20
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-tier.service.d.ts +116 -0
- package/dist/backend/backend/src/services/skill/skill-tier.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/skill/skill-tier.service.js +155 -0
- package/dist/backend/backend/src/services/skill/skill-tier.service.js.map +1 -0
- package/dist/backend/backend/src/services/skill/skill.service.d.ts +35 -7
- package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill.service.js +128 -35
- package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +50 -47
- 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 +267 -202
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +28 -2
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +69 -3
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.d.ts +19 -1
- package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.js +110 -3
- package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
- package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.d.ts +11 -0
- package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.js +57 -3
- package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +6 -0
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +52 -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 +319 -6
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/types/chat.types.d.ts +2 -2
- package/dist/backend/backend/src/types/chat.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/chat.types.js +18 -22
- package/dist/backend/backend/src/types/chat.types.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +37 -0
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/types/marketplace.types.d.ts +1 -1
- package/dist/backend/backend/src/types/marketplace.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/scheduler.types.d.ts +4 -0
- package/dist/backend/backend/src/types/scheduler.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/scheduler.types.js.map +1 -1
- package/dist/backend/backend/src/types/skill.types.d.ts +4 -0
- package/dist/backend/backend/src/types/skill.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/skill.types.js.map +1 -1
- package/dist/backend/backend/src/types/task-tracking.types.d.ts +6 -0
- package/dist/backend/backend/src/types/task-tracking.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/task-tracking.types.js.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.d.ts +2 -0
- package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
- package/dist/backend/backend/src/utils/skill-md-parser.d.ts +38 -0
- package/dist/backend/backend/src/utils/skill-md-parser.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/skill-md-parser.js +47 -0
- package/dist/backend/backend/src/utils/skill-md-parser.js.map +1 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +0 -154
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/terminal.gateway.js +0 -515
- package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
- package/dist/backend/config/constants.d.ts +18 -3
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +18 -3
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +80 -11
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +85 -11
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts +78 -0
- package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts.map +1 -0
- package/dist/cli/backend/src/services/knowledge/embedding-provider.js +164 -0
- package/dist/cli/backend/src/services/knowledge/embedding-provider.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +39 -13
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +114 -17
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts +170 -23
- package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js +565 -73
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.d.ts +38 -0
- package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.js +121 -2
- package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/cli/backend/src/types/chat.types.d.ts +2 -2
- package/dist/cli/backend/src/types/chat.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/chat.types.js +18 -22
- package/dist/cli/backend/src/types/chat.types.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +37 -0
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/types/scheduler.types.d.ts +4 -0
- package/dist/cli/backend/src/types/scheduler.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/scheduler.types.js.map +1 -1
- package/dist/cli/backend/src/types/skill.types.d.ts +4 -0
- package/dist/cli/backend/src/types/skill.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/skill.types.js.map +1 -1
- package/dist/cli/cli/src/commands/onboard.d.ts +19 -2
- package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/onboard.js +58 -15
- package/dist/cli/cli/src/commands/onboard.js.map +1 -1
- package/dist/cli/cli/src/commands/pair.d.ts +46 -0
- package/dist/cli/cli/src/commands/pair.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/pair.js +258 -0
- package/dist/cli/cli/src/commands/pair.js.map +1 -0
- package/dist/cli/cli/src/commands/service.d.ts +86 -0
- package/dist/cli/cli/src/commands/service.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/service.js +687 -0
- package/dist/cli/cli/src/commands/service.js.map +1 -0
- package/dist/cli/cli/src/index.js +17 -0
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/config/constants.d.ts +18 -3
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +18 -3
- package/dist/cli/config/constants.js.map +1 -1
- package/frontend/dist/assets/index-1d23cce8.js +4919 -0
- package/frontend/dist/assets/index-60a9e4ea.css +33 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +22 -10
- package/config/skills/agent/browse-stealth/skill.json +0 -20
- package/config/skills/agent/competitor-content-tracker/skill.json +0 -22
- package/config/skills/agent/computer-use/skill.json +0 -29
- package/config/skills/agent/content-calendar/skill.json +0 -22
- package/config/skills/agent/content-repurposer/skill.json +0 -22
- package/config/skills/agent/content-writer/skill.json +0 -22
- package/config/skills/agent/core/accept-task/skill.json +0 -20
- package/config/skills/agent/core/block-task/skill.json +0 -20
- package/config/skills/agent/core/check-quality-gates/skill.json +0 -20
- package/config/skills/agent/core/complete-task/skill.json +0 -20
- package/config/skills/agent/core/generate-pdf/skill.json +0 -20
- package/config/skills/agent/core/get-my-context/skill.json +0 -20
- package/config/skills/agent/core/get-sops/skill.json +0 -20
- package/config/skills/agent/core/get-team-status/instructions.md +0 -17
- package/config/skills/agent/core/get-team-status/skill.json +0 -20
- package/config/skills/agent/core/heartbeat/skill.json +0 -20
- package/config/skills/agent/core/marketplace-search/skill.json +0 -20
- package/config/skills/agent/core/query-knowledge/skill.json +0 -20
- package/config/skills/agent/core/read-task/instructions.md +0 -19
- package/config/skills/agent/core/read-task/skill.json +0 -20
- package/config/skills/agent/core/recall/skill.json +0 -20
- package/config/skills/agent/core/record-learning/skill.json +0 -20
- package/config/skills/agent/core/register-self/instructions.md +0 -18
- package/config/skills/agent/core/register-self/skill.json +0 -20
- package/config/skills/agent/core/remember/skill.json +0 -20
- package/config/skills/agent/core/reply-chat/skill.json +0 -20
- package/config/skills/agent/core/report-progress/skill.json +0 -20
- package/config/skills/agent/core/report-status/skill.json +0 -20
- package/config/skills/agent/core/send-chat-response/skill.json +0 -20
- package/config/skills/agent/core/send-message/instructions.md +0 -20
- package/config/skills/agent/core/send-message/skill.json +0 -20
- package/config/skills/agent/desktop-app-control/skill.json +0 -33
- package/config/skills/agent/trend-monitor/skill.json +0 -22
- package/config/skills/agent/vnc-browser/skill.json +0 -20
- package/config/skills/orchestrator/assign-task/instructions.md +0 -17
- package/config/skills/orchestrator/assign-task/skill.json +0 -20
- package/config/skills/orchestrator/assign-team-to-project/skill.json +0 -20
- package/config/skills/orchestrator/broadcast/skill.json +0 -20
- package/config/skills/orchestrator/broadcast-to-org/skill.json +0 -20
- package/config/skills/orchestrator/cancel-all-schedules/skill.json +0 -17
- package/config/skills/orchestrator/cancel-schedule/instructions.md +0 -19
- package/config/skills/orchestrator/cancel-schedule/skill.json +0 -20
- package/config/skills/orchestrator/complete-task/instructions.md +0 -17
- package/config/skills/orchestrator/complete-task/skill.json +0 -20
- package/config/skills/orchestrator/create-project/skill.json +0 -20
- package/config/skills/orchestrator/create-team/skill.json +0 -20
- package/config/skills/orchestrator/delegate-task/skill.json +0 -20
- package/config/skills/orchestrator/get-agent-logs/skill.json +0 -20
- package/config/skills/orchestrator/get-agent-status/skill.json +0 -20
- package/config/skills/orchestrator/get-project-overview/instructions.md +0 -17
- package/config/skills/orchestrator/get-project-overview/skill.json +0 -20
- package/config/skills/orchestrator/get-tasks/instructions.md +0 -17
- package/config/skills/orchestrator/get-tasks/skill.json +0 -20
- package/config/skills/orchestrator/get-team-status/instructions.md +0 -17
- package/config/skills/orchestrator/get-team-status/skill.json +0 -20
- package/config/skills/orchestrator/handle-agent-failure/skill.json +0 -20
- package/config/skills/orchestrator/heartbeat/skill.json +0 -20
- package/config/skills/orchestrator/list-schedules/skill.json +0 -12
- package/config/skills/orchestrator/list-subscriptions/instructions.md +0 -17
- package/config/skills/orchestrator/list-subscriptions/skill.json +0 -20
- package/config/skills/orchestrator/query-knowledge/skill.json +0 -20
- package/config/skills/orchestrator/read-session-logs/skill.json +0 -20
- package/config/skills/orchestrator/read-system-logs/skill.json +0 -20
- package/config/skills/orchestrator/recall/skill.json +0 -20
- package/config/skills/orchestrator/record-failure/skill.json +0 -20
- package/config/skills/orchestrator/record-learning/skill.json +0 -20
- package/config/skills/orchestrator/record-success/skill.json +0 -20
- package/config/skills/orchestrator/register-self/skill.json +0 -20
- package/config/skills/orchestrator/remember/skill.json +0 -20
- package/config/skills/orchestrator/reply-chat/skill.json +0 -20
- package/config/skills/orchestrator/reply-gchat/skill.json +0 -20
- package/config/skills/orchestrator/reply-slack/skill.json +0 -20
- package/config/skills/orchestrator/report-bug/skill.json +0 -20
- package/config/skills/orchestrator/restart-crewly/skill.json +0 -20
- package/config/skills/orchestrator/resume-session/skill.json +0 -20
- package/config/skills/orchestrator/schedule-check/skill.json +0 -20
- package/config/skills/orchestrator/send-key/skill.json +0 -20
- package/config/skills/orchestrator/send-message/skill.json +0 -20
- package/config/skills/orchestrator/send-pdf-to-slack/skill.json +0 -20
- package/config/skills/orchestrator/set-goal/skill.json +0 -20
- package/config/skills/orchestrator/start-agent/skill.json +0 -20
- package/config/skills/orchestrator/start-team/skill.json +0 -20
- package/config/skills/orchestrator/stop-agent/skill.json +0 -20
- package/config/skills/orchestrator/stop-team/instructions.md +0 -19
- package/config/skills/orchestrator/stop-team/skill.json +0 -20
- package/config/skills/orchestrator/subscribe-event/skill.json +0 -20
- package/config/skills/orchestrator/terminate-agent/skill.json +0 -20
- package/config/skills/orchestrator/unsubscribe-event/instructions.md +0 -19
- package/config/skills/orchestrator/unsubscribe-event/skill.json +0 -20
- package/config/skills/orchestrator/update-focus/skill.json +0 -20
- package/config/skills/orchestrator/update-team/skill.json +0 -20
- package/config/skills/team-leader/aggregate-results/skill.json +0 -20
- package/config/skills/team-leader/decompose-goal/skill.json +0 -20
- package/config/skills/team-leader/delegate-task/skill.json +0 -20
- package/config/skills/team-leader/handle-failure/skill.json +0 -20
- package/config/skills/team-leader/schedule-check/skill.json +0 -20
- package/config/skills/team-leader/start-agent/skill.json +0 -20
- package/config/skills/team-leader/stop-agent/skill.json +0 -20
- package/config/skills/team-leader/verify-output/skill.json +0 -20
- package/frontend/dist/assets/index-0e5673b0.css +0 -33
- package/frontend/dist/assets/index-e6d7db4a.js +0 -5213
|
@@ -15,11 +15,10 @@ import { pipeline } from 'stream/promises';
|
|
|
15
15
|
import { PDFParse } from 'pdf-parse';
|
|
16
16
|
import { getSlackService } from './slack.service.js';
|
|
17
17
|
import { getChatService } from '../chat/chat.service.js';
|
|
18
|
-
import { isOrchestratorActive, getOrchestratorOfflineMessage, } from '../orchestrator/index.js';
|
|
18
|
+
import { isOrchestratorActive, isAgentActive, getOrchestratorOfflineMessage, } from '../orchestrator/index.js';
|
|
19
19
|
import { parseCommandIntent, } from '../../types/slack.types.js';
|
|
20
20
|
import { getSlackImageService } from './slack-image.service.js';
|
|
21
|
-
import {
|
|
22
|
-
import { ORCHESTRATOR_SESSION_NAME, MESSAGE_QUEUE_CONSTANTS, SLACK_IMAGE_CONSTANTS, SLACK_FILE_DOWNLOAD_CONSTANTS, SLACK_BRIDGE_CONSTANTS } from '../../constants.js';
|
|
21
|
+
import { ORCHESTRATOR_SESSION_NAME, MESSAGE_QUEUE_CONSTANTS, SLACK_IMAGE_CONSTANTS, SLACK_FILE_DOWNLOAD_CONSTANTS, SLACK_BRIDGE_CONSTANTS, AUDITOR_SCHEDULER_CONSTANTS } from '../../constants.js';
|
|
23
22
|
import { LoggerService } from '../core/logger.service.js';
|
|
24
23
|
/**
|
|
25
24
|
* Default bridge configuration
|
|
@@ -61,14 +60,17 @@ export class SlackOrchestratorBridge extends EventEmitter {
|
|
|
61
60
|
initialized = false;
|
|
62
61
|
/** Track if we've already logged the missing scope warning */
|
|
63
62
|
loggedMissingScope = false;
|
|
63
|
+
/**
|
|
64
|
+
* Pending completion reactions keyed by "channelId:threadTs".
|
|
65
|
+
* Stores the original message ts so that the ✅ reaction is added to the
|
|
66
|
+
* correct message when the reply-slack skill delivers a response.
|
|
67
|
+
*/
|
|
68
|
+
pendingReactions = new Map();
|
|
64
69
|
/**
|
|
65
70
|
* Track channel+thread pairs where Slack delivery was already handled
|
|
66
71
|
* by the reply-slack skill (execute.sh). Used by sendSlackResponse to
|
|
67
72
|
* avoid sending a duplicate fallback message to the same thread.
|
|
68
73
|
*/
|
|
69
|
-
skillDeliveredThreads = new Set();
|
|
70
|
-
/** Maximum entries before evicting oldest skill delivery records */
|
|
71
|
-
static MAX_SKILL_DELIVERY_RECORDS = 50;
|
|
72
74
|
/**
|
|
73
75
|
* Create a new SlackOrchestratorBridge
|
|
74
76
|
*
|
|
@@ -174,8 +176,8 @@ export class SlackOrchestratorBridge extends EventEmitter {
|
|
|
174
176
|
}
|
|
175
177
|
// Override message text with enriched version for downstream processing
|
|
176
178
|
message.text = enrichedText;
|
|
177
|
-
// Auditor prefix routing — intercept "auditor ..." messages
|
|
178
|
-
const auditorMatch = enrichedText.match(
|
|
179
|
+
// Auditor prefix routing — intercept "auditor ...", "/auditor ...", or "@auditor ..." messages
|
|
180
|
+
const auditorMatch = enrichedText.match(/^[/@]?auditor[\s:]+(.+)/is);
|
|
179
181
|
if (auditorMatch) {
|
|
180
182
|
const auditorMessage = auditorMatch[1].trim();
|
|
181
183
|
try {
|
|
@@ -197,6 +199,33 @@ export class SlackOrchestratorBridge extends EventEmitter {
|
|
|
197
199
|
}
|
|
198
200
|
return;
|
|
199
201
|
}
|
|
202
|
+
// #177: @mention routing — route to specific agent if @name is detected
|
|
203
|
+
const mentionTarget = await this.resolveMentionTarget(enrichedText);
|
|
204
|
+
if (mentionTarget) {
|
|
205
|
+
const isActive = await isAgentActive(mentionTarget.sessionName);
|
|
206
|
+
if (isActive) {
|
|
207
|
+
this.logger.info('Routing message to mentioned agent', {
|
|
208
|
+
agent: mentionTarget.name,
|
|
209
|
+
session: mentionTarget.sessionName,
|
|
210
|
+
});
|
|
211
|
+
if (this.config.showTypingIndicator) {
|
|
212
|
+
await this.addTypingIndicator(message);
|
|
213
|
+
}
|
|
214
|
+
// Strip the @mention prefix and send to the target agent
|
|
215
|
+
const cleanMessage = enrichedText.replace(new RegExp(`^@${mentionTarget.name}\\s*`, 'i'), '').trim();
|
|
216
|
+
const response = await this.sendToAgent(mentionTarget.sessionName, cleanMessage || enrichedText, context);
|
|
217
|
+
await this.sendSlackResponse(message, response);
|
|
218
|
+
if (this.config.showTypingIndicator) {
|
|
219
|
+
await this.markComplete(message);
|
|
220
|
+
}
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
this.logger.info('Mentioned agent is inactive, falling back to orchestrator', {
|
|
225
|
+
agent: mentionTarget.name,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
200
229
|
// Parse command intent
|
|
201
230
|
const command = this.parseCommand(message.text);
|
|
202
231
|
// Add typing indicator
|
|
@@ -205,6 +234,7 @@ export class SlackOrchestratorBridge extends EventEmitter {
|
|
|
205
234
|
}
|
|
206
235
|
// Handle based on intent
|
|
207
236
|
let response;
|
|
237
|
+
let isOrchestratorRoute = false;
|
|
208
238
|
switch (command.intent) {
|
|
209
239
|
case 'help':
|
|
210
240
|
response = this.getHelpMessage();
|
|
@@ -224,11 +254,20 @@ export class SlackOrchestratorBridge extends EventEmitter {
|
|
|
224
254
|
default:
|
|
225
255
|
// Send to orchestrator for processing
|
|
226
256
|
response = await this.sendToOrchestrator(message.text, context);
|
|
257
|
+
isOrchestratorRoute = true;
|
|
227
258
|
}
|
|
228
259
|
// Send response back to Slack
|
|
229
260
|
await this.sendSlackResponse(message, response);
|
|
230
|
-
//
|
|
231
|
-
|
|
261
|
+
// For orchestrator-routed messages, defer ✅ until reply-slack delivers
|
|
262
|
+
// the actual response. Store pending reaction keyed by channel+thread
|
|
263
|
+
// so addCompletionReaction() can find it when the reply arrives.
|
|
264
|
+
if (isOrchestratorRoute && this.config.showTypingIndicator) {
|
|
265
|
+
const threadTs = message.threadTs || message.ts;
|
|
266
|
+
const key = `${message.channelId}:${threadTs}`;
|
|
267
|
+
this.pendingReactions.set(key, message.ts);
|
|
268
|
+
}
|
|
269
|
+
else if (this.config.showTypingIndicator) {
|
|
270
|
+
// Non-orchestrator commands complete immediately
|
|
232
271
|
await this.markComplete(message);
|
|
233
272
|
}
|
|
234
273
|
this.emit('message_handled', { message, response });
|
|
@@ -360,6 +399,13 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
360
399
|
// Check if orchestrator is active before attempting to send
|
|
361
400
|
const isActive = await isOrchestratorActive();
|
|
362
401
|
if (!isActive) {
|
|
402
|
+
// Fallback: route to Auditor agent if it's active
|
|
403
|
+
const auditorSession = AUDITOR_SCHEDULER_CONSTANTS.AUDITOR_SESSION_NAME;
|
|
404
|
+
const auditorActive = await isAgentActive(auditorSession);
|
|
405
|
+
if (auditorActive) {
|
|
406
|
+
this.logger.info('Orchestrator offline — routing message to Auditor agent');
|
|
407
|
+
return this.sendToAuditorFallback(message, context);
|
|
408
|
+
}
|
|
363
409
|
this.logger.info('Orchestrator is not active, returning offline message');
|
|
364
410
|
return getOrchestratorOfflineMessage(true);
|
|
365
411
|
}
|
|
@@ -392,7 +438,7 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
392
438
|
const timeoutId = setTimeout(() => {
|
|
393
439
|
if (!resolved) {
|
|
394
440
|
resolved = true;
|
|
395
|
-
resolve('The orchestrator is
|
|
441
|
+
resolve('The orchestrator is still processing your request. It will reply here when ready — no need to resend.');
|
|
396
442
|
}
|
|
397
443
|
}, this.config.responseTimeoutMs);
|
|
398
444
|
try {
|
|
@@ -428,6 +474,71 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
428
474
|
throw error;
|
|
429
475
|
}
|
|
430
476
|
}
|
|
477
|
+
/**
|
|
478
|
+
* Route a message to the Auditor agent as a fallback when the orchestrator is offline.
|
|
479
|
+
*
|
|
480
|
+
* Enqueues the message targeting the Auditor's session so the queue processor
|
|
481
|
+
* delivers it to the Auditor PTY instead of the orchestrator. Includes Slack
|
|
482
|
+
* context (channel, thread) so the Auditor can respond.
|
|
483
|
+
*
|
|
484
|
+
* @param message - Original user message
|
|
485
|
+
* @param context - Slack conversation context
|
|
486
|
+
* @returns Acknowledgement message to the user
|
|
487
|
+
*/
|
|
488
|
+
async sendToAuditorFallback(message, context) {
|
|
489
|
+
const auditorSession = AUDITOR_SCHEDULER_CONSTANTS.AUDITOR_SESSION_NAME;
|
|
490
|
+
// Build a context-enriched message so the Auditor knows the source
|
|
491
|
+
const slackPrefix = context
|
|
492
|
+
? `[SLACK_CONTEXT:channelId=${context.channelId},threadTs=${context.threadTs || ''}]`
|
|
493
|
+
: '';
|
|
494
|
+
const enrichedMessage = `${slackPrefix} [FALLBACK] Orchestrator is offline. User message:\n${message}`;
|
|
495
|
+
// Try to enqueue via the message queue (same path as orchestrator delivery)
|
|
496
|
+
if (this.messageQueueService) {
|
|
497
|
+
try {
|
|
498
|
+
// Store in chat history
|
|
499
|
+
const result = await this.chatService.sendMessage({
|
|
500
|
+
content: enrichedMessage,
|
|
501
|
+
conversationId: context?.conversationId,
|
|
502
|
+
metadata: {
|
|
503
|
+
source: 'slack',
|
|
504
|
+
userId: context?.userId,
|
|
505
|
+
channelId: context?.channelId,
|
|
506
|
+
},
|
|
507
|
+
});
|
|
508
|
+
this.messageQueueService.enqueue({
|
|
509
|
+
content: enrichedMessage,
|
|
510
|
+
conversationId: result.conversation.id,
|
|
511
|
+
source: 'slack',
|
|
512
|
+
targetSession: auditorSession,
|
|
513
|
+
sourceMetadata: {
|
|
514
|
+
slackResolve: undefined,
|
|
515
|
+
userId: context?.userId,
|
|
516
|
+
channelId: context?.channelId,
|
|
517
|
+
},
|
|
518
|
+
});
|
|
519
|
+
this.logger.info('Message routed to Auditor agent via queue', { auditorSession });
|
|
520
|
+
return 'The orchestrator is currently offline. Your message has been forwarded to the Auditor agent.';
|
|
521
|
+
}
|
|
522
|
+
catch (err) {
|
|
523
|
+
this.logger.error('Failed to route message to Auditor via queue', {
|
|
524
|
+
error: err instanceof Error ? err.message : String(err),
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
// Last resort: direct delivery via AuditorSchedulerService
|
|
529
|
+
try {
|
|
530
|
+
const { AuditorSchedulerService } = await import('../agent/auditor-scheduler.service.js');
|
|
531
|
+
const scheduler = AuditorSchedulerService.getInstance();
|
|
532
|
+
await scheduler.handleUserMessage(`[FALLBACK] Orchestrator is offline. User message: ${message}`, { channelId: context?.channelId || '', threadTs: context?.threadTs || '' });
|
|
533
|
+
return 'The orchestrator is currently offline. Your message has been forwarded to the Auditor agent.';
|
|
534
|
+
}
|
|
535
|
+
catch (err) {
|
|
536
|
+
this.logger.error('Failed to route message to Auditor via scheduler', {
|
|
537
|
+
error: err instanceof Error ? err.message : String(err),
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
return getOrchestratorOfflineMessage(true);
|
|
541
|
+
}
|
|
431
542
|
/**
|
|
432
543
|
* Refresh file download URLs via the Slack files.info API.
|
|
433
544
|
* The event payload URLs may not work with just the bot token — the
|
|
@@ -759,53 +870,43 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
759
870
|
}
|
|
760
871
|
}
|
|
761
872
|
/**
|
|
762
|
-
*
|
|
873
|
+
* Add ✅ completion reaction to a pending message.
|
|
763
874
|
*
|
|
764
|
-
*
|
|
765
|
-
*
|
|
766
|
-
*
|
|
767
|
-
*
|
|
875
|
+
* Called by the reply-slack API endpoint after successfully delivering
|
|
876
|
+
* the agent's response. Looks up the original user message ts from
|
|
877
|
+
* the pending reactions map (keyed by channelId:threadTs) and adds
|
|
878
|
+
* a white_check_mark reaction.
|
|
768
879
|
*
|
|
769
|
-
* @param
|
|
770
|
-
* @param
|
|
880
|
+
* @param channelId - Slack channel ID
|
|
881
|
+
* @param threadTs - Thread timestamp used in the reply
|
|
771
882
|
*/
|
|
772
|
-
async
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
const trimmed = response?.trim();
|
|
777
|
-
if (!trimmed)
|
|
778
|
-
return;
|
|
779
|
-
// Wait for the reply-slack skill to deliver (it runs asynchronously in the PTY)
|
|
780
|
-
if (this.config.skillDeliveryWaitMs > 0) {
|
|
781
|
-
await new Promise(resolve => setTimeout(resolve, this.config.skillDeliveryWaitMs));
|
|
782
|
-
}
|
|
783
|
-
// Check if the reply-slack skill already delivered to this thread
|
|
784
|
-
const threadTs = originalMessage.threadTs || originalMessage.ts;
|
|
785
|
-
if (this.wasDeliveredBySkill(originalMessage.channelId, threadTs)) {
|
|
786
|
-
this.logger.info('Slack reply already delivered by skill, skipping fallback');
|
|
883
|
+
async addCompletionReaction(channelId, threadTs) {
|
|
884
|
+
const key = `${channelId}:${threadTs}`;
|
|
885
|
+
const originalMessageTs = this.pendingReactions.get(key);
|
|
886
|
+
if (!originalMessageTs) {
|
|
787
887
|
return;
|
|
788
888
|
}
|
|
789
|
-
|
|
889
|
+
this.pendingReactions.delete(key);
|
|
790
890
|
try {
|
|
791
|
-
this.
|
|
792
|
-
const sanitized = this.sanitizeForSlack(trimmed);
|
|
793
|
-
if (!sanitized) {
|
|
794
|
-
this.logger.info('Fallback response empty after sanitization, skipping Slack send');
|
|
795
|
-
return;
|
|
796
|
-
}
|
|
797
|
-
await this.slackService.sendMessage({
|
|
798
|
-
channelId: originalMessage.channelId,
|
|
799
|
-
text: sanitized,
|
|
800
|
-
threadTs,
|
|
801
|
-
});
|
|
891
|
+
await this.slackService.addReaction(channelId, originalMessageTs, 'white_check_mark');
|
|
802
892
|
}
|
|
803
|
-
catch (
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
893
|
+
catch (error) {
|
|
894
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
895
|
+
if (!errorMessage.includes('missing_scope') && !errorMessage.includes('already_reacted')) {
|
|
896
|
+
this.logger.warn('Could not add deferred completion reaction', { error: errorMessage });
|
|
897
|
+
}
|
|
807
898
|
}
|
|
808
899
|
}
|
|
900
|
+
/**
|
|
901
|
+
* Record response to thread store. Slack delivery is handled exclusively
|
|
902
|
+
* by the reply-slack skill via the API — no terminal output fallback needed.
|
|
903
|
+
*
|
|
904
|
+
* @param originalMessage - Original incoming message
|
|
905
|
+
* @param response - Response content
|
|
906
|
+
*/
|
|
907
|
+
async sendSlackResponse(originalMessage, response) {
|
|
908
|
+
await this.recordThreadReply(originalMessage, response);
|
|
909
|
+
}
|
|
809
910
|
/**
|
|
810
911
|
* Send error response
|
|
811
912
|
*
|
|
@@ -837,125 +938,6 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
837
938
|
formatted = formatted.replace(/```[\w]*\n([\s\S]*?)```/g, '```$1```');
|
|
838
939
|
return formatted;
|
|
839
940
|
}
|
|
840
|
-
/**
|
|
841
|
-
* Extract [NOTIFY] payloads from orchestrator output.
|
|
842
|
-
*/
|
|
843
|
-
extractNotifyPayloads(text) {
|
|
844
|
-
if (!text)
|
|
845
|
-
return [];
|
|
846
|
-
const payloads = [];
|
|
847
|
-
const notifyPattern = /\[NOTIFY\]([\s\S]*?)\[\/NOTIFY\]/g;
|
|
848
|
-
let match;
|
|
849
|
-
while ((match = notifyPattern.exec(text)) !== null) {
|
|
850
|
-
const payload = parseNotifyContent(match[1]);
|
|
851
|
-
if (payload) {
|
|
852
|
-
payloads.push(payload);
|
|
853
|
-
}
|
|
854
|
-
}
|
|
855
|
-
return payloads;
|
|
856
|
-
}
|
|
857
|
-
/**
|
|
858
|
-
* Determine whether the response already triggered a Slack delivery via NOTIFY.
|
|
859
|
-
*/
|
|
860
|
-
findSlackPayloadForMessage(message, payloads) {
|
|
861
|
-
const targetChannel = message.channelId;
|
|
862
|
-
const targetThread = message.threadTs || message.ts;
|
|
863
|
-
return payloads.find((payload) => {
|
|
864
|
-
if (!payload.channelId || payload.channelId !== targetChannel) {
|
|
865
|
-
return false;
|
|
866
|
-
}
|
|
867
|
-
if (payload.threadTs && targetThread && payload.threadTs !== targetThread) {
|
|
868
|
-
return false;
|
|
869
|
-
}
|
|
870
|
-
return Boolean(payload.message && payload.message.trim());
|
|
871
|
-
});
|
|
872
|
-
}
|
|
873
|
-
/**
|
|
874
|
-
* Sanitize raw terminal output for Slack delivery.
|
|
875
|
-
*
|
|
876
|
-
* Strips NOTIFY markers/headers, Claude Code UI elements (satisfaction survey,
|
|
877
|
-
* permission prompts, status bar), Gemini CLI TUI elements, box-drawing
|
|
878
|
-
* decoration, and orphaned ANSI sequences.
|
|
879
|
-
*
|
|
880
|
-
* @param raw - Raw terminal text
|
|
881
|
-
* @returns Cleaned text suitable for Slack, or empty string if nothing meaningful remains
|
|
882
|
-
*/
|
|
883
|
-
sanitizeForSlack(raw) {
|
|
884
|
-
return raw
|
|
885
|
-
// Strip [NOTIFY] / [/NOTIFY] tags
|
|
886
|
-
.replace(/\[\/?NOTIFY\]/g, '')
|
|
887
|
-
// Strip NOTIFY metadata headers
|
|
888
|
-
.replace(/^conversationId:.*$/gm, '')
|
|
889
|
-
.replace(/^channelId:.*$/gm, '')
|
|
890
|
-
.replace(/^threadTs:.*$/gm, '')
|
|
891
|
-
.replace(/^type:.*$/gm, '')
|
|
892
|
-
.replace(/^title:.*$/gm, '')
|
|
893
|
-
.replace(/^urgency:.*$/gm, '')
|
|
894
|
-
.replace(/^---$/gm, '')
|
|
895
|
-
// Strip Claude Code UI elements
|
|
896
|
-
.replace(/^.*How is Claude doing this session\?.*$/gm, '')
|
|
897
|
-
.replace(/^.*\d:\s*Bad\s+\d:\s*Fine\s+\d:\s*Good\s+\d:\s*Dismiss.*$/gm, '')
|
|
898
|
-
.replace(/^.*bypass permissions on.*$/gm, '')
|
|
899
|
-
.replace(/^.*shift\+tab to cycle.*$/gm, '')
|
|
900
|
-
.replace(/^.*esc to (?:interrupt|cancel|\.\.\.).*$/gmi, '')
|
|
901
|
-
.replace(/^.*Use meta\+t to toggle.*$/gmi, '')
|
|
902
|
-
.replace(/^.*ctrl\+g to edi.*$/gmi, '')
|
|
903
|
-
.replace(/^.*Osmosing.*$/gm, '')
|
|
904
|
-
.replace(/^.*✻ Baked for.*$/gm, '')
|
|
905
|
-
.replace(/^.*✢ Osmosing.*$/gm, '')
|
|
906
|
-
.replace(/^.*running stop hook.*$/gmi, '')
|
|
907
|
-
// Strip Claude Code tool indicators and prompt markers
|
|
908
|
-
.replace(/^[⏺⏵❯✻✢✽●·]\s*$/gm, '')
|
|
909
|
-
.replace(/^[⏺⏵]\s+.*$/gm, '')
|
|
910
|
-
// Strip Gemini CLI TUI elements
|
|
911
|
-
.replace(/^.*(?:Type\s+your\s+message|YOLO\s+mode|no\s+sandbox|context\s+left\)).*$/gmi, '')
|
|
912
|
-
.replace(/^.*(?:Initiating\s+File\s+Inspection).*$/gmi, '')
|
|
913
|
-
// Strip TUI box-drawing border characters
|
|
914
|
-
.replace(/^[\s│┃║|]+|[\s│┃║|]+$/gm, '')
|
|
915
|
-
// Remove pure decoration lines (corners, horizontal rules, dots)
|
|
916
|
-
.replace(/^[─━┄┅┈┉╌╍═┌┐└┘├┤┬┴┼╔╗╚╝╠╣╦╩╬╭╮╰╯\-+\s▪▫■□●○◆◇•·]+$/gm, '')
|
|
917
|
-
// Strip orphaned ANSI CSI sequences
|
|
918
|
-
.replace(/\[\d+(?:;\d+)*[A-BJKHfm]/g, '')
|
|
919
|
-
// Strip CHAT: session header lines
|
|
920
|
-
.replace(/^.*\[CHAT:slack-[^\]]+\].*$/gm, '')
|
|
921
|
-
// Strip thread context file lines
|
|
922
|
-
.replace(/^\[Thread context file:.*\]$/gm, '')
|
|
923
|
-
// Collapse multiple blank lines
|
|
924
|
-
.replace(/\n{3,}/g, '\n\n')
|
|
925
|
-
.trim();
|
|
926
|
-
}
|
|
927
|
-
/**
|
|
928
|
-
* Build a Slack-friendly fallback response when no NOTIFY payload targeted Slack.
|
|
929
|
-
*/
|
|
930
|
-
buildFallbackResponse(raw, payloads) {
|
|
931
|
-
const chatMessages = payloads
|
|
932
|
-
.filter((payload) => payload.message && !payload.channelId)
|
|
933
|
-
.map((payload) => payload.message.trim())
|
|
934
|
-
.filter(Boolean);
|
|
935
|
-
if (chatMessages.length > 0) {
|
|
936
|
-
return chatMessages.join('\n\n');
|
|
937
|
-
}
|
|
938
|
-
const cleaned = raw
|
|
939
|
-
.replace(/\[\/?NOTIFY\]/g, '')
|
|
940
|
-
.replace(/^conversationId:.*$/gm, '')
|
|
941
|
-
.replace(/^channelId:.*$/gm, '')
|
|
942
|
-
.replace(/^threadTs:.*$/gm, '')
|
|
943
|
-
.replace(/^type:.*$/gm, '')
|
|
944
|
-
.replace(/^title:.*$/gm, '')
|
|
945
|
-
.replace(/^urgency:.*$/gm, '')
|
|
946
|
-
.replace(/^---$/gm, '')
|
|
947
|
-
// Strip TUI box-drawing border characters from Gemini CLI output
|
|
948
|
-
.replace(/^[\s│┃║|]+|[\s│┃║|]+$/gm, '')
|
|
949
|
-
// Remove pure decoration lines (corners, horizontal rules)
|
|
950
|
-
.replace(/^[─━┄┅┈┉╌╍═┌┐└┘├┤┬┴┼╔╗╚╝╠╣╦╩╬╭╮╰╯\-+\s]+$/gm, '')
|
|
951
|
-
// Strip orphaned multi-param ANSI CSI sequences (e.g. [38;2;249;226;175m)
|
|
952
|
-
.replace(/\[\d+(?:;\d+)*[A-BJKHfm]/g, '')
|
|
953
|
-
// Remove Gemini CLI TUI elements that leak into output
|
|
954
|
-
.replace(/^.*(?:Type\s+your\s+message|YOLO\s+mode|no\s+sandbox|context\s+left\)).*$/gmi, '')
|
|
955
|
-
.replace(/^.*(?:esc\s+to\s+cancel|Initiating\s+File\s+Inspection).*$/gmi, '')
|
|
956
|
-
.trim();
|
|
957
|
-
return cleaned;
|
|
958
|
-
}
|
|
959
941
|
/**
|
|
960
942
|
* Persist Slack reply content to the thread store when available.
|
|
961
943
|
*/
|
|
@@ -975,40 +957,6 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
975
957
|
this.logger.warn('Failed to store thread reply', { error: err instanceof Error ? err.message : String(err) });
|
|
976
958
|
}
|
|
977
959
|
}
|
|
978
|
-
/**
|
|
979
|
-
* Mark a channel+thread pair as already delivered to Slack by the reply-slack skill.
|
|
980
|
-
* Called by TerminalGateway.handleNotifyPayload when a slack_reply NOTIFY is processed.
|
|
981
|
-
*
|
|
982
|
-
* @param channelId - Slack channel ID
|
|
983
|
-
* @param threadTs - Thread timestamp (optional)
|
|
984
|
-
*/
|
|
985
|
-
markDeliveredBySkill(channelId, threadTs) {
|
|
986
|
-
const key = `${channelId}:${threadTs || ''}`;
|
|
987
|
-
this.skillDeliveredThreads.add(key);
|
|
988
|
-
// Evict oldest entries if set is too large
|
|
989
|
-
if (this.skillDeliveredThreads.size > SlackOrchestratorBridge.MAX_SKILL_DELIVERY_RECORDS) {
|
|
990
|
-
const first = this.skillDeliveredThreads.values().next().value;
|
|
991
|
-
if (first !== undefined) {
|
|
992
|
-
this.skillDeliveredThreads.delete(first);
|
|
993
|
-
}
|
|
994
|
-
}
|
|
995
|
-
}
|
|
996
|
-
/**
|
|
997
|
-
* Check if a channel+thread pair was already delivered by the reply-slack skill.
|
|
998
|
-
*
|
|
999
|
-
* @param channelId - Slack channel ID
|
|
1000
|
-
* @param threadTs - Thread timestamp (optional)
|
|
1001
|
-
* @returns true if delivery was already handled by the skill
|
|
1002
|
-
*/
|
|
1003
|
-
wasDeliveredBySkill(channelId, threadTs) {
|
|
1004
|
-
const key = `${channelId}:${threadTs || ''}`;
|
|
1005
|
-
if (this.skillDeliveredThreads.has(key)) {
|
|
1006
|
-
// Remove after check to avoid permanent blocking of future replies to same thread
|
|
1007
|
-
this.skillDeliveredThreads.delete(key);
|
|
1008
|
-
return true;
|
|
1009
|
-
}
|
|
1010
|
-
return false;
|
|
1011
|
-
}
|
|
1012
960
|
/**
|
|
1013
961
|
* Send proactive notification to Slack
|
|
1014
962
|
*
|
|
@@ -1084,6 +1032,123 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
1084
1032
|
timestamp: new Date().toISOString(),
|
|
1085
1033
|
});
|
|
1086
1034
|
}
|
|
1035
|
+
/**
|
|
1036
|
+
* Resolve @mention in message text to an agent session (#177).
|
|
1037
|
+
*
|
|
1038
|
+
* Matches patterns: @assistant, @auditor, @sam, @leo, etc.
|
|
1039
|
+
* Looks up the agent name in team configs to find the session name.
|
|
1040
|
+
*
|
|
1041
|
+
* @param text - Message text to scan for @mentions
|
|
1042
|
+
* @returns Target agent info, or null if no mention found
|
|
1043
|
+
*/
|
|
1044
|
+
async resolveMentionTarget(text) {
|
|
1045
|
+
// Match @name at the start of the message
|
|
1046
|
+
const mentionMatch = text.match(/^@(\w+)\s/i);
|
|
1047
|
+
if (!mentionMatch)
|
|
1048
|
+
return null;
|
|
1049
|
+
const mentionedName = mentionMatch[1].toLowerCase();
|
|
1050
|
+
// Built-in aliases
|
|
1051
|
+
const aliases = {
|
|
1052
|
+
assistant: 'crewly-orc-assistant',
|
|
1053
|
+
auditor: 'crewly-auditor',
|
|
1054
|
+
orc: 'crewly-orc',
|
|
1055
|
+
orchestrator: 'crewly-orc',
|
|
1056
|
+
};
|
|
1057
|
+
if (aliases[mentionedName]) {
|
|
1058
|
+
return { name: mentionedName, sessionName: aliases[mentionedName] };
|
|
1059
|
+
}
|
|
1060
|
+
// Look up in team configs
|
|
1061
|
+
try {
|
|
1062
|
+
const StorageService = (await import('../core/storage.service.js')).StorageService;
|
|
1063
|
+
const storage = StorageService.getInstance();
|
|
1064
|
+
const teams = await storage.getTeams();
|
|
1065
|
+
for (const team of teams) {
|
|
1066
|
+
for (const member of (team.members || [])) {
|
|
1067
|
+
// Match by name (case-insensitive) or session name fragment
|
|
1068
|
+
const memberName = member.name?.toLowerCase() || '';
|
|
1069
|
+
const sessionParts = (member.sessionName || '').split('-');
|
|
1070
|
+
const shortName = sessionParts.length >= 3 ? sessionParts[2] : '';
|
|
1071
|
+
if (memberName === mentionedName || shortName === mentionedName) {
|
|
1072
|
+
return { name: mentionedName, sessionName: member.sessionName };
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
}
|
|
1077
|
+
catch (err) {
|
|
1078
|
+
this.logger.warn('Failed to look up mention target', {
|
|
1079
|
+
mention: mentionedName,
|
|
1080
|
+
error: err instanceof Error ? err.message : String(err),
|
|
1081
|
+
});
|
|
1082
|
+
}
|
|
1083
|
+
return null;
|
|
1084
|
+
}
|
|
1085
|
+
/**
|
|
1086
|
+
* Send a message to a specific agent session via terminal deliver (#177).
|
|
1087
|
+
*
|
|
1088
|
+
* @param sessionName - Target agent session
|
|
1089
|
+
* @param message - Message to send
|
|
1090
|
+
* @param context - Slack context for response routing
|
|
1091
|
+
* @returns Agent response text
|
|
1092
|
+
*/
|
|
1093
|
+
async sendToAgent(sessionName, message, context) {
|
|
1094
|
+
try {
|
|
1095
|
+
// Enrich with Slack context for reply routing
|
|
1096
|
+
let enrichedMessage = message;
|
|
1097
|
+
if (context) {
|
|
1098
|
+
enrichedMessage = `[SLACK_CONTEXT:channelId=${context.channelId},threadTs=${context.threadTs || ''}]\n${message}`;
|
|
1099
|
+
}
|
|
1100
|
+
// Use message queue for agents that support it, or deliver directly
|
|
1101
|
+
if (this.messageQueueService) {
|
|
1102
|
+
const chatResult = await this.chatService.sendMessage({
|
|
1103
|
+
content: enrichedMessage,
|
|
1104
|
+
conversationId: context?.conversationId,
|
|
1105
|
+
metadata: { source: 'slack', channelId: context?.channelId },
|
|
1106
|
+
});
|
|
1107
|
+
return new Promise((resolve) => {
|
|
1108
|
+
let resolved = false;
|
|
1109
|
+
const timeoutId = setTimeout(() => {
|
|
1110
|
+
if (!resolved) {
|
|
1111
|
+
resolved = true;
|
|
1112
|
+
resolve('Agent is processing your message. Check back shortly.');
|
|
1113
|
+
}
|
|
1114
|
+
}, this.config.responseTimeoutMs);
|
|
1115
|
+
this.messageQueueService.enqueue({
|
|
1116
|
+
content: enrichedMessage,
|
|
1117
|
+
conversationId: chatResult.conversation.id,
|
|
1118
|
+
source: 'slack',
|
|
1119
|
+
targetSession: sessionName,
|
|
1120
|
+
sourceMetadata: {
|
|
1121
|
+
slackResolve: (resp) => {
|
|
1122
|
+
if (!resolved) {
|
|
1123
|
+
resolved = true;
|
|
1124
|
+
clearTimeout(timeoutId);
|
|
1125
|
+
resolve(resp);
|
|
1126
|
+
}
|
|
1127
|
+
},
|
|
1128
|
+
channelId: context?.channelId,
|
|
1129
|
+
threadTs: context?.threadTs,
|
|
1130
|
+
},
|
|
1131
|
+
});
|
|
1132
|
+
});
|
|
1133
|
+
}
|
|
1134
|
+
// Fallback: direct terminal delivery
|
|
1135
|
+
const { default: fetch } = await import('node-fetch').catch(() => ({ default: globalThis.fetch }));
|
|
1136
|
+
const apiUrl = process.env.CREWLY_API_URL || 'http://localhost:8787';
|
|
1137
|
+
await fetch(`${apiUrl}/api/terminal/${sessionName}/deliver`, {
|
|
1138
|
+
method: 'POST',
|
|
1139
|
+
headers: { 'Content-Type': 'application/json' },
|
|
1140
|
+
body: JSON.stringify({ message: enrichedMessage, force: true }),
|
|
1141
|
+
});
|
|
1142
|
+
return 'Message delivered to agent. Response will arrive shortly.';
|
|
1143
|
+
}
|
|
1144
|
+
catch (err) {
|
|
1145
|
+
this.logger.error('Failed to send to agent', {
|
|
1146
|
+
session: sessionName,
|
|
1147
|
+
error: err instanceof Error ? err.message : String(err),
|
|
1148
|
+
});
|
|
1149
|
+
return `Failed to reach agent. Error: ${err instanceof Error ? err.message : String(err)}`;
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1087
1152
|
}
|
|
1088
1153
|
/**
|
|
1089
1154
|
* Get bridge singleton
|