crewly 1.2.3 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/config/constants.ts +44 -1
- package/config/index.ts +4 -0
- package/config/roles/orchestrator/prompt.md +30 -2
- package/config/roles/team-leader/prompt.md +169 -0
- package/config/roles/team-leader/role.json +13 -0
- package/config/roles/team-leader/tl-addon.md +142 -0
- package/config/runtime_scripts/runtime-config.json +7 -0
- package/config/skills/_common/lib.sh +37 -0
- package/config/skills/agent/computer-use/execute.sh +228 -0
- package/config/skills/agent/computer-use/instructions.md +103 -0
- package/config/skills/agent/computer-use/lib/accessibility.sh +292 -0
- package/config/skills/agent/computer-use/lib/applescript.sh +117 -0
- package/config/skills/agent/computer-use/lib/discover.sh +122 -0
- package/config/skills/agent/computer-use/lib/playwright.sh +153 -0
- package/config/skills/agent/computer-use/lib/screenshot.sh +61 -0
- package/config/skills/agent/computer-use/skill.json +29 -0
- package/config/skills/agent/core/accept-task/execute.sh +7 -1
- package/config/skills/agent/core/complete-task/execute.sh +38 -1
- package/config/skills/agent/core/report-status/execute.sh +51 -2
- package/config/skills/agent/desktop-app-control/execute.sh +561 -0
- package/config/skills/agent/desktop-app-control/instructions.md +102 -0
- package/config/skills/agent/desktop-app-control/skill.json +33 -0
- package/config/skills/orchestrator/broadcast-to-org/execute.sh +88 -0
- package/config/skills/orchestrator/broadcast-to-org/instructions.md +51 -0
- package/config/skills/orchestrator/broadcast-to-org/skill.json +20 -0
- package/config/skills/orchestrator/delegate-task/execute.sh +75 -10
- package/config/skills/orchestrator/delegate-task/instructions.md +11 -1
- package/config/skills/orchestrator/handle-agent-failure/execute.sh +45 -0
- package/config/skills/orchestrator/handle-agent-failure/instructions.md +29 -0
- package/config/skills/orchestrator/handle-agent-failure/skill.json +20 -0
- package/config/skills/orchestrator/restart-crewly/instructions.md +9 -2
- package/config/skills/team-leader/_common/lib.sh +4 -0
- package/config/skills/team-leader/aggregate-results/execute.sh +168 -0
- package/config/skills/team-leader/aggregate-results/instructions.md +89 -0
- package/config/skills/team-leader/aggregate-results/skill.json +20 -0
- package/config/skills/team-leader/decompose-goal/execute.sh +86 -0
- package/config/skills/team-leader/decompose-goal/instructions.md +84 -0
- package/config/skills/team-leader/decompose-goal/skill.json +20 -0
- package/config/skills/team-leader/delegate-task/execute.sh +142 -0
- package/config/skills/team-leader/delegate-task/instructions.md +55 -0
- package/config/skills/team-leader/delegate-task/skill.json +20 -0
- package/config/skills/team-leader/handle-failure/execute.sh +119 -0
- package/config/skills/team-leader/handle-failure/instructions.md +93 -0
- package/config/skills/team-leader/handle-failure/skill.json +20 -0
- package/config/skills/team-leader/schedule-check/execute.sh +65 -0
- package/config/skills/team-leader/schedule-check/execute.test.sh +247 -0
- package/config/skills/team-leader/schedule-check/instructions.md +49 -0
- package/config/skills/team-leader/schedule-check/skill.json +20 -0
- package/config/skills/team-leader/start-agent/execute.sh +39 -0
- package/config/skills/team-leader/start-agent/instructions.md +48 -0
- package/config/skills/team-leader/start-agent/skill.json +20 -0
- package/config/skills/team-leader/stop-agent/execute.sh +39 -0
- package/config/skills/team-leader/stop-agent/instructions.md +49 -0
- package/config/skills/team-leader/stop-agent/skill.json +20 -0
- package/config/skills/team-leader/verify-output/execute.sh +296 -0
- package/config/skills/team-leader/verify-output/instructions.md +122 -0
- package/config/skills/team-leader/verify-output/skill.json +20 -0
- package/config/templates/core-team/demo-script.md +41 -0
- package/config/templates/core-team/goals.md +20 -0
- package/config/templates/core-team/team.json +22 -0
- package/config/templates/dev-fullstack/template.json +115 -0
- package/config/templates/education-smb/README.md +27 -0
- package/config/templates/education-smb/goals.md +16 -0
- package/config/templates/education-smb/knowledge/docs/content-standards.md +24 -0
- package/config/templates/education-smb/knowledge/docs/education-industry-context.md +13 -0
- package/config/templates/education-smb/knowledge/index.json +24 -0
- package/config/templates/education-smb/learned-patterns.json +16 -0
- package/config/templates/education-smb/quality-gates.yaml +66 -0
- package/config/templates/education-smb/roles/analytics-specialist.md +6 -0
- package/config/templates/education-smb/roles/content-creator.md +6 -0
- package/config/templates/education-smb/roles/curriculum-designer.md +6 -0
- package/config/templates/education-smb/roles/engagement-manager.md +6 -0
- package/config/templates/education-smb/team.json +40 -0
- package/config/templates/education-smb/template.json +26 -0
- package/config/templates/education-smb/workflows/course-content-generation.yaml +44 -0
- package/config/templates/education-smb/workflows/reporting.yaml +31 -0
- package/config/templates/education-smb/workflows/student-communication.yaml +44 -0
- package/config/templates/education-smb/workflows.yaml +40 -0
- package/config/templates/insurance-smb/README.md +28 -0
- package/config/templates/insurance-smb/goals.md +21 -0
- package/config/templates/insurance-smb/knowledge/docs/compliance-checklist.md +28 -0
- package/config/templates/insurance-smb/knowledge/docs/insurance-industry-context.md +23 -0
- package/config/templates/insurance-smb/knowledge/index.json +24 -0
- package/config/templates/insurance-smb/learned-patterns.json +16 -0
- package/config/templates/insurance-smb/quality-gates.yaml +54 -0
- package/config/templates/insurance-smb/roles/claims-processor.md +6 -0
- package/config/templates/insurance-smb/roles/client-manager.md +6 -0
- package/config/templates/insurance-smb/roles/compliance-officer.md +6 -0
- package/config/templates/insurance-smb/roles/marketing-specialist.md +6 -0
- package/config/templates/insurance-smb/roles/policy-analyst.md +6 -0
- package/config/templates/insurance-smb/team.json +48 -0
- package/config/templates/insurance-smb/template.json +26 -0
- package/config/templates/insurance-smb/workflows/claims-processing.yaml +48 -0
- package/config/templates/insurance-smb/workflows.yaml +43 -0
- package/config/templates/research-analysis/template.json +88 -0
- package/config/templates/social-media-ops/template.json +85 -0
- package/config/templates/video-production/template.json +123 -0
- package/dist/backend/backend/src/constants.d.ts +303 -15
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +296 -15
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +69 -48
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/auth/auth.controller.d.ts +81 -0
- package/dist/backend/backend/src/controllers/cloud/auth/auth.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/auth/auth.controller.js +234 -0
- package/dist/backend/backend/src/controllers/cloud/auth/auth.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.d.ts +25 -0
- package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.js +38 -0
- package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-auth.controller.d.ts +69 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-auth.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-auth.controller.js +165 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-auth.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-auth.routes.d.ts +23 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-auth.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-auth.routes.js +32 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-auth.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts +52 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +122 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts +21 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.js +32 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/files/cloud-file.controller.d.ts +42 -0
- package/dist/backend/backend/src/controllers/cloud/files/cloud-file.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/files/cloud-file.controller.js +138 -0
- package/dist/backend/backend/src/controllers/cloud/files/cloud-file.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/files/cloud-file.routes.d.ts +23 -0
- package/dist/backend/backend/src/controllers/cloud/files/cloud-file.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/files/cloud-file.routes.js +34 -0
- package/dist/backend/backend/src/controllers/cloud/files/cloud-file.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/files/cloud-file.types.d.ts +43 -0
- package/dist/backend/backend/src/controllers/cloud/files/cloud-file.types.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/files/cloud-file.types.js +9 -0
- package/dist/backend/backend/src/controllers/cloud/files/cloud-file.types.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/files/index.d.ts +7 -0
- package/dist/backend/backend/src/controllers/cloud/files/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/files/index.js +7 -0
- package/dist/backend/backend/src/controllers/cloud/files/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/h5/h5-entry.controller.d.ts +47 -0
- package/dist/backend/backend/src/controllers/cloud/h5/h5-entry.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/h5/h5-entry.controller.js +131 -0
- package/dist/backend/backend/src/controllers/cloud/h5/h5-entry.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/h5/h5-entry.routes.d.ts +23 -0
- package/dist/backend/backend/src/controllers/cloud/h5/h5-entry.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/h5/h5-entry.routes.js +30 -0
- package/dist/backend/backend/src/controllers/cloud/h5/h5-entry.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/h5/h5-entry.types.d.ts +81 -0
- package/dist/backend/backend/src/controllers/cloud/h5/h5-entry.types.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/h5/h5-entry.types.js +85 -0
- package/dist/backend/backend/src/controllers/cloud/h5/h5-entry.types.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/h5/index.d.ts +7 -0
- package/dist/backend/backend/src/controllers/cloud/h5/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/h5/index.js +7 -0
- package/dist/backend/backend/src/controllers/cloud/h5/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/index.d.ts +14 -0
- package/dist/backend/backend/src/controllers/cloud/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/index.js +14 -0
- package/dist/backend/backend/src/controllers/cloud/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/magic-moment/index.d.ts +7 -0
- package/dist/backend/backend/src/controllers/cloud/magic-moment/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/magic-moment/index.js +7 -0
- package/dist/backend/backend/src/controllers/cloud/magic-moment/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/magic-moment/magic-moment.controller.d.ts +45 -0
- package/dist/backend/backend/src/controllers/cloud/magic-moment/magic-moment.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/magic-moment/magic-moment.controller.js +155 -0
- package/dist/backend/backend/src/controllers/cloud/magic-moment/magic-moment.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/magic-moment/magic-moment.routes.d.ts +25 -0
- package/dist/backend/backend/src/controllers/cloud/magic-moment/magic-moment.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/magic-moment/magic-moment.routes.js +32 -0
- package/dist/backend/backend/src/controllers/cloud/magic-moment/magic-moment.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/relay.controller.d.ts +101 -0
- package/dist/backend/backend/src/controllers/cloud/relay.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/relay.controller.js +343 -0
- package/dist/backend/backend/src/controllers/cloud/relay.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/relay.routes.d.ts +29 -0
- package/dist/backend/backend/src/controllers/cloud/relay.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/relay.routes.js +44 -0
- package/dist/backend/backend/src/controllers/cloud/relay.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/cloud-task.controller.d.ts +49 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/cloud-task.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/cloud-task.controller.js +152 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/cloud-task.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/cloud-task.routes.d.ts +24 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/cloud-task.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/cloud-task.routes.js +34 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/cloud-task.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/cloud-task.types.d.ts +90 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/cloud-task.types.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/cloud-task.types.js +48 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/cloud-task.types.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/index.d.ts +7 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/index.js +7 -0
- package/dist/backend/backend/src/controllers/cloud/tasks/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/marketplace/index.d.ts +2 -0
- package/dist/backend/backend/src/controllers/marketplace/index.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/index.js +3 -0
- package/dist/backend/backend/src/controllers/marketplace/index.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts +12 -12
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js +1 -18
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +3 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.controller.d.ts +111 -0
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.controller.js +220 -0
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.d.ts +33 -0
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.js +50 -0
- package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.js +4 -1
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +18 -2
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/payment/index.d.ts +7 -0
- package/dist/backend/backend/src/controllers/payment/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/payment/index.js +7 -0
- package/dist/backend/backend/src/controllers/payment/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/payment/payment.controller.d.ts +57 -0
- package/dist/backend/backend/src/controllers/payment/payment.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/payment/payment.controller.js +136 -0
- package/dist/backend/backend/src/controllers/payment/payment.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/payment/payment.routes.d.ts +27 -0
- package/dist/backend/backend/src/controllers/payment/payment.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/payment/payment.routes.js +38 -0
- package/dist/backend/backend/src/controllers/payment/payment.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/payment/payment.types.d.ts +109 -0
- package/dist/backend/backend/src/controllers/payment/payment.types.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/payment/payment.types.js +54 -0
- package/dist/backend/backend/src/controllers/payment/payment.types.js.map +1 -0
- package/dist/backend/backend/src/controllers/request-types.d.ts +34 -5
- package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/session/session.controller.d.ts +14 -0
- package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/session/session.controller.js +48 -0
- package/dist/backend/backend/src/controllers/session/session.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/session/session.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/session/session.routes.js +3 -1
- package/dist/backend/backend/src/controllers/session/session.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/scheduler.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/scheduler.controller.js +4 -3
- package/dist/backend/backend/src/controllers/system/scheduler.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.controller.js +13 -15
- package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/assignments.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/assignments.controller.js.map +1 -1
- 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 +40 -4
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +259 -13
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/template/index.d.ts +8 -0
- package/dist/backend/backend/src/controllers/template/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/template/index.js +8 -0
- package/dist/backend/backend/src/controllers/template/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/template/template.controller.d.ts +63 -0
- package/dist/backend/backend/src/controllers/template/template.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/template/template.controller.js +112 -0
- package/dist/backend/backend/src/controllers/template/template.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/template/template.routes.d.ts +24 -0
- package/dist/backend/backend/src/controllers/template/template.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/template/template.routes.js +33 -0
- package/dist/backend/backend/src/controllers/template/template.routes.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +105 -13
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.js +3 -3
- package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.js.map +1 -1
- package/dist/backend/backend/src/models/Team.d.ts +5 -0
- package/dist/backend/backend/src/models/Team.d.ts.map +1 -1
- package/dist/backend/backend/src/models/Team.js +24 -0
- package/dist/backend/backend/src/models/Team.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +21 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +1 -6
- 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 +211 -287
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts +7 -1
- 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 +11 -2
- package/dist/backend/backend/src/services/agent/claude-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts +1 -0
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.js +30 -43
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +216 -0
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +496 -0
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/openhands-runtime.service.d.ts +70 -0
- package/dist/backend/backend/src/services/agent/openhands-runtime.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/openhands-runtime.service.js +131 -0
- package/dist/backend/backend/src/services/agent/openhands-runtime.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts +21 -1
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js +32 -1
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +77 -3
- 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 +281 -30
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-service.factory.js +9 -0
- package/dist/backend/backend/src/services/agent/runtime-service.factory.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +49 -2
- 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 +124 -2
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.d.ts +10 -2
- package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.js +49 -8
- package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/auth/auth.service.d.ts +174 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.service.js +402 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.types.d.ts +110 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.types.js +54 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.types.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.utils.d.ts +36 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.utils.js +31 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.utils.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/auth/jwt-auth.middleware.d.ts +47 -0
- package/dist/backend/backend/src/services/cloud/auth/jwt-auth.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/auth/jwt-auth.middleware.js +116 -0
- package/dist/backend/backend/src/services/cloud/auth/jwt-auth.middleware.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/auth/supabase-auth.middleware.d.ts +61 -0
- package/dist/backend/backend/src/services/cloud/auth/supabase-auth.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/auth/supabase-auth.middleware.js +203 -0
- package/dist/backend/backend/src/services/cloud/auth/supabase-auth.middleware.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-auth.middleware.d.ts +46 -0
- package/dist/backend/backend/src/services/cloud/cloud-auth.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-auth.middleware.js +95 -0
- package/dist/backend/backend/src/services/cloud/cloud-auth.middleware.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-auth.service.d.ts +136 -0
- package/dist/backend/backend/src/services/cloud/cloud-auth.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-auth.service.js +204 -0
- package/dist/backend/backend/src/services/cloud/cloud-auth.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts +179 -0
- package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-client.service.js +237 -0
- package/dist/backend/backend/src/services/cloud/cloud-client.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-file.service.d.ts +97 -0
- package/dist/backend/backend/src/services/cloud/cloud-file.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-file.service.js +184 -0
- package/dist/backend/backend/src/services/cloud/cloud-file.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-image-analysis.service.d.ts +114 -0
- package/dist/backend/backend/src/services/cloud/cloud-image-analysis.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-image-analysis.service.js +196 -0
- package/dist/backend/backend/src/services/cloud/cloud-image-analysis.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.d.ts +118 -0
- package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.js +322 -0
- package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-task.service.d.ts +115 -0
- package/dist/backend/backend/src/services/cloud/cloud-task.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-task.service.js +265 -0
- package/dist/backend/backend/src/services/cloud/cloud-task.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/relay-client.service.d.ts +175 -0
- package/dist/backend/backend/src/services/cloud/relay-client.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/relay-client.service.js +392 -0
- package/dist/backend/backend/src/services/cloud/relay-client.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/relay-crypto.service.d.ts +87 -0
- package/dist/backend/backend/src/services/cloud/relay-crypto.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/relay-crypto.service.js +140 -0
- package/dist/backend/backend/src/services/cloud/relay-crypto.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/relay-server.service.d.ts +183 -0
- package/dist/backend/backend/src/services/cloud/relay-server.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/relay-server.service.js +523 -0
- package/dist/backend/backend/src/services/cloud/relay-server.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/relay.types.d.ts +170 -0
- package/dist/backend/backend/src/services/cloud/relay.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/relay.types.js +69 -0
- package/dist/backend/backend/src/services/cloud/relay.types.js.map +1 -0
- package/dist/backend/backend/src/services/continuation/patterns/idle-patterns.d.ts +9 -1
- package/dist/backend/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -1
- package/dist/backend/backend/src/services/continuation/patterns/idle-patterns.js +18 -4
- package/dist/backend/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -1
- package/dist/backend/backend/src/services/core/env.config.d.ts +147 -0
- package/dist/backend/backend/src/services/core/env.config.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/env.config.js +226 -0
- package/dist/backend/backend/src/services/core/env.config.js.map +1 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +5 -0
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts +20 -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 +35 -0
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
- package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation.service.d.ts +160 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation.service.js +261 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation.service.js.map +1 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-reporting.service.d.ts +161 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-reporting.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-reporting.service.js +276 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-reporting.service.js.map +1 -0
- package/dist/backend/backend/src/services/marketplace/index.d.ts +1 -0
- package/dist/backend/backend/src/services/marketplace/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/index.js +2 -0
- package/dist/backend/backend/src/services/marketplace/index.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js +2 -2
- package/dist/backend/backend/src/services/marketplace/template-marketplace.service.d.ts +149 -0
- package/dist/backend/backend/src/services/marketplace/template-marketplace.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/marketplace/template-marketplace.service.js +500 -0
- package/dist/backend/backend/src/services/marketplace/template-marketplace.service.js.map +1 -0
- package/dist/backend/backend/src/services/mcp-server.js +1 -1
- package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts +90 -0
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js +233 -0
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/messenger-adapter.interface.d.ts +1 -1
- 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.js +1 -1
- 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 +3 -3
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- 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 +29 -5
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/payment/magic-moment.service.d.ts +69 -0
- package/dist/backend/backend/src/services/payment/magic-moment.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/payment/magic-moment.service.js +158 -0
- package/dist/backend/backend/src/services/payment/magic-moment.service.js.map +1 -0
- package/dist/backend/backend/src/services/payment/magic-moment.types.d.ts +95 -0
- package/dist/backend/backend/src/services/payment/magic-moment.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/payment/magic-moment.types.js +91 -0
- package/dist/backend/backend/src/services/payment/magic-moment.types.js.map +1 -0
- package/dist/backend/backend/src/services/payment/stripe.service.d.ts +122 -0
- package/dist/backend/backend/src/services/payment/stripe.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/payment/stripe.service.js +403 -0
- package/dist/backend/backend/src/services/payment/stripe.service.js.map +1 -0
- package/dist/backend/backend/src/services/plugin/index.d.ts +9 -0
- package/dist/backend/backend/src/services/plugin/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/plugin/index.js +8 -0
- package/dist/backend/backend/src/services/plugin/index.js.map +1 -0
- package/dist/backend/backend/src/services/plugin/plugin.service.d.ts +102 -0
- package/dist/backend/backend/src/services/plugin/plugin.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/plugin/plugin.service.js +179 -0
- package/dist/backend/backend/src/services/plugin/plugin.service.js.map +1 -0
- package/dist/backend/backend/src/services/plugin/plugin.types.d.ts +88 -0
- package/dist/backend/backend/src/services/plugin/plugin.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/plugin/plugin.types.js +17 -0
- package/dist/backend/backend/src/services/plugin/plugin.types.js.map +1 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +17 -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 +63 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts +14 -0
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.js +54 -0
- package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/backend/backend/src/services/settings/settings.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/settings/settings.service.js +1 -0
- package/dist/backend/backend/src/services/settings/settings.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +15 -5
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.d.ts +153 -0
- package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/template/template.service.js +372 -0
- package/dist/backend/backend/src/services/template/template.service.js.map +1 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +51 -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 +118 -2
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/types/chat.types.d.ts +39 -1
- package/dist/backend/backend/src/types/chat.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/chat.types.js +45 -2
- package/dist/backend/backend/src/types/chat.types.js.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts +14 -2
- package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.js +15 -0
- package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/backend/backend/src/types/hierarchy-message.types.d.ts +101 -0
- package/dist/backend/backend/src/types/hierarchy-message.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/hierarchy-message.types.js +15 -0
- package/dist/backend/backend/src/types/hierarchy-message.types.js.map +1 -0
- package/dist/backend/backend/src/types/index.d.ts +54 -4
- 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 +99 -0
- package/dist/backend/backend/src/types/marketplace.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/settings.types.js +4 -0
- package/dist/backend/backend/src/types/settings.types.js.map +1 -1
- package/dist/backend/backend/src/types/task-tracking.types.d.ts +79 -1
- 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 +166 -0
- package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/team-template.types.js +139 -0
- package/dist/backend/backend/src/types/team-template.types.js.map +1 -0
- package/dist/backend/backend/src/utils/async-handler.d.ts +20 -0
- package/dist/backend/backend/src/utils/async-handler.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/async-handler.js +29 -0
- package/dist/backend/backend/src/utils/async-handler.js.map +1 -0
- package/dist/backend/backend/src/utils/defaultPrompts.d.ts +4 -4
- package/dist/backend/backend/src/utils/defaultPrompts.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/defaultPrompts.js +16 -0
- package/dist/backend/backend/src/utils/defaultPrompts.js.map +1 -1
- package/dist/backend/backend/src/utils/gemini-trusted-folders.d.ts +43 -0
- package/dist/backend/backend/src/utils/gemini-trusted-folders.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/gemini-trusted-folders.js +94 -0
- package/dist/backend/backend/src/utils/gemini-trusted-folders.js.map +1 -0
- package/dist/backend/backend/src/utils/message-serializer.d.ts +74 -0
- package/dist/backend/backend/src/utils/message-serializer.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/message-serializer.js +380 -0
- package/dist/backend/backend/src/utils/message-serializer.js.map +1 -0
- package/dist/backend/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/terminal-string-ops.js +20 -11
- package/dist/backend/backend/src/utils/terminal-string-ops.js.map +1 -1
- package/dist/backend/config/constants.d.ts +40 -1
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +41 -1
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/backend/config/index.d.ts +2 -2
- package/dist/backend/config/index.d.ts.map +1 -1
- package/dist/backend/config/index.js +2 -2
- package/dist/backend/config/index.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +303 -15
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +296 -15
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/models/Team.d.ts +5 -0
- package/dist/cli/backend/src/models/Team.d.ts.map +1 -1
- package/dist/cli/backend/src/models/Team.js +24 -0
- package/dist/cli/backend/src/models/Team.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +5 -0
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/mcp-server.js +1 -1
- package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
- package/dist/cli/backend/src/types/chat.types.d.ts +39 -1
- package/dist/cli/backend/src/types/chat.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/chat.types.js +45 -2
- package/dist/cli/backend/src/types/chat.types.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +54 -4
- 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/settings.types.d.ts +1 -1
- package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/settings.types.js +4 -0
- package/dist/cli/backend/src/types/settings.types.js.map +1 -1
- package/dist/cli/backend/src/utils/gemini-trusted-folders.d.ts +43 -0
- package/dist/cli/backend/src/utils/gemini-trusted-folders.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/gemini-trusted-folders.js +94 -0
- package/dist/cli/backend/src/utils/gemini-trusted-folders.js.map +1 -0
- package/dist/cli/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
- package/dist/cli/backend/src/utils/terminal-string-ops.js +20 -11
- package/dist/cli/backend/src/utils/terminal-string-ops.js.map +1 -1
- package/dist/cli/cli/src/commands/onboard.d.ts +2 -1
- package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/onboard.js +21 -8
- package/dist/cli/cli/src/commands/onboard.js.map +1 -1
- package/dist/cli/cli/src/commands/start.d.ts +1 -0
- package/dist/cli/cli/src/commands/start.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/start.js +71 -23
- package/dist/cli/cli/src/commands/start.js.map +1 -1
- package/dist/cli/cli/src/constants.d.ts +1 -1
- package/dist/cli/cli/src/constants.d.ts.map +1 -1
- package/dist/cli/cli/src/constants.js +1 -1
- package/dist/cli/cli/src/constants.js.map +1 -1
- package/dist/cli/cli/src/index.js +1 -0
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/cli/src/utils/project-scaffold.d.ts +109 -0
- package/dist/cli/cli/src/utils/project-scaffold.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/project-scaffold.js +346 -0
- package/dist/cli/cli/src/utils/project-scaffold.js.map +1 -0
- package/dist/cli/cli/src/utils/templates.d.ts +7 -2
- package/dist/cli/cli/src/utils/templates.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/templates.js +76 -7
- package/dist/cli/cli/src/utils/templates.js.map +1 -1
- package/dist/cli/config/constants.d.ts +40 -1
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +41 -1
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/index.d.ts +2 -2
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +2 -2
- package/dist/cli/config/index.js.map +1 -1
- package/frontend/dist/assets/index-510ab719.css +33 -0
- package/frontend/dist/assets/index-935cd846.js +4961 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +9 -4
- package/frontend/dist/assets/index-a23214ae.js +0 -4919
- package/frontend/dist/assets/index-c407fe13.css +0 -33
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud File Service
|
|
3
|
+
*
|
|
4
|
+
* Handles file uploads for cloud AI employee tasks.
|
|
5
|
+
* MVP implementation: local file storage under ~/.crewly/cloud/uploads/.
|
|
6
|
+
* Future: migrate to DigitalOcean Spaces (S3-compatible).
|
|
7
|
+
*
|
|
8
|
+
* Files are organized by userId to enforce tenant isolation.
|
|
9
|
+
*
|
|
10
|
+
* @module services/cloud/cloud-file.service
|
|
11
|
+
*/
|
|
12
|
+
/** Cloud file service configuration. */
|
|
13
|
+
export declare const CLOUD_FILE_CONSTANTS: {
|
|
14
|
+
/** Upload directory under ~/.crewly/ */
|
|
15
|
+
readonly UPLOAD_DIR: "cloud/uploads";
|
|
16
|
+
/** Maximum file size in bytes (20 MB) */
|
|
17
|
+
readonly MAX_FILE_SIZE: number;
|
|
18
|
+
/** Allowed MIME types for upload */
|
|
19
|
+
readonly ALLOWED_MIME_TYPES: readonly string[];
|
|
20
|
+
/** Allowed file extensions */
|
|
21
|
+
readonly ALLOWED_EXTENSIONS: readonly string[];
|
|
22
|
+
};
|
|
23
|
+
/** Result of a file upload operation. */
|
|
24
|
+
export interface FileUploadResult {
|
|
25
|
+
/** Whether the upload succeeded */
|
|
26
|
+
success: boolean;
|
|
27
|
+
/** File key (path relative to upload root) — use this to reference the file */
|
|
28
|
+
fileKey?: string;
|
|
29
|
+
/** Original filename */
|
|
30
|
+
originalName?: string;
|
|
31
|
+
/** File size in bytes */
|
|
32
|
+
size?: number;
|
|
33
|
+
/** Error message on failure */
|
|
34
|
+
error?: string;
|
|
35
|
+
}
|
|
36
|
+
/** Metadata about an uploaded file. */
|
|
37
|
+
export interface UploadedFileInfo {
|
|
38
|
+
/** File key (path relative to upload root) */
|
|
39
|
+
fileKey: string;
|
|
40
|
+
/** Absolute filesystem path */
|
|
41
|
+
absolutePath: string;
|
|
42
|
+
/** Original filename */
|
|
43
|
+
originalName: string;
|
|
44
|
+
/** File size in bytes */
|
|
45
|
+
size: number;
|
|
46
|
+
/** Upload timestamp */
|
|
47
|
+
uploadedAt: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Manages file uploads and retrieval for cloud tasks.
|
|
51
|
+
*
|
|
52
|
+
* Singleton — access via `CloudFileService.getInstance()`.
|
|
53
|
+
*/
|
|
54
|
+
export declare class CloudFileService {
|
|
55
|
+
private static instance;
|
|
56
|
+
private readonly logger;
|
|
57
|
+
private readonly uploadRoot;
|
|
58
|
+
private constructor();
|
|
59
|
+
/** Get singleton instance. */
|
|
60
|
+
static getInstance(): CloudFileService;
|
|
61
|
+
/** Reset singleton (for testing). */
|
|
62
|
+
static resetInstance(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Save an uploaded file to the user's upload directory.
|
|
65
|
+
*
|
|
66
|
+
* @param userId - Authenticated user ID (tenant isolation)
|
|
67
|
+
* @param originalName - Original filename from the client
|
|
68
|
+
* @param buffer - File content as a Buffer
|
|
69
|
+
* @param mimeType - MIME type of the file
|
|
70
|
+
* @returns Upload result with file key
|
|
71
|
+
*/
|
|
72
|
+
saveFile(userId: string, originalName: string, buffer: Buffer, mimeType: string): Promise<FileUploadResult>;
|
|
73
|
+
/**
|
|
74
|
+
* Read a file by its key.
|
|
75
|
+
*
|
|
76
|
+
* @param fileKey - File key (userId/filename)
|
|
77
|
+
* @returns File buffer or null if not found
|
|
78
|
+
*/
|
|
79
|
+
readFile(fileKey: string): Promise<Buffer | null>;
|
|
80
|
+
/**
|
|
81
|
+
* Get metadata about an uploaded file.
|
|
82
|
+
*
|
|
83
|
+
* @param fileKey - File key (userId/filename)
|
|
84
|
+
* @returns File info or null if not found
|
|
85
|
+
*/
|
|
86
|
+
getFileInfo(fileKey: string): Promise<UploadedFileInfo | null>;
|
|
87
|
+
/**
|
|
88
|
+
* Delete a file by its key.
|
|
89
|
+
*
|
|
90
|
+
* @param fileKey - File key (userId/filename)
|
|
91
|
+
* @returns True if deleted, false if not found
|
|
92
|
+
*/
|
|
93
|
+
deleteFile(fileKey: string): Promise<boolean>;
|
|
94
|
+
/** Get the absolute path for a file key. */
|
|
95
|
+
getAbsolutePath(fileKey: string): string;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=cloud-file.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-file.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/cloud-file.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,wCAAwC;AACxC,eAAO,MAAM,oBAAoB;IAChC,wCAAwC;;IAExC,yCAAyC;;IAEzC,oCAAoC;iCAU/B,SAAS,MAAM,EAAE;IACtB,8BAA8B;iCAIzB,SAAS,MAAM,EAAE;CACb,CAAC;AAMX,yCAAyC;AACzC,MAAM,WAAW,gBAAgB;IAChC,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAChC,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;CACnB;AAMD;;;;GAIG;AACH,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IAExD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,OAAO;IAKP,8BAA8B;IAC9B,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAOtC,qCAAqC;IACrC,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;;;;;OAQG;IACG,QAAQ,CACb,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC;IAqD5B;;;;;OAKG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASvD;;;;;OAKG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAgBpE;;;;;OAKG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWnD,4CAA4C;IAC5C,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAGxC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud File Service
|
|
3
|
+
*
|
|
4
|
+
* Handles file uploads for cloud AI employee tasks.
|
|
5
|
+
* MVP implementation: local file storage under ~/.crewly/cloud/uploads/.
|
|
6
|
+
* Future: migrate to DigitalOcean Spaces (S3-compatible).
|
|
7
|
+
*
|
|
8
|
+
* Files are organized by userId to enforce tenant isolation.
|
|
9
|
+
*
|
|
10
|
+
* @module services/cloud/cloud-file.service
|
|
11
|
+
*/
|
|
12
|
+
import { randomUUID } from 'node:crypto';
|
|
13
|
+
import { readFile, writeFile, mkdir, stat, unlink } from 'node:fs/promises';
|
|
14
|
+
import { join, extname } from 'node:path';
|
|
15
|
+
import { homedir } from 'node:os';
|
|
16
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Constants
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
/** Cloud file service configuration. */
|
|
21
|
+
export const CLOUD_FILE_CONSTANTS = {
|
|
22
|
+
/** Upload directory under ~/.crewly/ */
|
|
23
|
+
UPLOAD_DIR: 'cloud/uploads',
|
|
24
|
+
/** Maximum file size in bytes (20 MB) */
|
|
25
|
+
MAX_FILE_SIZE: 20 * 1024 * 1024,
|
|
26
|
+
/** Allowed MIME types for upload */
|
|
27
|
+
ALLOWED_MIME_TYPES: [
|
|
28
|
+
'image/png',
|
|
29
|
+
'image/jpeg',
|
|
30
|
+
'image/gif',
|
|
31
|
+
'image/webp',
|
|
32
|
+
'application/pdf',
|
|
33
|
+
'text/plain',
|
|
34
|
+
'text/csv',
|
|
35
|
+
'application/json',
|
|
36
|
+
],
|
|
37
|
+
/** Allowed file extensions */
|
|
38
|
+
ALLOWED_EXTENSIONS: [
|
|
39
|
+
'.png', '.jpg', '.jpeg', '.gif', '.webp',
|
|
40
|
+
'.pdf', '.txt', '.csv', '.json',
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Service
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/**
|
|
47
|
+
* Manages file uploads and retrieval for cloud tasks.
|
|
48
|
+
*
|
|
49
|
+
* Singleton — access via `CloudFileService.getInstance()`.
|
|
50
|
+
*/
|
|
51
|
+
export class CloudFileService {
|
|
52
|
+
static instance = null;
|
|
53
|
+
logger;
|
|
54
|
+
uploadRoot;
|
|
55
|
+
constructor() {
|
|
56
|
+
this.logger = LoggerService.getInstance().createComponentLogger('CloudFileService');
|
|
57
|
+
this.uploadRoot = join(homedir(), '.crewly', CLOUD_FILE_CONSTANTS.UPLOAD_DIR);
|
|
58
|
+
}
|
|
59
|
+
/** Get singleton instance. */
|
|
60
|
+
static getInstance() {
|
|
61
|
+
if (!CloudFileService.instance) {
|
|
62
|
+
CloudFileService.instance = new CloudFileService();
|
|
63
|
+
}
|
|
64
|
+
return CloudFileService.instance;
|
|
65
|
+
}
|
|
66
|
+
/** Reset singleton (for testing). */
|
|
67
|
+
static resetInstance() {
|
|
68
|
+
CloudFileService.instance = null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Save an uploaded file to the user's upload directory.
|
|
72
|
+
*
|
|
73
|
+
* @param userId - Authenticated user ID (tenant isolation)
|
|
74
|
+
* @param originalName - Original filename from the client
|
|
75
|
+
* @param buffer - File content as a Buffer
|
|
76
|
+
* @param mimeType - MIME type of the file
|
|
77
|
+
* @returns Upload result with file key
|
|
78
|
+
*/
|
|
79
|
+
async saveFile(userId, originalName, buffer, mimeType) {
|
|
80
|
+
// Validate file size
|
|
81
|
+
if (buffer.length > CLOUD_FILE_CONSTANTS.MAX_FILE_SIZE) {
|
|
82
|
+
return {
|
|
83
|
+
success: false,
|
|
84
|
+
error: `File too large: ${buffer.length} bytes. Maximum is ${CLOUD_FILE_CONSTANTS.MAX_FILE_SIZE} bytes (20 MB).`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Validate MIME type
|
|
88
|
+
if (!CLOUD_FILE_CONSTANTS.ALLOWED_MIME_TYPES.includes(mimeType)) {
|
|
89
|
+
return {
|
|
90
|
+
success: false,
|
|
91
|
+
error: `Unsupported file type: ${mimeType}. Allowed: ${CLOUD_FILE_CONSTANTS.ALLOWED_MIME_TYPES.join(', ')}`,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// Validate extension
|
|
95
|
+
const ext = extname(originalName).toLowerCase();
|
|
96
|
+
if (!CLOUD_FILE_CONSTANTS.ALLOWED_EXTENSIONS.includes(ext)) {
|
|
97
|
+
return {
|
|
98
|
+
success: false,
|
|
99
|
+
error: `Unsupported file extension: ${ext}. Allowed: ${CLOUD_FILE_CONSTANTS.ALLOWED_EXTENSIONS.join(', ')}`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
// Create user-scoped upload directory
|
|
104
|
+
const userDir = join(this.uploadRoot, userId);
|
|
105
|
+
await mkdir(userDir, { recursive: true });
|
|
106
|
+
// Generate unique filename to prevent collisions
|
|
107
|
+
const uniqueName = `${randomUUID()}${ext}`;
|
|
108
|
+
const filePath = join(userDir, uniqueName);
|
|
109
|
+
const fileKey = `${userId}/${uniqueName}`;
|
|
110
|
+
await writeFile(filePath, buffer);
|
|
111
|
+
this.logger.info('File saved', { fileKey, originalName, size: buffer.length, mimeType });
|
|
112
|
+
return {
|
|
113
|
+
success: true,
|
|
114
|
+
fileKey,
|
|
115
|
+
originalName,
|
|
116
|
+
size: buffer.length,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
121
|
+
this.logger.error('Failed to save file', { error: msg, userId, originalName });
|
|
122
|
+
return { success: false, error: `Failed to save file: ${msg}` };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Read a file by its key.
|
|
127
|
+
*
|
|
128
|
+
* @param fileKey - File key (userId/filename)
|
|
129
|
+
* @returns File buffer or null if not found
|
|
130
|
+
*/
|
|
131
|
+
async readFile(fileKey) {
|
|
132
|
+
try {
|
|
133
|
+
const filePath = join(this.uploadRoot, fileKey);
|
|
134
|
+
return await readFile(filePath);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get metadata about an uploaded file.
|
|
142
|
+
*
|
|
143
|
+
* @param fileKey - File key (userId/filename)
|
|
144
|
+
* @returns File info or null if not found
|
|
145
|
+
*/
|
|
146
|
+
async getFileInfo(fileKey) {
|
|
147
|
+
try {
|
|
148
|
+
const filePath = join(this.uploadRoot, fileKey);
|
|
149
|
+
const stats = await stat(filePath);
|
|
150
|
+
return {
|
|
151
|
+
fileKey,
|
|
152
|
+
absolutePath: filePath,
|
|
153
|
+
originalName: fileKey.split('/').pop() ?? fileKey,
|
|
154
|
+
size: stats.size,
|
|
155
|
+
uploadedAt: stats.birthtime.toISOString(),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Delete a file by its key.
|
|
164
|
+
*
|
|
165
|
+
* @param fileKey - File key (userId/filename)
|
|
166
|
+
* @returns True if deleted, false if not found
|
|
167
|
+
*/
|
|
168
|
+
async deleteFile(fileKey) {
|
|
169
|
+
try {
|
|
170
|
+
const filePath = join(this.uploadRoot, fileKey);
|
|
171
|
+
await unlink(filePath);
|
|
172
|
+
this.logger.info('File deleted', { fileKey });
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/** Get the absolute path for a file key. */
|
|
180
|
+
getAbsolutePath(fileKey) {
|
|
181
|
+
return join(this.uploadRoot, fileKey);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=cloud-file.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-file.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/cloud-file.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Image Analysis Service
|
|
3
|
+
*
|
|
4
|
+
* Processes images (especially WeChat screenshots) using multimodal AI.
|
|
5
|
+
* Extracts structured information: participants, timestamps, key messages,
|
|
6
|
+
* action items, and summaries.
|
|
7
|
+
*
|
|
8
|
+
* MVP: Uses a prompt template approach — the AI runtime receives the image
|
|
9
|
+
* along with a structured prompt and returns a parsed result.
|
|
10
|
+
*
|
|
11
|
+
* @module services/cloud/cloud-image-analysis.service
|
|
12
|
+
*/
|
|
13
|
+
/** Image analysis service configuration. */
|
|
14
|
+
export declare const IMAGE_ANALYSIS_CONSTANTS: {
|
|
15
|
+
/** Maximum image file size for analysis (10 MB) */
|
|
16
|
+
readonly MAX_IMAGE_SIZE: number;
|
|
17
|
+
/** Supported image MIME types for analysis */
|
|
18
|
+
readonly SUPPORTED_MIMES: readonly string[];
|
|
19
|
+
};
|
|
20
|
+
/** Structured result from WeChat screenshot analysis. */
|
|
21
|
+
export interface WeChatAnalysisResult {
|
|
22
|
+
/** Identified chat participants */
|
|
23
|
+
participants: string[];
|
|
24
|
+
/** Extracted messages with attribution */
|
|
25
|
+
messages: WeChatMessage[];
|
|
26
|
+
/** High-level summary of the conversation */
|
|
27
|
+
summary: string;
|
|
28
|
+
/** Action items / to-dos extracted from the conversation */
|
|
29
|
+
actionItems: string[];
|
|
30
|
+
/** Key information or decisions identified */
|
|
31
|
+
keyPoints: string[];
|
|
32
|
+
}
|
|
33
|
+
/** A single message extracted from a WeChat screenshot. */
|
|
34
|
+
export interface WeChatMessage {
|
|
35
|
+
/** Message sender name */
|
|
36
|
+
sender: string;
|
|
37
|
+
/** Message content */
|
|
38
|
+
content: string;
|
|
39
|
+
/** Approximate timestamp if visible */
|
|
40
|
+
timestamp: string | null;
|
|
41
|
+
}
|
|
42
|
+
/** Result of an image analysis operation. */
|
|
43
|
+
export interface ImageAnalysisResult {
|
|
44
|
+
/** Whether the analysis succeeded */
|
|
45
|
+
success: boolean;
|
|
46
|
+
/** Analysis type performed */
|
|
47
|
+
analysisType?: string;
|
|
48
|
+
/** Structured analysis result */
|
|
49
|
+
data?: WeChatAnalysisResult;
|
|
50
|
+
/** Raw text output (fallback when structured parsing fails) */
|
|
51
|
+
rawOutput?: string;
|
|
52
|
+
/** Error message on failure */
|
|
53
|
+
error?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Prompt template for WeChat screenshot analysis.
|
|
57
|
+
* Instructs the AI to extract structured information from a chat screenshot.
|
|
58
|
+
*/
|
|
59
|
+
export declare const WECHAT_ANALYSIS_PROMPT = "You are analyzing a WeChat (\u5FAE\u4FE1) chat screenshot. Extract the following information in a structured JSON format:\n\n{\n \"participants\": [\"list of people in the chat\"],\n \"messages\": [\n {\n \"sender\": \"person name\",\n \"content\": \"message text\",\n \"timestamp\": \"time if visible, or null\"\n }\n ],\n \"summary\": \"Brief summary of the conversation (2-3 sentences)\",\n \"actionItems\": [\"List of action items or to-dos mentioned\"],\n \"keyPoints\": [\"Key information, decisions, or important details\"]\n}\n\nRules:\n- If the screenshot is in Chinese, keep the original Chinese text in messages but provide the summary in the same language as the user's prompt.\n- If a participant name is not visible, use a descriptive label like \"Person A\", \"Person B\".\n- If no action items are found, return an empty array.\n- If timestamps are not visible, set them to null.\n- Focus on accuracy \u2014 only include information clearly visible in the image.\n\nReturn ONLY the JSON object, no markdown formatting or extra text.";
|
|
60
|
+
/**
|
|
61
|
+
* Generic image analysis prompt for non-WeChat images.
|
|
62
|
+
*/
|
|
63
|
+
export declare const GENERIC_IMAGE_ANALYSIS_PROMPT = "Analyze this image and provide a detailed description. Include:\n1. What the image shows\n2. Any text visible in the image\n3. Key details or notable elements\n4. If it's a document or form, extract the structured data\n\nProvide your analysis as clear, organized text.";
|
|
64
|
+
/**
|
|
65
|
+
* Processes images using multimodal AI for structured analysis.
|
|
66
|
+
*
|
|
67
|
+
* Singleton — access via `CloudImageAnalysisService.getInstance()`.
|
|
68
|
+
*/
|
|
69
|
+
export declare class CloudImageAnalysisService {
|
|
70
|
+
private static instance;
|
|
71
|
+
private readonly logger;
|
|
72
|
+
private constructor();
|
|
73
|
+
/** Get singleton instance. */
|
|
74
|
+
static getInstance(): CloudImageAnalysisService;
|
|
75
|
+
/** Reset singleton (for testing). */
|
|
76
|
+
static resetInstance(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Build the analysis prompt for a given image and optional user instruction.
|
|
79
|
+
*
|
|
80
|
+
* @param userPrompt - User's original task prompt / instruction
|
|
81
|
+
* @param isWeChatScreenshot - Whether to use WeChat-specific analysis
|
|
82
|
+
* @returns The complete prompt to send to the AI runtime
|
|
83
|
+
*/
|
|
84
|
+
buildAnalysisPrompt(userPrompt: string, isWeChatScreenshot?: boolean): string;
|
|
85
|
+
/**
|
|
86
|
+
* Detect whether a user prompt likely refers to a WeChat screenshot.
|
|
87
|
+
*
|
|
88
|
+
* @param prompt - User's task prompt
|
|
89
|
+
* @returns True if the prompt suggests WeChat content
|
|
90
|
+
*/
|
|
91
|
+
isLikelyWeChatScreenshot(prompt: string): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Parse a WeChat analysis result from AI output text.
|
|
94
|
+
*
|
|
95
|
+
* Attempts to extract structured JSON from the AI response.
|
|
96
|
+
* Falls back to raw text if JSON parsing fails.
|
|
97
|
+
*
|
|
98
|
+
* @param aiOutput - Raw text output from the AI runtime
|
|
99
|
+
* @returns Parsed analysis result
|
|
100
|
+
*/
|
|
101
|
+
parseAnalysisResult(aiOutput: string): ImageAnalysisResult;
|
|
102
|
+
/**
|
|
103
|
+
* Validate that a file is suitable for image analysis.
|
|
104
|
+
*
|
|
105
|
+
* @param mimeType - File MIME type
|
|
106
|
+
* @param size - File size in bytes
|
|
107
|
+
* @returns Validation result with error message if invalid
|
|
108
|
+
*/
|
|
109
|
+
validateImage(mimeType: string, size: number): {
|
|
110
|
+
valid: boolean;
|
|
111
|
+
error?: string;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=cloud-image-analysis.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-image-analysis.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/cloud-image-analysis.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,4CAA4C;AAC5C,eAAO,MAAM,wBAAwB;IACpC,mDAAmD;;IAEnD,8CAA8C;8BAC6B,SAAS,MAAM,EAAE;CACnF,CAAC;AAMX,yDAAyD;AACzD,MAAM,WAAW,oBAAoB;IACpC,mCAAmC;IACnC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0CAA0C;IAC1C,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC7B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,6CAA6C;AAC7C,MAAM,WAAW,mBAAmB;IACnC,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAMD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,wjCAuBgC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,6BAA6B,kRAMM,CAAC;AAMjD;;;;GAIG;AACH,qBAAa,yBAAyB;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA0C;IAEjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,OAAO;IAIP,8BAA8B;IAC9B,MAAM,CAAC,WAAW,IAAI,yBAAyB;IAO/C,qCAAqC;IACrC,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;;;OAMG;IACH,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,kBAAkB,GAAE,OAAe,GAAG,MAAM;IAYpF;;;;;OAKG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAajD;;;;;;;;OAQG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IA4C1D;;;;;;OAMG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;CAiBjF"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Image Analysis Service
|
|
3
|
+
*
|
|
4
|
+
* Processes images (especially WeChat screenshots) using multimodal AI.
|
|
5
|
+
* Extracts structured information: participants, timestamps, key messages,
|
|
6
|
+
* action items, and summaries.
|
|
7
|
+
*
|
|
8
|
+
* MVP: Uses a prompt template approach — the AI runtime receives the image
|
|
9
|
+
* along with a structured prompt and returns a parsed result.
|
|
10
|
+
*
|
|
11
|
+
* @module services/cloud/cloud-image-analysis.service
|
|
12
|
+
*/
|
|
13
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Constants
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
/** Image analysis service configuration. */
|
|
18
|
+
export const IMAGE_ANALYSIS_CONSTANTS = {
|
|
19
|
+
/** Maximum image file size for analysis (10 MB) */
|
|
20
|
+
MAX_IMAGE_SIZE: 10 * 1024 * 1024,
|
|
21
|
+
/** Supported image MIME types for analysis */
|
|
22
|
+
SUPPORTED_MIMES: ['image/png', 'image/jpeg', 'image/gif', 'image/webp'],
|
|
23
|
+
};
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Prompt Templates
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
/**
|
|
28
|
+
* Prompt template for WeChat screenshot analysis.
|
|
29
|
+
* Instructs the AI to extract structured information from a chat screenshot.
|
|
30
|
+
*/
|
|
31
|
+
export const WECHAT_ANALYSIS_PROMPT = `You are analyzing a WeChat (微信) chat screenshot. Extract the following information in a structured JSON format:
|
|
32
|
+
|
|
33
|
+
{
|
|
34
|
+
"participants": ["list of people in the chat"],
|
|
35
|
+
"messages": [
|
|
36
|
+
{
|
|
37
|
+
"sender": "person name",
|
|
38
|
+
"content": "message text",
|
|
39
|
+
"timestamp": "time if visible, or null"
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"summary": "Brief summary of the conversation (2-3 sentences)",
|
|
43
|
+
"actionItems": ["List of action items or to-dos mentioned"],
|
|
44
|
+
"keyPoints": ["Key information, decisions, or important details"]
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
Rules:
|
|
48
|
+
- If the screenshot is in Chinese, keep the original Chinese text in messages but provide the summary in the same language as the user's prompt.
|
|
49
|
+
- If a participant name is not visible, use a descriptive label like "Person A", "Person B".
|
|
50
|
+
- If no action items are found, return an empty array.
|
|
51
|
+
- If timestamps are not visible, set them to null.
|
|
52
|
+
- Focus on accuracy — only include information clearly visible in the image.
|
|
53
|
+
|
|
54
|
+
Return ONLY the JSON object, no markdown formatting or extra text.`;
|
|
55
|
+
/**
|
|
56
|
+
* Generic image analysis prompt for non-WeChat images.
|
|
57
|
+
*/
|
|
58
|
+
export const GENERIC_IMAGE_ANALYSIS_PROMPT = `Analyze this image and provide a detailed description. Include:
|
|
59
|
+
1. What the image shows
|
|
60
|
+
2. Any text visible in the image
|
|
61
|
+
3. Key details or notable elements
|
|
62
|
+
4. If it's a document or form, extract the structured data
|
|
63
|
+
|
|
64
|
+
Provide your analysis as clear, organized text.`;
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// Service
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
/**
|
|
69
|
+
* Processes images using multimodal AI for structured analysis.
|
|
70
|
+
*
|
|
71
|
+
* Singleton — access via `CloudImageAnalysisService.getInstance()`.
|
|
72
|
+
*/
|
|
73
|
+
export class CloudImageAnalysisService {
|
|
74
|
+
static instance = null;
|
|
75
|
+
logger;
|
|
76
|
+
constructor() {
|
|
77
|
+
this.logger = LoggerService.getInstance().createComponentLogger('CloudImageAnalysisService');
|
|
78
|
+
}
|
|
79
|
+
/** Get singleton instance. */
|
|
80
|
+
static getInstance() {
|
|
81
|
+
if (!CloudImageAnalysisService.instance) {
|
|
82
|
+
CloudImageAnalysisService.instance = new CloudImageAnalysisService();
|
|
83
|
+
}
|
|
84
|
+
return CloudImageAnalysisService.instance;
|
|
85
|
+
}
|
|
86
|
+
/** Reset singleton (for testing). */
|
|
87
|
+
static resetInstance() {
|
|
88
|
+
CloudImageAnalysisService.instance = null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Build the analysis prompt for a given image and optional user instruction.
|
|
92
|
+
*
|
|
93
|
+
* @param userPrompt - User's original task prompt / instruction
|
|
94
|
+
* @param isWeChatScreenshot - Whether to use WeChat-specific analysis
|
|
95
|
+
* @returns The complete prompt to send to the AI runtime
|
|
96
|
+
*/
|
|
97
|
+
buildAnalysisPrompt(userPrompt, isWeChatScreenshot = false) {
|
|
98
|
+
const systemPrompt = isWeChatScreenshot
|
|
99
|
+
? WECHAT_ANALYSIS_PROMPT
|
|
100
|
+
: GENERIC_IMAGE_ANALYSIS_PROMPT;
|
|
101
|
+
if (userPrompt.trim()) {
|
|
102
|
+
return `${systemPrompt}\n\nUser's additional instruction: ${userPrompt}`;
|
|
103
|
+
}
|
|
104
|
+
return systemPrompt;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Detect whether a user prompt likely refers to a WeChat screenshot.
|
|
108
|
+
*
|
|
109
|
+
* @param prompt - User's task prompt
|
|
110
|
+
* @returns True if the prompt suggests WeChat content
|
|
111
|
+
*/
|
|
112
|
+
isLikelyWeChatScreenshot(prompt) {
|
|
113
|
+
const wechatPatterns = [
|
|
114
|
+
'微信', 'wechat', 'weixin',
|
|
115
|
+
'聊天记录', 'chat history', 'chat record',
|
|
116
|
+
'群聊', 'group chat',
|
|
117
|
+
'截图', 'screenshot',
|
|
118
|
+
'对话', 'conversation',
|
|
119
|
+
];
|
|
120
|
+
const lowerPrompt = prompt.toLowerCase();
|
|
121
|
+
return wechatPatterns.some((pattern) => lowerPrompt.includes(pattern));
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Parse a WeChat analysis result from AI output text.
|
|
125
|
+
*
|
|
126
|
+
* Attempts to extract structured JSON from the AI response.
|
|
127
|
+
* Falls back to raw text if JSON parsing fails.
|
|
128
|
+
*
|
|
129
|
+
* @param aiOutput - Raw text output from the AI runtime
|
|
130
|
+
* @returns Parsed analysis result
|
|
131
|
+
*/
|
|
132
|
+
parseAnalysisResult(aiOutput) {
|
|
133
|
+
try {
|
|
134
|
+
// Try to extract JSON from the AI response
|
|
135
|
+
const jsonMatch = aiOutput.match(/\{[\s\S]*\}/);
|
|
136
|
+
if (!jsonMatch) {
|
|
137
|
+
return {
|
|
138
|
+
success: true,
|
|
139
|
+
analysisType: 'generic',
|
|
140
|
+
rawOutput: aiOutput,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
144
|
+
// Validate required fields
|
|
145
|
+
if (!parsed.participants || !parsed.messages || !parsed.summary) {
|
|
146
|
+
return {
|
|
147
|
+
success: true,
|
|
148
|
+
analysisType: 'generic',
|
|
149
|
+
rawOutput: aiOutput,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
success: true,
|
|
154
|
+
analysisType: 'wechat',
|
|
155
|
+
data: {
|
|
156
|
+
participants: Array.isArray(parsed.participants) ? parsed.participants : [],
|
|
157
|
+
messages: Array.isArray(parsed.messages) ? parsed.messages : [],
|
|
158
|
+
summary: String(parsed.summary),
|
|
159
|
+
actionItems: Array.isArray(parsed.actionItems) ? parsed.actionItems : [],
|
|
160
|
+
keyPoints: Array.isArray(parsed.keyPoints) ? parsed.keyPoints : [],
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// JSON parsing failed — return raw output
|
|
166
|
+
return {
|
|
167
|
+
success: true,
|
|
168
|
+
analysisType: 'generic',
|
|
169
|
+
rawOutput: aiOutput,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Validate that a file is suitable for image analysis.
|
|
175
|
+
*
|
|
176
|
+
* @param mimeType - File MIME type
|
|
177
|
+
* @param size - File size in bytes
|
|
178
|
+
* @returns Validation result with error message if invalid
|
|
179
|
+
*/
|
|
180
|
+
validateImage(mimeType, size) {
|
|
181
|
+
if (!IMAGE_ANALYSIS_CONSTANTS.SUPPORTED_MIMES.includes(mimeType)) {
|
|
182
|
+
return {
|
|
183
|
+
valid: false,
|
|
184
|
+
error: `Unsupported image type: ${mimeType}. Supported: ${IMAGE_ANALYSIS_CONSTANTS.SUPPORTED_MIMES.join(', ')}`,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
if (size > IMAGE_ANALYSIS_CONSTANTS.MAX_IMAGE_SIZE) {
|
|
188
|
+
return {
|
|
189
|
+
valid: false,
|
|
190
|
+
error: `Image too large: ${size} bytes. Maximum: ${IMAGE_ANALYSIS_CONSTANTS.MAX_IMAGE_SIZE} bytes (10 MB)`,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
return { valid: true };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=cloud-image-analysis.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-image-analysis.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/cloud-image-analysis.service.ts"],"names":[],"mappings":"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"}
|