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
|
@@ -7,7 +7,7 @@ import { createSessionCommandHelper, getSessionBackendSync, createSessionBackend
|
|
|
7
7
|
import { RuntimeServiceFactory } from './runtime-service.factory.js';
|
|
8
8
|
import { registerInProcessRuntime, unregisterInProcessRuntime, } from './crewly-agent/in-process-runtime-registry.js';
|
|
9
9
|
import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
|
|
10
|
-
import { CREWLY_CONSTANTS, ENV_CONSTANTS, AGENT_TIMEOUTS, ORCHESTRATOR_SESSION_NAME, ORCHESTRATOR_ROLE, RUNTIME_TYPES, SESSION_COMMAND_DELAYS, EVENT_DELIVERY_CONSTANTS, TERMINAL_PATTERNS, GEMINI_SHELL_MODE_CONSTANTS, GEMINI_STUCK_CONNECTIVITY_PATTERN, GEMINI_ERROR_STATE_CONSTANTS, } from '../../constants.js';
|
|
10
|
+
import { CREWLY_CONSTANTS, ENV_CONSTANTS, AGENT_TIMEOUTS, ORCHESTRATOR_SESSION_NAME, ORCHESTRATOR_ROLE, RUNTIME_TYPES, SESSION_COMMAND_DELAYS, EVENT_DELIVERY_CONSTANTS, TERMINAL_PATTERNS, GEMINI_SHELL_MODE_CONSTANTS, GEMINI_STUCK_CONNECTIVITY_PATTERN, GEMINI_ERROR_STATE_CONSTANTS, REGISTRATION_DELIVERY_CONSTANTS, } from '../../constants.js';
|
|
11
11
|
import { WEB_CONSTANTS } from '../../../../config/constants.js';
|
|
12
12
|
import { delay } from '../../utils/async.utils.js';
|
|
13
13
|
import { getSettingsService } from '../settings/settings.service.js';
|
|
@@ -20,6 +20,7 @@ import { SubAgentMessageQueue } from '../messaging/sub-agent-message-queue.servi
|
|
|
20
20
|
import { AgentSuspendService } from './agent-suspend.service.js';
|
|
21
21
|
import { PromptBuilderService, buildModuleConfigFromTeamMember, } from '../ai/prompt-builder.service.js';
|
|
22
22
|
import { PromptAssemblyService } from '../ai/prompt-modules/prompt-assembly.service.js';
|
|
23
|
+
import { resolveOrcPromptProfile, ORC_PROMPT_PROFILE_ENV, } from '../ai/prompt-modules/prompt-module.interface.js';
|
|
23
24
|
import { stripAnsiCodes } from '../../utils/terminal-output.utils.js';
|
|
24
25
|
import { isPromptLine, containsSpinnerOrWorkingIndicator, containsProcessingIndicator, containsBusyStatusBar, containsRewindMode, extractChatPrefix, stripTuiLineBorders, matchTuiPromptLine, } from '../../utils/terminal-string-ops.js';
|
|
25
26
|
import { PtyActivityTrackerService } from './pty-activity-tracker.service.js';
|
|
@@ -620,6 +621,16 @@ export class AgentRegistrationService {
|
|
|
620
621
|
getCheckInterval() {
|
|
621
622
|
return process.env.NODE_ENV === 'test' ? 1000 : 2000;
|
|
622
623
|
}
|
|
624
|
+
/**
|
|
625
|
+
* Use the short test-environment cadence under Jest, otherwise the given
|
|
626
|
+
* production interval.
|
|
627
|
+
*
|
|
628
|
+
* @param productionMs - Interval to use outside the test environment
|
|
629
|
+
* @returns Interval in milliseconds
|
|
630
|
+
*/
|
|
631
|
+
testAwareInterval(productionMs) {
|
|
632
|
+
return process.env.NODE_ENV === 'test' ? this.getCheckInterval() : productionMs;
|
|
633
|
+
}
|
|
623
634
|
/**
|
|
624
635
|
* Update agent status with safe error handling (non-blocking).
|
|
625
636
|
* Returns true if successful, false if failed.
|
|
@@ -658,6 +669,49 @@ export class AgentRegistrationService {
|
|
|
658
669
|
['tl', 'team-leader'],
|
|
659
670
|
['team-lead', 'team-leader'],
|
|
660
671
|
]);
|
|
672
|
+
/**
|
|
673
|
+
* Assemble the orchestrator prompt at the *other* profile and log the
|
|
674
|
+
* module count + token estimate of both tiers side by side, so the
|
|
675
|
+
* operator can judge what `CREWLY_ORC_PROMPT_PROFILE=lite` would save (or
|
|
676
|
+
* did save) without diffing prompts by hand. Read-only and best-effort:
|
|
677
|
+
* a failure here never affects the prompt that was already assembled.
|
|
678
|
+
*
|
|
679
|
+
* @param assembler - The assembler used for the live prompt
|
|
680
|
+
* @param moduleConfig - Config the live prompt was assembled from
|
|
681
|
+
* @param liveReport - Report of the live (selected-profile) assembly
|
|
682
|
+
*/
|
|
683
|
+
async logPromptProfileComparison(assembler, moduleConfig, liveReport) {
|
|
684
|
+
const otherProfile = liveReport.profile === 'lite' ? 'full' : 'lite';
|
|
685
|
+
try {
|
|
686
|
+
const { report: other } = await assembler.assemble({
|
|
687
|
+
...moduleConfig,
|
|
688
|
+
promptProfile: otherProfile,
|
|
689
|
+
});
|
|
690
|
+
const byProfile = {
|
|
691
|
+
[liveReport.profile]: {
|
|
692
|
+
moduleCount: liveReport.moduleBreakdown.length,
|
|
693
|
+
estimatedTokens: liveReport.totalTokens,
|
|
694
|
+
},
|
|
695
|
+
[otherProfile]: {
|
|
696
|
+
moduleCount: other.moduleBreakdown.length,
|
|
697
|
+
estimatedTokens: other.totalTokens,
|
|
698
|
+
},
|
|
699
|
+
};
|
|
700
|
+
this.logger.info('Orchestrator prompt profile comparison', {
|
|
701
|
+
sessionName: moduleConfig.sessionName,
|
|
702
|
+
selected: liveReport.profile,
|
|
703
|
+
env: ORC_PROMPT_PROFILE_ENV,
|
|
704
|
+
...byProfile,
|
|
705
|
+
liteSavesTokens: (byProfile.full?.estimatedTokens ?? 0) - (byProfile.lite?.estimatedTokens ?? 0),
|
|
706
|
+
});
|
|
707
|
+
}
|
|
708
|
+
catch (error) {
|
|
709
|
+
this.logger.debug('Prompt profile comparison skipped', {
|
|
710
|
+
sessionName: moduleConfig.sessionName,
|
|
711
|
+
error: error instanceof Error ? error.message : String(error),
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
}
|
|
661
715
|
/**
|
|
662
716
|
* Get prompt file path for a specific role
|
|
663
717
|
* Uses the unified config/roles/{role}/prompt.md structure
|
|
@@ -1052,6 +1106,14 @@ export class AgentRegistrationService {
|
|
|
1052
1106
|
this.logger.info('Registration prompt loaded, sending to agent', {
|
|
1053
1107
|
sessionName, role, runtimeType, promptLength: prompt.length,
|
|
1054
1108
|
});
|
|
1109
|
+
// Gate on the runtime actually accepting input. `waitForRuntimeReady`
|
|
1110
|
+
// (already passed by the caller) matches banner text that is on screen
|
|
1111
|
+
// while the TUI is still booting — with Codex the instruction landed
|
|
1112
|
+
// ~2 s after spawn, during `model: loading`, and was swallowed while
|
|
1113
|
+
// every log line still said "sent successfully" (server-install finding 3).
|
|
1114
|
+
if (controller.signal.aborted)
|
|
1115
|
+
return;
|
|
1116
|
+
await this.waitForRuntimeInputReady(sessionName, runtimeType, controller.signal);
|
|
1055
1117
|
if (controller.signal.aborted)
|
|
1056
1118
|
return;
|
|
1057
1119
|
const sent = await this.sendPromptRobustly(sessionName, prompt, runtimeType, controller.signal);
|
|
@@ -1061,6 +1123,10 @@ export class AgentRegistrationService {
|
|
|
1061
1123
|
else {
|
|
1062
1124
|
this.logger.warn('Registration prompt delivery returned false', { sessionName, role, runtimeType });
|
|
1063
1125
|
}
|
|
1126
|
+
// Make a silent non-registration loud, and re-deliver once. Previously a
|
|
1127
|
+
// swallowed instruction left the agent at `started` / readyAt null forever
|
|
1128
|
+
// with no log line saying so.
|
|
1129
|
+
await this.redeliverIfUnregistered(sessionName, role, prompt, runtimeType, controller.signal);
|
|
1064
1130
|
}
|
|
1065
1131
|
catch (error) {
|
|
1066
1132
|
if (controller.signal.aborted) {
|
|
@@ -1077,6 +1143,134 @@ export class AgentRegistrationService {
|
|
|
1077
1143
|
this.registrationAbortControllers.delete(sessionName);
|
|
1078
1144
|
}
|
|
1079
1145
|
}
|
|
1146
|
+
/**
|
|
1147
|
+
* Poll the PTY screen until the runtime is idle at its input prompt
|
|
1148
|
+
* (`RuntimeAgentService.isReadyForInput`) or the timeout elapses.
|
|
1149
|
+
*
|
|
1150
|
+
* On timeout we log a warning and return `false` but the caller still
|
|
1151
|
+
* sends the instruction — a late instruction is recoverable (re-delivery,
|
|
1152
|
+
* `POST /api/terminal/:s/deliver`), a never-sent one is not.
|
|
1153
|
+
*
|
|
1154
|
+
* @param sessionName - PTY session name
|
|
1155
|
+
* @param runtimeType - Runtime whose prompt heuristics to use
|
|
1156
|
+
* @param abortSignal - Aborts the wait when the runtime exits
|
|
1157
|
+
* @param timeoutMs - Maximum time to wait (defaults to RUNTIME_INPUT_READY_TIMEOUT_MS)
|
|
1158
|
+
* @returns true when the idle prompt was observed, false on timeout/abort
|
|
1159
|
+
*/
|
|
1160
|
+
async waitForRuntimeInputReady(sessionName, runtimeType, abortSignal, timeoutMs = REGISTRATION_DELIVERY_CONSTANTS.RUNTIME_INPUT_READY_TIMEOUT_MS) {
|
|
1161
|
+
const runtimeService = this.createRuntimeService(runtimeType);
|
|
1162
|
+
// Mocked / non-TUI runtimes without the predicate: nothing to wait for.
|
|
1163
|
+
if (typeof runtimeService.isReadyForInput !== 'function') {
|
|
1164
|
+
return true;
|
|
1165
|
+
}
|
|
1166
|
+
const sessionHelper = await this.getSessionHelper();
|
|
1167
|
+
const pollMs = this.testAwareInterval(REGISTRATION_DELIVERY_CONSTANTS.RUNTIME_INPUT_READY_POLL_MS);
|
|
1168
|
+
const startedAt = Date.now();
|
|
1169
|
+
let polls = 0;
|
|
1170
|
+
while (!abortSignal?.aborted) {
|
|
1171
|
+
let screen = '';
|
|
1172
|
+
try {
|
|
1173
|
+
screen = sessionHelper.capturePane(sessionName);
|
|
1174
|
+
}
|
|
1175
|
+
catch (captureError) {
|
|
1176
|
+
this.logger.debug('Runtime input-ready capture failed (will retry)', {
|
|
1177
|
+
sessionName,
|
|
1178
|
+
error: captureError instanceof Error ? captureError.message : String(captureError),
|
|
1179
|
+
});
|
|
1180
|
+
}
|
|
1181
|
+
polls++;
|
|
1182
|
+
if (runtimeService.isReadyForInput(screen)) {
|
|
1183
|
+
this.logger.info('Runtime idle at input prompt — delivering registration instruction', {
|
|
1184
|
+
sessionName,
|
|
1185
|
+
runtimeType,
|
|
1186
|
+
waitedMs: Date.now() - startedAt,
|
|
1187
|
+
polls,
|
|
1188
|
+
});
|
|
1189
|
+
return true;
|
|
1190
|
+
}
|
|
1191
|
+
if (Date.now() - startedAt >= timeoutMs) {
|
|
1192
|
+
const lastLines = screen.split('\n').filter((l) => l.trim()).slice(-5);
|
|
1193
|
+
this.logger.warn('Timed out waiting for runtime input prompt — sending registration instruction anyway', {
|
|
1194
|
+
sessionName,
|
|
1195
|
+
runtimeType,
|
|
1196
|
+
timeoutMs,
|
|
1197
|
+
polls,
|
|
1198
|
+
lastTerminalLines: lastLines,
|
|
1199
|
+
});
|
|
1200
|
+
return false;
|
|
1201
|
+
}
|
|
1202
|
+
await delay(pollMs);
|
|
1203
|
+
}
|
|
1204
|
+
this.logger.info('Runtime input-ready wait aborted (runtime exited)', { sessionName });
|
|
1205
|
+
return false;
|
|
1206
|
+
}
|
|
1207
|
+
/**
|
|
1208
|
+
* Resolve how long an agent gets to register after its prompt is delivered.
|
|
1209
|
+
* Mirrors the timeout selection used when the session is created.
|
|
1210
|
+
*
|
|
1211
|
+
* @param role - Agent role
|
|
1212
|
+
* @param runtimeType - Agent runtime
|
|
1213
|
+
* @returns Registration timeout in milliseconds
|
|
1214
|
+
*/
|
|
1215
|
+
resolveRegistrationTimeout(role, runtimeType) {
|
|
1216
|
+
if (role === ORCHESTRATOR_ROLE)
|
|
1217
|
+
return AGENT_TIMEOUTS.ORCHESTRATOR_INITIALIZATION;
|
|
1218
|
+
if (runtimeType === RUNTIME_TYPES.CLAUDE_CODE)
|
|
1219
|
+
return AGENT_TIMEOUTS.CLAUDE_CODE_INITIALIZATION;
|
|
1220
|
+
return AGENT_TIMEOUTS.REGULAR_AGENT_INITIALIZATION;
|
|
1221
|
+
}
|
|
1222
|
+
/**
|
|
1223
|
+
* After the registration instruction was delivered, wait the registration
|
|
1224
|
+
* timeout for the agent to flip to `active`. If it does not, log an error
|
|
1225
|
+
* (this used to be completely silent) and re-deliver the instruction once,
|
|
1226
|
+
* gated again on the runtime being idle at its prompt.
|
|
1227
|
+
*
|
|
1228
|
+
* @param sessionName - PTY session name
|
|
1229
|
+
* @param role - Agent role
|
|
1230
|
+
* @param prompt - The full registration prompt (re-written to the prompt file)
|
|
1231
|
+
* @param runtimeType - Agent runtime
|
|
1232
|
+
* @param abortSignal - Aborts when the runtime exits
|
|
1233
|
+
*/
|
|
1234
|
+
async redeliverIfUnregistered(sessionName, role, prompt, runtimeType, abortSignal) {
|
|
1235
|
+
const timeout = this.resolveRegistrationTimeout(role, runtimeType);
|
|
1236
|
+
const checkInterval = this.testAwareInterval(REGISTRATION_DELIVERY_CONSTANTS.REGISTRATION_CHECK_INTERVAL_MS);
|
|
1237
|
+
for (let redelivery = 0; redelivery <= REGISTRATION_DELIVERY_CONSTANTS.MAX_REDELIVERIES; redelivery++) {
|
|
1238
|
+
const startedAt = Date.now();
|
|
1239
|
+
while (Date.now() - startedAt < timeout) {
|
|
1240
|
+
if (abortSignal.aborted)
|
|
1241
|
+
return;
|
|
1242
|
+
if (await this.checkAgentRegistration(sessionName, role)) {
|
|
1243
|
+
this.logger.info('Agent registration confirmed after prompt delivery', {
|
|
1244
|
+
sessionName, role, redeliveries: redelivery, waitedMs: Date.now() - startedAt,
|
|
1245
|
+
});
|
|
1246
|
+
return;
|
|
1247
|
+
}
|
|
1248
|
+
await delay(checkInterval);
|
|
1249
|
+
}
|
|
1250
|
+
if (abortSignal.aborted)
|
|
1251
|
+
return;
|
|
1252
|
+
if (redelivery >= REGISTRATION_DELIVERY_CONSTANTS.MAX_REDELIVERIES) {
|
|
1253
|
+
this.logger.error('Agent never registered after registration prompt delivery', {
|
|
1254
|
+
sessionName, role, runtimeType, timeoutMs: timeout, redeliveries: redelivery,
|
|
1255
|
+
hint: `POST /api/terminal/${sessionName}/deliver {force:true} with the prompt-file instruction`,
|
|
1256
|
+
});
|
|
1257
|
+
return;
|
|
1258
|
+
}
|
|
1259
|
+
const sessionHelper = await this.getSessionHelper();
|
|
1260
|
+
if (!sessionHelper.sessionExists(sessionName)) {
|
|
1261
|
+
this.logger.warn('Registration re-delivery skipped — session no longer exists', { sessionName, role });
|
|
1262
|
+
return;
|
|
1263
|
+
}
|
|
1264
|
+
this.logger.warn('No registration within timeout — re-delivering registration instruction', {
|
|
1265
|
+
sessionName, role, runtimeType, timeoutMs: timeout,
|
|
1266
|
+
});
|
|
1267
|
+
await this.waitForRuntimeInputReady(sessionName, runtimeType, abortSignal);
|
|
1268
|
+
if (abortSignal.aborted)
|
|
1269
|
+
return;
|
|
1270
|
+
const resent = await this.sendPromptRobustly(sessionName, prompt, runtimeType, abortSignal);
|
|
1271
|
+
this.logger.info('registration re-delivered', { sessionName, role, runtimeType, resent });
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1080
1274
|
/**
|
|
1081
1275
|
* Step 3: Kill session and recreate completely
|
|
1082
1276
|
* Most aggressive approach - completely recreates the session from scratch
|
|
@@ -1135,13 +1329,17 @@ export class AgentRegistrationService {
|
|
|
1135
1329
|
}
|
|
1136
1330
|
// Recreate session based on role
|
|
1137
1331
|
if (role === ORCHESTRATOR_ROLE) {
|
|
1332
|
+
// Same deterministic cwd for the PTY and the runtime `cd` — this site
|
|
1333
|
+
// used to `cd` into process.cwd() (the package install dir under
|
|
1334
|
+
// systemd) while the PTY was created elsewhere.
|
|
1335
|
+
const orchestratorCwd = projectPath || (await this.resolveOrchestratorCwd());
|
|
1138
1336
|
await this.createOrchestratorSession({
|
|
1139
1337
|
sessionName,
|
|
1140
|
-
projectPath:
|
|
1338
|
+
projectPath: orchestratorCwd,
|
|
1141
1339
|
});
|
|
1142
1340
|
// Initialize runtime for orchestrator using script (always fresh start)
|
|
1143
1341
|
const runtimeService = this.createRuntimeService(runtimeType);
|
|
1144
|
-
await runtimeService.executeRuntimeInitScript(sessionName,
|
|
1342
|
+
await runtimeService.executeRuntimeInitScript(sessionName, orchestratorCwd, effectiveFlags, promptFilePath, agentName);
|
|
1145
1343
|
// Wait for runtime to be ready
|
|
1146
1344
|
const checkInterval = this.getCheckInterval();
|
|
1147
1345
|
// runtimeService3: Separate instance for orchestrator ready-state detection
|
|
@@ -1707,16 +1905,29 @@ export class AgentRegistrationService {
|
|
|
1707
1905
|
teamNormsPath,
|
|
1708
1906
|
};
|
|
1709
1907
|
}
|
|
1908
|
+
// Prompt tiering: the orchestrator is re-registered on every
|
|
1909
|
+
// cold start and re-reads the whole system prompt at full price.
|
|
1910
|
+
// CREWLY_ORC_PROMPT_PROFILE=lite drops the planning/onboarding
|
|
1911
|
+
// modules; the default stays `full`. Both tiers are assembled
|
|
1912
|
+
// for the orchestrator so the operator can compare their size
|
|
1913
|
+
// in the log before flipping the env.
|
|
1914
|
+
const requestedProfile = role === ORCHESTRATOR_ROLE ? resolveOrcPromptProfile() : undefined;
|
|
1915
|
+
if (requestedProfile)
|
|
1916
|
+
moduleConfig.promptProfile = requestedProfile;
|
|
1710
1917
|
const assembler = new PromptAssemblyService();
|
|
1711
1918
|
const { prompt: modularPrompt, report } = await assembler.assemble(moduleConfig);
|
|
1712
1919
|
this.logger.info('Modular prompt assembled for registration', {
|
|
1713
1920
|
sessionName,
|
|
1714
1921
|
role,
|
|
1922
|
+
profile: report.profile,
|
|
1715
1923
|
totalTokens: report.totalTokens,
|
|
1716
1924
|
moduleCount: report.moduleBreakdown.length,
|
|
1717
1925
|
truncatedCount: report.truncated.length,
|
|
1718
1926
|
modules: report.moduleBreakdown.map(m => m.name),
|
|
1719
1927
|
});
|
|
1928
|
+
if (requestedProfile) {
|
|
1929
|
+
await this.logPromptProfileComparison(assembler, moduleConfig, report);
|
|
1930
|
+
}
|
|
1720
1931
|
return modularPrompt;
|
|
1721
1932
|
}
|
|
1722
1933
|
return prompt;
|
|
@@ -2029,6 +2240,44 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
2029
2240
|
this.logger.warn('Fast registration timeout', { sessionName, role, timeout });
|
|
2030
2241
|
return false;
|
|
2031
2242
|
}
|
|
2243
|
+
/**
|
|
2244
|
+
* Resolve the orchestrator's working directory deterministically:
|
|
2245
|
+
* `CREWLY_ORC_CWD` env → first stored project whose path exists → CREWLY_HOME.
|
|
2246
|
+
*
|
|
2247
|
+
* Never the package install dir or the server's `process.cwd()`: under
|
|
2248
|
+
* systemd that is `/usr/lib/node_modules/crewly`, and the orchestrator
|
|
2249
|
+
* would see a different filesystem depending on which code path started it.
|
|
2250
|
+
*
|
|
2251
|
+
* @returns Absolute directory to spawn the orchestrator PTY in
|
|
2252
|
+
*/
|
|
2253
|
+
async resolveOrchestratorCwd() {
|
|
2254
|
+
const envCwd = process.env[ENV_CONSTANTS.CREWLY_ORC_CWD]?.trim();
|
|
2255
|
+
if (envCwd) {
|
|
2256
|
+
const resolved = path.resolve(envCwd);
|
|
2257
|
+
this.logger.info('Orchestrator cwd resolved from CREWLY_ORC_CWD', { cwd: resolved });
|
|
2258
|
+
return resolved;
|
|
2259
|
+
}
|
|
2260
|
+
try {
|
|
2261
|
+
const projects = await this.storageService.getProjects();
|
|
2262
|
+
const firstProject = projects.find((project) => project.path && existsSync(project.path));
|
|
2263
|
+
if (firstProject) {
|
|
2264
|
+
this.logger.info('Orchestrator cwd resolved from first assigned project', {
|
|
2265
|
+
cwd: firstProject.path,
|
|
2266
|
+
projectId: firstProject.id,
|
|
2267
|
+
projectName: firstProject.name,
|
|
2268
|
+
});
|
|
2269
|
+
return firstProject.path;
|
|
2270
|
+
}
|
|
2271
|
+
}
|
|
2272
|
+
catch (error) {
|
|
2273
|
+
this.logger.debug('Could not read projects for orchestrator cwd (falling back to CREWLY_HOME)', {
|
|
2274
|
+
error: error instanceof Error ? error.message : String(error),
|
|
2275
|
+
});
|
|
2276
|
+
}
|
|
2277
|
+
const home = getCrewlyHomePath();
|
|
2278
|
+
this.logger.info('Orchestrator cwd resolved to CREWLY_HOME (no env override, no project)', { cwd: home });
|
|
2279
|
+
return home;
|
|
2280
|
+
}
|
|
2032
2281
|
/**
|
|
2033
2282
|
* Create orchestrator session - extracted from the original tmux service
|
|
2034
2283
|
*/
|
|
@@ -2113,7 +2362,14 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
2113
2362
|
* @returns Promise with success/error information
|
|
2114
2363
|
*/
|
|
2115
2364
|
async _createAgentSessionImpl(config) {
|
|
2116
|
-
const { sessionName, role,
|
|
2365
|
+
const { sessionName, role, windowName, memberId } = config;
|
|
2366
|
+
// The orchestrator's cwd is resolved deterministically (env > first
|
|
2367
|
+
// project > CREWLY_HOME) regardless of which boot path called us — the
|
|
2368
|
+
// boot path, /orchestrator/setup and the restart service used to pass
|
|
2369
|
+
// three different directories (server-install finding 4).
|
|
2370
|
+
const projectPath = role === ORCHESTRATOR_ROLE
|
|
2371
|
+
? await this.resolveOrchestratorCwd()
|
|
2372
|
+
: (config.projectPath ?? process.cwd());
|
|
2117
2373
|
const forceRecreate = config.forceRecreate ?? false;
|
|
2118
2374
|
// Get runtime type from config or default to claude-code
|
|
2119
2375
|
let runtimeType = config.runtimeType || RUNTIME_TYPES.CLAUDE_CODE;
|
|
@@ -2480,7 +2736,11 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
2480
2736
|
await sessionHelper.setEnvironmentVariable(sessionName, ENV_CONSTANTS.CREWLY_PROJECT_PATH, cwdToUse);
|
|
2481
2737
|
// #222: Set install dir so agents can resolve skill paths regardless of CWD
|
|
2482
2738
|
await sessionHelper.setEnvironmentVariable(sessionName, ENV_CONSTANTS.CREWLY_INSTALL_DIR, this.projectRoot);
|
|
2483
|
-
// Inject API keys from settings (with override chain) for
|
|
2739
|
+
// Inject API keys from settings (with override chain) for the PTY
|
|
2740
|
+
// runtimes (claude-code, gemini-cli, codex-cli). crewly-agent never
|
|
2741
|
+
// reaches this block — it returns from the in-process branch above —
|
|
2742
|
+
// and gets its keys via CrewlyAgentExternalRuntimeService.buildChildEnv
|
|
2743
|
+
// on the child's spawn environment instead.
|
|
2484
2744
|
const settingsService = getSettingsService();
|
|
2485
2745
|
const runtimeContext = { runtime: runtimeType };
|
|
2486
2746
|
// Gemini key — needed by gemini-cli and crewly-agent
|
|
@@ -2512,11 +2772,7 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
2512
2772
|
});
|
|
2513
2773
|
// Use the existing unified registration system
|
|
2514
2774
|
// #227: Claude Code gets extended timeout for PI protection evaluation
|
|
2515
|
-
const timeout = role
|
|
2516
|
-
? AGENT_TIMEOUTS.ORCHESTRATOR_INITIALIZATION
|
|
2517
|
-
: runtimeType === RUNTIME_TYPES.CLAUDE_CODE
|
|
2518
|
-
? AGENT_TIMEOUTS.CLAUDE_CODE_INITIALIZATION
|
|
2519
|
-
: AGENT_TIMEOUTS.REGULAR_AGENT_INITIALIZATION;
|
|
2775
|
+
const timeout = this.resolveRegistrationTimeout(role, runtimeType);
|
|
2520
2776
|
const initResult = await this.initializeAgentWithRegistration(sessionName, role, projectPath, timeout, memberId, runtimeType, runtimeFlags, config.additionalAllowlistPaths);
|
|
2521
2777
|
if (!initResult.success) {
|
|
2522
2778
|
return {
|
|
@@ -2718,9 +2974,23 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
2718
2974
|
// Process message asynchronously — don't block the caller
|
|
2719
2975
|
crewlyRuntime.handleMessage(message, slackMetadata)
|
|
2720
2976
|
.then((result) => {
|
|
2977
|
+
// Usage goes in the main log, not only the per-session buffer: this
|
|
2978
|
+
// is the line an operator greps to see what a run cost (2026-09-18).
|
|
2979
|
+
// cachedInput is the cached portion of input, so the rate is cached / input.
|
|
2980
|
+
const cachedInput = result.usage?.cachedInput ?? 0;
|
|
2981
|
+
const promptTokens = Math.max(result.usage?.input ?? 0, cachedInput);
|
|
2721
2982
|
this.logger.info('Crewly Agent finished processing message', {
|
|
2722
2983
|
sessionName, messageLength: message.length,
|
|
2723
2984
|
responseLength: result.text?.length ?? 0,
|
|
2985
|
+
steps: result.steps,
|
|
2986
|
+
toolCalls: result.toolCalls?.length ?? 0,
|
|
2987
|
+
finishReason: result.finishReason,
|
|
2988
|
+
usage: {
|
|
2989
|
+
input: result.usage?.input ?? 0,
|
|
2990
|
+
output: result.usage?.output ?? 0,
|
|
2991
|
+
cachedInput,
|
|
2992
|
+
cacheHitPercent: promptTokens > 0 ? Math.round((cachedInput / promptTokens) * 100) : 0,
|
|
2993
|
+
},
|
|
2724
2994
|
});
|
|
2725
2995
|
// Route response text back to the originating chat conversation.
|
|
2726
2996
|
// Without this, crewly-agent responses are discarded — the agent
|