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
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { EventEmitter } from 'events';
|
|
10
10
|
import { v4 as uuidv4 } from 'uuid';
|
|
11
|
+
import * as cron from 'node-cron';
|
|
11
12
|
import { getSessionBackendSync, createSessionBackend, } from '../session/index.js';
|
|
12
13
|
import { MessageDeliveryLogModel } from '../../models/ScheduledMessage.js';
|
|
13
14
|
import { LoggerService } from '../core/logger.service.js';
|
|
@@ -97,6 +98,10 @@ export class SchedulerService extends EventEmitter {
|
|
|
97
98
|
// 25+ concurrent Ctrl+C presses crash the runtime. This guard ensures only
|
|
98
99
|
// one check delivers per session at a time; concurrent checks are dropped.
|
|
99
100
|
deliveryInProgress = new Set();
|
|
101
|
+
/** #167: Dead-letter queue — messages for offline agents, delivered when they come online. */
|
|
102
|
+
deadLetterQueue = new Map();
|
|
103
|
+
/** #167: Active cron tasks keyed by check ID. */
|
|
104
|
+
cronTasks = new Map();
|
|
100
105
|
/** Consecutive idle hits per recurring check ID for auto-cancel policy. */
|
|
101
106
|
recurringIdleStreak = new Map();
|
|
102
107
|
/** Auto-cancel recurring checks after this many consecutive idle observations. */
|
|
@@ -107,6 +112,8 @@ export class SchedulerService extends EventEmitter {
|
|
|
107
112
|
* whose message mentions a recently-checked session are suppressed.
|
|
108
113
|
*/
|
|
109
114
|
lastManualCheck = new Map();
|
|
115
|
+
/** Unique session ID generated on construction — tags all new checks so stale checks from previous sessions can be purged on restart (#169). */
|
|
116
|
+
sessionId;
|
|
110
117
|
/**
|
|
111
118
|
* Creates a new SchedulerService
|
|
112
119
|
*
|
|
@@ -115,8 +122,17 @@ export class SchedulerService extends EventEmitter {
|
|
|
115
122
|
constructor(storageService) {
|
|
116
123
|
super();
|
|
117
124
|
this.storageService = storageService;
|
|
125
|
+
this.sessionId = uuidv4();
|
|
118
126
|
this.logger = LoggerService.getInstance().createComponentLogger('SchedulerService');
|
|
119
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Get the current session ID for this SchedulerService instance.
|
|
130
|
+
*
|
|
131
|
+
* @returns The unique session ID
|
|
132
|
+
*/
|
|
133
|
+
getSessionId() {
|
|
134
|
+
return this.sessionId;
|
|
135
|
+
}
|
|
120
136
|
/**
|
|
121
137
|
* Record that the orchestrator manually checked an agent's status or logs.
|
|
122
138
|
* Recurring checks whose message mentions this session will be suppressed
|
|
@@ -306,6 +322,7 @@ export class SchedulerService extends EventEmitter {
|
|
|
306
322
|
timeOfDay: options?.timeOfDay,
|
|
307
323
|
dayOfWeek: options?.dayOfWeek,
|
|
308
324
|
createdAt: new Date().toISOString(),
|
|
325
|
+
sessionId: this.sessionId,
|
|
309
326
|
};
|
|
310
327
|
// Store enhanced message info
|
|
311
328
|
const enhancedMessage = {
|
|
@@ -360,6 +377,24 @@ export class SchedulerService extends EventEmitter {
|
|
|
360
377
|
* @returns Check ID
|
|
361
378
|
*/
|
|
362
379
|
scheduleRecurringCheck(targetSession, intervalMinutes, message, type = 'progress-check', maxOccurrences, options) {
|
|
380
|
+
// #165: Enforce uniqueness — cancel existing recurring checks for the same target
|
|
381
|
+
// to prevent duplicate/overlapping checks from accumulating.
|
|
382
|
+
const existingCheckIds = [];
|
|
383
|
+
for (const [existingId, existingCheck] of this.recurringChecks.entries()) {
|
|
384
|
+
if (existingCheck.targetSession === targetSession) {
|
|
385
|
+
existingCheckIds.push(existingId);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
if (existingCheckIds.length > 0) {
|
|
389
|
+
this.logger.info('Cancelling existing recurring checks for target before scheduling new one', {
|
|
390
|
+
targetSession,
|
|
391
|
+
cancelledCount: existingCheckIds.length,
|
|
392
|
+
cancelledIds: existingCheckIds,
|
|
393
|
+
});
|
|
394
|
+
for (const existingId of existingCheckIds) {
|
|
395
|
+
this.cancelCheck(existingId);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
363
398
|
const checkId = uuidv4();
|
|
364
399
|
const firstExecution = new Date(Date.now() + intervalMinutes * 60 * 1000);
|
|
365
400
|
const scheduledCheck = {
|
|
@@ -379,6 +414,7 @@ export class SchedulerService extends EventEmitter {
|
|
|
379
414
|
currentOccurrence: 0,
|
|
380
415
|
createdAt: new Date().toISOString(),
|
|
381
416
|
taskId: options?.taskId,
|
|
417
|
+
sessionId: this.sessionId,
|
|
382
418
|
};
|
|
383
419
|
this.recurringChecks.set(checkId, scheduledCheck);
|
|
384
420
|
// Persist to disk so checks survive restarts
|
|
@@ -414,6 +450,112 @@ export class SchedulerService extends EventEmitter {
|
|
|
414
450
|
});
|
|
415
451
|
return checkId;
|
|
416
452
|
}
|
|
453
|
+
/**
|
|
454
|
+
* #167: Schedule a recurring check using a cron expression.
|
|
455
|
+
* Supports standard 5-field cron syntax (minute hour day-of-month month day-of-week).
|
|
456
|
+
* Falls back to intervalMinutes-based scheduling if cron expression is invalid.
|
|
457
|
+
*
|
|
458
|
+
* @param targetSession - Target session name
|
|
459
|
+
* @param cronExpression - Cron expression (e.g., '0 9 * * *' for daily at 9am)
|
|
460
|
+
* @param message - Message to send
|
|
461
|
+
* @param type - Type of scheduled message
|
|
462
|
+
* @param maxOccurrences - Maximum number of times the check fires
|
|
463
|
+
* @param options - Additional scheduling options
|
|
464
|
+
* @returns Check ID
|
|
465
|
+
*/
|
|
466
|
+
scheduleCronCheck(targetSession, cronExpression, message, type = 'progress-check', maxOccurrences, options) {
|
|
467
|
+
// Validate cron expression
|
|
468
|
+
if (!cron.validate(cronExpression)) {
|
|
469
|
+
this.logger.error('Invalid cron expression, falling back to 30-min interval', {
|
|
470
|
+
cronExpression,
|
|
471
|
+
targetSession,
|
|
472
|
+
});
|
|
473
|
+
return this.scheduleRecurringCheck(targetSession, 30, message, type, maxOccurrences, options);
|
|
474
|
+
}
|
|
475
|
+
// Cancel existing recurring/cron checks for the same target (uniqueness constraint)
|
|
476
|
+
const existingCheckIds = [];
|
|
477
|
+
for (const [existingId, existingCheck] of this.recurringChecks.entries()) {
|
|
478
|
+
if (existingCheck.targetSession === targetSession) {
|
|
479
|
+
existingCheckIds.push(existingId);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
for (const existingId of existingCheckIds) {
|
|
483
|
+
this.cancelCheck(existingId);
|
|
484
|
+
}
|
|
485
|
+
const checkId = uuidv4();
|
|
486
|
+
const scheduledCheck = {
|
|
487
|
+
id: checkId,
|
|
488
|
+
targetSession,
|
|
489
|
+
message,
|
|
490
|
+
scheduledFor: new Date().toISOString(),
|
|
491
|
+
isRecurring: true,
|
|
492
|
+
cronExpression,
|
|
493
|
+
maxOccurrences,
|
|
494
|
+
currentOccurrence: 0,
|
|
495
|
+
createdAt: new Date().toISOString(),
|
|
496
|
+
label: options?.label,
|
|
497
|
+
taskId: options?.taskId,
|
|
498
|
+
sessionId: this.sessionId,
|
|
499
|
+
};
|
|
500
|
+
this.recurringChecks.set(checkId, scheduledCheck);
|
|
501
|
+
// Persist to disk
|
|
502
|
+
this.storageService.saveRecurringCheck(scheduledCheck).catch(err => {
|
|
503
|
+
this.logger.error('Failed to persist cron check', {
|
|
504
|
+
checkId,
|
|
505
|
+
error: err instanceof Error ? err.message : String(err),
|
|
506
|
+
});
|
|
507
|
+
});
|
|
508
|
+
// Store enhanced message info
|
|
509
|
+
const enhancedMessage = {
|
|
510
|
+
id: checkId,
|
|
511
|
+
sessionName: targetSession,
|
|
512
|
+
message,
|
|
513
|
+
scheduledFor: new Date(),
|
|
514
|
+
type,
|
|
515
|
+
recurring: {
|
|
516
|
+
interval: 0,
|
|
517
|
+
currentOccurrence: 0,
|
|
518
|
+
maxOccurrences,
|
|
519
|
+
cronExpression,
|
|
520
|
+
},
|
|
521
|
+
createdAt: new Date().toISOString(),
|
|
522
|
+
};
|
|
523
|
+
this.enhancedMessages.set(checkId, enhancedMessage);
|
|
524
|
+
// Create the cron task
|
|
525
|
+
const task = cron.schedule(cronExpression, async () => {
|
|
526
|
+
if (!this.recurringChecks.has(checkId)) {
|
|
527
|
+
task.stop();
|
|
528
|
+
this.cronTasks.delete(checkId);
|
|
529
|
+
return;
|
|
530
|
+
}
|
|
531
|
+
const enhanced = this.enhancedMessages.get(checkId);
|
|
532
|
+
const occurrence = (enhanced?.recurring?.currentOccurrence ?? 0) + 1;
|
|
533
|
+
// Check max occurrences
|
|
534
|
+
if (maxOccurrences && occurrence > maxOccurrences) {
|
|
535
|
+
this.cancelCheck(checkId);
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
await this.executeCheck(targetSession, this.addFreshnessInstructions(message));
|
|
539
|
+
// Update occurrence count
|
|
540
|
+
if (enhanced?.recurring) {
|
|
541
|
+
enhanced.recurring.currentOccurrence = occurrence;
|
|
542
|
+
const rc = this.recurringChecks.get(checkId);
|
|
543
|
+
if (rc) {
|
|
544
|
+
rc.currentOccurrence = occurrence;
|
|
545
|
+
this.storageService.saveRecurringCheck(rc).catch(() => { });
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
});
|
|
549
|
+
this.cronTasks.set(checkId, task);
|
|
550
|
+
this.emit('recurring_check_scheduled', scheduledCheck);
|
|
551
|
+
this.logger.info('Scheduled cron check', {
|
|
552
|
+
checkId,
|
|
553
|
+
targetSession,
|
|
554
|
+
cronExpression,
|
|
555
|
+
type,
|
|
556
|
+
});
|
|
557
|
+
return checkId;
|
|
558
|
+
}
|
|
417
559
|
/**
|
|
418
560
|
* Schedule default check-ins for a new agent
|
|
419
561
|
*
|
|
@@ -582,6 +724,12 @@ export class SchedulerService extends EventEmitter {
|
|
|
582
724
|
clearTimeout(recurringTimeout);
|
|
583
725
|
this.recurringTimeouts.delete(checkId);
|
|
584
726
|
}
|
|
727
|
+
// #167: Stop cron task if this was a cron-based check
|
|
728
|
+
const cronTask = this.cronTasks.get(checkId);
|
|
729
|
+
if (cronTask) {
|
|
730
|
+
cronTask.stop();
|
|
731
|
+
this.cronTasks.delete(checkId);
|
|
732
|
+
}
|
|
585
733
|
this.recurringChecks.delete(checkId);
|
|
586
734
|
this.enhancedMessages.delete(checkId);
|
|
587
735
|
this.recurringIdleStreak.delete(checkId);
|
|
@@ -843,7 +991,16 @@ export class SchedulerService extends EventEmitter {
|
|
|
843
991
|
});
|
|
844
992
|
}
|
|
845
993
|
else {
|
|
846
|
-
// Fallback: direct PTY write (should not happen in normal operation)
|
|
994
|
+
// Fallback: direct PTY write (should not happen in normal operation).
|
|
995
|
+
// Skip crewly-agent sessions — they have no PTY and require
|
|
996
|
+
// AgentRegistrationService for in-process delivery (Bug 3 fix).
|
|
997
|
+
const runtimeType = await this.resolveRuntimeType(targetSession);
|
|
998
|
+
if (runtimeType === RUNTIME_TYPES.CREWLY_AGENT) {
|
|
999
|
+
this.logger.warn('Cannot deliver scheduled message to crewly-agent without AgentRegistrationService', {
|
|
1000
|
+
targetSession,
|
|
1001
|
+
});
|
|
1002
|
+
return;
|
|
1003
|
+
}
|
|
847
1004
|
this.logger.warn('AgentRegistrationService not available, using fallback PTY write', {
|
|
848
1005
|
targetSession,
|
|
849
1006
|
});
|
|
@@ -871,6 +1028,19 @@ export class SchedulerService extends EventEmitter {
|
|
|
871
1028
|
success = false;
|
|
872
1029
|
error = sendError instanceof Error ? sendError.message : 'Unknown error';
|
|
873
1030
|
this.logger.error('Error executing check-in', { targetSession, error });
|
|
1031
|
+
// #167: Dead-letter queue — queue the message for delivery when agent comes online
|
|
1032
|
+
if (!this.deadLetterQueue.has(targetSession)) {
|
|
1033
|
+
this.deadLetterQueue.set(targetSession, []);
|
|
1034
|
+
}
|
|
1035
|
+
const dlq = this.deadLetterQueue.get(targetSession);
|
|
1036
|
+
// Limit DLQ per session to 10 messages to prevent unbounded growth
|
|
1037
|
+
if (dlq.length < 10) {
|
|
1038
|
+
dlq.push({ message, queuedAt: new Date().toISOString() });
|
|
1039
|
+
this.logger.info('Message queued in dead-letter queue for offline agent', {
|
|
1040
|
+
targetSession,
|
|
1041
|
+
queueSize: dlq.length,
|
|
1042
|
+
});
|
|
1043
|
+
}
|
|
874
1044
|
this.emit('check_execution_failed', {
|
|
875
1045
|
targetSession,
|
|
876
1046
|
message,
|
|
@@ -1017,7 +1187,11 @@ export class SchedulerService extends EventEmitter {
|
|
|
1017
1187
|
}
|
|
1018
1188
|
return;
|
|
1019
1189
|
}
|
|
1020
|
-
|
|
1190
|
+
// Enrich the recurring check message with freshness instructions so the
|
|
1191
|
+
// agent queries current task status instead of relying on potentially
|
|
1192
|
+
// stale task descriptions baked into the original scheduled message.
|
|
1193
|
+
const enrichedMessage = this.addFreshnessInstructions(message);
|
|
1194
|
+
await this.executeCheck(targetSession, enrichedMessage);
|
|
1021
1195
|
// Log per-execution result
|
|
1022
1196
|
const enhanced = this.enhancedMessages.get(checkId);
|
|
1023
1197
|
const occurrence = (enhanced?.recurring?.currentOccurrence ?? 0) + 1;
|
|
@@ -1068,6 +1242,70 @@ export class SchedulerService extends EventEmitter {
|
|
|
1068
1242
|
const firstTimeout = setTimeout(executeRecurring, intervalMinutes * 60 * 1000);
|
|
1069
1243
|
this.recurringTimeouts.set(checkId, firstTimeout);
|
|
1070
1244
|
}
|
|
1245
|
+
/**
|
|
1246
|
+
* Enrich a recurring check message with freshness instructions.
|
|
1247
|
+
* Tells the agent to query current task status rather than relying on
|
|
1248
|
+
* potentially stale task descriptions embedded in the original message.
|
|
1249
|
+
*
|
|
1250
|
+
* @param originalMessage - The original scheduled check message
|
|
1251
|
+
* @returns Enriched message with freshness instructions
|
|
1252
|
+
*/
|
|
1253
|
+
addFreshnessInstructions(originalMessage) {
|
|
1254
|
+
return `${originalMessage}
|
|
1255
|
+
|
|
1256
|
+
⚠️ NOTE: This is a recurring scheduled check. The task description above may be OUTDATED. Before responding, use get_tasks or get_agent_status to verify the CURRENT status. If the task is already completed, cancel this recurring check using cancel_schedule and report the task is done.`;
|
|
1257
|
+
}
|
|
1258
|
+
/**
|
|
1259
|
+
* #167: Drain the dead-letter queue for a session that has come online.
|
|
1260
|
+
* Delivers all queued messages and clears the queue for that session.
|
|
1261
|
+
*
|
|
1262
|
+
* @param sessionName - The session that came online
|
|
1263
|
+
* @returns Number of messages delivered
|
|
1264
|
+
*/
|
|
1265
|
+
async drainDeadLetterQueue(sessionName) {
|
|
1266
|
+
const queued = this.deadLetterQueue.get(sessionName);
|
|
1267
|
+
if (!queued || queued.length === 0) {
|
|
1268
|
+
return 0;
|
|
1269
|
+
}
|
|
1270
|
+
this.logger.info('Draining dead-letter queue for session', {
|
|
1271
|
+
sessionName,
|
|
1272
|
+
messageCount: queued.length,
|
|
1273
|
+
});
|
|
1274
|
+
// Take all messages and clear the queue immediately to prevent double delivery
|
|
1275
|
+
const messages = [...queued];
|
|
1276
|
+
this.deadLetterQueue.delete(sessionName);
|
|
1277
|
+
let delivered = 0;
|
|
1278
|
+
for (const entry of messages) {
|
|
1279
|
+
try {
|
|
1280
|
+
await this.executeCheck(sessionName, entry.message);
|
|
1281
|
+
delivered++;
|
|
1282
|
+
}
|
|
1283
|
+
catch (err) {
|
|
1284
|
+
this.logger.warn('Failed to deliver dead-letter message', {
|
|
1285
|
+
sessionName,
|
|
1286
|
+
error: err instanceof Error ? err.message : String(err),
|
|
1287
|
+
});
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
this.logger.info('Dead-letter queue drained', {
|
|
1291
|
+
sessionName,
|
|
1292
|
+
delivered,
|
|
1293
|
+
total: messages.length,
|
|
1294
|
+
});
|
|
1295
|
+
return delivered;
|
|
1296
|
+
}
|
|
1297
|
+
/**
|
|
1298
|
+
* Get dead-letter queue stats.
|
|
1299
|
+
*
|
|
1300
|
+
* @returns Map of session name to queued message count
|
|
1301
|
+
*/
|
|
1302
|
+
getDeadLetterQueueStats() {
|
|
1303
|
+
const stats = {};
|
|
1304
|
+
for (const [session, messages] of this.deadLetterQueue) {
|
|
1305
|
+
stats[session] = messages.length;
|
|
1306
|
+
}
|
|
1307
|
+
return stats;
|
|
1308
|
+
}
|
|
1071
1309
|
/**
|
|
1072
1310
|
* Clean up all scheduled checks
|
|
1073
1311
|
*/
|
|
@@ -1085,6 +1323,11 @@ export class SchedulerService extends EventEmitter {
|
|
|
1085
1323
|
this.recurringTimeouts.clear();
|
|
1086
1324
|
this.recurringChecks.clear();
|
|
1087
1325
|
this.recurringIdleStreak.clear();
|
|
1326
|
+
// #167: Stop and clear all cron tasks
|
|
1327
|
+
for (const task of this.cronTasks.values()) {
|
|
1328
|
+
task.stop();
|
|
1329
|
+
}
|
|
1330
|
+
this.cronTasks.clear();
|
|
1088
1331
|
// Clear persisted recurring checks
|
|
1089
1332
|
this.storageService.clearRecurringChecks().catch(err => {
|
|
1090
1333
|
this.logger.error('Failed to clear persisted recurring checks', {
|
|
@@ -1106,6 +1349,8 @@ export class SchedulerService extends EventEmitter {
|
|
|
1106
1349
|
this.adaptiveChecks.clear();
|
|
1107
1350
|
// Clear enhanced messages
|
|
1108
1351
|
this.enhancedMessages.clear();
|
|
1352
|
+
// Clear dead-letter queue
|
|
1353
|
+
this.deadLetterQueue.clear();
|
|
1109
1354
|
this.logger.info('Scheduler service cleaned up');
|
|
1110
1355
|
}
|
|
1111
1356
|
/**
|
|
@@ -1125,8 +1370,25 @@ export class SchedulerService extends EventEmitter {
|
|
|
1125
1370
|
}
|
|
1126
1371
|
let restored = 0;
|
|
1127
1372
|
let purged = 0;
|
|
1373
|
+
let staleSessionPurged = 0;
|
|
1128
1374
|
for (const check of persisted) {
|
|
1129
|
-
if (!check.isRecurring || !check.intervalMinutes) {
|
|
1375
|
+
if (!check.isRecurring || (!check.intervalMinutes && !check.cronExpression)) {
|
|
1376
|
+
continue;
|
|
1377
|
+
}
|
|
1378
|
+
// #169: Skip and purge checks from previous sessions
|
|
1379
|
+
if (check.sessionId && check.sessionId !== this.sessionId) {
|
|
1380
|
+
this.logger.info('Purging stale recurring check from previous session', {
|
|
1381
|
+
checkId: check.id,
|
|
1382
|
+
staleSessionId: check.sessionId,
|
|
1383
|
+
currentSessionId: this.sessionId,
|
|
1384
|
+
});
|
|
1385
|
+
this.storageService.deleteRecurringCheck(check.id).catch(err => {
|
|
1386
|
+
this.logger.error('Failed to delete stale session recurring check', {
|
|
1387
|
+
checkId: check.id,
|
|
1388
|
+
error: err instanceof Error ? err.message : String(err),
|
|
1389
|
+
});
|
|
1390
|
+
});
|
|
1391
|
+
staleSessionPurged++;
|
|
1130
1392
|
continue;
|
|
1131
1393
|
}
|
|
1132
1394
|
// Skip checks whose linked task is already completed
|
|
@@ -1153,23 +1415,51 @@ export class SchedulerService extends EventEmitter {
|
|
|
1153
1415
|
id: check.id,
|
|
1154
1416
|
sessionName: check.targetSession,
|
|
1155
1417
|
message: check.message,
|
|
1156
|
-
scheduledFor: new Date(Date.now() + check.intervalMinutes * 60 * 1000),
|
|
1418
|
+
scheduledFor: new Date(Date.now() + (check.intervalMinutes || 30) * 60 * 1000),
|
|
1157
1419
|
type: 'progress-check',
|
|
1158
1420
|
recurring: {
|
|
1159
|
-
interval: check.intervalMinutes,
|
|
1421
|
+
interval: check.intervalMinutes || 0,
|
|
1160
1422
|
currentOccurrence: check.currentOccurrence || 0,
|
|
1161
1423
|
maxOccurrences: check.maxOccurrences,
|
|
1424
|
+
cronExpression: check.cronExpression,
|
|
1162
1425
|
},
|
|
1163
1426
|
createdAt: check.createdAt,
|
|
1164
1427
|
};
|
|
1165
1428
|
this.enhancedMessages.set(check.id, enhancedMessage);
|
|
1166
|
-
|
|
1429
|
+
// #167: Restore cron-based checks using cron scheduler, interval-based using setTimeout
|
|
1430
|
+
if (check.cronExpression && cron.validate(check.cronExpression)) {
|
|
1431
|
+
const task = cron.schedule(check.cronExpression, async () => {
|
|
1432
|
+
if (!this.recurringChecks.has(check.id)) {
|
|
1433
|
+
task.stop();
|
|
1434
|
+
this.cronTasks.delete(check.id);
|
|
1435
|
+
return;
|
|
1436
|
+
}
|
|
1437
|
+
await this.executeCheck(check.targetSession, this.addFreshnessInstructions(check.message));
|
|
1438
|
+
const enh = this.enhancedMessages.get(check.id);
|
|
1439
|
+
if (enh?.recurring) {
|
|
1440
|
+
enh.recurring.currentOccurrence = (enh.recurring.currentOccurrence || 0) + 1;
|
|
1441
|
+
const rc = this.recurringChecks.get(check.id);
|
|
1442
|
+
if (rc) {
|
|
1443
|
+
rc.currentOccurrence = enh.recurring.currentOccurrence;
|
|
1444
|
+
this.storageService.saveRecurringCheck(rc).catch(() => { });
|
|
1445
|
+
}
|
|
1446
|
+
if (enh.recurring.maxOccurrences && enh.recurring.currentOccurrence >= enh.recurring.maxOccurrences) {
|
|
1447
|
+
this.cancelCheck(check.id);
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
});
|
|
1451
|
+
this.cronTasks.set(check.id, task);
|
|
1452
|
+
}
|
|
1453
|
+
else if (check.intervalMinutes) {
|
|
1454
|
+
this.scheduleRecurringExecution(check.id, check.intervalMinutes, check.targetSession, check.message);
|
|
1455
|
+
}
|
|
1167
1456
|
restored++;
|
|
1168
1457
|
}
|
|
1169
1458
|
this.logger.info('Restored recurring checks from disk', {
|
|
1170
1459
|
total: persisted.length,
|
|
1171
1460
|
restored,
|
|
1172
1461
|
purgedCompletedTasks: purged,
|
|
1462
|
+
purgedStaleSessions: staleSessionPurged,
|
|
1173
1463
|
});
|
|
1174
1464
|
return restored;
|
|
1175
1465
|
}
|
|
@@ -1196,12 +1486,29 @@ export class SchedulerService extends EventEmitter {
|
|
|
1196
1486
|
return 0;
|
|
1197
1487
|
}
|
|
1198
1488
|
let restored = 0;
|
|
1489
|
+
let staleSessionPurged = 0;
|
|
1199
1490
|
const now = Date.now();
|
|
1200
1491
|
for (const check of persisted) {
|
|
1201
1492
|
// Skip recurring checks that ended up here by mistake
|
|
1202
1493
|
if (check.isRecurring) {
|
|
1203
1494
|
continue;
|
|
1204
1495
|
}
|
|
1496
|
+
// #169: Skip and purge checks from previous sessions
|
|
1497
|
+
if (check.sessionId && check.sessionId !== this.sessionId) {
|
|
1498
|
+
this.logger.info('Purging stale one-time check from previous session', {
|
|
1499
|
+
checkId: check.id,
|
|
1500
|
+
staleSessionId: check.sessionId,
|
|
1501
|
+
currentSessionId: this.sessionId,
|
|
1502
|
+
});
|
|
1503
|
+
this.storageService.deleteOneTimeCheck(check.id).catch(err => {
|
|
1504
|
+
this.logger.error('Failed to delete stale session one-time check', {
|
|
1505
|
+
checkId: check.id,
|
|
1506
|
+
error: err instanceof Error ? err.message : String(err),
|
|
1507
|
+
});
|
|
1508
|
+
});
|
|
1509
|
+
staleSessionPurged++;
|
|
1510
|
+
continue;
|
|
1511
|
+
}
|
|
1205
1512
|
const scheduledTime = new Date(check.scheduledFor).getTime();
|
|
1206
1513
|
const remainingMs = scheduledTime - now;
|
|
1207
1514
|
// If the scheduled time has already passed, discard as stale
|
|
@@ -1244,6 +1551,7 @@ export class SchedulerService extends EventEmitter {
|
|
|
1244
1551
|
this.logger.info('Restored one-time checks from disk', {
|
|
1245
1552
|
total: persisted.length,
|
|
1246
1553
|
restored,
|
|
1554
|
+
purgedStaleSessions: staleSessionPurged,
|
|
1247
1555
|
});
|
|
1248
1556
|
return restored;
|
|
1249
1557
|
}
|
|
@@ -1269,12 +1577,17 @@ export class SchedulerService extends EventEmitter {
|
|
|
1269
1577
|
for (const msg of this.enhancedMessages.values()) {
|
|
1270
1578
|
activeSessions.add(msg.sessionName);
|
|
1271
1579
|
}
|
|
1580
|
+
let deadLetterMessages = 0;
|
|
1581
|
+
for (const messages of this.deadLetterQueue.values()) {
|
|
1582
|
+
deadLetterMessages += messages.length;
|
|
1583
|
+
}
|
|
1272
1584
|
return {
|
|
1273
1585
|
oneTimeChecks: this.scheduledChecks.size,
|
|
1274
1586
|
recurringChecks: this.recurringChecks.size,
|
|
1275
1587
|
totalActiveSessions: activeSessions.size,
|
|
1276
1588
|
continuationChecks: this.continuationChecks.size,
|
|
1277
1589
|
adaptiveChecks: this.adaptiveChecks.size,
|
|
1590
|
+
deadLetterMessages,
|
|
1278
1591
|
};
|
|
1279
1592
|
}
|
|
1280
1593
|
}
|