crewly 1.14.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -0
- package/config/constants.ts +57 -0
- package/config/index.ts +6 -2
- package/config/roles/architect/soul.md +31 -0
- package/config/roles/auditor/soul.md +30 -0
- package/config/roles/backend-developer/soul.md +30 -0
- package/config/roles/content-strategist/soul.md +29 -0
- package/config/roles/designer/soul.md +30 -0
- package/config/roles/developer/soul.md +4 -1
- package/config/roles/frontend-developer/soul.md +28 -0
- package/config/roles/fullstack-dev/soul.md +28 -0
- package/config/roles/generalist/soul.md +28 -0
- package/config/roles/ops/soul.md +31 -0
- package/config/roles/orchestrator/fragments/lifecycle.md +2 -22
- package/config/roles/orchestrator/fragments/recovery.md +1 -1
- package/config/roles/orchestrator/prompt.md +18 -49
- package/config/roles/orchestrator/soul.md +2 -1
- package/config/roles/product-manager/prompt.md +1 -1
- package/config/roles/product-manager/soul.md +30 -0
- package/config/roles/qa/soul.md +31 -0
- package/config/roles/qa-engineer/soul.md +31 -0
- package/config/roles/researcher/soul.md +4 -1
- package/config/roles/sales/soul.md +30 -0
- package/config/roles/support/soul.md +30 -0
- package/config/roles/team-leader/prompt.md +1 -1
- package/config/roles/team-leader/soul.md +32 -0
- package/config/roles/tpm/soul.md +31 -0
- package/config/roles/ux-designer/soul.md +31 -0
- package/config/skills/_common/lib.sh +124 -2
- package/config/skills/_common/lib.test.sh +68 -1
- package/config/skills/orchestrator/delegate-task/SKILL.md +17 -21
- package/config/skills/orchestrator/delegate-task/execute.sh +18 -9
- package/config/skills/orchestrator/delegate-task/execute.test.sh +1 -1
- package/config/skills/orchestrator/wiki-migrate/SKILL.md +33 -3
- package/config/skills/orchestrator/wiki-migrate/compact.jq +36 -0
- package/config/skills/orchestrator/wiki-migrate/execute.sh +35 -5
- package/config/skills/orchestrator/wiki-migrate/execute.test.sh +124 -0
- package/config/skills/team-leader/verify-output/execute.sh +14 -6
- package/config/skills/team-leader/verify-output/execute.test.sh +117 -0
- package/dist/backend/backend/src/constants.d.ts +100 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +88 -1
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.controller.js +4 -6
- package/dist/backend/backend/src/controllers/mission/mission-policy.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts +10 -0
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +78 -16
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js +11 -1
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +14 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +59 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts +9 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js +14 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.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 +16 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +12 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +195 -9
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/middleware/api-token.middleware.d.ts +139 -0
- package/dist/backend/backend/src/middleware/api-token.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/middleware/api-token.middleware.js +301 -0
- package/dist/backend/backend/src/middleware/api-token.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 +3 -1
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +68 -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 +280 -10
- 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 -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 +10 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts +8 -0
- package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/codex-runtime.service.js +11 -1
- package/dist/backend/backend/src/services/agent/codex-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +36 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +66 -9
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts +7 -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 +10 -1
- 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 +197 -0
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +422 -3
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +27 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +50 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +35 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +73 -2
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +42 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js +33 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +13 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +26 -2
- package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.js +91 -10
- package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-restore.service.d.ts +15 -2
- package/dist/backend/backend/src/services/backup/backup-restore.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-restore.service.js +100 -21
- package/dist/backend/backend/src/services/backup/backup-restore.service.js.map +1 -1
- package/dist/backend/backend/src/services/backup/backup.types.d.ts +85 -2
- package/dist/backend/backend/src/services/backup/backup.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/backup/backup.types.js +21 -0
- package/dist/backend/backend/src/services/backup/backup.types.js.map +1 -1
- package/dist/backend/backend/src/services/backup/project-file-filter.d.ts +35 -0
- package/dist/backend/backend/src/services/backup/project-file-filter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/backup/project-file-filter.js +90 -0
- package/dist/backend/backend/src/services/backup/project-file-filter.js.map +1 -0
- package/dist/backend/backend/src/services/budget/team-budget-gate.service.d.ts +165 -0
- package/dist/backend/backend/src/services/budget/team-budget-gate.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/budget/team-budget-gate.service.js +364 -0
- package/dist/backend/backend/src/services/budget/team-budget-gate.service.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +29 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +42 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +16 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +22 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/core/api-token.service.d.ts +78 -0
- package/dist/backend/backend/src/services/core/api-token.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/api-token.service.js +149 -0
- package/dist/backend/backend/src/services/core/api-token.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/logger.service.d.ts +10 -1
- package/dist/backend/backend/src/services/core/logger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/logger.service.js +18 -3
- package/dist/backend/backend/src/services/core/logger.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +11 -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 +34 -0
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +7 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +29 -7
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.d.ts +140 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.js +346 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +27 -3
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js +42 -7
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +47 -0
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +67 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +22 -15
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +24 -15
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +7 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.js +9 -3
- package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-handoff.service.d.ts +27 -0
- package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-handoff.service.js +110 -22
- package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
- 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 +7 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +52 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +132 -6
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation-boot.d.ts +87 -0
- package/dist/backend/backend/src/services/v3/escalation-boot.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/escalation-boot.js +128 -0
- package/dist/backend/backend/src/services/v3/escalation-boot.js.map +1 -0
- package/dist/backend/backend/src/services/v3/escalation.service.d.ts +1 -1
- package/dist/backend/backend/src/services/v3/escalation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation.service.js +4 -4
- package/dist/backend/backend/src/services/v3/escalation.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/kr-completion.subscriber.d.ts +118 -0
- package/dist/backend/backend/src/services/v3/kr-completion.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/kr-completion.subscriber.js +277 -0
- package/dist/backend/backend/src/services/v3/kr-completion.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.js +3 -6
- package/dist/backend/backend/src/services/v3/kr-tracking.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-executor.service.d.ts +5 -0
- package/dist/backend/backend/src/services/v3/mission-executor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-executor.service.js +36 -0
- package/dist/backend/backend/src/services/v3/mission-executor.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-paths.d.ts +69 -0
- package/dist/backend/backend/src/services/v3/mission-paths.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/mission-paths.js +92 -0
- package/dist/backend/backend/src/services/v3/mission-paths.js.map +1 -0
- package/dist/backend/backend/src/services/v3/mission-period.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-period.service.js +1 -12
- package/dist/backend/backend/src/services/v3/mission-period.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts +74 -2
- package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js +251 -9
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts +6 -4
- package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-cascade.service.js +11 -10
- package/dist/backend/backend/src/services/v3/okr-cascade.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-review.service.d.ts +24 -0
- package/dist/backend/backend/src/services/v3/okr-review.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-review.service.js +63 -3
- package/dist/backend/backend/src/services/v3/okr-review.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts +17 -0
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js +62 -13
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +6 -2
- package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/v3-data.service.js +14 -9
- package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +14 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +31 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts +21 -0
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js +53 -3
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts +4 -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/index.d.ts +16 -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/v2/index.d.ts +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +1 -1
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.d.ts +41 -0
- package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.js +29 -0
- package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
- package/dist/backend/backend/src/utils/network-exposure.utils.d.ts +67 -0
- package/dist/backend/backend/src/utils/network-exposure.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/network-exposure.utils.js +92 -0
- package/dist/backend/backend/src/utils/network-exposure.utils.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +53 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +54 -0
- 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 +6 -6
- package/dist/backend/config/index.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +100 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +88 -1
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +68 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +280 -10
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +7 -0
- package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/claude-runtime.service.js +10 -1
- package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +8 -0
- package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/codex-runtime.service.js +11 -1
- package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +36 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +66 -9
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +7 -0
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +10 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +197 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +422 -3
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +27 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +50 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +35 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +73 -2
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +42 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js +33 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +13 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +26 -2
- package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.js +91 -10
- package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-restore.service.d.ts +15 -2
- package/dist/cli/backend/src/services/backup/backup-restore.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-restore.service.js +100 -21
- package/dist/cli/backend/src/services/backup/backup-restore.service.js.map +1 -1
- package/dist/cli/backend/src/services/backup/backup.types.d.ts +85 -2
- package/dist/cli/backend/src/services/backup/backup.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/backup/backup.types.js +21 -0
- package/dist/cli/backend/src/services/backup/backup.types.js.map +1 -1
- package/dist/cli/backend/src/services/backup/project-file-filter.d.ts +35 -0
- package/dist/cli/backend/src/services/backup/project-file-filter.d.ts.map +1 -0
- package/dist/cli/backend/src/services/backup/project-file-filter.js +90 -0
- package/dist/cli/backend/src/services/backup/project-file-filter.js.map +1 -0
- package/dist/cli/backend/src/services/budget/team-budget-gate.service.d.ts +165 -0
- package/dist/cli/backend/src/services/budget/team-budget-gate.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/budget/team-budget-gate.service.js +364 -0
- package/dist/cli/backend/src/services/budget/team-budget-gate.service.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +29 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +42 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +16 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +22 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/cli/backend/src/services/core/api-token.service.d.ts +78 -0
- package/dist/cli/backend/src/services/core/api-token.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/api-token.service.js +149 -0
- package/dist/cli/backend/src/services/core/api-token.service.js.map +1 -0
- package/dist/cli/backend/src/services/core/logger.service.d.ts +10 -1
- package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/logger.service.js +18 -3
- package/dist/cli/backend/src/services/core/logger.service.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +11 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +34 -0
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +27 -3
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js +42 -7
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +47 -0
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +67 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +7 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.js +9 -3
- package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +27 -0
- package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-handoff.service.js +110 -22
- package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +52 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +132 -6
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/kr-tracking.service.js +3 -6
- package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +5 -0
- package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/mission-executor.service.js +36 -0
- package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/mission-paths.d.ts +69 -0
- package/dist/cli/backend/src/services/v3/mission-paths.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/mission-paths.js +92 -0
- package/dist/cli/backend/src/services/v3/mission-paths.js.map +1 -0
- package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +6 -2
- package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/v3-data.service.js +14 -9
- package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -1
- package/dist/cli/backend/src/types/event-bus.types.d.ts +4 -2
- package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/event-bus.types.js +15 -0
- package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +16 -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/v2/index.d.ts +1 -1
- package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/index.js +1 -1
- package/dist/cli/backend/src/types/v2/index.js.map +1 -1
- package/dist/cli/backend/src/types/v2/mission.types.d.ts +41 -0
- package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/mission.types.js +29 -0
- package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -1
- package/dist/cli/cli/src/commands/backup.d.ts +25 -0
- package/dist/cli/cli/src/commands/backup.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/backup.js +120 -6
- package/dist/cli/cli/src/commands/backup.js.map +1 -1
- package/dist/cli/cli/src/commands/doctor.d.ts +58 -0
- package/dist/cli/cli/src/commands/doctor.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/doctor.js +163 -0
- package/dist/cli/cli/src/commands/doctor.js.map +1 -0
- package/dist/cli/cli/src/commands/service.d.ts +68 -11
- package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/service.js +183 -51
- package/dist/cli/cli/src/commands/service.js.map +1 -1
- package/dist/cli/cli/src/commands/token.d.ts +53 -0
- package/dist/cli/cli/src/commands/token.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/token.js +70 -0
- package/dist/cli/cli/src/commands/token.js.map +1 -0
- package/dist/cli/cli/src/index.js +40 -5
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/cli/src/scripts/check-native-toolchain.d.ts +21 -0
- package/dist/cli/cli/src/scripts/check-native-toolchain.d.ts.map +1 -0
- package/dist/cli/cli/src/scripts/check-native-toolchain.js +40 -0
- package/dist/cli/cli/src/scripts/check-native-toolchain.js.map +1 -0
- package/dist/cli/cli/src/utils/native-toolchain.d.ts +111 -0
- package/dist/cli/cli/src/utils/native-toolchain.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/native-toolchain.js +146 -0
- package/dist/cli/cli/src/utils/native-toolchain.js.map +1 -0
- package/dist/cli/cli/src/utils/package-root.d.ts +55 -0
- package/dist/cli/cli/src/utils/package-root.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/package-root.js +107 -0
- package/dist/cli/cli/src/utils/package-root.js.map +1 -0
- package/dist/cli/cli/src/utils/version-check.d.ts +18 -2
- package/dist/cli/cli/src/utils/version-check.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/version-check.js +51 -4
- package/dist/cli/cli/src/utils/version-check.js.map +1 -1
- package/dist/cli/config/constants.d.ts +53 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +54 -0
- 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 +6 -6
- package/dist/cli/config/index.js.map +1 -1
- package/frontend/dist/assets/index-203224f9.js +4961 -0
- package/frontend/dist/assets/index-dcaf6c88.css +42 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +3 -2
- package/config/constants.d.ts.map +0 -1
- package/config/index.d.ts.map +0 -1
- package/frontend/dist/assets/index-190a957f.js +0 -4961
- package/frontend/dist/assets/index-88feb412.css +0 -42
|
@@ -22,7 +22,7 @@ import { TerminalGateway, setTerminalGateway } from './websocket/terminal.gatewa
|
|
|
22
22
|
import { initializeChatGateway } from './websocket/chat.gateway.js';
|
|
23
23
|
import { LoggerService } from './services/core/logger.service.js';
|
|
24
24
|
import { retryWithBackoff } from './services/core/retry.util.js';
|
|
25
|
-
import { CREWLY_CONSTANTS, ORCHESTRATOR_SESSION_NAME, ORCHESTRATOR_ROLE, ORCHESTRATOR_WINDOW_NAME, MESSAGE_QUEUE_CONSTANTS, RUNTIME_TYPES, AUDITOR_CONSTANTS, AUDITOR_SCHEDULER_CONSTANTS, } from './constants.js';
|
|
25
|
+
import { CREWLY_CONSTANTS, ORCHESTRATOR_SESSION_NAME, ORCHESTRATOR_ROLE, ORCHESTRATOR_WINDOW_NAME, MESSAGE_QUEUE_CONSTANTS, RUNTIME_TYPES, AUDITOR_CONSTANTS, AUDITOR_SCHEDULER_CONSTANTS, API_SECURITY_CONSTANTS, } from './constants.js';
|
|
26
26
|
import { getSettingsService } from './services/settings/index.js';
|
|
27
27
|
import { MemoryService } from './services/memory/memory.service.js';
|
|
28
28
|
import { getImprovementStartupService } from './services/orchestrator/improvement-startup.service.js';
|
|
@@ -35,6 +35,12 @@ import { MessageQueueService, QueueProcessorService, ResponseRouterService } fro
|
|
|
35
35
|
import { ThreadStatusQueueService } from './services/messaging/thread-status-queue.service.js';
|
|
36
36
|
import { EventBusService } from './services/event-bus/index.js';
|
|
37
37
|
import { EventToWorkItemBridge } from './services/event-bus/event-to-workitem-bridge.service.js';
|
|
38
|
+
import { KRCompletionSubscriber } from './services/v3/kr-completion.subscriber.js';
|
|
39
|
+
import { MissionReminderService } from './services/v3/mission-reminder.service.js';
|
|
40
|
+
import { OKRReviewService } from './services/v3/okr-review.service.js';
|
|
41
|
+
import { bootEscalationService } from './services/v3/escalation-boot.js';
|
|
42
|
+
import { TeamBudgetGateService } from './services/budget/team-budget-gate.service.js';
|
|
43
|
+
import { HierarchyEscalationMonitor } from './services/hierarchy/hierarchy-escalation-monitor.service.js';
|
|
38
44
|
import { AutoLearningSubscriber } from './services/memory/auto-learning.subscriber.js';
|
|
39
45
|
import { MilestoneNotificationSubscriber } from './services/notification/milestone-notification.subscriber.js';
|
|
40
46
|
import { RequestSlaSubscriber, setRequestSlaSubscriber, getRequestSlaSubscriber, } from './services/v3/request-sla.subscriber.js';
|
|
@@ -56,6 +62,9 @@ import { setMessageQueueService as setMessagingControllerQueueService } from './
|
|
|
56
62
|
import { SystemResourceAlertService } from './services/monitoring/system-resource-alert.service.js';
|
|
57
63
|
import { TokenUsageService } from './services/monitoring/token-usage.service.js';
|
|
58
64
|
import { agentHeartbeatMiddleware } from './middleware/agent-heartbeat.middleware.js';
|
|
65
|
+
import { apiTokenMiddleware, socketIoAllowRequest, installWebSocketGate, } from './middleware/api-token.middleware.js';
|
|
66
|
+
import { resolveApiToken } from './services/core/api-token.service.js';
|
|
67
|
+
import { isHeadlessEnvironment, describeNetworkExposure } from './utils/network-exposure.utils.js';
|
|
59
68
|
import { RedisCacheService } from './services/cache/redis-cache.service.js';
|
|
60
69
|
import { OrchestratorRestartService } from './services/orchestrator/orchestrator-restart.service.js';
|
|
61
70
|
import { setOrchestratorSetupDependencies } from './services/orchestrator/orchestrator-setup.service.js';
|
|
@@ -66,6 +75,7 @@ import { OrchestratorHeartbeatMonitorService } from './services/orchestrator/orc
|
|
|
66
75
|
import { RuntimeExitMonitorService } from './services/agent/runtime-exit-monitor.service.js';
|
|
67
76
|
import { ContextWindowMonitorService } from './services/agent/context-window-monitor.service.js';
|
|
68
77
|
import { OAuthReloginMonitorService } from './services/agent/oauth-relogin-monitor.service.js';
|
|
78
|
+
import { getChatV2Service } from './services/chat-v2/chat-v2.singleton.js';
|
|
69
79
|
import { findPackageRoot } from './utils/package-root.js';
|
|
70
80
|
import { assertBuildProvenance } from './utils/build-provenance.js';
|
|
71
81
|
import { isNativeBindingFatalError } from './utils/native-binding.utils.js';
|
|
@@ -146,6 +156,9 @@ export class CrewlyServer {
|
|
|
146
156
|
eventBusService;
|
|
147
157
|
/** BRIDGE-1: subscribes to autonomy events and creates WorkItems. */
|
|
148
158
|
eventToWorkItemBridge = null;
|
|
159
|
+
krCompletionSubscriber = null;
|
|
160
|
+
escalationService = null;
|
|
161
|
+
hierarchyEscalationMonitor = null;
|
|
149
162
|
/** LEARN-1: subscribes to terminal task / mission:replanned events and auto-records learnings. */
|
|
150
163
|
autoLearningSubscriber = null;
|
|
151
164
|
// DF-1 #438 — symmetric to AutoLearningSubscriber; surfaces milestones
|
|
@@ -188,6 +201,9 @@ export class CrewlyServer {
|
|
|
188
201
|
parseIntWithFallback(process.env.DEFAULT_CHECK_INTERVAL, 30, 'DEFAULT_CHECK_INTERVAL'),
|
|
189
202
|
autoCommitInterval: config?.autoCommitInterval || parseIntWithFallback(process.env.AUTO_COMMIT_INTERVAL, 30, 'AUTO_COMMIT_INTERVAL'),
|
|
190
203
|
headless: config?.headless ?? process.env.CREWLY_HEADLESS === 'true',
|
|
204
|
+
bindHost: config?.bindHost ||
|
|
205
|
+
process.env[API_SECURITY_CONSTANTS.ENV.BIND_HOST] ||
|
|
206
|
+
API_SECURITY_CONSTANTS.DEFAULT_BIND_HOST,
|
|
191
207
|
};
|
|
192
208
|
this.app = express();
|
|
193
209
|
this.httpServer = createServer(this.app);
|
|
@@ -214,6 +230,10 @@ export class CrewlyServer {
|
|
|
214
230
|
// that doesn't match /socket.io/ — killing Crewly in Chrome connections before
|
|
215
231
|
// any data is exchanged (manifests as "Invalid frame header" errors).
|
|
216
232
|
destroyUpgrade: false,
|
|
233
|
+
// Non-loopback clients must present the API token (query `token`
|
|
234
|
+
// or the `crewly_token` cookie). Engine.IO's polling handshake
|
|
235
|
+
// bypasses Express, so the gate has to live here as well.
|
|
236
|
+
allowRequest: socketIoAllowRequest,
|
|
217
237
|
});
|
|
218
238
|
this.initializeServices();
|
|
219
239
|
this.configureMiddleware();
|
|
@@ -275,6 +295,15 @@ export class CrewlyServer {
|
|
|
275
295
|
// triggers addToPool — the slack listener / TaskPool router below both
|
|
276
296
|
// depend on this for the auto-close path b chain. Idempotent.
|
|
277
297
|
TaskPoolService.getInstance().setEventBusService(this.eventBusService);
|
|
298
|
+
// Team budget gate (Team.budget was stored + prompt-injected but never
|
|
299
|
+
// evaluated). Enforced in claimFromPool + WorkItemDispatchSubscriber;
|
|
300
|
+
// here we give it the bus + queue so cap crossings reach the owner.
|
|
301
|
+
const teamBudgetGate = TeamBudgetGateService.getInstance();
|
|
302
|
+
teamBudgetGate.setNotifiers({
|
|
303
|
+
eventBus: this.eventBusService,
|
|
304
|
+
messageQueue: this.messageQueueService,
|
|
305
|
+
});
|
|
306
|
+
TaskPoolService.getInstance().setTeamBudgetGate(teamBudgetGate);
|
|
278
307
|
// Memory: TaskHistorySubscriber listens on the bus for
|
|
279
308
|
// task:done_by_worker / task:rejected / task:cancelled and writes
|
|
280
309
|
// the resulting TaskHistoryEntry into ProjectMemory. This is the
|
|
@@ -405,6 +434,14 @@ export class CrewlyServer {
|
|
|
405
434
|
intervalMs: reflectInterval,
|
|
406
435
|
quietWindowMs: reflectQuiet,
|
|
407
436
|
debounceMs: reflectDebounce,
|
|
437
|
+
// Only wake ORC when someone has actually said something since
|
|
438
|
+
// the last nudge — the sweep is over recent conversation, and an
|
|
439
|
+
// hourly nudge with nothing to sweep was the largest remaining
|
|
440
|
+
// full-price wake-up after the 2026-09-16 fixes.
|
|
441
|
+
hasConversationSince: async (sinceMs) => {
|
|
442
|
+
const { getChatV2Service } = await import('./services/chat-v2/chat-v2.singleton.js');
|
|
443
|
+
return getChatV2Service().hasConversationSince(sinceMs);
|
|
444
|
+
},
|
|
408
445
|
// One message per tick listing every quiet vault, not one per
|
|
409
446
|
// vault: six vaults used to cost ORC six model turns per cycle.
|
|
410
447
|
batchFireFn: async (metas) => {
|
|
@@ -471,6 +508,10 @@ export class CrewlyServer {
|
|
|
471
508
|
// actually delivers OR the budget is exhausted.
|
|
472
509
|
try {
|
|
473
510
|
const { OrcDeliveryEnforcerService } = await import('./services/orc/orc-delivery-enforcer.service.js');
|
|
511
|
+
const [{ getChatV2Service }, { synthesizeSlackConversationId }] = await Promise.all([
|
|
512
|
+
import('./services/chat-v2/chat-v2.singleton.js'),
|
|
513
|
+
import('./services/chat-v2/legacy-dto.utils.js'),
|
|
514
|
+
]);
|
|
474
515
|
const enforcer = new OrcDeliveryEnforcerService({
|
|
475
516
|
reminderSink: ({ conversationId, text }) => {
|
|
476
517
|
if (!this.messageQueueService)
|
|
@@ -481,6 +522,12 @@ export class CrewlyServer {
|
|
|
481
522
|
source: 'system_event',
|
|
482
523
|
});
|
|
483
524
|
},
|
|
525
|
+
// Issue #731: let the enforcer see the thread's real activity
|
|
526
|
+
// (owner silence → don't track; reply via any path → stop).
|
|
527
|
+
// Every Slack thread is a chat-v2 channel keyed by its
|
|
528
|
+
// synthesized conversation id, and every outbound Slack
|
|
529
|
+
// reply is mirrored into it.
|
|
530
|
+
threadActivityProvider: ({ channelId, threadTs }) => getChatV2Service().getChannelActivity(synthesizeSlackConversationId(channelId, threadTs)),
|
|
484
531
|
});
|
|
485
532
|
OrcDeliveryEnforcerService.setInstance(enforcer);
|
|
486
533
|
enforcer.start();
|
|
@@ -513,6 +560,23 @@ export class CrewlyServer {
|
|
|
513
560
|
// for idempotency contract + retry cap + cron-recursion guard.
|
|
514
561
|
this.eventToWorkItemBridge = EventToWorkItemBridge.boot(this.eventBusService);
|
|
515
562
|
this.eventToWorkItemBridge.start();
|
|
563
|
+
// OKR loop closure: auto-measure `task_completion` KRs from task:done /
|
|
564
|
+
// task:verified and publish `team:all_tasks_done` when a mission has no
|
|
565
|
+
// active WorkItems left (the bridge turns that into a review WI). See
|
|
566
|
+
// `kr-completion.subscriber.ts`.
|
|
567
|
+
this.krCompletionSubscriber = KRCompletionSubscriber.boot(this.eventBusService);
|
|
568
|
+
this.krCompletionSubscriber.start();
|
|
569
|
+
// OKR loop closure: give the reminder sweep (mission:stale) and the
|
|
570
|
+
// review service (mission:replanned) a bus to publish on. Both were
|
|
571
|
+
// declared + bridged events with no publisher before this.
|
|
572
|
+
MissionReminderService.getInstance().setEventBusService(this.eventBusService);
|
|
573
|
+
OKRReviewService.getInstance().setEventBusService(this.eventBusService);
|
|
574
|
+
// Hierarchy escalation: a TL that has not acted on a worker's
|
|
575
|
+
// verification handoff within 15 min triggers the documented bypass to
|
|
576
|
+
// the orchestrator (`hierarchy:escalation` + [ESCALATION] queue message).
|
|
577
|
+
// HierarchyEscalationService had the rules but no runtime consumer.
|
|
578
|
+
this.hierarchyEscalationMonitor = HierarchyEscalationMonitor.boot(this.eventBusService, this.messageQueueService);
|
|
579
|
+
this.hierarchyEscalationMonitor.start();
|
|
516
580
|
// LEARN-1: subscribe to terminal task / mission:replanned events and
|
|
517
581
|
// auto-record a learning entry via MemoryService.recordLearning. Closes
|
|
518
582
|
// the prompt-driven "agents-forget-to-record" gap. See
|
|
@@ -900,6 +964,10 @@ export class CrewlyServer {
|
|
|
900
964
|
// Note: Static files are configured in configureRoutes() after API routes
|
|
901
965
|
}
|
|
902
966
|
configureRoutes() {
|
|
967
|
+
// API token gate — loopback callers (local skills, local dashboard)
|
|
968
|
+
// pass; every other address must present the API token. `/health`,
|
|
969
|
+
// static assets and the SPA shell are outside `/api` and stay open.
|
|
970
|
+
this.app.use('/api', apiTokenMiddleware);
|
|
903
971
|
// Agent heartbeat middleware - any API call with X-Agent-Session header updates heartbeat
|
|
904
972
|
this.app.use('/api', agentHeartbeatMiddleware);
|
|
905
973
|
// API routes
|
|
@@ -1283,12 +1351,44 @@ export class CrewlyServer {
|
|
|
1283
1351
|
error: error instanceof Error ? error.message : String(error),
|
|
1284
1352
|
});
|
|
1285
1353
|
}
|
|
1286
|
-
// Wire OAuthReloginMonitorService
|
|
1354
|
+
// Wire OAuthReloginMonitorService: event bus, orchestrator queue,
|
|
1355
|
+
// chat + Slack sinks for the owner-facing login notice, and the
|
|
1356
|
+
// boot-level sign-in-screen sweep (server-install finding 7).
|
|
1287
1357
|
try {
|
|
1288
|
-
OAuthReloginMonitorService.getInstance()
|
|
1358
|
+
const oauthMonitor = OAuthReloginMonitorService.getInstance();
|
|
1359
|
+
oauthMonitor.setEventBusService(this.eventBusService);
|
|
1360
|
+
oauthMonitor.setNoticeQueue(this.messageQueueService);
|
|
1361
|
+
oauthMonitor.setSlackProvider(async () => {
|
|
1362
|
+
const slack = getSlackService();
|
|
1363
|
+
return slack.isConnected() ? slack : null;
|
|
1364
|
+
});
|
|
1365
|
+
oauthMonitor.setChatProvider(() => {
|
|
1366
|
+
const gateway = this.terminalGateway;
|
|
1367
|
+
if (!gateway)
|
|
1368
|
+
return null;
|
|
1369
|
+
return {
|
|
1370
|
+
getActiveConversationId: () => gateway.getActiveConversationId(),
|
|
1371
|
+
recordSystemTurn: (conversationId, content) => {
|
|
1372
|
+
const chatV2 = getChatV2Service();
|
|
1373
|
+
const channel = chatV2.ensureChannelForLegacyConversation({
|
|
1374
|
+
conversationId,
|
|
1375
|
+
agentSession: ORCHESTRATOR_SESSION_NAME,
|
|
1376
|
+
});
|
|
1377
|
+
chatV2.recordTurn({
|
|
1378
|
+
channelId: channel.id,
|
|
1379
|
+
senderType: 'system',
|
|
1380
|
+
senderId: 'system',
|
|
1381
|
+
content,
|
|
1382
|
+
metadata: { source: 'system' },
|
|
1383
|
+
});
|
|
1384
|
+
},
|
|
1385
|
+
broadcastSystemNotification: (message, type) => gateway.broadcastSystemNotification(message, type),
|
|
1386
|
+
};
|
|
1387
|
+
});
|
|
1388
|
+
oauthMonitor.start();
|
|
1289
1389
|
}
|
|
1290
1390
|
catch (error) {
|
|
1291
|
-
this.logger.warn('Failed to wire OAuthReloginMonitorService
|
|
1391
|
+
this.logger.warn('Failed to wire OAuthReloginMonitorService (non-critical)', {
|
|
1292
1392
|
error: error instanceof Error ? error.message : String(error),
|
|
1293
1393
|
});
|
|
1294
1394
|
}
|
|
@@ -1824,6 +1924,15 @@ export class CrewlyServer {
|
|
|
1824
1924
|
});
|
|
1825
1925
|
await triggerEngine.start();
|
|
1826
1926
|
this.logger.info('TriggerEngine started with action handler wired');
|
|
1927
|
+
// MissionPolicy escalation loop (every 5 min: cost/time/failure rules →
|
|
1928
|
+
// notify/pause/block). Sequenced AFTER the action handler above because
|
|
1929
|
+
// EscalationService.start() wraps the installed handler and delegates
|
|
1930
|
+
// non-escalation triggers back to it. Gated by CREWLY_ESCALATION_ENABLED
|
|
1931
|
+
// (default on); a no-op when no mission carries escalation rules.
|
|
1932
|
+
this.escalationService = await bootEscalationService({
|
|
1933
|
+
messageQueue: this.messageQueueService,
|
|
1934
|
+
logger: this.logger,
|
|
1935
|
+
});
|
|
1827
1936
|
// Wire team-scoped triggers: reconcile declarative Team.triggers spec
|
|
1828
1937
|
// against the running engine on every team save, and cancel all of a
|
|
1829
1938
|
// team's triggers when it's deleted. Listener is fire-and-forget.
|
|
@@ -1886,6 +1995,7 @@ export class CrewlyServer {
|
|
|
1886
1995
|
try {
|
|
1887
1996
|
const { WorkItemDispatchSubscriber } = await import('./services/v3/workitem-dispatch.subscriber.js');
|
|
1888
1997
|
const dispatchSubscriber = WorkItemDispatchSubscriber.getInstance();
|
|
1998
|
+
dispatchSubscriber.setTeamBudgetGate(TeamBudgetGateService.getInstance());
|
|
1889
1999
|
dispatchSubscriber.initialize(this.eventBusService);
|
|
1890
2000
|
dispatchSubscriber.start();
|
|
1891
2001
|
this.logger.info('WorkItemDispatchSubscriber started — workitem:queued events push to target sessions');
|
|
@@ -2059,6 +2169,12 @@ export class CrewlyServer {
|
|
|
2059
2169
|
const loadedAddons = await addonLoader.loadAddons(this.app, this.httpServer);
|
|
2060
2170
|
if (loadedAddons.length > 0) {
|
|
2061
2171
|
this.logger.info('Addons loaded successfully', { addons: loadedAddons });
|
|
2172
|
+
// An addon that attaches its own WebSocket gateway wraps
|
|
2173
|
+
// `httpServer.emit` after our gate did; re-install so the
|
|
2174
|
+
// gate is outermost again (double-wrapping is harmless —
|
|
2175
|
+
// an allowed upgrade passes both, a refused one is
|
|
2176
|
+
// answered once by the outer wrapper).
|
|
2177
|
+
installWebSocketGate(this.httpServer);
|
|
2062
2178
|
}
|
|
2063
2179
|
}
|
|
2064
2180
|
catch (addonErr) {
|
|
@@ -2661,9 +2777,9 @@ export class CrewlyServer {
|
|
|
2661
2777
|
const { createServer } = await import('net');
|
|
2662
2778
|
const testServer = createServer();
|
|
2663
2779
|
return new Promise((resolve, reject) => {
|
|
2664
|
-
testServer.listen(this.config.webPort, () => {
|
|
2780
|
+
testServer.listen(this.config.webPort, this.config.bindHost, () => {
|
|
2665
2781
|
testServer.close(() => {
|
|
2666
|
-
this.logger.info('Port is available', { port: this.config.webPort });
|
|
2782
|
+
this.logger.info('Port is available', { port: this.config.webPort, host: this.config.bindHost });
|
|
2667
2783
|
resolve();
|
|
2668
2784
|
});
|
|
2669
2785
|
});
|
|
@@ -2677,18 +2793,63 @@ export class CrewlyServer {
|
|
|
2677
2793
|
});
|
|
2678
2794
|
});
|
|
2679
2795
|
}
|
|
2796
|
+
/**
|
|
2797
|
+
* Log where the API token lives and how reachable the API is.
|
|
2798
|
+
*
|
|
2799
|
+
* Resolving the token here also performs the first-boot generation so
|
|
2800
|
+
* the file exists (0600) before the first non-loopback caller arrives.
|
|
2801
|
+
* Emits a WARN for a headless install that binds every interface with
|
|
2802
|
+
* neither `CREWLY_BIND_HOST` nor `CREWLY_API_TOKEN` set.
|
|
2803
|
+
*/
|
|
2804
|
+
logNetworkExposure() {
|
|
2805
|
+
try {
|
|
2806
|
+
const token = resolveApiToken();
|
|
2807
|
+
const summary = describeNetworkExposure({
|
|
2808
|
+
bindHost: this.config.bindHost,
|
|
2809
|
+
port: this.config.webPort,
|
|
2810
|
+
bindHostExplicit: Boolean(process.env[API_SECURITY_CONSTANTS.ENV.BIND_HOST]),
|
|
2811
|
+
tokenSource: token.source,
|
|
2812
|
+
tokenFilePath: token.filePath,
|
|
2813
|
+
headless: this.config.headless || isHeadlessEnvironment(),
|
|
2814
|
+
});
|
|
2815
|
+
if (token.source === 'generated') {
|
|
2816
|
+
this.logger.info('Generated API token for non-loopback callers', {
|
|
2817
|
+
file: token.filePath,
|
|
2818
|
+
usage: 'crewly token | curl -H "X-Crewly-Token: $(crewly token)" http://<host>:<port>/api/teams',
|
|
2819
|
+
});
|
|
2820
|
+
}
|
|
2821
|
+
if (summary.level === 'warn') {
|
|
2822
|
+
this.logger.warn(summary.message, summary.details);
|
|
2823
|
+
}
|
|
2824
|
+
else {
|
|
2825
|
+
this.logger.info(summary.message, summary.details);
|
|
2826
|
+
}
|
|
2827
|
+
}
|
|
2828
|
+
catch (error) {
|
|
2829
|
+
this.logger.error('Failed to resolve API token', {
|
|
2830
|
+
error: error instanceof Error ? error.message : String(error),
|
|
2831
|
+
});
|
|
2832
|
+
}
|
|
2833
|
+
}
|
|
2680
2834
|
async startHttpServer() {
|
|
2681
2835
|
return new Promise((resolve, reject) => {
|
|
2682
2836
|
const startTime = Date.now();
|
|
2683
|
-
|
|
2837
|
+
// Outermost upgrade wrapper: every gateway (Socket.IO, browser
|
|
2838
|
+
// bridge, chat-v2, terminal) has attached by now, so this gate
|
|
2839
|
+
// runs before any of them sees a non-loopback upgrade.
|
|
2840
|
+
installWebSocketGate(this.httpServer);
|
|
2841
|
+
this.httpServer.listen(this.config.webPort, this.config.bindHost, () => {
|
|
2684
2842
|
const duration = Date.now() - startTime;
|
|
2685
2843
|
this.logger.info('Crewly server started', {
|
|
2844
|
+
host: this.config.bindHost,
|
|
2686
2845
|
port: this.config.webPort,
|
|
2846
|
+
listening: `${this.config.bindHost}:${this.config.webPort}`,
|
|
2687
2847
|
durationMs: duration,
|
|
2688
2848
|
dashboardUrl: `http://localhost:${this.config.webPort}`,
|
|
2689
2849
|
websocketUrl: `ws://localhost:${this.config.webPort}`,
|
|
2690
2850
|
home: this.config.crewlyHome
|
|
2691
2851
|
});
|
|
2852
|
+
this.logNetworkExposure();
|
|
2692
2853
|
// B0 (interim) per `.crewly/specs/2026-05-05-trigger-persistence-bug.md`:
|
|
2693
2854
|
// Broadcast `system:backend_restarted` exactly once per boot. The
|
|
2694
2855
|
// trigger engine (`backend/src/services/v3/trigger-engine.service.ts`)
|
|
@@ -2823,7 +2984,6 @@ export class CrewlyServer {
|
|
|
2823
2984
|
// Scans active missions and sends Slack alerts for off-track KRs
|
|
2824
2985
|
setInterval(async () => {
|
|
2825
2986
|
try {
|
|
2826
|
-
const { MissionReminderService } = await import('./services/v3/mission-reminder.service.js');
|
|
2827
2987
|
await MissionReminderService.getInstance().runSweep();
|
|
2828
2988
|
}
|
|
2829
2989
|
catch (err) {
|
|
@@ -2836,7 +2996,6 @@ export class CrewlyServer {
|
|
|
2836
2996
|
setTimeout(() => this.purgeCompletedData(), 30 * 1000);
|
|
2837
2997
|
setTimeout(async () => {
|
|
2838
2998
|
try {
|
|
2839
|
-
const { MissionReminderService } = await import('./services/v3/mission-reminder.service.js');
|
|
2840
2999
|
await MissionReminderService.getInstance().runSweep();
|
|
2841
3000
|
}
|
|
2842
3001
|
catch (err) {
|
|
@@ -3179,6 +3338,21 @@ export class CrewlyServer {
|
|
|
3179
3338
|
this.eventToWorkItemBridge.stop();
|
|
3180
3339
|
this.eventToWorkItemBridge = null;
|
|
3181
3340
|
}
|
|
3341
|
+
if (this.krCompletionSubscriber) {
|
|
3342
|
+
this.krCompletionSubscriber.stop();
|
|
3343
|
+
this.krCompletionSubscriber = null;
|
|
3344
|
+
}
|
|
3345
|
+
if (this.escalationService) {
|
|
3346
|
+
try {
|
|
3347
|
+
await this.escalationService.stop();
|
|
3348
|
+
}
|
|
3349
|
+
catch { /* best-effort */ }
|
|
3350
|
+
this.escalationService = null;
|
|
3351
|
+
}
|
|
3352
|
+
if (this.hierarchyEscalationMonitor) {
|
|
3353
|
+
this.hierarchyEscalationMonitor.stop();
|
|
3354
|
+
this.hierarchyEscalationMonitor = null;
|
|
3355
|
+
}
|
|
3182
3356
|
// LEARN-1: stop the AutoLearningSubscriber on the same window as the
|
|
3183
3357
|
// bridge so its in-flight recordLearning calls drain before the bus
|
|
3184
3358
|
// is cleaned.
|
|
@@ -3247,6 +3421,18 @@ export class CrewlyServer {
|
|
|
3247
3421
|
LogRotationService.getInstance().stop();
|
|
3248
3422
|
// Stop auditor scheduler
|
|
3249
3423
|
AuditorSchedulerService.getInstance().stop();
|
|
3424
|
+
// Persist the token ledger: it flushes every 5 minutes, so a restart
|
|
3425
|
+
// used to drop everything recorded since the last tick (2026-09-18).
|
|
3426
|
+
try {
|
|
3427
|
+
const ledger = TokenUsageService.getInstance();
|
|
3428
|
+
ledger.stopPeriodicFlush();
|
|
3429
|
+
await ledger.flushToDisk();
|
|
3430
|
+
}
|
|
3431
|
+
catch (flushErr) {
|
|
3432
|
+
this.logger.warn('Token ledger flush on shutdown failed (non-fatal)', {
|
|
3433
|
+
error: flushErr instanceof Error ? flushErr.message : String(flushErr),
|
|
3434
|
+
});
|
|
3435
|
+
}
|
|
3250
3436
|
// Flush and shutdown OpenTelemetry tracing
|
|
3251
3437
|
try {
|
|
3252
3438
|
const { TracingService: TracingSvc } = await import('./services/core/tracing.service.js');
|