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
|
@@ -11,13 +11,6 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { LoggerService } from '../services/core/logger.service.js';
|
|
13
13
|
import { getSessionBackendSync, } from '../services/session/index.js';
|
|
14
|
-
import { getChatGateway } from './chat.gateway.js';
|
|
15
|
-
import { ORCHESTRATOR_SESSION_NAME, NOTIFY_CONSTANTS, SLACK_NOTIFY_CONSTANTS, TERMINAL_GATEWAY_CONSTANTS } from '../constants.js';
|
|
16
|
-
import { getSlackOrchestratorBridge } from '../services/slack/slack-orchestrator-bridge.js';
|
|
17
|
-
import { getChatService } from '../services/chat/chat.service.js';
|
|
18
|
-
import { stripAnsiCodes, generateResponseHash, ResponseDeduplicator } from '../utils/terminal-output.utils.js';
|
|
19
|
-
import { extractConversationId, extractMarkerBlocks, extractChatResponseBlocks } from '../utils/terminal-string-ops.js';
|
|
20
|
-
import { parseNotifyContent } from '../types/chat.types.js';
|
|
21
14
|
import { InProcessLogBuffer } from '../services/agent/crewly-agent/in-process-log-buffer.js';
|
|
22
15
|
/**
|
|
23
16
|
* Terminal Gateway class for WebSocket-based terminal streaming.
|
|
@@ -39,26 +32,6 @@ export class TerminalGateway {
|
|
|
39
32
|
persistentMonitoringSessions = new Set();
|
|
40
33
|
/** Current active chat conversation ID for orchestrator responses */
|
|
41
34
|
activeConversationId = null;
|
|
42
|
-
/** Per-session buffers for [NOTIFY] / legacy marker detection */
|
|
43
|
-
sessionOutputBuffers = new Map();
|
|
44
|
-
/** Maximum buffer size to prevent memory issues (100KB) */
|
|
45
|
-
MAX_BUFFER_SIZE = TERMINAL_GATEWAY_CONSTANTS.MAX_BUFFER_SIZE;
|
|
46
|
-
/** Deduplicator for recently sent chat responses */
|
|
47
|
-
responseDeduplicator = new ResponseDeduplicator();
|
|
48
|
-
/**
|
|
49
|
-
* Google Chat thread tracking for auto-routing follow-up NOTIFY messages.
|
|
50
|
-
* Key: space name (e.g. "spaces/jycUeSAAAAE"), value: thread name.
|
|
51
|
-
* Populated when the queue processor delivers a GCHAT message (via the
|
|
52
|
-
* google-chat-initializer sourceMetadata). Read by the NOTIFY handler
|
|
53
|
-
* to send follow-up messages to the correct thread.
|
|
54
|
-
*/
|
|
55
|
-
gchatThreadMap = new Map();
|
|
56
|
-
/**
|
|
57
|
-
* Sessions running Gemini CLI — NOTIFY marker processing is skipped for
|
|
58
|
-
* these because Gemini TUI garbles markers. They use reply-gchat/reply-slack
|
|
59
|
-
* skills for response delivery instead.
|
|
60
|
-
*/
|
|
61
|
-
geminiCliSessions = new Set();
|
|
62
35
|
/**
|
|
63
36
|
* Sessions in read-only mode for security auditing.
|
|
64
37
|
* Terminal output is streamed normally, but all input is blocked.
|
|
@@ -86,29 +59,6 @@ export class TerminalGateway {
|
|
|
86
59
|
this.setupEventHandlers();
|
|
87
60
|
this.setupInProcessLogStreaming();
|
|
88
61
|
}
|
|
89
|
-
/**
|
|
90
|
-
* Get the output buffer for a specific session.
|
|
91
|
-
*
|
|
92
|
-
* @param sessionName - The session name
|
|
93
|
-
* @returns The current buffer content
|
|
94
|
-
*/
|
|
95
|
-
getSessionBuffer(sessionName) {
|
|
96
|
-
return this.sessionOutputBuffers.get(sessionName) || '';
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Set the output buffer for a specific session.
|
|
100
|
-
*
|
|
101
|
-
* @param sessionName - The session name
|
|
102
|
-
* @param value - The new buffer content
|
|
103
|
-
*/
|
|
104
|
-
setSessionBuffer(sessionName, value) {
|
|
105
|
-
if (value.length === 0) {
|
|
106
|
-
this.sessionOutputBuffers.delete(sessionName);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
this.sessionOutputBuffers.set(sessionName, value);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
62
|
/**
|
|
113
63
|
* Set up WebSocket event handlers.
|
|
114
64
|
*/
|
|
@@ -360,9 +310,6 @@ export class TerminalGateway {
|
|
|
360
310
|
unsubscribe();
|
|
361
311
|
this.sessionSubscriptions.delete(sessionName);
|
|
362
312
|
}
|
|
363
|
-
// Clear the output buffer and response hash cache for fresh monitoring
|
|
364
|
-
this.setSessionBuffer(sessionName, '');
|
|
365
|
-
this.responseDeduplicator.clear();
|
|
366
313
|
// Mark session as persistent so it won't be stopped when clients disconnect
|
|
367
314
|
this.persistentMonitoringSessions.add(sessionName);
|
|
368
315
|
const started = this.startPtyStreaming(sessionName);
|
|
@@ -551,343 +498,6 @@ export class TerminalGateway {
|
|
|
551
498
|
timestamp: new Date().toISOString(),
|
|
552
499
|
};
|
|
553
500
|
this.io.to(`terminal_${sessionName}`).emit('terminal_output', message);
|
|
554
|
-
// Process terminal output for [NOTIFY] markers and chat responses.
|
|
555
|
-
// Skip Gemini CLI sessions — their TUI garbles NOTIFY markers, producing
|
|
556
|
-
// false matches with raw artifacts. Gemini CLI agents use reply-gchat and
|
|
557
|
-
// reply-slack skills for response delivery instead of NOTIFY markers.
|
|
558
|
-
if (!this.geminiCliSessions.has(sessionName)) {
|
|
559
|
-
this.processOrchestratorOutputForChat(sessionName, output.content);
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
/**
|
|
563
|
-
* Process orchestrator terminal output for [NOTIFY], legacy [CHAT_RESPONSE],
|
|
564
|
-
* and legacy [SLACK_NOTIFY] markers.
|
|
565
|
-
*
|
|
566
|
-
* Buffers output, then runs the unified [NOTIFY] handler first, followed by
|
|
567
|
-
* legacy handlers for backward compatibility with orchestrators that haven't
|
|
568
|
-
* restarted yet.
|
|
569
|
-
*
|
|
570
|
-
* @param sessionName - The orchestrator session name
|
|
571
|
-
* @param content - The terminal output content
|
|
572
|
-
*/
|
|
573
|
-
processOrchestratorOutputForChat(sessionName, content) {
|
|
574
|
-
const chatGateway = getChatGateway();
|
|
575
|
-
if (!chatGateway) {
|
|
576
|
-
this.logger.debug('Chat gateway not available for response processing');
|
|
577
|
-
return;
|
|
578
|
-
}
|
|
579
|
-
const cleanContent = stripAnsiCodes(content);
|
|
580
|
-
// Extract conversation ID from the output if present
|
|
581
|
-
// The format is [CHAT:conversationId] at the start of a response
|
|
582
|
-
const extractedConvId = extractConversationId(cleanContent);
|
|
583
|
-
if (extractedConvId) {
|
|
584
|
-
this.logger.debug('Extracted conversation ID from output', { conversationId: extractedConvId });
|
|
585
|
-
this.activeConversationId = extractedConvId;
|
|
586
|
-
}
|
|
587
|
-
// Always buffer content per session — notifications don't require a conversation ID
|
|
588
|
-
const currentBuffer = this.getSessionBuffer(sessionName) + cleanContent;
|
|
589
|
-
// Prevent buffer from growing too large
|
|
590
|
-
if (currentBuffer.length > this.MAX_BUFFER_SIZE) {
|
|
591
|
-
this.setSessionBuffer(sessionName, currentBuffer.slice(-this.MAX_BUFFER_SIZE / 2));
|
|
592
|
-
}
|
|
593
|
-
else {
|
|
594
|
-
this.setSessionBuffer(sessionName, currentBuffer);
|
|
595
|
-
}
|
|
596
|
-
// Process unified [NOTIFY] markers first (preferred format)
|
|
597
|
-
this.processNotifyMarkers(sessionName);
|
|
598
|
-
// Process legacy [CHAT_RESPONSE] markers for backward compatibility
|
|
599
|
-
this.processLegacyChatResponse(sessionName);
|
|
600
|
-
// Process legacy [SLACK_NOTIFY] markers for backward compatibility
|
|
601
|
-
this.processLegacySlackNotifications(sessionName);
|
|
602
|
-
this.trimBufferIfNoOpenMarkers(sessionName);
|
|
603
|
-
}
|
|
604
|
-
/**
|
|
605
|
-
* Build a SlackNotification from a NotifyPayload.
|
|
606
|
-
*
|
|
607
|
-
* @param payload - Parsed notify payload
|
|
608
|
-
* @returns SlackNotification with defaults applied
|
|
609
|
-
*/
|
|
610
|
-
buildSlackNotification(payload) {
|
|
611
|
-
return {
|
|
612
|
-
type: (payload.type || 'alert'),
|
|
613
|
-
title: payload.title || payload.type || 'Notification',
|
|
614
|
-
message: payload.message,
|
|
615
|
-
urgency: payload.urgency || 'normal',
|
|
616
|
-
timestamp: new Date().toISOString(),
|
|
617
|
-
channelId: payload.channelId,
|
|
618
|
-
threadTs: payload.threadTs,
|
|
619
|
-
};
|
|
620
|
-
}
|
|
621
|
-
/**
|
|
622
|
-
* Send a notification to the Slack bridge with error handling.
|
|
623
|
-
*
|
|
624
|
-
* @param notification - The Slack notification to send
|
|
625
|
-
* @param context - Description of the call site for logging
|
|
626
|
-
*/
|
|
627
|
-
sendToSlackBridge(notification, context) {
|
|
628
|
-
const bridge = getSlackOrchestratorBridge();
|
|
629
|
-
if (bridge.isInitialized()) {
|
|
630
|
-
this.logger.info(`Routing ${context} to Slack`, {
|
|
631
|
-
type: notification.type,
|
|
632
|
-
channelId: notification.channelId,
|
|
633
|
-
});
|
|
634
|
-
bridge.sendNotification(notification).catch((error) => {
|
|
635
|
-
this.logger.warn(`Failed to route ${context} to Slack`, {
|
|
636
|
-
error: error instanceof Error ? error.message : String(error),
|
|
637
|
-
type: notification.type,
|
|
638
|
-
});
|
|
639
|
-
});
|
|
640
|
-
}
|
|
641
|
-
else {
|
|
642
|
-
this.logger.warn(`Slack bridge not initialized, skipping ${context}`, {
|
|
643
|
-
type: notification.type,
|
|
644
|
-
});
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
/**
|
|
648
|
-
* Process unified [NOTIFY]...[/NOTIFY] markers from the orchestrator output buffer.
|
|
649
|
-
*
|
|
650
|
-
* Parses header+body (or legacy JSON) payload via `parseNotifyContent()` and
|
|
651
|
-
* routes to chat, Slack, or both based on which fields are present:
|
|
652
|
-
* - `conversationId` present → route to chat UI
|
|
653
|
-
* - `channelId` present → route to Slack (via skill)
|
|
654
|
-
* - Both → both (common case for Slack conversation replies)
|
|
655
|
-
* - No conversationId + activeConversationId exists → fallback to chat
|
|
656
|
-
* - `type` alone (no conversationId) → dropped (system event, not a conversation reply)
|
|
657
|
-
*
|
|
658
|
-
* @param sessionName - The orchestrator session name
|
|
659
|
-
*/
|
|
660
|
-
/**
|
|
661
|
-
* Process unified [NOTIFY]...[/NOTIFY] markers from the orchestrator output buffer.
|
|
662
|
-
*
|
|
663
|
-
* Filters out false positives from Claude Code tool output display.
|
|
664
|
-
* When Claude Code reads files (e.g., prompt.md) or runs bash commands,
|
|
665
|
-
* the displayed output may contain [NOTIFY] example blocks. These are
|
|
666
|
-
* detected by checking for the ⏺ tool indicator in the text preceding
|
|
667
|
-
* each match — real NOTIFY blocks are direct AI output (no tool indicator).
|
|
668
|
-
*
|
|
669
|
-
* @param sessionName - The orchestrator session name
|
|
670
|
-
*/
|
|
671
|
-
processNotifyMarkers(sessionName) {
|
|
672
|
-
const buffer = this.getSessionBuffer(sessionName);
|
|
673
|
-
if (!buffer.includes(NOTIFY_CONSTANTS.OPEN_TAG)) {
|
|
674
|
-
return;
|
|
675
|
-
}
|
|
676
|
-
const blocks = extractMarkerBlocks(buffer, NOTIFY_CONSTANTS.OPEN_TAG, NOTIFY_CONSTANTS.CLOSE_TAG);
|
|
677
|
-
let lastMatchEnd = 0;
|
|
678
|
-
let inToolOutput = false;
|
|
679
|
-
for (const block of blocks) {
|
|
680
|
-
// Check if this NOTIFY block is inside Claude Code tool output.
|
|
681
|
-
// Tool output is preceded by ⏺ (U+23FA). Look at the text between
|
|
682
|
-
// the previous match end and this match start for state transitions:
|
|
683
|
-
// - ⏺ with no following ❯ → entering/still in tool output
|
|
684
|
-
// - ❯ after ⏺ → tool output ended, back to direct AI output
|
|
685
|
-
const gapText = buffer.slice(lastMatchEnd, block.startIndex);
|
|
686
|
-
if (gapText.includes('⏺')) {
|
|
687
|
-
inToolOutput = true;
|
|
688
|
-
}
|
|
689
|
-
if (gapText.includes('❯')) {
|
|
690
|
-
inToolOutput = false;
|
|
691
|
-
}
|
|
692
|
-
if (inToolOutput) {
|
|
693
|
-
this.logger.debug('Skipping NOTIFY inside tool output (false positive)', {
|
|
694
|
-
matchStart: block.startIndex,
|
|
695
|
-
gapSnippet: gapText.slice(-80),
|
|
696
|
-
});
|
|
697
|
-
lastMatchEnd = block.endIndex;
|
|
698
|
-
continue;
|
|
699
|
-
}
|
|
700
|
-
const rawContent = block.content;
|
|
701
|
-
lastMatchEnd = block.endIndex;
|
|
702
|
-
const payload = parseNotifyContent(rawContent);
|
|
703
|
-
if (!payload) {
|
|
704
|
-
this.logger.warn('Invalid or empty NOTIFY payload', {
|
|
705
|
-
rawContent: rawContent.slice(0, 200),
|
|
706
|
-
});
|
|
707
|
-
continue;
|
|
708
|
-
}
|
|
709
|
-
this.logger.debug('Detected NOTIFY marker in orchestrator output', {
|
|
710
|
-
contentLength: payload.message.length,
|
|
711
|
-
});
|
|
712
|
-
// Fire-and-forget to keep PTY non-blocking
|
|
713
|
-
void this.handleNotifyPayload(sessionName, payload).catch(error => {
|
|
714
|
-
this.logger.warn('Error handling NOTIFY payload', {
|
|
715
|
-
error: error instanceof Error ? error.message : String(error),
|
|
716
|
-
});
|
|
717
|
-
});
|
|
718
|
-
}
|
|
719
|
-
// Remove processed NOTIFY blocks from buffer
|
|
720
|
-
if (lastMatchEnd > 0) {
|
|
721
|
-
this.setSessionBuffer(sessionName, buffer.slice(lastMatchEnd));
|
|
722
|
-
}
|
|
723
|
-
}
|
|
724
|
-
/**
|
|
725
|
-
* Handle a single parsed NOTIFY payload — route to chat and/or Slack.
|
|
726
|
-
*
|
|
727
|
-
* When a channelId is present, Slack delivery metadata is stored on the chat
|
|
728
|
-
* message with `slackDeliveryStatus: 'pending'`. On successful Slack delivery,
|
|
729
|
-
* the status is updated to `'delivered'`. On failure, the error and attempt count
|
|
730
|
-
* are recorded, and the reconciliation service will retry later.
|
|
731
|
-
*
|
|
732
|
-
* @param sessionName - The orchestrator session name
|
|
733
|
-
* @param payload - Parsed NOTIFY payload
|
|
734
|
-
*/
|
|
735
|
-
async handleNotifyPayload(sessionName, payload) {
|
|
736
|
-
// Fallback to activeConversationId unless payload.type is set without
|
|
737
|
-
// a conversationId — those are system event notifications (e.g. status
|
|
738
|
-
// updates) that should NOT land in a chat conversation.
|
|
739
|
-
// channelId / threadTs are Slack routing hints and do NOT prevent
|
|
740
|
-
// the message from also appearing in the chat UI.
|
|
741
|
-
const canFallbackToActiveConversation = !payload.conversationId
|
|
742
|
-
&& !payload.type;
|
|
743
|
-
const conversationId = payload.conversationId
|
|
744
|
-
|| (canFallbackToActiveConversation ? this.activeConversationId : null);
|
|
745
|
-
// Build metadata dict with NOTIFY fields for the chat message.
|
|
746
|
-
// NOTE: Do NOT set slackDeliveryStatus here. Slack delivery is handled
|
|
747
|
-
// exclusively by the reply-slack skill. Setting 'pending' here caused
|
|
748
|
-
// the NotifyReconciliationService to trigger redundant retry storms
|
|
749
|
-
// for messages that were already delivered by the skill (#retry-storm fix).
|
|
750
|
-
const metadata = {};
|
|
751
|
-
if (payload.channelId) {
|
|
752
|
-
metadata.slackChannelId = payload.channelId;
|
|
753
|
-
if (payload.threadTs)
|
|
754
|
-
metadata.slackThreadTs = payload.threadTs;
|
|
755
|
-
}
|
|
756
|
-
if (payload.type)
|
|
757
|
-
metadata.notifyType = payload.type;
|
|
758
|
-
if (payload.title)
|
|
759
|
-
metadata.notifyTitle = payload.title;
|
|
760
|
-
if (payload.urgency)
|
|
761
|
-
metadata.notifyUrgency = payload.urgency;
|
|
762
|
-
// Route to chat service — this emits the ChatMessage event that
|
|
763
|
-
// QueueProcessor.waitForResponse() listens for to resolve responses.
|
|
764
|
-
// Google Chat replies ultimately go through the googleChatResolve callback
|
|
765
|
-
// (queue processor → response router), but the ChatMessage emission is
|
|
766
|
-
// still needed for waitForResponse to detect the response.
|
|
767
|
-
// The responseDeduplicator prevents duplicate messages from PTY re-renders.
|
|
768
|
-
const isGoogleChatConversation = conversationId?.startsWith('spaces/') ?? false;
|
|
769
|
-
let chatMessage = null;
|
|
770
|
-
if (conversationId) {
|
|
771
|
-
const responseHash = generateResponseHash(conversationId, payload.message);
|
|
772
|
-
if (!this.responseDeduplicator.isDuplicate(responseHash)) {
|
|
773
|
-
this.logger.info('Routing NOTIFY to chat', {
|
|
774
|
-
conversationId,
|
|
775
|
-
contentLength: payload.message.length,
|
|
776
|
-
isGoogleChat: isGoogleChatConversation,
|
|
777
|
-
});
|
|
778
|
-
const chatGateway = getChatGateway();
|
|
779
|
-
if (chatGateway) {
|
|
780
|
-
chatMessage = await chatGateway.processNotifyMessage(sessionName, payload.message, conversationId, Object.keys(metadata).length > 0 ? metadata : undefined);
|
|
781
|
-
}
|
|
782
|
-
}
|
|
783
|
-
else {
|
|
784
|
-
this.logger.debug('Skipping duplicate NOTIFY chat message', {
|
|
785
|
-
conversationId,
|
|
786
|
-
contentLength: payload.message.length,
|
|
787
|
-
});
|
|
788
|
-
}
|
|
789
|
-
}
|
|
790
|
-
if (!conversationId && payload.type) {
|
|
791
|
-
this.logger.debug('Dropping non-conversation NOTIFY payload to avoid cross-thread event leakage', {
|
|
792
|
-
type: payload.type,
|
|
793
|
-
hasChannelId: Boolean(payload.channelId),
|
|
794
|
-
});
|
|
795
|
-
}
|
|
796
|
-
// Slack delivery is handled exclusively by the reply-slack skill
|
|
797
|
-
// (which calls /api/slack/send directly). Do NOT route NOTIFY payloads
|
|
798
|
-
// to Slack here — PTY re-renders cause duplicate detections with partial
|
|
799
|
-
// content, and the timing is unreliable (NOTIFY fires before the skill).
|
|
800
|
-
// NOTIFY is only for routing responses to the chat UI above.
|
|
801
|
-
if (payload.channelId) {
|
|
802
|
-
this.logger.debug('NOTIFY has channelId but Slack delivery is skill-handled, skipping', {
|
|
803
|
-
channelId: payload.channelId,
|
|
804
|
-
type: payload.type,
|
|
805
|
-
});
|
|
806
|
-
// Track that this channel+thread was handled by skill so the
|
|
807
|
-
// SlackBridge's sendSlackResponse fallback can skip its duplicate send.
|
|
808
|
-
const bridge = getSlackOrchestratorBridge();
|
|
809
|
-
if (bridge.isInitialized()) {
|
|
810
|
-
bridge.markDeliveredBySkill(payload.channelId, payload.threadTs);
|
|
811
|
-
}
|
|
812
|
-
// Mark delivery status on the chat message
|
|
813
|
-
if (chatMessage && conversationId) {
|
|
814
|
-
const chatService = getChatService();
|
|
815
|
-
await chatService.updateMessageMetadata(conversationId, chatMessage.id, {
|
|
816
|
-
slackDeliveryStatus: 'delivered_by_skill',
|
|
817
|
-
slackDeliveryAttemptedAt: new Date().toISOString(),
|
|
818
|
-
});
|
|
819
|
-
}
|
|
820
|
-
}
|
|
821
|
-
// Google Chat: no auto-routing here. Initial replies go through the
|
|
822
|
-
// googleChatResolve callback (queue processor → waitForResponse path).
|
|
823
|
-
// Follow-up messages are sent by the agent via the reply-gchat skill.
|
|
824
|
-
// This avoids TUI redraw duplicates and NOTIFY parsing issues.
|
|
825
|
-
}
|
|
826
|
-
/**
|
|
827
|
-
* Register a Google Chat thread mapping so follow-up NOTIFY messages
|
|
828
|
-
* for the given space are routed to the correct thread.
|
|
829
|
-
*
|
|
830
|
-
* Called by the google-chat-initializer when a new GCHAT message is enqueued.
|
|
831
|
-
*
|
|
832
|
-
* @param space - Google Chat space name (e.g. "spaces/jycUeSAAAAE")
|
|
833
|
-
* @param threadName - Thread name for replies (e.g. "spaces/jycUeSAAAAE/threads/BBB")
|
|
834
|
-
*/
|
|
835
|
-
registerGchatThread(space, threadName) {
|
|
836
|
-
this.gchatThreadMap.set(space, threadName);
|
|
837
|
-
}
|
|
838
|
-
/**
|
|
839
|
-
* Pre-load Gemini CLI session names from StorageService.
|
|
840
|
-
* Call during startup (after StorageService is initialized) to ensure
|
|
841
|
-
* NOTIFY marker processing is skipped for existing Gemini CLI sessions
|
|
842
|
-
* that are already streaming before registerGeminiCliSession is called.
|
|
843
|
-
*/
|
|
844
|
-
async loadGeminiCliSessions() {
|
|
845
|
-
try {
|
|
846
|
-
const { StorageService } = await import('../services/core/storage.service.js');
|
|
847
|
-
const storageService = StorageService.getInstance();
|
|
848
|
-
const teams = await storageService.getTeams();
|
|
849
|
-
for (const team of teams) {
|
|
850
|
-
for (const member of team.members) {
|
|
851
|
-
if (member.runtimeType === 'gemini-cli' && member.sessionName) {
|
|
852
|
-
this.geminiCliSessions.add(member.sessionName);
|
|
853
|
-
}
|
|
854
|
-
}
|
|
855
|
-
}
|
|
856
|
-
// Check orchestrator runtimeType from storage
|
|
857
|
-
const orcStatus = await storageService.getOrchestratorStatus();
|
|
858
|
-
if (orcStatus?.runtimeType === 'gemini-cli') {
|
|
859
|
-
this.geminiCliSessions.add(ORCHESTRATOR_SESSION_NAME);
|
|
860
|
-
}
|
|
861
|
-
if (this.geminiCliSessions.size > 0) {
|
|
862
|
-
this.logger.info('Pre-loaded Gemini CLI sessions for NOTIFY skip', {
|
|
863
|
-
sessions: [...this.geminiCliSessions],
|
|
864
|
-
});
|
|
865
|
-
}
|
|
866
|
-
}
|
|
867
|
-
catch (error) {
|
|
868
|
-
this.logger.warn('Failed to pre-load Gemini CLI sessions (non-fatal)', {
|
|
869
|
-
error: error instanceof Error ? error.message : String(error),
|
|
870
|
-
});
|
|
871
|
-
}
|
|
872
|
-
}
|
|
873
|
-
/**
|
|
874
|
-
* Register a session as running Gemini CLI.
|
|
875
|
-
* NOTIFY marker processing is skipped for these sessions because the
|
|
876
|
-
* Gemini TUI garbles marker output. Gemini CLI agents use reply-gchat
|
|
877
|
-
* and reply-slack skills for response delivery instead.
|
|
878
|
-
*
|
|
879
|
-
* @param sessionName - The Gemini CLI session name
|
|
880
|
-
*/
|
|
881
|
-
registerGeminiCliSession(sessionName) {
|
|
882
|
-
this.geminiCliSessions.add(sessionName);
|
|
883
|
-
}
|
|
884
|
-
/**
|
|
885
|
-
* Unregister a Gemini CLI session (e.g. on session destroy).
|
|
886
|
-
*
|
|
887
|
-
* @param sessionName - The session name to unregister
|
|
888
|
-
*/
|
|
889
|
-
unregisterGeminiCliSession(sessionName) {
|
|
890
|
-
this.geminiCliSessions.delete(sessionName);
|
|
891
501
|
}
|
|
892
502
|
/**
|
|
893
503
|
* Enable read-only mode for a session. Output streaming continues but
|
|
@@ -917,137 +527,12 @@ export class TerminalGateway {
|
|
|
917
527
|
isReadOnly(sessionName) {
|
|
918
528
|
return this.readOnlySessions.has(sessionName);
|
|
919
529
|
}
|
|
920
|
-
/**
|
|
921
|
-
* Trim the orchestrator output buffer if there are no pending open markers.
|
|
922
|
-
* Prevents unbounded growth when output doesn't contain any markers.
|
|
923
|
-
*/
|
|
924
|
-
trimBufferIfNoOpenMarkers(sessionName) {
|
|
925
|
-
const buffer = this.getSessionBuffer(sessionName);
|
|
926
|
-
const hasPendingMarker = buffer.includes(NOTIFY_CONSTANTS.OPEN_TAG) ||
|
|
927
|
-
buffer.includes('[CHAT_RESPONSE') ||
|
|
928
|
-
buffer.includes(SLACK_NOTIFY_CONSTANTS.OPEN_TAG);
|
|
929
|
-
if (!hasPendingMarker) {
|
|
930
|
-
// Keep a small trailing buffer in case the tag is split across chunks
|
|
931
|
-
const lastNewline = buffer.lastIndexOf('\n');
|
|
932
|
-
if (lastNewline > TERMINAL_GATEWAY_CONSTANTS.BUFFER_TRIM_THRESHOLD) {
|
|
933
|
-
this.setSessionBuffer(sessionName, buffer.slice(lastNewline));
|
|
934
|
-
}
|
|
935
|
-
}
|
|
936
|
-
}
|
|
937
|
-
/**
|
|
938
|
-
* Process legacy [CHAT_RESPONSE]...[/CHAT_RESPONSE] markers from the buffer.
|
|
939
|
-
* @deprecated Use [NOTIFY] markers instead. Kept for backward compatibility.
|
|
940
|
-
*
|
|
941
|
-
* @param sessionName - The orchestrator session name
|
|
942
|
-
*/
|
|
943
|
-
processLegacyChatResponse(sessionName) {
|
|
944
|
-
if (!this.activeConversationId) {
|
|
945
|
-
return;
|
|
946
|
-
}
|
|
947
|
-
const buffer = this.getSessionBuffer(sessionName);
|
|
948
|
-
if (!buffer.includes('[CHAT_RESPONSE')) {
|
|
949
|
-
return;
|
|
950
|
-
}
|
|
951
|
-
this.logger.debug('Processing legacy [CHAT_RESPONSE] markers (deprecated — use [NOTIFY])');
|
|
952
|
-
const chatGateway = getChatGateway();
|
|
953
|
-
if (!chatGateway) {
|
|
954
|
-
return;
|
|
955
|
-
}
|
|
956
|
-
const blocks = extractChatResponseBlocks(buffer);
|
|
957
|
-
let lastMatchEnd = 0;
|
|
958
|
-
for (const block of blocks) {
|
|
959
|
-
const embeddedConversationId = block.conversationId;
|
|
960
|
-
const responseContent = block.content;
|
|
961
|
-
lastMatchEnd = block.endIndex;
|
|
962
|
-
const conversationId = embeddedConversationId || this.activeConversationId;
|
|
963
|
-
if (!conversationId) {
|
|
964
|
-
continue;
|
|
965
|
-
}
|
|
966
|
-
const responseHash = generateResponseHash(conversationId, responseContent);
|
|
967
|
-
if (this.responseDeduplicator.isDuplicate(responseHash)) {
|
|
968
|
-
this.logger.debug('Skipping duplicate legacy chat response', {
|
|
969
|
-
conversationId,
|
|
970
|
-
contentLength: responseContent.length,
|
|
971
|
-
});
|
|
972
|
-
continue;
|
|
973
|
-
}
|
|
974
|
-
this.logger.info('Extracted legacy chat response from orchestrator output', {
|
|
975
|
-
contentLength: responseContent.length,
|
|
976
|
-
conversationId,
|
|
977
|
-
embeddedConversationId,
|
|
978
|
-
});
|
|
979
|
-
chatGateway.processTerminalOutput(sessionName, `[CHAT_RESPONSE]${responseContent}[/CHAT_RESPONSE]`, conversationId).catch(error => {
|
|
980
|
-
this.logger.warn('Failed to process legacy chat response', {
|
|
981
|
-
error: error instanceof Error ? error.message : String(error),
|
|
982
|
-
});
|
|
983
|
-
});
|
|
984
|
-
}
|
|
985
|
-
if (lastMatchEnd > 0) {
|
|
986
|
-
this.setSessionBuffer(sessionName, buffer.slice(lastMatchEnd));
|
|
987
|
-
}
|
|
988
|
-
}
|
|
989
|
-
/**
|
|
990
|
-
* Process legacy [SLACK_NOTIFY]...[/SLACK_NOTIFY] markers from the buffer.
|
|
991
|
-
* @deprecated Use [NOTIFY] markers instead. Kept for backward compatibility.
|
|
992
|
-
*
|
|
993
|
-
* @param sessionName - The session name
|
|
994
|
-
*/
|
|
995
|
-
processLegacySlackNotifications(sessionName) {
|
|
996
|
-
const buffer = this.getSessionBuffer(sessionName);
|
|
997
|
-
if (!buffer.includes(SLACK_NOTIFY_CONSTANTS.OPEN_TAG)) {
|
|
998
|
-
return;
|
|
999
|
-
}
|
|
1000
|
-
this.logger.debug('Processing legacy [SLACK_NOTIFY] markers (deprecated — use [NOTIFY])');
|
|
1001
|
-
const blocks = extractMarkerBlocks(buffer, SLACK_NOTIFY_CONSTANTS.OPEN_TAG, SLACK_NOTIFY_CONSTANTS.CLOSE_TAG);
|
|
1002
|
-
let lastMatchEnd = 0;
|
|
1003
|
-
for (const block of blocks) {
|
|
1004
|
-
const rawContent = block.content;
|
|
1005
|
-
lastMatchEnd = block.endIndex;
|
|
1006
|
-
// Legacy SLACK_NOTIFY is always JSON — use parseNotifyContent which
|
|
1007
|
-
// auto-detects JSON and applies PTY cleanup
|
|
1008
|
-
const payload = parseNotifyContent(rawContent);
|
|
1009
|
-
if (!payload) {
|
|
1010
|
-
this.logger.warn('Invalid legacy SLACK_NOTIFY payload', {
|
|
1011
|
-
rawContent: rawContent.slice(0, 200),
|
|
1012
|
-
});
|
|
1013
|
-
continue;
|
|
1014
|
-
}
|
|
1015
|
-
// Legacy format required `type` — skip if missing
|
|
1016
|
-
if (!payload.type) {
|
|
1017
|
-
this.logger.warn('Invalid legacy SLACK_NOTIFY payload: missing type', {
|
|
1018
|
-
rawContent: rawContent.slice(0, 200),
|
|
1019
|
-
});
|
|
1020
|
-
continue;
|
|
1021
|
-
}
|
|
1022
|
-
this.logger.info('Detected legacy SLACK_NOTIFY marker in orchestrator output', {
|
|
1023
|
-
contentLength: payload.message.length,
|
|
1024
|
-
});
|
|
1025
|
-
const fullNotification = this.buildSlackNotification(payload);
|
|
1026
|
-
this.sendToSlackBridge(fullNotification, 'legacy SLACK_NOTIFY');
|
|
1027
|
-
}
|
|
1028
|
-
if (lastMatchEnd > 0) {
|
|
1029
|
-
this.setSessionBuffer(sessionName, buffer.slice(lastMatchEnd));
|
|
1030
|
-
}
|
|
1031
|
-
}
|
|
1032
|
-
/**
|
|
1033
|
-
* Clear output buffers for all sessions.
|
|
1034
|
-
* Called when conversation changes or on cleanup.
|
|
1035
|
-
*/
|
|
1036
|
-
clearOrchestratorBuffer() {
|
|
1037
|
-
this.sessionOutputBuffers.clear();
|
|
1038
|
-
this.responseDeduplicator.clear();
|
|
1039
|
-
}
|
|
1040
530
|
/**
|
|
1041
531
|
* Set the active conversation ID for orchestrator chat responses.
|
|
1042
|
-
* Clears the output buffer when conversation changes.
|
|
1043
532
|
*
|
|
1044
533
|
* @param conversationId - The conversation ID to set
|
|
1045
534
|
*/
|
|
1046
535
|
setActiveConversationId(conversationId) {
|
|
1047
|
-
// Clear buffer when conversation changes
|
|
1048
|
-
if (conversationId !== this.activeConversationId) {
|
|
1049
|
-
this.clearOrchestratorBuffer();
|
|
1050
|
-
}
|
|
1051
536
|
this.activeConversationId = conversationId;
|
|
1052
537
|
}
|
|
1053
538
|
/**
|