crewly 1.20.302 → 1.20.304
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/roles/developer/prompt.md +7 -0
- package/config/roles/fullstack-dev/prompt.md +7 -0
- package/config/roles/product-manager/prompt.md +7 -0
- package/config/skills/orchestrator/move-team/SKILL.md +53 -0
- package/config/skills/orchestrator/move-team/execute.sh +42 -0
- package/config/skills/orchestrator/usage-categories/SKILL.md +59 -0
- package/config/skills/orchestrator/usage-categories/execute.sh +81 -0
- package/config/skills/orchestrator/usage-categories/execute.test.sh +45 -0
- package/config/skills/orchestrator/usage-report/SKILL.md +71 -0
- package/config/skills/orchestrator/usage-report/execute.sh +84 -0
- package/config/skills/orchestrator/usage-report/execute.test.sh +39 -0
- package/config/skills/team-leader/usage-report/SKILL.md +71 -0
- package/config/skills/team-leader/usage-report/execute.sh +84 -0
- package/config/skills/team-leader/usage-report/execute.test.sh +39 -0
- package/dist/backend/backend/src/constants.d.ts +80 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +80 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/team-move/team-move.controller.d.ts +45 -0
- package/dist/backend/backend/src/controllers/team-move/team-move.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/team-move/team-move.controller.js +214 -0
- package/dist/backend/backend/src/controllers/team-move/team-move.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.controller.d.ts +36 -0
- package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.controller.js +158 -0
- package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.routes.d.ts +15 -0
- package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.routes.js +26 -0
- package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.routes.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts +10 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +97 -20
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +6 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/follow-through.wiring.d.ts +32 -0
- package/dist/backend/backend/src/services/agent/follow-through.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/follow-through.wiring.js +42 -1
- package/dist/backend/backend/src/services/agent/follow-through.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts +26 -6
- package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/resource-mode.service.js +59 -5
- package/dist/backend/backend/src/services/agent/resource-mode.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +18 -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 +16 -0
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts +19 -0
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.js +46 -0
- package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts +35 -0
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.js +101 -0
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/background-work-watchdog.d.ts +58 -0
- package/dist/backend/backend/src/services/monitoring/background-work-watchdog.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/background-work-watchdog.js +100 -0
- package/dist/backend/backend/src/services/monitoring/background-work-watchdog.js.map +1 -0
- 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 +3 -0
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +7 -0
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +15 -0
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +2 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +25 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +24 -0
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +63 -1
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +19 -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 +41 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/team-move/team-move-archive.d.ts +122 -0
- package/dist/backend/backend/src/services/team-move/team-move-archive.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-archive.js +202 -0
- package/dist/backend/backend/src/services/team-move/team-move-archive.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts +59 -0
- package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-chat.js +133 -0
- package/dist/backend/backend/src/services/team-move/team-move-chat.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-cloud.client.d.ts +102 -0
- package/dist/backend/backend/src/services/team-move/team-move-cloud.client.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-cloud.client.js +217 -0
- package/dist/backend/backend/src/services/team-move/team-move-cloud.client.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-crypto.d.ts +102 -0
- package/dist/backend/backend/src/services/team-move/team-move-crypto.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-crypto.js +348 -0
- package/dist/backend/backend/src/services/team-move/team-move-crypto.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-driver.service.d.ts +209 -0
- package/dist/backend/backend/src/services/team-move/team-move-driver.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-driver.service.js +504 -0
- package/dist/backend/backend/src/services/team-move/team-move-driver.service.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts +156 -0
- package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-exporter.js +462 -0
- package/dist/backend/backend/src/services/team-move/team-move-exporter.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-fs.d.ts +157 -0
- package/dist/backend/backend/src/services/team-move/team-move-fs.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-fs.js +298 -0
- package/dist/backend/backend/src/services/team-move/team-move-fs.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-git.d.ts +69 -0
- package/dist/backend/backend/src/services/team-move/team-move-git.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-git.js +198 -0
- package/dist/backend/backend/src/services/team-move/team-move-git.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts +121 -0
- package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-importer.js +462 -0
- package/dist/backend/backend/src/services/team-move/team-move-importer.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-journal.d.ts +110 -0
- package/dist/backend/backend/src/services/team-move/team-move-journal.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-journal.js +198 -0
- package/dist/backend/backend/src/services/team-move/team-move-journal.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-preflight.d.ts +71 -0
- package/dist/backend/backend/src/services/team-move/team-move-preflight.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-preflight.js +102 -0
- package/dist/backend/backend/src/services/team-move/team-move-preflight.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-runtime.d.ts +29 -0
- package/dist/backend/backend/src/services/team-move/team-move-runtime.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-runtime.js +173 -0
- package/dist/backend/backend/src/services/team-move/team-move-runtime.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-secret-scan.d.ts +50 -0
- package/dist/backend/backend/src/services/team-move/team-move-secret-scan.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-secret-scan.js +96 -0
- package/dist/backend/backend/src/services/team-move/team-move-secret-scan.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-select.d.ts +94 -0
- package/dist/backend/backend/src/services/team-move/team-move-select.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-select.js +124 -0
- package/dist/backend/backend/src/services/team-move/team-move-select.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move.fixture.d.ts +46 -0
- package/dist/backend/backend/src/services/team-move/team-move.fixture.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move.fixture.js +202 -0
- package/dist/backend/backend/src/services/team-move/team-move.fixture.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move.types.d.ts +269 -0
- package/dist/backend/backend/src/services/team-move/team-move.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move.types.js +44 -0
- package/dist/backend/backend/src/services/team-move/team-move.types.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.d.ts +42 -2
- package/dist/backend/backend/src/services/trace/trace-context.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-context.service.js +66 -5
- package/dist/backend/backend/src/services/trace/trace-context.service.js.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-recorder.d.ts.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-recorder.js +11 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.js.map +1 -1
- package/dist/backend/backend/src/services/usage-ledger/categories-param.d.ts +28 -0
- package/dist/backend/backend/src/services/usage-ledger/categories-param.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/categories-param.js +67 -0
- package/dist/backend/backend/src/services/usage-ledger/categories-param.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/excerpt.d.ts +37 -0
- package/dist/backend/backend/src/services/usage-ledger/excerpt.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/excerpt.js +49 -0
- package/dist/backend/backend/src/services/usage-ledger/excerpt.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/index.d.ts +14 -0
- package/dist/backend/backend/src/services/usage-ledger/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/index.js +14 -0
- package/dist/backend/backend/src/services/usage-ledger/index.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/ledger-hooks.d.ts +44 -0
- package/dist/backend/backend/src/services/usage-ledger/ledger-hooks.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/ledger-hooks.js +52 -0
- package/dist/backend/backend/src/services/usage-ledger/ledger-hooks.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/ledger-rollup.d.ts +100 -0
- package/dist/backend/backend/src/services/usage-ledger/ledger-rollup.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/ledger-rollup.js +189 -0
- package/dist/backend/backend/src/services/usage-ledger/ledger-rollup.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/owner-spans.d.ts +41 -0
- package/dist/backend/backend/src/services/usage-ledger/owner-spans.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/owner-spans.js +71 -0
- package/dist/backend/backend/src/services/usage-ledger/owner-spans.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/team-directory.d.ts +47 -0
- package/dist/backend/backend/src/services/usage-ledger/team-directory.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/team-directory.js +106 -0
- package/dist/backend/backend/src/services/usage-ledger/team-directory.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/unit-classifier.d.ts +101 -0
- package/dist/backend/backend/src/services/usage-ledger/unit-classifier.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/unit-classifier.js +263 -0
- package/dist/backend/backend/src/services/usage-ledger/unit-classifier.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-categories.store.d.ts +96 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-categories.store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-categories.store.js +166 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-categories.store.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.backfill.d.ts +90 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.backfill.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.backfill.js +294 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.backfill.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.recorder.d.ts +102 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.recorder.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.recorder.js +314 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.recorder.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.runtime.d.ts +62 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.runtime.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.runtime.js +106 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.runtime.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.store.d.ts +52 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.store.js +95 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.store.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.types.d.ts +127 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.types.js +19 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-ledger.types.js.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-report.service.d.ts +124 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-report.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-report.service.js +372 -0
- package/dist/backend/backend/src/services/usage-ledger/usage-report.service.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +80 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +80 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts +26 -6
- package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/resource-mode.service.js +59 -5
- package/dist/cli/backend/src/services/agent/resource-mode.service.js.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.js +1 -0
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +18 -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 +16 -0
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts +19 -0
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.js +46 -0
- package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts +35 -0
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.js +101 -0
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.js.map +1 -1
- 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 +3 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +25 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +24 -0
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +63 -1
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +19 -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 +41 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/trace/trace-context.service.d.ts +42 -2
- package/dist/cli/backend/src/services/trace/trace-context.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/trace/trace-context.service.js +66 -5
- package/dist/cli/backend/src/services/trace/trace-context.service.js.map +1 -1
- package/dist/cli/backend/src/services/trace/trace-recorder.d.ts.map +1 -1
- package/dist/cli/backend/src/services/trace/trace-recorder.js +11 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.js.map +1 -1
- package/dist/cli/backend/src/services/usage-ledger/ledger-hooks.d.ts +44 -0
- package/dist/cli/backend/src/services/usage-ledger/ledger-hooks.d.ts.map +1 -0
- package/dist/cli/backend/src/services/usage-ledger/ledger-hooks.js +52 -0
- package/dist/cli/backend/src/services/usage-ledger/ledger-hooks.js.map +1 -0
- package/dist/cli/cli/src/commands/team-move.d.ts +68 -0
- package/dist/cli/cli/src/commands/team-move.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/team-move.js +155 -0
- package/dist/cli/cli/src/commands/team-move.js.map +1 -0
- package/dist/cli/cli/src/index.js +33 -0
- package/dist/cli/cli/src/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -77,6 +77,7 @@ import { parseSlackThreadKey } from './services/slack/slack-thread-key.js';
|
|
|
77
77
|
import { LIVENESS_MONITOR_CONSTANTS, INPUT_CIRCUIT_CONSTANTS, INPUT_BLOCKED_RETRY_CONSTANTS } from './constants.js';
|
|
78
78
|
import { InputBlockedRetryService } from './services/messaging/input-blocked-retry.service.js';
|
|
79
79
|
import { driveCapabilities } from './services/drive/drive-agent.service.js';
|
|
80
|
+
import { teamMoveCapabilities } from './services/team-move/team-move-driver.service.js';
|
|
80
81
|
import { SUB_AGENT_QUEUE_CONSTANTS, CHAT_CONTEXT_CONSTANTS, SAFE_RESTART, AUTO_UPDATE_CONSTANTS, PROCESS_EXIT_CODES, CLAUDE_STARTUP_CONSTANTS, WEB_CONSTANTS, TICKET_CONSTANTS, UNASSIGNED_ROUTE_CONSTANTS, CLOUD_TALK_CONSTANTS, STANDING_ANSWERS_CONSTANTS, TICKET_AUTOPILOT_CONSTANTS, TICKET_HYGIENE_CONSTANTS, EXPERIMENT_CONSTANTS, WORK_ITEM_DESTINATION_CONSTANTS, CODEX_USAGE_SYNC_CONSTANTS, ANTIGRAVITY_USAGE_SYNC_CONSTANTS, OWNER_AUTH_CONSTANTS, CREWLY_APPS_CONSTANTS, SLACK_AGENT_DM_CONSTANTS, BRIEFING_CONSTANTS, DRIVE_CONSTANTS, POOL_PRUNE_CONSTANTS } from './constants.js';
|
|
81
82
|
import { randomUUID } from 'crypto';
|
|
82
83
|
import { PtyActivityTrackerService } from './services/agent/pty-activity-tracker.service.js';
|
|
@@ -142,7 +143,10 @@ import { getRuntimeFallbackService } from './services/runtime-fallback/runtime-f
|
|
|
142
143
|
import { getSlackAgentIdentityService } from './services/slack/slack-agent-identity.service.js';
|
|
143
144
|
import { getChatV2Service } from './services/chat-v2/chat-v2.singleton.js';
|
|
144
145
|
import { isOwnerStopped } from './services/agent/owner-stopped.registry.js';
|
|
145
|
-
import {
|
|
146
|
+
import { pausedTeamOfSession } from './services/team/team-pause.registry.js';
|
|
147
|
+
import { getFollowThrough } from './services/agent/follow-through.service.js';
|
|
148
|
+
import { BackgroundWorkWatchdog } from './services/monitoring/background-work-watchdog.js';
|
|
149
|
+
import { createFollowThrough, settleFollowThrough, idlePendingWorkCheck, releaseWorkForStop, restoreStoppedOwingWork, owedWorkReminder, OWED_REMINDER_MARKER } from './services/agent/follow-through.wiring.js';
|
|
146
150
|
import { isSessionPaused } from './services/team/team-pause.registry.js';
|
|
147
151
|
import { findPackageRoot } from './utils/package-root.js';
|
|
148
152
|
import { getLocalApiBaseUrl, setLocalApiPort } from './utils/local-api-url.utils.js';
|
|
@@ -184,6 +188,7 @@ import { sessionsToRestore } from './services/agent/restore-filter.js';
|
|
|
184
188
|
import { ProjectMemoryService } from './services/memory/project-memory.service.js';
|
|
185
189
|
import { TaskHistorySubscriber } from './services/memory/task-history.subscriber.js';
|
|
186
190
|
import { TeamHealthWatchdogService, LiveTeamHealthDataProvider, loadTeamHealthConfig, setTeamHealthWatchdogSingleton, getTeamHealthWatchdogSingleton, } from './services/team-health/index.js';
|
|
191
|
+
import { getUsageLedger } from './services/usage-ledger/usage-ledger.runtime.js';
|
|
187
192
|
import { traceHarness, traceTurnActivity } from './services/trace/trace-recorder.js';
|
|
188
193
|
import { inputCircuitStats, setInputCircuitOpenListener } from './services/session/input-circuit-breaker.js';
|
|
189
194
|
import { looksLikeShellPrompt } from './utils/screen-excerpt.js';
|
|
@@ -350,6 +355,7 @@ export class CrewlyServer {
|
|
|
350
355
|
/** Owner promises past due and never nudged at boot; their agents are restored and reminded once */
|
|
351
356
|
openCommitmentsAtBoot = [];
|
|
352
357
|
healthMonitoringInterval = null;
|
|
358
|
+
backgroundWatchdog = null;
|
|
353
359
|
constructor(config) {
|
|
354
360
|
// Resolve ~ to actual home directory
|
|
355
361
|
const resolveHomePath = (inputPath) => {
|
|
@@ -1297,7 +1303,14 @@ export class CrewlyServer {
|
|
|
1297
1303
|
setSlackImageService(slackImageService);
|
|
1298
1304
|
// Wire agent:idle events to thread status queue for delegation completion
|
|
1299
1305
|
this.eventBusService.on('eventPublished', (event) => {
|
|
1306
|
+
if (event.type === 'agent:busy' && event.sessionName)
|
|
1307
|
+
getSlackTypingPlaceholderService()?.releaseHold(event.sessionName);
|
|
1308
|
+
if ((event.type === 'agent:idle' || event.type === 'agent:busy') && event.sessionName) {
|
|
1309
|
+
ResourceModeService.getInstance().noteWorkingStatus(event.sessionName, event.type === 'agent:idle');
|
|
1310
|
+
}
|
|
1300
1311
|
if (event.type === 'agent:inactive' && event.sessionName) {
|
|
1312
|
+
// A runtime that exited while the agent owed work: same hook as the other stop paths.
|
|
1313
|
+
void this.restoreStoppedOwing(event.sessionName, 'runtime exited');
|
|
1301
1314
|
this.wakeIfMessagesQueued(event.sessionName);
|
|
1302
1315
|
}
|
|
1303
1316
|
// A turn started: the harness's "working on it" watch may be waiting
|
|
@@ -1385,6 +1398,7 @@ export class CrewlyServer {
|
|
|
1385
1398
|
// 2026-05-16: queued WIs for inactive Atlas could not get woken
|
|
1386
1399
|
// because the floor was held by idle product/marketing agents).
|
|
1387
1400
|
liveDataProvider.setAgentRegistrationService(this.apiController.agentRegistrationService);
|
|
1401
|
+
liveDataProvider.setAgentStoppedHook((name, why) => { void this.restoreStoppedOwing(name, why); });
|
|
1388
1402
|
// Initialize Reconciler Service (V2 — system truth recomputation)
|
|
1389
1403
|
{
|
|
1390
1404
|
const reconcilerLogger = LoggerService.getInstance().createComponentLogger('ReconcilerInit');
|
|
@@ -1960,6 +1974,14 @@ export class CrewlyServer {
|
|
|
1960
1974
|
crewlyHome: this.config.crewlyHome,
|
|
1961
1975
|
sendToAgent: (session, text) => this.apiController.agentRegistrationService.sendMessageToAgent(session, text),
|
|
1962
1976
|
});
|
|
1977
|
+
// Background subagents / forks that stopped writing are not busy work:
|
|
1978
|
+
// the agent is told and no longer counted busy (2026-10-12, Pia).
|
|
1979
|
+
this.backgroundWatchdog?.stop();
|
|
1980
|
+
this.backgroundWatchdog = new BackgroundWorkWatchdog({
|
|
1981
|
+
turnState: AgentTurnStateService.getInstance(),
|
|
1982
|
+
sendToAgent: (session, text) => this.apiController.agentRegistrationService.sendMessageToAgent(session, text),
|
|
1983
|
+
});
|
|
1984
|
+
this.backgroundWatchdog.start();
|
|
1963
1985
|
// An agent that owes work — a WorkItem (queued, accepted or running),
|
|
1964
1986
|
// an assigned ticket, a promise to the owner, an unfulfilled "doing X
|
|
1965
1987
|
// now" — is never idle-stopped. Under memory pressure it still can
|
|
@@ -1970,20 +1992,7 @@ export class CrewlyServer {
|
|
|
1970
1992
|
// a slot frees, with a reminder of what it promised (the work itself is
|
|
1971
1993
|
// already queued for it by the releaser).
|
|
1972
1994
|
idleDetection.setOwedStopHook((sessionName) => {
|
|
1973
|
-
void (
|
|
1974
|
-
const reminder = owedWorkReminder(await TaskPoolService.getInstance().getAllItems(), sessionName);
|
|
1975
|
-
if (!reminder)
|
|
1976
|
-
return;
|
|
1977
|
-
SubAgentMessageQueue.getInstance().enqueue(sessionName, reminder);
|
|
1978
|
-
this.logger.info('Stopped agent owes work — it will be restarted when a slot frees', { sessionName });
|
|
1979
|
-
const { scheduleDeferredStartRetry } = await import('./services/messaging/deferred-start-retry.js');
|
|
1980
|
-
const { activateAgentBySession } = await import('./controllers/team/team.controller.js');
|
|
1981
|
-
await scheduleDeferredStartRetry(sessionName, {
|
|
1982
|
-
activate: (name) => activateAgentBySession(this.apiController, name),
|
|
1983
|
-
hasPending: (name) => SubAgentMessageQueue.getInstance().hasPending(name),
|
|
1984
|
-
firstPauseMs: 60_000,
|
|
1985
|
-
});
|
|
1986
|
-
})().catch(() => undefined);
|
|
1995
|
+
void this.restoreStoppedOwing(sessionName, 'idle stop under memory pressure');
|
|
1987
1996
|
});
|
|
1988
1997
|
idleDetection.start();
|
|
1989
1998
|
// Adaptive agent limits (pressure mode cap + start queue).
|
|
@@ -2031,12 +2040,21 @@ export class CrewlyServer {
|
|
|
2031
2040
|
// An agent mid-conversation with the owner is the last one stopped
|
|
2032
2041
|
// for a slot, and its owner thread hears when it is
|
|
2033
2042
|
// (specs/2026-10-08-owner-thread-sentinel.md).
|
|
2034
|
-
owesOwnerThread: (name) => getOwnerThreadSentinel()?.
|
|
2035
|
-
onStoppedForSlot: (name) =>
|
|
2043
|
+
owesOwnerThread: (name) => getOwnerThreadSentinel()?.owesOwner(name) === true || getFollowThrough()?.holdsIntent(name) === true,
|
|
2044
|
+
onStoppedForSlot: (name) => {
|
|
2045
|
+
reportOwnerThreadBlocking(name, { kind: 'stopped', why: 'slot' });
|
|
2046
|
+
// Same hook as every other stop path: what it owes goes back to the queue and it is brought back.
|
|
2047
|
+
void this.restoreStoppedOwing(name, 'stopped to free a running-agent slot');
|
|
2048
|
+
},
|
|
2036
2049
|
onStartDeferred: (name) => reportOwnerThreadBlocking(name, { kind: 'start_deferred' }),
|
|
2037
2050
|
stopAgent: async (name, role) => {
|
|
2038
2051
|
// Its work survives the stop: back in the queue, redelivered on the next start.
|
|
2039
2052
|
await releaseWorkForStop(name, 'stopped to free a running-agent slot');
|
|
2053
|
+
// An agent that still owes the answer keeps its "will pick this up" placeholder:
|
|
2054
|
+
// the turn-end settle the stop triggers must not call the thread answered.
|
|
2055
|
+
const owed = TaskPoolService.getInstance().getAllItems().then((items) => owedWorkReminder(items, name) !== null);
|
|
2056
|
+
if (await owed.catch(() => false))
|
|
2057
|
+
await getSlackTypingPlaceholderService()?.holdForRestart(name);
|
|
2040
2058
|
await agentRegistration.terminateAgentSession(name, role);
|
|
2041
2059
|
await StorageService.getInstance().updateAgentStatus(name, CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE, 'idle_exit');
|
|
2042
2060
|
},
|
|
@@ -2658,6 +2676,24 @@ export class CrewlyServer {
|
|
|
2658
2676
|
error: talkErr instanceof Error ? talkErr.message : String(talkErr),
|
|
2659
2677
|
});
|
|
2660
2678
|
}
|
|
2679
|
+
// Team move (crewly#1189): Cloud tells this machine what to do in a
|
|
2680
|
+
// move of a team to or from another machine. Starting the driver is
|
|
2681
|
+
// what advertises `teamMove:1` to Cloud, and it resumes pending moves.
|
|
2682
|
+
try {
|
|
2683
|
+
const [{ createTeamMoveDriver }, { setTeamMoveDriver }] = await Promise.all([
|
|
2684
|
+
import('./services/team-move/team-move-runtime.js'),
|
|
2685
|
+
import('./services/team-move/team-move-driver.service.js'),
|
|
2686
|
+
]);
|
|
2687
|
+
const moveDriver = createTeamMoveDriver({ storage: this.storageService, relay: sync });
|
|
2688
|
+
setTeamMoveDriver(moveDriver);
|
|
2689
|
+
moveDriver.start();
|
|
2690
|
+
void moveDriver.housekeeping().catch(() => undefined);
|
|
2691
|
+
}
|
|
2692
|
+
catch (moveErr) {
|
|
2693
|
+
this.logger.warn('Team move handler wiring skipped', {
|
|
2694
|
+
error: moveErr instanceof Error ? moveErr.message : String(moveErr),
|
|
2695
|
+
});
|
|
2696
|
+
}
|
|
2661
2697
|
// "Let me check with the teams" (Drive kickoff): set below, once the
|
|
2662
2698
|
// status snapshot sync exists, and read by the Drive handler at run time.
|
|
2663
2699
|
let driveStatusCheck = null;
|
|
@@ -3507,7 +3543,7 @@ export class CrewlyServer {
|
|
|
3507
3543
|
if (event.kind === 'team-saved') {
|
|
3508
3544
|
await reconciler.reconcile(event.team);
|
|
3509
3545
|
}
|
|
3510
|
-
else if (event.kind === 'team-deleted') {
|
|
3546
|
+
else if (event.kind === 'team-deleted' || event.kind === 'team-moved-away') {
|
|
3511
3547
|
await reconciler.unregisterAll(event.teamId);
|
|
3512
3548
|
}
|
|
3513
3549
|
});
|
|
@@ -3844,6 +3880,9 @@ export class CrewlyServer {
|
|
|
3844
3880
|
const tokenUsageService = TokenUsageService.getInstance();
|
|
3845
3881
|
await tokenUsageService.loadFromDisk();
|
|
3846
3882
|
tokenUsageService.startPeriodicFlush();
|
|
3883
|
+
// Per-ticket time / token accounting (specs/2026-10-11-usage-ledger.md):
|
|
3884
|
+
// records facts from here on and rebuilds history once, shortly after boot.
|
|
3885
|
+
await getUsageLedger().start();
|
|
3847
3886
|
// Read Claude Code's own session transcripts on an interval so
|
|
3848
3887
|
// the Usage dashboard reflects claude-code agents, and so the
|
|
3849
3888
|
// context monitor gets a real context size for them (Claude
|
|
@@ -5330,7 +5369,7 @@ export class CrewlyServer {
|
|
|
5330
5369
|
// whether this machine takes `talk_message` — also for machines
|
|
5331
5370
|
// without Slack, which never send the registry heartbeat.
|
|
5332
5371
|
roster: async () => buildAgentRoster(await this.storageService.getTeams()),
|
|
5333
|
-
capabilities: () => [...cloudTalkCapabilities(), ...waitingActionCapabilities(), ...talkTranscribeCapabilities(), ...driveCapabilities()],
|
|
5372
|
+
capabilities: () => [...cloudTalkCapabilities(), ...waitingActionCapabilities(), ...talkTranscribeCapabilities(), ...driveCapabilities(), ...teamMoveCapabilities()],
|
|
5334
5373
|
onNewMessage: (listener) => {
|
|
5335
5374
|
chat.on('chat_message', listener);
|
|
5336
5375
|
return () => chat.off('chat_message', listener);
|
|
@@ -5402,7 +5441,7 @@ export class CrewlyServer {
|
|
|
5402
5441
|
agentNames: async () => new Map(buildAgentRoster(await this.storageService.getTeams())
|
|
5403
5442
|
.filter((a) => a.displayName)
|
|
5404
5443
|
.map((a) => [a.agentSession, a.displayName])),
|
|
5405
|
-
capabilities: () => [...cloudTalkCapabilities(), ...waitingActionCapabilities(), ...talkTranscribeCapabilities(), ...driveCapabilities()],
|
|
5444
|
+
capabilities: () => [...cloudTalkCapabilities(), ...waitingActionCapabilities(), ...talkTranscribeCapabilities(), ...driveCapabilities(), ...teamMoveCapabilities()],
|
|
5406
5445
|
onTicketChange: (listener) => RequestService.getInstance().onChange(() => listener()),
|
|
5407
5446
|
});
|
|
5408
5447
|
setWaitingItemsSyncService(service);
|
|
@@ -6238,6 +6277,34 @@ export class CrewlyServer {
|
|
|
6238
6277
|
});
|
|
6239
6278
|
}
|
|
6240
6279
|
}
|
|
6280
|
+
/**
|
|
6281
|
+
* The one hook every stop path runs: what the stopped agent owes goes back
|
|
6282
|
+
* in the queue and the agent is brought back with a reminder.
|
|
6283
|
+
*
|
|
6284
|
+
* @param sessionName - The agent that stopped
|
|
6285
|
+
* @param why - Reason text
|
|
6286
|
+
* @returns True when the agent is being brought back
|
|
6287
|
+
*/
|
|
6288
|
+
restoreStoppedOwing(sessionName, why) {
|
|
6289
|
+
if (sessionName === ORCHESTRATOR_SESSION_NAME)
|
|
6290
|
+
return Promise.resolve(false);
|
|
6291
|
+
return restoreStoppedOwingWork(sessionName, why, {
|
|
6292
|
+
listWorkItems: () => TaskPoolService.getInstance().getAllItems(),
|
|
6293
|
+
isHeldBack: (name) => isOwnerStopped(name) || !!pausedTeamOfSession(name),
|
|
6294
|
+
hasReminder: (name) => SubAgentMessageQueue.getInstance().peek(name).some((m) => m.data.startsWith(OWED_REMINDER_MARKER)),
|
|
6295
|
+
enqueue: (name, text) => SubAgentMessageQueue.getInstance().enqueue(name, text),
|
|
6296
|
+
holdPlaceholders: (name) => getSlackTypingPlaceholderService()?.holdForRestart(name) ?? Promise.resolve(0),
|
|
6297
|
+
restart: async (name) => {
|
|
6298
|
+
const { scheduleDeferredStartRetry } = await import('./services/messaging/deferred-start-retry.js');
|
|
6299
|
+
const { activateAgentBySession } = await import('./controllers/team/team.controller.js');
|
|
6300
|
+
void scheduleDeferredStartRetry(name, {
|
|
6301
|
+
activate: (n) => activateAgentBySession(this.apiController, n),
|
|
6302
|
+
hasPending: (n) => SubAgentMessageQueue.getInstance().hasPending(n),
|
|
6303
|
+
firstPauseMs: 60_000,
|
|
6304
|
+
});
|
|
6305
|
+
},
|
|
6306
|
+
});
|
|
6307
|
+
}
|
|
6241
6308
|
/**
|
|
6242
6309
|
* An agent went down with messages still queued for it: start it again so
|
|
6243
6310
|
* they are delivered (registration drains the queue). Without this the
|
|
@@ -6708,6 +6775,7 @@ export class CrewlyServer {
|
|
|
6708
6775
|
}, timeoutMs);
|
|
6709
6776
|
try {
|
|
6710
6777
|
// Clear health monitoring interval first
|
|
6778
|
+
this.backgroundWatchdog?.stop();
|
|
6711
6779
|
if (this.healthMonitoringInterval) {
|
|
6712
6780
|
clearInterval(this.healthMonitoringInterval);
|
|
6713
6781
|
this.healthMonitoringInterval = null;
|
|
@@ -6935,6 +7003,15 @@ export class CrewlyServer {
|
|
|
6935
7003
|
WorktreeJanitorService.getInstance().stop();
|
|
6936
7004
|
// Stop auditor scheduler
|
|
6937
7005
|
AuditorSchedulerService.getInstance().stop();
|
|
7006
|
+
// Write the usage ledger's buffered buckets
|
|
7007
|
+
try {
|
|
7008
|
+
await getUsageLedger().stop();
|
|
7009
|
+
}
|
|
7010
|
+
catch (ledgerErr) {
|
|
7011
|
+
this.logger.warn('Usage ledger flush on shutdown failed (non-fatal)', {
|
|
7012
|
+
error: ledgerErr instanceof Error ? ledgerErr.message : String(ledgerErr),
|
|
7013
|
+
});
|
|
7014
|
+
}
|
|
6938
7015
|
// Persist the token ledger: it flushes every 5 minutes, so a restart
|
|
6939
7016
|
// used to drop everything recorded since the last tick (2026-09-18).
|
|
6940
7017
|
try {
|