crewly 1.3.31 → 1.4.1
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 +202 -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/orchestrator/orchestrator.controller.d.ts +16 -0
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js +124 -13
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.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-auth.middleware.js +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-auth.middleware.js.map +1 -1
- 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/cloud/relay-client.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/relay-client.service.js +5 -3
- package/dist/backend/backend/src/services/cloud/relay-client.service.js.map +1 -1
- 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 +294 -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 +674 -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-60a9e4ea.css +33 -0
- package/frontend/dist/assets/{index-e6d7db4a.js → index-e8162966.js} +353 -353
- 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
|
@@ -0,0 +1,687 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crewly service management command.
|
|
3
|
+
*
|
|
4
|
+
* Installs, uninstalls, and checks the status of Crewly as a platform-native
|
|
5
|
+
* background service:
|
|
6
|
+
*
|
|
7
|
+
* **macOS** — Login Item `.command` file (runs inside Terminal.app)
|
|
8
|
+
* Why not a LaunchAgent plist? macOS TCC grants permissions based on the
|
|
9
|
+
* "responsible process." LaunchAgent children do NOT inherit Full Disk
|
|
10
|
+
* Access, so they cannot access ~/Desktop/ or other protected directories.
|
|
11
|
+
* A `.command` file runs inside Terminal.app whose TCC permissions propagate
|
|
12
|
+
* to child processes. It also sources the user's shell profile, picking up
|
|
13
|
+
* NVM/Homebrew paths that LaunchAgents miss.
|
|
14
|
+
*
|
|
15
|
+
* **Linux** — systemd user service (`systemctl --user`)
|
|
16
|
+
* No TCC equivalent on Linux, so a standard systemd unit file works.
|
|
17
|
+
* The service sources the user's shell profile for NVM/PATH consistency.
|
|
18
|
+
*/
|
|
19
|
+
import { exec } from 'child_process';
|
|
20
|
+
import { promisify } from 'util';
|
|
21
|
+
import * as fs from 'fs';
|
|
22
|
+
import * as path from 'path';
|
|
23
|
+
import * as os from 'os';
|
|
24
|
+
import chalk from 'chalk';
|
|
25
|
+
import { CREWLY_CONSTANTS } from '../../../config/index.js';
|
|
26
|
+
const execAsync = promisify(exec);
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Shared constants
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
/** Directory where service files are stored (~/.crewly) */
|
|
31
|
+
const SERVICE_DIR = path.join(os.homedir(), CREWLY_CONSTANTS.PATHS.CREWLY_HOME);
|
|
32
|
+
/** Path to the service log directory */
|
|
33
|
+
const LOG_DIR = path.join(SERVICE_DIR, 'logs');
|
|
34
|
+
/** Path to the PID file used to prevent duplicate instances */
|
|
35
|
+
const PID_FILE = path.join(SERVICE_DIR, 'crewly.pid');
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
// macOS constants
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
/** Label used for the macOS Login Item */
|
|
40
|
+
const LOGIN_ITEM_NAME = 'Crewly Backend';
|
|
41
|
+
/** Path to the generated .command file (macOS) */
|
|
42
|
+
const COMMAND_FILE_PATH = path.join(SERVICE_DIR, 'crewly-start.command');
|
|
43
|
+
/** Legacy LaunchAgent plist label */
|
|
44
|
+
const LEGACY_PLIST_LABEL = 'com.crewly.backend';
|
|
45
|
+
/** Legacy LaunchAgent plist path */
|
|
46
|
+
const LEGACY_PLIST_PATH = path.join(os.homedir(), 'Library', 'LaunchAgents', `${LEGACY_PLIST_LABEL}.plist`);
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Linux constants
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
/** systemd user unit directory */
|
|
51
|
+
const SYSTEMD_USER_DIR = path.join(os.homedir(), '.config', 'systemd', 'user');
|
|
52
|
+
/** systemd service unit name */
|
|
53
|
+
const SYSTEMD_UNIT_NAME = 'crewly.service';
|
|
54
|
+
/** Full path to the systemd unit file */
|
|
55
|
+
const SYSTEMD_UNIT_PATH = path.join(SYSTEMD_USER_DIR, SYSTEMD_UNIT_NAME);
|
|
56
|
+
/** Path to the wrapper script used by the systemd service */
|
|
57
|
+
const SYSTEMD_WRAPPER_PATH = path.join(SERVICE_DIR, 'crewly-start.sh');
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
// Shared shell snippet: native module arch check
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
/**
|
|
62
|
+
* Shell snippet embedded in wrapper scripts that detects architecture
|
|
63
|
+
* mismatches between the running node binary and native modules (e.g.
|
|
64
|
+
* node-pty). If a mismatch is found, runs `npm rebuild` automatically
|
|
65
|
+
* before starting the backend — preventing the ERR_DLOPEN_FAILED crash
|
|
66
|
+
* that occurs when node-pty was compiled for x86_64 but node is arm64
|
|
67
|
+
* (or vice versa).
|
|
68
|
+
*/
|
|
69
|
+
const NATIVE_MODULE_CHECK = `# Auto-rebuild native modules if node arch doesn't match compiled binaries
|
|
70
|
+
PTY_NODE="node_modules/node-pty/build/Release/pty.node"
|
|
71
|
+
if [ -f "$PTY_NODE" ]; then
|
|
72
|
+
NODE_ARCH=$(node -p "process.arch")
|
|
73
|
+
PTY_ARCH=$(file "$PTY_NODE" | grep -o 'arm64\\|x86_64' | head -1)
|
|
74
|
+
# Normalize: node uses "x64", file uses "x86_64"
|
|
75
|
+
if [ "$NODE_ARCH" = "x64" ]; then NODE_ARCH="x86_64"; fi
|
|
76
|
+
if [ "$NODE_ARCH" = "arm64" ] && [ "$PTY_ARCH" = "x86_64" ]; then
|
|
77
|
+
echo "$(date): Architecture mismatch (node=arm64, pty.node=x86_64). Rebuilding..." | tee -a "$LOG_DIR/service.log" 2>/dev/null
|
|
78
|
+
npm rebuild node-pty 2>&1 | tee -a "$LOG_DIR/service.log" 2>/dev/null
|
|
79
|
+
elif [ "$NODE_ARCH" = "x86_64" ] && [ "$PTY_ARCH" = "arm64" ]; then
|
|
80
|
+
echo "$(date): Architecture mismatch (node=x86_64, pty.node=arm64). Rebuilding..." | tee -a "$LOG_DIR/service.log" 2>/dev/null
|
|
81
|
+
npm rebuild node-pty 2>&1 | tee -a "$LOG_DIR/service.log" 2>/dev/null
|
|
82
|
+
fi
|
|
83
|
+
fi`;
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
// Entry point
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
/**
|
|
88
|
+
* Entry point for the `crewly service` subcommand.
|
|
89
|
+
*
|
|
90
|
+
* Dispatches to install / uninstall / status based on the positional argument.
|
|
91
|
+
* Platform detection routes to macOS or Linux implementations.
|
|
92
|
+
*
|
|
93
|
+
* @param action - One of "install", "uninstall", or "status"
|
|
94
|
+
* @param options - Command options (e.g. --force)
|
|
95
|
+
*/
|
|
96
|
+
export async function serviceCommand(action, options) {
|
|
97
|
+
switch (action) {
|
|
98
|
+
case 'install':
|
|
99
|
+
await installService(options);
|
|
100
|
+
break;
|
|
101
|
+
case 'uninstall':
|
|
102
|
+
await uninstallService();
|
|
103
|
+
break;
|
|
104
|
+
case 'status':
|
|
105
|
+
await serviceStatus();
|
|
106
|
+
break;
|
|
107
|
+
default:
|
|
108
|
+
console.log(chalk.red(`Unknown action: ${action}`));
|
|
109
|
+
console.log(chalk.gray('Usage: crewly service <install|uninstall|status>'));
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// ===========================================================================
|
|
114
|
+
// Install
|
|
115
|
+
// ===========================================================================
|
|
116
|
+
/**
|
|
117
|
+
* Installs Crewly as a platform-native background service.
|
|
118
|
+
*
|
|
119
|
+
* On macOS: creates a .command Login Item.
|
|
120
|
+
* On Linux: creates a systemd user service.
|
|
121
|
+
*
|
|
122
|
+
* @param options - Install options (--force to overwrite existing)
|
|
123
|
+
*/
|
|
124
|
+
async function installService(options) {
|
|
125
|
+
assertSupportedPlatform();
|
|
126
|
+
console.log(chalk.blue('Installing Crewly as a background service...'));
|
|
127
|
+
const projectRoot = findProjectRoot();
|
|
128
|
+
if (!projectRoot) {
|
|
129
|
+
console.log(chalk.red('Could not find Crewly project root. Run this from within the Crewly directory.'));
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
fs.mkdirSync(LOG_DIR, { recursive: true });
|
|
133
|
+
if (process.platform === 'darwin') {
|
|
134
|
+
await installDarwin(projectRoot, options);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
await installLinux(projectRoot, options);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// ===========================================================================
|
|
141
|
+
// Uninstall
|
|
142
|
+
// ===========================================================================
|
|
143
|
+
/**
|
|
144
|
+
* Removes the Crewly background service for the current platform.
|
|
145
|
+
*/
|
|
146
|
+
async function uninstallService() {
|
|
147
|
+
assertSupportedPlatform();
|
|
148
|
+
console.log(chalk.blue('Uninstalling Crewly service...'));
|
|
149
|
+
if (process.platform === 'darwin') {
|
|
150
|
+
await uninstallDarwin();
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
await uninstallLinux();
|
|
154
|
+
}
|
|
155
|
+
// Kill running process (shared)
|
|
156
|
+
await killServiceProcess();
|
|
157
|
+
console.log(chalk.green('Crewly service uninstalled.'));
|
|
158
|
+
}
|
|
159
|
+
// ===========================================================================
|
|
160
|
+
// Status
|
|
161
|
+
// ===========================================================================
|
|
162
|
+
/**
|
|
163
|
+
* Shows the current state of the Crewly background service.
|
|
164
|
+
*/
|
|
165
|
+
async function serviceStatus() {
|
|
166
|
+
assertSupportedPlatform();
|
|
167
|
+
console.log(chalk.blue('Crewly Service Status'));
|
|
168
|
+
console.log(chalk.gray('='.repeat(40)));
|
|
169
|
+
if (process.platform === 'darwin') {
|
|
170
|
+
await statusDarwin();
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
await statusLinux();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// ===========================================================================
|
|
177
|
+
// macOS implementation
|
|
178
|
+
// ===========================================================================
|
|
179
|
+
/**
|
|
180
|
+
* macOS install: creates .command file and registers as Login Item.
|
|
181
|
+
*
|
|
182
|
+
* @param projectRoot - Absolute path to the Crewly project directory
|
|
183
|
+
* @param options - Install options
|
|
184
|
+
*/
|
|
185
|
+
async function installDarwin(projectRoot, options) {
|
|
186
|
+
await migrateLegacyLaunchAgent();
|
|
187
|
+
if (fs.existsSync(COMMAND_FILE_PATH) && !options.force) {
|
|
188
|
+
console.log(chalk.yellow('Service is already installed.'));
|
|
189
|
+
console.log(chalk.gray('Use --force to overwrite, or run "crewly service status".'));
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const commandFileContent = generateCommandFile(projectRoot);
|
|
193
|
+
fs.writeFileSync(COMMAND_FILE_PATH, commandFileContent, { mode: 0o755 });
|
|
194
|
+
console.log(chalk.green(` Created ${COMMAND_FILE_PATH}`));
|
|
195
|
+
await registerLoginItem();
|
|
196
|
+
console.log('');
|
|
197
|
+
console.log(chalk.green('Crewly service installed successfully!'));
|
|
198
|
+
console.log('');
|
|
199
|
+
console.log(chalk.gray('How it works:'));
|
|
200
|
+
console.log(chalk.gray(' - On login, Terminal.app opens the .command file automatically'));
|
|
201
|
+
console.log(chalk.gray(' - Terminal.app has Full Disk Access, so child processes can access ~/Desktop/'));
|
|
202
|
+
console.log(chalk.gray(' - Your shell profile is sourced, so NVM/Homebrew paths are available'));
|
|
203
|
+
console.log('');
|
|
204
|
+
console.log(chalk.cyan('To start now: open ' + COMMAND_FILE_PATH));
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* macOS uninstall: removes Login Item and .command file.
|
|
208
|
+
*/
|
|
209
|
+
async function uninstallDarwin() {
|
|
210
|
+
await removeLoginItem();
|
|
211
|
+
if (fs.existsSync(COMMAND_FILE_PATH)) {
|
|
212
|
+
fs.unlinkSync(COMMAND_FILE_PATH);
|
|
213
|
+
console.log(chalk.green(` Removed ${COMMAND_FILE_PATH}`));
|
|
214
|
+
}
|
|
215
|
+
await migrateLegacyLaunchAgent();
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* macOS status: checks .command file, Login Item, running process, legacy plist.
|
|
219
|
+
*/
|
|
220
|
+
async function statusDarwin() {
|
|
221
|
+
const commandExists = fs.existsSync(COMMAND_FILE_PATH);
|
|
222
|
+
console.log(commandExists
|
|
223
|
+
? chalk.green(' .command file: Installed')
|
|
224
|
+
: chalk.red(' .command file: Not found'));
|
|
225
|
+
const isRegistered = await isLoginItemRegistered();
|
|
226
|
+
console.log(isRegistered
|
|
227
|
+
? chalk.green(' Login Item: Registered')
|
|
228
|
+
: chalk.red(' Login Item: Not registered'));
|
|
229
|
+
const pid = getRunningPid();
|
|
230
|
+
if (pid) {
|
|
231
|
+
console.log(chalk.green(` Process: Running (PID ${pid})`));
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
console.log(chalk.yellow(' Process: Not running'));
|
|
235
|
+
}
|
|
236
|
+
const hasLegacy = fs.existsSync(LEGACY_PLIST_PATH);
|
|
237
|
+
if (hasLegacy) {
|
|
238
|
+
console.log(chalk.yellow(' Legacy LaunchAgent plist found — run "crewly service install" to migrate'));
|
|
239
|
+
}
|
|
240
|
+
console.log('');
|
|
241
|
+
if (commandExists && isRegistered && pid) {
|
|
242
|
+
console.log(chalk.green('Service is fully operational.'));
|
|
243
|
+
}
|
|
244
|
+
else if (commandExists && isRegistered) {
|
|
245
|
+
console.log(chalk.yellow('Service is installed but not running.'));
|
|
246
|
+
console.log(chalk.gray(` Start with: open ${COMMAND_FILE_PATH}`));
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
console.log(chalk.red('Service is not installed.'));
|
|
250
|
+
console.log(chalk.gray(' Install with: crewly service install'));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// ===========================================================================
|
|
254
|
+
// Linux implementation
|
|
255
|
+
// ===========================================================================
|
|
256
|
+
/**
|
|
257
|
+
* Linux install: creates wrapper script and systemd user service unit.
|
|
258
|
+
*
|
|
259
|
+
* @param projectRoot - Absolute path to the Crewly project directory
|
|
260
|
+
* @param options - Install options
|
|
261
|
+
*/
|
|
262
|
+
async function installLinux(projectRoot, options) {
|
|
263
|
+
if (fs.existsSync(SYSTEMD_UNIT_PATH) && !options.force) {
|
|
264
|
+
console.log(chalk.yellow('Service is already installed.'));
|
|
265
|
+
console.log(chalk.gray('Use --force to overwrite, or run "crewly service status".'));
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
// 1. Write the wrapper script (sources shell profile for NVM/PATH)
|
|
269
|
+
const wrapperContent = generateLinuxWrapper(projectRoot);
|
|
270
|
+
fs.writeFileSync(SYSTEMD_WRAPPER_PATH, wrapperContent, { mode: 0o755 });
|
|
271
|
+
console.log(chalk.green(` Created ${SYSTEMD_WRAPPER_PATH}`));
|
|
272
|
+
// 2. Write the systemd unit file
|
|
273
|
+
fs.mkdirSync(SYSTEMD_USER_DIR, { recursive: true });
|
|
274
|
+
const unitContent = generateSystemdUnit(projectRoot);
|
|
275
|
+
fs.writeFileSync(SYSTEMD_UNIT_PATH, unitContent);
|
|
276
|
+
console.log(chalk.green(` Created ${SYSTEMD_UNIT_PATH}`));
|
|
277
|
+
// 3. Reload systemd and enable the service
|
|
278
|
+
try {
|
|
279
|
+
await execAsync('systemctl --user daemon-reload');
|
|
280
|
+
await execAsync(`systemctl --user enable ${SYSTEMD_UNIT_NAME}`);
|
|
281
|
+
console.log(chalk.green(' Enabled systemd user service'));
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
console.log(chalk.yellow(' Could not enable service via systemctl.'));
|
|
285
|
+
console.log(chalk.gray(' Run manually: systemctl --user daemon-reload && systemctl --user enable crewly'));
|
|
286
|
+
}
|
|
287
|
+
console.log('');
|
|
288
|
+
console.log(chalk.green('Crewly service installed successfully!'));
|
|
289
|
+
console.log('');
|
|
290
|
+
console.log(chalk.gray('How it works:'));
|
|
291
|
+
console.log(chalk.gray(' - systemd manages the Crewly process as a user service'));
|
|
292
|
+
console.log(chalk.gray(' - Auto-restarts on crash (5s delay)'));
|
|
293
|
+
console.log(chalk.gray(' - Shell profile sourced for NVM/PATH'));
|
|
294
|
+
console.log('');
|
|
295
|
+
console.log(chalk.cyan(`To start now: systemctl --user start ${SYSTEMD_UNIT_NAME}`));
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Linux uninstall: stops and disables the systemd service, removes files.
|
|
299
|
+
*/
|
|
300
|
+
async function uninstallLinux() {
|
|
301
|
+
// Stop and disable the service
|
|
302
|
+
try {
|
|
303
|
+
await execAsync(`systemctl --user stop ${SYSTEMD_UNIT_NAME} 2>/dev/null`);
|
|
304
|
+
await execAsync(`systemctl --user disable ${SYSTEMD_UNIT_NAME} 2>/dev/null`);
|
|
305
|
+
console.log(chalk.green(' Stopped and disabled systemd service'));
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
console.log(chalk.gray(' systemd service was not running'));
|
|
309
|
+
}
|
|
310
|
+
// Remove unit file
|
|
311
|
+
if (fs.existsSync(SYSTEMD_UNIT_PATH)) {
|
|
312
|
+
fs.unlinkSync(SYSTEMD_UNIT_PATH);
|
|
313
|
+
console.log(chalk.green(` Removed ${SYSTEMD_UNIT_PATH}`));
|
|
314
|
+
}
|
|
315
|
+
// Remove wrapper script
|
|
316
|
+
if (fs.existsSync(SYSTEMD_WRAPPER_PATH)) {
|
|
317
|
+
fs.unlinkSync(SYSTEMD_WRAPPER_PATH);
|
|
318
|
+
console.log(chalk.green(` Removed ${SYSTEMD_WRAPPER_PATH}`));
|
|
319
|
+
}
|
|
320
|
+
// Reload systemd
|
|
321
|
+
try {
|
|
322
|
+
await execAsync('systemctl --user daemon-reload');
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
// Non-critical
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Linux status: checks systemd unit, service state, and running process.
|
|
330
|
+
*/
|
|
331
|
+
async function statusLinux() {
|
|
332
|
+
// Check unit file
|
|
333
|
+
const unitExists = fs.existsSync(SYSTEMD_UNIT_PATH);
|
|
334
|
+
console.log(unitExists
|
|
335
|
+
? chalk.green(' Unit file: Installed')
|
|
336
|
+
: chalk.red(' Unit file: Not found'));
|
|
337
|
+
// Check systemd service state
|
|
338
|
+
const serviceState = await getSystemdState();
|
|
339
|
+
if (serviceState === 'active') {
|
|
340
|
+
console.log(chalk.green(' systemd: Active (running)'));
|
|
341
|
+
}
|
|
342
|
+
else if (serviceState === 'enabled') {
|
|
343
|
+
console.log(chalk.yellow(' systemd: Enabled (not running)'));
|
|
344
|
+
}
|
|
345
|
+
else if (serviceState === 'inactive') {
|
|
346
|
+
console.log(chalk.yellow(' systemd: Inactive'));
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
console.log(chalk.red(' systemd: Not registered'));
|
|
350
|
+
}
|
|
351
|
+
// Check PID
|
|
352
|
+
const pid = getRunningPid();
|
|
353
|
+
if (pid) {
|
|
354
|
+
console.log(chalk.green(` Process: Running (PID ${pid})`));
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
console.log(chalk.yellow(' Process: Not running'));
|
|
358
|
+
}
|
|
359
|
+
console.log('');
|
|
360
|
+
if (unitExists && serviceState === 'active' && pid) {
|
|
361
|
+
console.log(chalk.green('Service is fully operational.'));
|
|
362
|
+
}
|
|
363
|
+
else if (unitExists && serviceState) {
|
|
364
|
+
console.log(chalk.yellow('Service is installed but not running.'));
|
|
365
|
+
console.log(chalk.gray(` Start with: systemctl --user start ${SYSTEMD_UNIT_NAME}`));
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
console.log(chalk.red('Service is not installed.'));
|
|
369
|
+
console.log(chalk.gray(' Install with: crewly service install'));
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
// ===========================================================================
|
|
373
|
+
// Linux helpers
|
|
374
|
+
// ===========================================================================
|
|
375
|
+
/**
|
|
376
|
+
* Generates the systemd unit file content.
|
|
377
|
+
*
|
|
378
|
+
* Uses a wrapper script as ExecStart so the user's shell profile is sourced,
|
|
379
|
+
* ensuring NVM and other PATH additions are available.
|
|
380
|
+
*
|
|
381
|
+
* @param projectRoot - Absolute path to the Crewly project directory
|
|
382
|
+
* @returns The systemd unit file content
|
|
383
|
+
*/
|
|
384
|
+
export function generateSystemdUnit(projectRoot) {
|
|
385
|
+
return `[Unit]
|
|
386
|
+
Description=Crewly Backend Service
|
|
387
|
+
After=network.target
|
|
388
|
+
|
|
389
|
+
[Service]
|
|
390
|
+
Type=simple
|
|
391
|
+
ExecStart=${SYSTEMD_WRAPPER_PATH}
|
|
392
|
+
WorkingDirectory=${projectRoot}
|
|
393
|
+
Restart=on-failure
|
|
394
|
+
RestartSec=5
|
|
395
|
+
Environment=NODE_ENV=development
|
|
396
|
+
|
|
397
|
+
StandardOutput=append:${LOG_DIR}/service.log
|
|
398
|
+
StandardError=append:${LOG_DIR}/service.log
|
|
399
|
+
|
|
400
|
+
[Install]
|
|
401
|
+
WantedBy=default.target
|
|
402
|
+
`;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Generates the Linux wrapper script that sources the shell profile
|
|
406
|
+
* before starting node, ensuring NVM/PATH are available.
|
|
407
|
+
*
|
|
408
|
+
* @param projectRoot - Absolute path to the Crewly project directory
|
|
409
|
+
* @returns The shell script content
|
|
410
|
+
*/
|
|
411
|
+
export function generateLinuxWrapper(projectRoot) {
|
|
412
|
+
return `#!/bin/bash
|
|
413
|
+
# Crewly Backend Service wrapper for systemd
|
|
414
|
+
# Sources shell profile for NVM/PATH, then starts the backend.
|
|
415
|
+
|
|
416
|
+
# Source shell profile for NVM, PATH, etc.
|
|
417
|
+
if [ -f "$HOME/.bashrc" ]; then
|
|
418
|
+
source "$HOME/.bashrc" 2>/dev/null || true
|
|
419
|
+
elif [ -f "$HOME/.profile" ]; then
|
|
420
|
+
source "$HOME/.profile" 2>/dev/null || true
|
|
421
|
+
fi
|
|
422
|
+
|
|
423
|
+
export NODE_ENV="development"
|
|
424
|
+
|
|
425
|
+
CREWLY_DIR="${projectRoot}"
|
|
426
|
+
PIDFILE="$HOME/${CREWLY_CONSTANTS.PATHS.CREWLY_HOME}/crewly.pid"
|
|
427
|
+
|
|
428
|
+
cd "$CREWLY_DIR" || { echo "Cannot cd to $CREWLY_DIR"; exit 1; }
|
|
429
|
+
|
|
430
|
+
${NATIVE_MODULE_CHECK}
|
|
431
|
+
|
|
432
|
+
echo "$(date): Starting Crewly backend (node $(node --version))..."
|
|
433
|
+
|
|
434
|
+
# Write PID file for status checks
|
|
435
|
+
echo $$ > "$PIDFILE"
|
|
436
|
+
|
|
437
|
+
exec node dist/cli/cli/src/index.js start
|
|
438
|
+
`;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Queries systemd for the current state of the crewly service.
|
|
442
|
+
*
|
|
443
|
+
* @returns "active", "enabled", "inactive", or null if not registered
|
|
444
|
+
*/
|
|
445
|
+
export async function getSystemdState() {
|
|
446
|
+
try {
|
|
447
|
+
const { stdout } = await execAsync(`systemctl --user is-active ${SYSTEMD_UNIT_NAME} 2>/dev/null`);
|
|
448
|
+
const state = stdout.trim();
|
|
449
|
+
if (state === 'active')
|
|
450
|
+
return 'active';
|
|
451
|
+
return 'inactive';
|
|
452
|
+
}
|
|
453
|
+
catch {
|
|
454
|
+
// is-active returns non-zero for inactive/unknown
|
|
455
|
+
}
|
|
456
|
+
try {
|
|
457
|
+
const { stdout } = await execAsync(`systemctl --user is-enabled ${SYSTEMD_UNIT_NAME} 2>/dev/null`);
|
|
458
|
+
if (stdout.trim() === 'enabled')
|
|
459
|
+
return 'enabled';
|
|
460
|
+
}
|
|
461
|
+
catch {
|
|
462
|
+
// is-enabled returns non-zero if not found
|
|
463
|
+
}
|
|
464
|
+
return null;
|
|
465
|
+
}
|
|
466
|
+
// ===========================================================================
|
|
467
|
+
// macOS helpers
|
|
468
|
+
// ===========================================================================
|
|
469
|
+
/**
|
|
470
|
+
* Generates the content of the .command wrapper script (macOS).
|
|
471
|
+
*
|
|
472
|
+
* The script sources the user's shell profile (for NVM/PATH), prevents
|
|
473
|
+
* duplicate instances via a PID file, and auto-restarts on crash.
|
|
474
|
+
*
|
|
475
|
+
* @param projectRoot - Absolute path to the Crewly project directory
|
|
476
|
+
* @returns The shell script content
|
|
477
|
+
*/
|
|
478
|
+
export function generateCommandFile(projectRoot) {
|
|
479
|
+
return `#!/bin/bash
|
|
480
|
+
# Crewly Backend Service — runs inside Terminal.app for FDA inheritance
|
|
481
|
+
# Registered as a macOS Login Item for auto-start on boot.
|
|
482
|
+
#
|
|
483
|
+
# Terminal.app's TCC permissions propagate to child processes,
|
|
484
|
+
# allowing access to ~/Desktop/ and other protected directories.
|
|
485
|
+
|
|
486
|
+
set -euo pipefail
|
|
487
|
+
|
|
488
|
+
# Source shell profile to pick up NVM, PATH, etc.
|
|
489
|
+
if [ -f "$HOME/.zshrc" ]; then
|
|
490
|
+
source "$HOME/.zshrc" 2>/dev/null || true
|
|
491
|
+
elif [ -f "$HOME/.bashrc" ]; then
|
|
492
|
+
source "$HOME/.bashrc" 2>/dev/null || true
|
|
493
|
+
fi
|
|
494
|
+
|
|
495
|
+
export NODE_ENV="development"
|
|
496
|
+
|
|
497
|
+
CREWLY_DIR="${projectRoot}"
|
|
498
|
+
LOG_DIR="$HOME/${CREWLY_CONSTANTS.PATHS.CREWLY_HOME}/logs"
|
|
499
|
+
PIDFILE="$HOME/${CREWLY_CONSTANTS.PATHS.CREWLY_HOME}/crewly.pid"
|
|
500
|
+
|
|
501
|
+
mkdir -p "$LOG_DIR"
|
|
502
|
+
|
|
503
|
+
# Prevent duplicate instances
|
|
504
|
+
if [ -f "$PIDFILE" ]; then
|
|
505
|
+
OLD_PID=$(cat "$PIDFILE")
|
|
506
|
+
if kill -0 "$OLD_PID" 2>/dev/null; then
|
|
507
|
+
echo "Crewly already running (PID $OLD_PID). Exiting."
|
|
508
|
+
exit 0
|
|
509
|
+
fi
|
|
510
|
+
fi
|
|
511
|
+
|
|
512
|
+
cd "$CREWLY_DIR" || { echo "Cannot cd to $CREWLY_DIR"; exit 1; }
|
|
513
|
+
|
|
514
|
+
echo "$(date): Starting Crewly backend (node $(node --version))..." | tee -a "$LOG_DIR/service.log"
|
|
515
|
+
|
|
516
|
+
# Run in foreground so Terminal keeps the tab open; restart on crash
|
|
517
|
+
while true; do
|
|
518
|
+
${NATIVE_MODULE_CHECK}
|
|
519
|
+
|
|
520
|
+
node dist/cli/cli/src/index.js start >> "$LOG_DIR/service.log" 2>&1 &
|
|
521
|
+
NODE_PID=$!
|
|
522
|
+
echo "$NODE_PID" > "$PIDFILE"
|
|
523
|
+
wait "$NODE_PID" || true
|
|
524
|
+
EXIT_CODE=$?
|
|
525
|
+
echo "$(date): Crewly exited with code $EXIT_CODE, restarting in 5s..." | tee -a "$LOG_DIR/service.log"
|
|
526
|
+
sleep 5
|
|
527
|
+
done
|
|
528
|
+
`;
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Registers the .command file as a macOS Login Item via osascript.
|
|
532
|
+
*
|
|
533
|
+
* @throws Error if osascript fails
|
|
534
|
+
*/
|
|
535
|
+
async function registerLoginItem() {
|
|
536
|
+
try {
|
|
537
|
+
await execAsync(`osascript -e 'tell application "System Events" to make login item at end with properties {path:"${COMMAND_FILE_PATH}", hidden:false, name:"${LOGIN_ITEM_NAME}"}'`);
|
|
538
|
+
console.log(chalk.green(' Registered as Login Item'));
|
|
539
|
+
}
|
|
540
|
+
catch (error) {
|
|
541
|
+
console.log(chalk.yellow(' Could not register Login Item automatically.'));
|
|
542
|
+
console.log(chalk.gray(' Add manually: System Settings → General → Login Items → add ' +
|
|
543
|
+
COMMAND_FILE_PATH));
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Removes the Crewly Login Item via osascript.
|
|
548
|
+
*/
|
|
549
|
+
async function removeLoginItem() {
|
|
550
|
+
try {
|
|
551
|
+
await execAsync(`osascript -e 'tell application "System Events" to delete login item "${LOGIN_ITEM_NAME}"'`);
|
|
552
|
+
console.log(chalk.green(' Removed Login Item'));
|
|
553
|
+
}
|
|
554
|
+
catch {
|
|
555
|
+
console.log(chalk.gray(' Login Item was not registered (nothing to remove)'));
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
/**
|
|
559
|
+
* Checks whether the Crewly Login Item is currently registered.
|
|
560
|
+
*
|
|
561
|
+
* @returns true if registered
|
|
562
|
+
*/
|
|
563
|
+
export async function isLoginItemRegistered() {
|
|
564
|
+
try {
|
|
565
|
+
const { stdout } = await execAsync(`osascript -e 'tell application "System Events" to get the name of every login item'`);
|
|
566
|
+
return stdout.includes(LOGIN_ITEM_NAME);
|
|
567
|
+
}
|
|
568
|
+
catch {
|
|
569
|
+
return false;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* Detects and removes a legacy LaunchAgent plist (com.crewly.backend).
|
|
574
|
+
*
|
|
575
|
+
* Unloads the service via launchctl before removing the file.
|
|
576
|
+
*/
|
|
577
|
+
async function migrateLegacyLaunchAgent() {
|
|
578
|
+
if (!fs.existsSync(LEGACY_PLIST_PATH)) {
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
console.log(chalk.yellow(' Found legacy LaunchAgent plist, migrating...'));
|
|
582
|
+
try {
|
|
583
|
+
await execAsync(`launchctl bootout gui/$(id -u)/${LEGACY_PLIST_LABEL} 2>/dev/null`);
|
|
584
|
+
console.log(chalk.green(' Unloaded legacy LaunchAgent'));
|
|
585
|
+
}
|
|
586
|
+
catch {
|
|
587
|
+
// Already unloaded
|
|
588
|
+
}
|
|
589
|
+
try {
|
|
590
|
+
fs.unlinkSync(LEGACY_PLIST_PATH);
|
|
591
|
+
console.log(chalk.green(` Removed ${LEGACY_PLIST_PATH}`));
|
|
592
|
+
}
|
|
593
|
+
catch {
|
|
594
|
+
console.log(chalk.yellow(` Could not remove ${LEGACY_PLIST_PATH} — please delete manually`));
|
|
595
|
+
}
|
|
596
|
+
const legacyScript = path.join(SERVICE_DIR, 'crewly-service.sh');
|
|
597
|
+
if (fs.existsSync(legacyScript)) {
|
|
598
|
+
try {
|
|
599
|
+
fs.unlinkSync(legacyScript);
|
|
600
|
+
console.log(chalk.green(' Removed legacy crewly-service.sh'));
|
|
601
|
+
}
|
|
602
|
+
catch {
|
|
603
|
+
// Non-critical
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
// ===========================================================================
|
|
608
|
+
// Shared helpers
|
|
609
|
+
// ===========================================================================
|
|
610
|
+
/**
|
|
611
|
+
* Asserts the current platform is macOS or Linux. Exits with an error
|
|
612
|
+
* message on unsupported platforms (e.g. Windows).
|
|
613
|
+
*/
|
|
614
|
+
function assertSupportedPlatform() {
|
|
615
|
+
if (process.platform !== 'darwin' && process.platform !== 'linux') {
|
|
616
|
+
console.log(chalk.red(`Service management is not supported on ${process.platform}. Supported: macOS, Linux.`));
|
|
617
|
+
process.exit(1);
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
/**
|
|
621
|
+
* Finds the Crewly project root by walking up from cwd looking for
|
|
622
|
+
* a package.json with `"name": "crewly"`.
|
|
623
|
+
*
|
|
624
|
+
* @returns Absolute path to the project root, or null if not found
|
|
625
|
+
*/
|
|
626
|
+
export function findProjectRoot() {
|
|
627
|
+
let current = process.cwd();
|
|
628
|
+
while (true) {
|
|
629
|
+
const pkgPath = path.join(current, 'package.json');
|
|
630
|
+
if (fs.existsSync(pkgPath)) {
|
|
631
|
+
try {
|
|
632
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
633
|
+
if (pkg.name === 'crewly') {
|
|
634
|
+
return current;
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
catch {
|
|
638
|
+
// Malformed package.json — keep searching
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
const parent = path.dirname(current);
|
|
642
|
+
if (parent === current) {
|
|
643
|
+
return null;
|
|
644
|
+
}
|
|
645
|
+
current = parent;
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Reads the PID file and verifies the process is still alive.
|
|
650
|
+
*
|
|
651
|
+
* @returns The PID if the process is running, or null
|
|
652
|
+
*/
|
|
653
|
+
export function getRunningPid() {
|
|
654
|
+
if (!fs.existsSync(PID_FILE)) {
|
|
655
|
+
return null;
|
|
656
|
+
}
|
|
657
|
+
try {
|
|
658
|
+
const pid = parseInt(fs.readFileSync(PID_FILE, 'utf-8').trim(), 10);
|
|
659
|
+
if (isNaN(pid)) {
|
|
660
|
+
return null;
|
|
661
|
+
}
|
|
662
|
+
process.kill(pid, 0);
|
|
663
|
+
return pid;
|
|
664
|
+
}
|
|
665
|
+
catch {
|
|
666
|
+
return null;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
/**
|
|
670
|
+
* Kills the running service process identified by the PID file.
|
|
671
|
+
*/
|
|
672
|
+
async function killServiceProcess() {
|
|
673
|
+
const pid = getRunningPid();
|
|
674
|
+
if (pid) {
|
|
675
|
+
try {
|
|
676
|
+
process.kill(pid, 'SIGTERM');
|
|
677
|
+
console.log(chalk.green(` Stopped running process (PID ${pid})`));
|
|
678
|
+
}
|
|
679
|
+
catch {
|
|
680
|
+
console.log(chalk.gray(' Process was already stopped'));
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
if (fs.existsSync(PID_FILE)) {
|
|
684
|
+
fs.unlinkSync(PID_FILE);
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
//# sourceMappingURL=service.js.map
|