crewly 1.20.194 → 1.20.196
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/constants.ts +68 -0
- package/config/hooks/agent-status/report.sh +31 -12
- package/config/hooks/subagent-guard/subagent.sh +25 -1
- package/config/roles/auditor/prompt.md +2 -2
- package/config/roles/orchestrator/fragments/communication.md +1 -1
- package/config/roles/orchestrator/fragments/lifecycle.md +1 -1
- package/config/roles/orchestrator/prompt.md +18 -508
- package/config/skills/_common/lib.sh +28 -5
- package/config/skills/_common/lib.test.sh +32 -1
- package/config/skills/agent/computer-use/SKILL.md +6 -0
- package/config/skills/agent/core/create-intent-tasks/execute.sh +2 -0
- package/config/skills/agent/core/decompose-intent/execute.sh +2 -0
- package/config/skills/agent/core/experiment-card/SKILL.md +38 -5
- package/config/skills/agent/core/experiment-card/execute.sh +40 -4
- package/config/skills/agent/core/experiment-card/execute.test.sh +17 -0
- package/config/skills/agent/core/project-tickets/SKILL.md +35 -2
- package/config/skills/agent/core/project-tickets/execute.sh +59 -6
- package/config/skills/agent/core/project-tickets/execute.test.sh +24 -0
- package/config/skills/agent/core/send-message/execute.sh +16 -0
- package/config/skills/agent/core/send-message/execute.test.sh +10 -0
- package/config/skills/agent/core/trace-read/SKILL.md +117 -0
- package/config/skills/agent/core/trace-read/execute.sh +116 -0
- package/config/skills/agent/core/update-intent-task/execute.sh +2 -0
- package/config/skills/agent/desktop-app-control/execute.sh +5 -2
- package/config/skills/agent/marketing/submit-for-approval/execute.sh +3 -2
- package/config/skills/orchestrator/decompose-mission/execute.sh +2 -0
- package/config/skills/orchestrator/decompose-okr/execute.sh +1 -0
- package/config/skills/orchestrator/design-team/execute.sh +2 -0
- package/config/skills/orchestrator/measure-kr/execute.sh +2 -0
- package/config/skills/orchestrator/review-mission/execute.sh +2 -0
- package/config/skills/orchestrator/send-message/execute.sh +27 -2
- package/config/skills/orchestrator/send-message/execute.test.sh +89 -0
- package/config/skills/registry.json +6 -5
- package/config/skills/team-leader/design-checklist/execute.sh +2 -0
- package/config/skills/team-leader/signal-digest/SKILL.md +110 -0
- package/config/skills/team-leader/signal-digest/execute.sh +173 -0
- package/config/skills/team-leader/signal-digest/execute.test.sh +123 -0
- package/config/skills/team-leader/signal-digest/signal-digest.config.example.json +23 -0
- package/config/skills/team-leader/signal-digest/signal_digest.py +572 -0
- package/config/skills/team-leader/signal-digest/signal_digest.test.py +319 -0
- package/dist/backend/backend/src/constants.d.ts +356 -5
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +341 -8
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts +9 -3
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +38 -5
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts +4 -9
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.js +6 -14
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/auth/owner-session.controller.d.ts +64 -0
- package/dist/backend/backend/src/controllers/auth/owner-session.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/auth/owner-session.controller.js +164 -0
- package/dist/backend/backend/src/controllers/auth/owner-session.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.js +18 -5
- package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.routes.js +8 -1
- package/dist/backend/backend/src/controllers/canva/canva.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +16 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +3 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.js +3 -5
- package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts +4 -2
- package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/connector/connector.controller.js +17 -2
- package/dist/backend/backend/src/controllers/connector/connector.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js +2 -3
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js.map +1 -1
- package/dist/backend/backend/src/controllers/decisions/decisions.controller.d.ts +4 -2
- package/dist/backend/backend/src/controllers/decisions/decisions.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/decisions/decisions.controller.js +31 -20
- package/dist/backend/backend/src/controllers/decisions/decisions.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/desktop/desktop.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/desktop/desktop.controller.js +16 -0
- package/dist/backend/backend/src/controllers/desktop/desktop.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.js +9 -5
- package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.routes.js +16 -3
- package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/harness/harness.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/harness/harness.controller.js +3 -5
- package/dist/backend/backend/src/controllers/harness/harness.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts +1 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +1 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js +8 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +5 -2
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js +3 -5
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/people/people.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/people/people.routes.js +3 -5
- package/dist/backend/backend/src/controllers/people/people.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +35 -2
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +138 -4
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +2 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +7 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/request/open-items.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/request/open-items.controller.js +2 -4
- package/dist/backend/backend/src/controllers/request/open-items.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/request/request.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/request/request.controller.js +5 -1
- package/dist/backend/backend/src/controllers/request/request.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/settings/settings.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/settings/settings.controller.js +18 -2
- package/dist/backend/backend/src/controllers/settings/settings.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts +26 -0
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js +100 -0
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +9 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +11 -0
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/system-control.controller.d.ts +6 -4
- package/dist/backend/backend/src/controllers/system/system-control.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/system-control.controller.js +20 -13
- package/dist/backend/backend/src/controllers/system/system-control.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +14 -7
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +5 -7
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts +73 -0
- package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/trace/trace.controller.js +437 -0
- package/dist/backend/backend/src/controllers/trace/trace.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.d.ts +3 -3
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.js +4 -2
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp.controller.js +10 -2
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +34 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +342 -61
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/middleware/agent-origin-correction.d.ts +31 -0
- package/dist/backend/backend/src/middleware/agent-origin-correction.d.ts.map +1 -0
- package/dist/backend/backend/src/middleware/agent-origin-correction.js +31 -0
- package/dist/backend/backend/src/middleware/agent-origin-correction.js.map +1 -0
- package/dist/backend/backend/src/middleware/agent-origin.middleware.d.ts +6 -0
- package/dist/backend/backend/src/middleware/agent-origin.middleware.d.ts.map +1 -1
- package/dist/backend/backend/src/middleware/agent-origin.middleware.js +4 -1
- package/dist/backend/backend/src/middleware/agent-origin.middleware.js.map +1 -1
- package/dist/backend/backend/src/middleware/api-token.middleware.d.ts +20 -17
- package/dist/backend/backend/src/middleware/api-token.middleware.d.ts.map +1 -1
- package/dist/backend/backend/src/middleware/api-token.middleware.js +27 -37
- package/dist/backend/backend/src/middleware/api-token.middleware.js.map +1 -1
- package/dist/backend/backend/src/middleware/caller-identity.middleware.d.ts +213 -0
- package/dist/backend/backend/src/middleware/caller-identity.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/middleware/caller-identity.middleware.js +481 -0
- package/dist/backend/backend/src/middleware/caller-identity.middleware.js.map +1 -0
- package/dist/backend/backend/src/middleware/caller-identity.testing.d.ts +67 -0
- package/dist/backend/backend/src/middleware/caller-identity.testing.d.ts.map +1 -0
- package/dist/backend/backend/src/middleware/caller-identity.testing.js +108 -0
- package/dist/backend/backend/src/middleware/caller-identity.testing.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 +11 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +17 -2
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +7 -5
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +19 -10
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -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 +10 -1
- 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/oauth-relogin-monitor.service.d.ts +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/restore-filter.d.ts +5 -2
- package/dist/backend/backend/src/services/agent/restore-filter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/restore-filter.js +5 -2
- package/dist/backend/backend/src/services/agent/restore-filter.js.map +1 -1
- 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 +4 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +29 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +77 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +22 -6
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +6 -0
- 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 +7 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
- package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts +1 -1
- package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.d.ts +175 -2
- package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.js +444 -35
- package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -5
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +34 -4
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
- 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 +7 -4
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +18 -11
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +19 -25
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +7 -4
- 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 +8 -4
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/types.d.ts +0 -1
- package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/types.js +0 -1
- package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +5 -0
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/api-token.service.d.ts +28 -0
- package/dist/backend/backend/src/services/core/api-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/api-token.service.js +46 -0
- package/dist/backend/backend/src/services/core/api-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/dashboard-build.d.ts +49 -0
- package/dist/backend/backend/src/services/core/dashboard-build.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/dashboard-build.js +68 -0
- package/dist/backend/backend/src/services/core/dashboard-build.js.map +1 -0
- package/dist/backend/backend/src/services/core/owner-auth.service.d.ts +127 -0
- package/dist/backend/backend/src/services/core/owner-auth.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/owner-auth.service.js +205 -0
- package/dist/backend/backend/src/services/core/owner-auth.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/peer-process.service.d.ts +168 -0
- package/dist/backend/backend/src/services/core/peer-process.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/peer-process.service.js +352 -0
- package/dist/backend/backend/src/services/core/peer-process.service.js.map +1 -0
- package/dist/backend/backend/src/services/decisions/decision-store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-store.js +5 -1
- package/dist/backend/backend/src/services/decisions/decision-store.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts +10 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.js +20 -9
- package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts +1 -1
- package/dist/backend/backend/src/services/experiments/experiment-verdict.js +2 -2
- package/dist/backend/backend/src/services/experiments/experiment-verdict.js.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +149 -4
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.service.js +549 -24
- package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts +20 -5
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js +46 -9
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts +7 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts.map +1 -1
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js +21 -1
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js +2 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts +0 -8
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js +0 -18
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts +19 -0
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +41 -5
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts +184 -0
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.js +391 -0
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts +35 -1
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js +138 -2
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.d.ts +73 -0
- package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.js +258 -0
- package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.d.ts +82 -0
- package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.js +141 -0
- package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts +51 -1
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js +118 -2
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +7 -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 +4 -0
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.d.ts +103 -0
- package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.js +86 -0
- package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.js.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +57 -0
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.service.js +100 -4
- package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js +10 -2
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +16 -0
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +13 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts +36 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +44 -3
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-assignee-waker.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-assignee-waker.js +2 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-assignee-waker.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +3 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.d.ts +156 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.js +308 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.d.ts +212 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js +515 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.d.ts +186 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.js +341 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +309 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +726 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js +15 -0
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +34 -3
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js +57 -2
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -1
- package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts +61 -3
- package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts.map +1 -1
- package/dist/backend/backend/src/services/restart/interrupted-turns.js +106 -9
- package/dist/backend/backend/src/services/restart/interrupted-turns.js.map +1 -1
- package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts +22 -0
- package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/restart/restart-drain.service.js +37 -5
- package/dist/backend/backend/src/services/restart/restart-drain.service.js.map +1 -1
- package/dist/backend/backend/src/services/restart/supervisor-stop-budget.d.ts +62 -0
- package/dist/backend/backend/src/services/restart/supervisor-stop-budget.d.ts.map +1 -0
- package/dist/backend/backend/src/services/restart/supervisor-stop-budget.js +126 -0
- package/dist/backend/backend/src/services/restart/supervisor-stop-budget.js.map +1 -0
- package/dist/backend/backend/src/services/restart/turn-probe.d.ts +17 -2
- package/dist/backend/backend/src/services/restart/turn-probe.d.ts.map +1 -1
- package/dist/backend/backend/src/services/restart/turn-probe.js +29 -4
- package/dist/backend/backend/src/services/restart/turn-probe.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +4 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
- 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 +8 -5
- package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts +75 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js +187 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts +86 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js +307 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts +85 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js +185 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts +272 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js +570 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts +51 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js +116 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts +5 -1
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js +6 -2
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-auto-working.service.d.ts +29 -0
- package/dist/backend/backend/src/services/slack/slack-auto-working.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-auto-working.service.js +66 -3
- package/dist/backend/backend/src/services/slack/slack-auto-working.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +2 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +3 -2
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts +1 -1
- package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +79 -15
- 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 +200 -41
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +43 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +76 -7
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/system/auto-update.service.d.ts +2 -2
- package/dist/backend/backend/src/services/system/auto-update.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.js +4 -0
- package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
- 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 +2 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-analysis.service.d.ts +99 -0
- package/dist/backend/backend/src/services/trace/trace-analysis.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-analysis.service.js +148 -0
- package/dist/backend/backend/src/services/trace/trace-analysis.service.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.d.ts +212 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.js +489 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts +46 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.js +176 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-markers.d.ts +93 -0
- package/dist/backend/backend/src/services/trace/trace-markers.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-markers.js +162 -0
- package/dist/backend/backend/src/services/trace/trace-markers.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-metrics.d.ts +262 -0
- package/dist/backend/backend/src/services/trace/trace-metrics.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-metrics.js +810 -0
- package/dist/backend/backend/src/services/trace/trace-metrics.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.d.ts +338 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.js +789 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-store.d.ts +308 -0
- package/dist/backend/backend/src/services/trace/trace-store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-store.js +714 -0
- package/dist/backend/backend/src/services/trace/trace-store.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-summary.d.ts +77 -0
- package/dist/backend/backend/src/services/trace/trace-summary.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-summary.js +239 -0
- package/dist/backend/backend/src/services/trace/trace-summary.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-timeline.d.ts +74 -0
- package/dist/backend/backend/src/services/trace/trace-timeline.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-timeline.js +162 -0
- package/dist/backend/backend/src/services/trace/trace-timeline.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace.types.d.ts +137 -0
- package/dist/backend/backend/src/services/trace/trace.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace.types.js +104 -0
- package/dist/backend/backend/src/services/trace/trace.types.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.d.ts +80 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.js +184 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts +7 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js +16 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts +16 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.js +4 -0
- package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
- 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 +2 -1
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +8 -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 +46 -4
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.d.ts +4 -3
- package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.d.ts.map +1 -1
- package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.js +3 -2
- package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js +2 -1
- package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +3 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +7 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
- package/dist/backend/backend/src/types/decision.types.d.ts +3 -1
- package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/experiment.types.d.ts +65 -6
- package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/experiment.types.js.map +1 -1
- package/dist/backend/backend/src/types/signal-digest.types.d.ts +185 -0
- package/dist/backend/backend/src/types/signal-digest.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/signal-digest.types.js +21 -0
- package/dist/backend/backend/src/types/signal-digest.types.js.map +1 -0
- package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts +9 -0
- package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/ticket-autopilot.types.js +14 -0
- package/dist/backend/backend/src/types/ticket-autopilot.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/open-item.types.d.ts +4 -0
- package/dist/backend/backend/src/types/v2/open-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.d.ts +4 -0
- package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +5 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +2 -0
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/backend/src/utils/agent-caller.utils.d.ts +44 -37
- package/dist/backend/backend/src/utils/agent-caller.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/agent-caller.utils.js +48 -42
- package/dist/backend/backend/src/utils/agent-caller.utils.js.map +1 -1
- package/dist/backend/backend/src/utils/secret-env.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/secret-env.js +8 -1
- package/dist/backend/backend/src/utils/secret-env.js.map +1 -1
- package/dist/backend/backend/src/utils/security.d.ts +2 -0
- package/dist/backend/backend/src/utils/security.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/security.js +3 -1
- package/dist/backend/backend/src/utils/security.js.map +1 -1
- package/dist/backend/backend/src/websocket/chat.gateway.d.ts +9 -0
- package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/chat.gateway.js +26 -0
- package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +67 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +67 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +356 -5
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +341 -8
- package/dist/cli/backend/src/constants.js.map +1 -1
- 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 +17 -2
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +7 -5
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +19 -10
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -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 +10 -1
- 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/oauth-relogin-monitor.service.d.ts +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- 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 +4 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +29 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +77 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +22 -6
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +6 -0
- 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 +7 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat/chat.service.d.ts +282 -0
- package/dist/cli/backend/src/services/chat/chat.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat/chat.service.js +783 -0
- package/dist/cli/backend/src/services/chat/chat.service.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -5
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +34 -4
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
- 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 +7 -4
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +18 -11
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +19 -25
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +7 -4
- 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 +8 -4
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/types.d.ts +0 -1
- package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/types.js +0 -1
- package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -1
- package/dist/cli/backend/src/services/core/api-token.service.d.ts +28 -0
- package/dist/cli/backend/src/services/core/api-token.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/api-token.service.js +46 -0
- package/dist/cli/backend/src/services/core/api-token.service.js.map +1 -1
- package/dist/cli/backend/src/services/core/owner-auth.service.d.ts +127 -0
- package/dist/cli/backend/src/services/core/owner-auth.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/owner-auth.service.js +205 -0
- package/dist/cli/backend/src/services/core/owner-auth.service.js.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-store.js +5 -1
- package/dist/cli/backend/src/services/decisions/decision-store.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +0 -8
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +0 -18
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts +19 -0
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js +41 -5
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts +184 -0
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -0
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.js +391 -0
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.js.map +1 -0
- package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.d.ts +73 -0
- package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.d.ts.map +1 -0
- package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.js +258 -0
- package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.js.map +1 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
- 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 +4 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-items.service.d.ts +57 -0
- package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-items.service.js +100 -4
- package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts +36 -0
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +44 -3
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +34 -3
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js +57 -2
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -1
- package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts +22 -0
- package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/restart/restart-drain.service.js +37 -5
- package/dist/cli/backend/src/services/restart/restart-drain.service.js.map +1 -1
- 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 +8 -5
- package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-auto-working.service.d.ts +29 -0
- package/dist/cli/backend/src/services/slack/slack-auto-working.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-auto-working.service.js +66 -3
- package/dist/cli/backend/src/services/slack/slack-auto-working.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +2 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +3 -2
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +79 -15
- 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 +200 -41
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +43 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.js +76 -7
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.js +4 -0
- package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
- 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 +2 -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 +212 -0
- package/dist/cli/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-context.service.js +489 -0
- package/dist/cli/backend/src/services/trace/trace-context.service.js.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-markers.d.ts +93 -0
- package/dist/cli/backend/src/services/trace/trace-markers.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-markers.js +162 -0
- package/dist/cli/backend/src/services/trace/trace-markers.js.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.d.ts +338 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.js +789 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.js.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-store.d.ts +308 -0
- package/dist/cli/backend/src/services/trace/trace-store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-store.js +714 -0
- package/dist/cli/backend/src/services/trace/trace-store.js.map +1 -0
- package/dist/cli/backend/src/services/trace/trace.types.d.ts +137 -0
- package/dist/cli/backend/src/services/trace/trace.types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace.types.js +104 -0
- package/dist/cli/backend/src/services/trace/trace.types.js.map +1 -0
- package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.js +4 -0
- package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/cli/backend/src/types/decision.types.d.ts +3 -1
- package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts +9 -0
- package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/ticket-autopilot.types.js +14 -0
- package/dist/cli/backend/src/types/ticket-autopilot.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/open-item.types.d.ts +4 -0
- package/dist/cli/backend/src/types/v2/open-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.d.ts +4 -0
- package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +5 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +2 -0
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/utils/secret-env.d.ts.map +1 -1
- package/dist/cli/backend/src/utils/secret-env.js +8 -1
- package/dist/cli/backend/src/utils/secret-env.js.map +1 -1
- package/dist/cli/backend/src/utils/security.d.ts +196 -0
- package/dist/cli/backend/src/utils/security.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/security.js +538 -0
- package/dist/cli/backend/src/utils/security.js.map +1 -0
- package/dist/cli/backend/src/websocket/chat.gateway.d.ts +9 -0
- package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -1
- package/dist/cli/backend/src/websocket/chat.gateway.js +26 -0
- package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -1
- package/dist/cli/cli/src/commands/service.d.ts +12 -0
- package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/service.js +36 -2
- package/dist/cli/cli/src/commands/service.js.map +1 -1
- package/dist/cli/cli/src/index.js +4 -0
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/cli/src/utils/owner-token-fetch.d.ts +41 -0
- package/dist/cli/cli/src/utils/owner-token-fetch.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/owner-token-fetch.js +83 -0
- package/dist/cli/cli/src/utils/owner-token-fetch.js.map +1 -0
- package/dist/cli/cli/src/utils/safe-shutdown.d.ts +13 -3
- package/dist/cli/cli/src/utils/safe-shutdown.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/safe-shutdown.js +26 -4
- package/dist/cli/cli/src/utils/safe-shutdown.js.map +1 -1
- package/dist/cli/config/constants.d.ts +67 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +67 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/frontend/dist/assets/index-bfa0e2e8.css +42 -0
- package/frontend/dist/assets/{index-800118ca.js → index-edfa8e04.js} +285 -285
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/packages/crewly-agent/src/runtime/api-client.test.ts +42 -0
- package/packages/crewly-agent/src/runtime/api-client.ts +6 -0
- package/dist/backend/backend/src/services/v3/request-notification.service.d.ts +0 -52
- package/dist/backend/backend/src/services/v3/request-notification.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/v3/request-notification.service.js +0 -161
- package/dist/backend/backend/src/services/v3/request-notification.service.js.map +0 -1
- package/frontend/dist/assets/index-5e967795.css +0 -42
|
@@ -23,7 +23,7 @@ import { TerminalGateway, setTerminalGateway } from './websocket/terminal.gatewa
|
|
|
23
23
|
import { initializeChatGateway } from './websocket/chat.gateway.js';
|
|
24
24
|
import { LoggerService } from './services/core/logger.service.js';
|
|
25
25
|
import { retryWithBackoff } from './services/core/retry.util.js';
|
|
26
|
-
import { CREWLY_CONSTANTS, ORCHESTRATOR_SESSION_NAME, OWNER_MESSAGE_WATCHDOG_CONSTANTS, CLOUD_DISCONNECT_NOTICE_CONSTANTS, ORCHESTRATOR_ROLE, ORCHESTRATOR_WINDOW_NAME, MESSAGE_QUEUE_CONSTANTS, RUNTIME_TYPES, AUDITOR_CONSTANTS, AUDITOR_SCHEDULER_CONSTANTS, API_SECURITY_CONSTANTS, } from './constants.js';
|
|
26
|
+
import { CREWLY_CONSTANTS, ORCHESTRATOR_SESSION_NAME, OWNER_MESSAGE_WATCHDOG_CONSTANTS, TURN_STATE_CONSTANTS, CLOUD_DISCONNECT_NOTICE_CONSTANTS, ORCHESTRATOR_ROLE, ORCHESTRATOR_WINDOW_NAME, MESSAGE_QUEUE_CONSTANTS, RUNTIME_TYPES, AUDITOR_CONSTANTS, AUDITOR_SCHEDULER_CONSTANTS, API_SECURITY_CONSTANTS, } from './constants.js';
|
|
27
27
|
import { getSettingsService } from './services/settings/index.js';
|
|
28
28
|
import { MemoryService } from './services/memory/memory.service.js';
|
|
29
29
|
import { getImprovementStartupService } from './services/orchestrator/improvement-startup.service.js';
|
|
@@ -68,7 +68,7 @@ import { getSlackAutoWorkingService } from './services/slack/slack-auto-working.
|
|
|
68
68
|
import { getSlackAgentDmService } from './services/slack/slack-agent-dm.service.js';
|
|
69
69
|
import { sendBootAnnouncement, isFirstBoot, markBooted } from './services/boot/boot-announce.service.js';
|
|
70
70
|
import { SubAgentMessageQueue } from './services/messaging/sub-agent-message-queue.service.js';
|
|
71
|
-
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, EXPERIMENT_CONSTANTS, WORK_ITEM_DESTINATION_CONSTANTS, CODEX_USAGE_SYNC_CONSTANTS, ANTIGRAVITY_USAGE_SYNC_CONSTANTS } from './constants.js';
|
|
71
|
+
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, EXPERIMENT_CONSTANTS, WORK_ITEM_DESTINATION_CONSTANTS, CODEX_USAGE_SYNC_CONSTANTS, ANTIGRAVITY_USAGE_SYNC_CONSTANTS, OWNER_AUTH_CONSTANTS } from './constants.js';
|
|
72
72
|
import { PtyActivityTrackerService } from './services/agent/pty-activity-tracker.service.js';
|
|
73
73
|
import { InFlightTurnTracker } from './services/restart/in-flight-turn-tracker.service.js';
|
|
74
74
|
import { TicketIntakeService, setTicketIntakeService, resolveTicketIdForSession, } from './services/v3/ticket-intake.service.js';
|
|
@@ -79,8 +79,12 @@ import { activeAcceptance, formatTicketMarker, formatTicketNumber } from './type
|
|
|
79
79
|
import { createWorkItem, TERMINAL_WORK_ITEM_STATUSES } from './types/v2/work-item.types.js';
|
|
80
80
|
import { runPoolArchiveMigration } from './services/task-pool/pool-archive-migration.js';
|
|
81
81
|
import { createPtyTurnProbe } from './services/restart/turn-probe.js';
|
|
82
|
-
import { RestartDrainService, resolveRestartDrainMs } from './services/restart/restart-drain.service.js';
|
|
83
|
-
import { interruptedTurnsPath, loadInterruptedTurns, saveInterruptedTurns, writeInterruptedTurns, resumeInterruptedTurns, } from './services/restart/interrupted-turns.js';
|
|
82
|
+
import { RestartDrainService, resolveRestartDrainMs, resolveBackgroundDrainMs, } from './services/restart/restart-drain.service.js';
|
|
83
|
+
import { interruptedTurnsPath, loadInterruptedTurns, saveInterruptedTurns, writeInterruptedTurns, resumeInterruptedTurns, planCommitmentNotes, } from './services/restart/interrupted-turns.js';
|
|
84
|
+
import { AgentTurnStateService } from './services/monitoring/agent-turn-state.js';
|
|
85
|
+
import { DeferredIdleSettle } from './services/monitoring/deferred-idle-settle.js';
|
|
86
|
+
import { resolveSupervisorStopBudgetMs, capDrainToSupervisor } from './services/restart/supervisor-stop-budget.js';
|
|
87
|
+
import { findClaudeTranscript, defaultClaudeHome } from './services/agent/runtime-session-recovery.js';
|
|
84
88
|
import { DeviceIdentityService } from './services/cloud/device-identity.service.js';
|
|
85
89
|
import { CloudSyncService } from './services/cloud/cloud-sync.service.js';
|
|
86
90
|
import { SlackThreadStoreService, setSlackThreadStore, getSlackThreadStore } from './services/slack/slack-thread-store.service.js';
|
|
@@ -95,9 +99,13 @@ import { setMessageQueueService as setMessagingControllerQueueService } from './
|
|
|
95
99
|
import { SystemResourceAlertService } from './services/monitoring/system-resource-alert.service.js';
|
|
96
100
|
import { TokenUsageService } from './services/monitoring/token-usage.service.js';
|
|
97
101
|
import { agentHeartbeatMiddleware } from './middleware/agent-heartbeat.middleware.js';
|
|
98
|
-
import { agentOriginMiddleware } from './middleware/agent-origin.middleware.js';
|
|
102
|
+
import { agentOriginMiddleware, liveSessionPids } from './middleware/agent-origin.middleware.js';
|
|
103
|
+
import { createCallerIdentityMiddleware } from './middleware/caller-identity.middleware.js';
|
|
104
|
+
import { PeerProcessService } from './services/core/peer-process.service.js';
|
|
105
|
+
import { createOwnerSessionPageMiddleware, createOwnerSessionRouter } from './controllers/auth/owner-session.controller.js';
|
|
106
|
+
import { dashboardBuildHeader, dashboardBuildMessage, loadDashboardEntry } from './services/core/dashboard-build.js';
|
|
99
107
|
import { apiTokenMiddleware, healthGateMiddleware, socketIoAllowRequest, installWebSocketGate, } from './middleware/api-token.middleware.js';
|
|
100
|
-
import { resolveApiToken } from './services/core/api-token.service.js';
|
|
108
|
+
import { getApiTokenFilePath, mirrorEnvTokenToFile, resolveApiToken } from './services/core/api-token.service.js';
|
|
101
109
|
import { isHeadlessEnvironment, describeNetworkExposure } from './utils/network-exposure.utils.js';
|
|
102
110
|
import { RedisCacheService } from './services/cache/redis-cache.service.js';
|
|
103
111
|
import { OrchestratorRestartService } from './services/orchestrator/orchestrator-restart.service.js';
|
|
@@ -152,6 +160,7 @@ import { sessionsToRestore } from './services/agent/restore-filter.js';
|
|
|
152
160
|
import { ProjectMemoryService } from './services/memory/project-memory.service.js';
|
|
153
161
|
import { TaskHistorySubscriber } from './services/memory/task-history.subscriber.js';
|
|
154
162
|
import { TeamHealthWatchdogService, LiveTeamHealthDataProvider, loadTeamHealthConfig, setTeamHealthWatchdogSingleton, getTeamHealthWatchdogSingleton, } from './services/team-health/index.js';
|
|
163
|
+
import { traceTurnActivity } from './services/trace/trace-recorder.js';
|
|
155
164
|
// ESM __dirname equivalent using import.meta.url
|
|
156
165
|
const __filename = fileURLToPath(import.meta.url);
|
|
157
166
|
const __dirname = path.dirname(__filename);
|
|
@@ -214,10 +223,33 @@ function cloudHealthBlock() {
|
|
|
214
223
|
return { status: 'unknown' };
|
|
215
224
|
}
|
|
216
225
|
}
|
|
226
|
+
/**
|
|
227
|
+
* Send an alert to the owner as a Slack notification. Shared by the disk
|
|
228
|
+
* janitor's low-disk notice, critical system alerts (#991) and repeated
|
|
229
|
+
* runtime startup exits (#989), so they all reach an away owner the same way.
|
|
230
|
+
*
|
|
231
|
+
* @param notice - Title, message and whether it is urgent
|
|
232
|
+
* @returns True when it was sent, false when Slack is not connected
|
|
233
|
+
*/
|
|
234
|
+
async function slackOwnerAlertNotifier(notice) {
|
|
235
|
+
const slack = getSlackService();
|
|
236
|
+
if (!slack.isConnected())
|
|
237
|
+
return false;
|
|
238
|
+
await slack.sendNotification({
|
|
239
|
+
type: 'alert',
|
|
240
|
+
title: notice.title,
|
|
241
|
+
message: notice.message,
|
|
242
|
+
urgency: notice.urgent ? 'critical' : 'normal',
|
|
243
|
+
timestamp: new Date().toISOString(),
|
|
244
|
+
});
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
217
247
|
export class CrewlyServer {
|
|
218
248
|
app;
|
|
219
249
|
httpServer;
|
|
220
250
|
io;
|
|
251
|
+
/** Entry script of the dashboard build this backend serves (null: none built) */
|
|
252
|
+
dashboardEntry = null;
|
|
221
253
|
config;
|
|
222
254
|
logger = LoggerService.getInstance().createComponentLogger('CrewlyServer');
|
|
223
255
|
/** Offline-replay summary from this boot, surfaced in the boot announcement. */
|
|
@@ -271,6 +303,21 @@ export class CrewlyServer {
|
|
|
271
303
|
lastShutdownSignalAt = 0;
|
|
272
304
|
/** Interrupted turns loaded at boot, resumed once their agents are back */
|
|
273
305
|
interruptedTurnsAtBoot = [];
|
|
306
|
+
/** Supervisor's SIGTERM→SIGKILL budget (systemd TimeoutStopUSec), read at boot; null = none / unknown */
|
|
307
|
+
supervisorStopBudgetMs = null;
|
|
308
|
+
/**
|
|
309
|
+
* End-of-turn settling skipped while an agent still had background work,
|
|
310
|
+
* re-checked until that work is gone (specs/2026-10-02-restart-busy-and-resume.md).
|
|
311
|
+
*/
|
|
312
|
+
deferredIdleSettle = new DeferredIdleSettle({
|
|
313
|
+
hasBackgroundWork: (sessionName) => AgentTurnStateService.getInstance().hasBackgroundWork(sessionName),
|
|
314
|
+
isMidTurn: (sessionName) => AgentTurnStateService.getInstance().getVerdict(sessionName).state === 'turn',
|
|
315
|
+
settle: (sessionName) => this.settleAfterTurn(sessionName),
|
|
316
|
+
intervalMs: TURN_STATE_CONSTANTS.SETTLE_RECHECK_MS,
|
|
317
|
+
maxWaitMs: TURN_STATE_CONSTANTS.OPEN_WORK_MAX_MS,
|
|
318
|
+
});
|
|
319
|
+
/** Owner promises past due and never nudged at boot; their agents are restored and reminded once */
|
|
320
|
+
openCommitmentsAtBoot = [];
|
|
274
321
|
healthMonitoringInterval = null;
|
|
275
322
|
constructor(config) {
|
|
276
323
|
// Resolve ~ to actual home directory
|
|
@@ -535,7 +582,30 @@ export class CrewlyServer {
|
|
|
535
582
|
readIntakeLog: () => intakeOutcomeLog.read(),
|
|
536
583
|
});
|
|
537
584
|
setOwnerReceiptService(receipt);
|
|
538
|
-
|
|
585
|
+
// #856 follow-up: while the receipt is off, show the owner one real
|
|
586
|
+
// sample on a decision card and let him choose (never turned on for him).
|
|
587
|
+
void (async () => {
|
|
588
|
+
const [{ OwnerReceiptFormatAsk }, { DecisionService }] = await Promise.all([
|
|
589
|
+
import('./services/v3/owner-receipt/owner-receipt-format-ask.js'),
|
|
590
|
+
import('./services/decisions/decision.service.js'),
|
|
591
|
+
]);
|
|
592
|
+
const formatAsk = new OwnerReceiptFormatAsk({
|
|
593
|
+
receipt,
|
|
594
|
+
decisions: () => DecisionService.getInstance(),
|
|
595
|
+
logger: LoggerService.getInstance().createComponentLogger('OwnerReceiptFormat'),
|
|
596
|
+
});
|
|
597
|
+
DecisionService.registerKindHandler('owner_receipt_format', formatAsk);
|
|
598
|
+
startOwnerReceiptSchedule({
|
|
599
|
+
tick: async () => {
|
|
600
|
+
const sent = await receipt.tick();
|
|
601
|
+
await formatAsk.tick();
|
|
602
|
+
return sent;
|
|
603
|
+
},
|
|
604
|
+
});
|
|
605
|
+
})().catch((err) => {
|
|
606
|
+
this.logger.warn('Owner receipt format ask not wired; the receipt runs without it', { error: err instanceof Error ? err.message : String(err) });
|
|
607
|
+
startOwnerReceiptSchedule(receipt);
|
|
608
|
+
});
|
|
539
609
|
}
|
|
540
610
|
TaskPoolService.getInstance().setTicketResolver((sessionName) => resolveTicketIdForSession(InFlightTurnTracker.getInstance(), sessionName));
|
|
541
611
|
// Phase 2: answered → 待验收 → 验过了 / 打回 / silence accepts.
|
|
@@ -1224,27 +1294,23 @@ export class CrewlyServer {
|
|
|
1224
1294
|
// restart. The owner asked a second question while the agent
|
|
1225
1295
|
// was mid-answer and never got a reply; the message was still
|
|
1226
1296
|
// in the queue an hour later (2026-09-21, Ella).
|
|
1227
|
-
|
|
1228
|
-
//
|
|
1229
|
-
//
|
|
1230
|
-
//
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
//
|
|
1235
|
-
//
|
|
1236
|
-
//
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
// the tickets it replied in — submit them (待验收 or done).
|
|
1242
|
-
void getTicketReviewService()
|
|
1243
|
-
?.onAgentIdle(event.sessionName)
|
|
1244
|
-
.catch(() => undefined);
|
|
1297
|
+
//
|
|
1298
|
+
// An agent whose turn ended with a subagent or background task
|
|
1299
|
+
// still running is not done: the turn that delivers comes when
|
|
1300
|
+
// that work finishes. Leave its placeholders and tickets alone
|
|
1301
|
+
// (2026-10-02, Eve: "the data inventory is still running").
|
|
1302
|
+
// A re-check settles later, once the background work is gone.
|
|
1303
|
+
// An idle while the runtime still reports a turn (a silent
|
|
1304
|
+
// screen, a forced reset) is not a turn end at all: settle
|
|
1305
|
+
// nothing and flush nothing into the live turn; the turn's own
|
|
1306
|
+
// end publishes agent:idle again (PR #1013 review).
|
|
1307
|
+
const idleOutcome = this.deferredIdleSettle.onIdle(event.sessionName);
|
|
1308
|
+
if (idleOutcome !== 'turn') {
|
|
1309
|
+
setImmediate(() => void this.flushQueuedAgentMessages(event.sessionName));
|
|
1310
|
+
}
|
|
1245
1311
|
// V3: Auto-close open Requests when the orchestrator goes idle
|
|
1246
1312
|
// Handles direct responses (no WorkItem delegation)
|
|
1247
|
-
if (event.sessionName === ORCHESTRATOR_SESSION_NAME) {
|
|
1313
|
+
if (event.sessionName === ORCHESTRATOR_SESSION_NAME && idleOutcome !== 'turn') {
|
|
1248
1314
|
setImmediate(() => this.autoCloseOpenRequests());
|
|
1249
1315
|
}
|
|
1250
1316
|
}
|
|
@@ -1493,12 +1559,24 @@ export class CrewlyServer {
|
|
|
1493
1559
|
// and the SPA shell are outside `/api` and stay open; `/health` has its
|
|
1494
1560
|
// own gate below (#825).
|
|
1495
1561
|
this.app.use('/api', apiTokenMiddleware);
|
|
1562
|
+
// Which dashboard build is served: a still-open tab running an older
|
|
1563
|
+
// bundle can tell it should reload (#1010 review).
|
|
1564
|
+
this.dashboardEntry = this.config.headless ? null : loadDashboardEntry(path.join(findPackageRoot(__dirname), 'frontend/dist/index.html'));
|
|
1565
|
+
this.app.use('/api', dashboardBuildHeader(this.dashboardEntry));
|
|
1496
1566
|
// A skill's X-Agent-Session is checked against the agent PTY its process
|
|
1497
1567
|
// really runs under (X-Agent-Pid) and corrected when it names another
|
|
1498
1568
|
// agent — before the heartbeat and every controller read it.
|
|
1499
1569
|
this.app.use('/api', agentOriginMiddleware);
|
|
1570
|
+
// Who is calling, from credentials (#999, specs/2026-10-03-owner-auth.md):
|
|
1571
|
+
// agent badge, owner session (+ CSRF), owner API token (checked against
|
|
1572
|
+
// the process tree when it comes from this machine), relay credential.
|
|
1573
|
+
// A request with none of these is anonymous — never the owner.
|
|
1574
|
+
const peerProcesses = new PeerProcessService({ listSessionPids: liveSessionPids });
|
|
1575
|
+
this.app.use('/api', createCallerIdentityMiddleware(peerProcesses));
|
|
1500
1576
|
// Agent heartbeat middleware - any API call with X-Agent-Session header updates heartbeat
|
|
1501
1577
|
this.app.use('/api', agentHeartbeatMiddleware);
|
|
1578
|
+
// The dashboard's owner session + CSRF token (GET /api/auth/session).
|
|
1579
|
+
this.app.use('/api', createOwnerSessionRouter(peerProcesses));
|
|
1502
1580
|
// API routes
|
|
1503
1581
|
this.app.use('/api', createApiRoutes(this.apiController));
|
|
1504
1582
|
// Health check (enhanced with mode and agent info).
|
|
@@ -1609,6 +1687,8 @@ export class CrewlyServer {
|
|
|
1609
1687
|
// and in compiled/npm-installed mode (dist/backend/backend/src/)
|
|
1610
1688
|
const projectRoot = findPackageRoot(__dirname);
|
|
1611
1689
|
const frontendPath = path.join(projectRoot, 'frontend/dist');
|
|
1690
|
+
// A page load from the owner's browser gets the owner session cookie (#999).
|
|
1691
|
+
this.app.use(createOwnerSessionPageMiddleware(peerProcesses));
|
|
1612
1692
|
this.app.use(express.static(frontendPath));
|
|
1613
1693
|
// Serve frontend for all other routes (SPA)
|
|
1614
1694
|
// Skip /api/ and /health paths so addon-registered API routes are reachable
|
|
@@ -1649,6 +1729,9 @@ export class CrewlyServer {
|
|
|
1649
1729
|
configureWebSocket() {
|
|
1650
1730
|
this.io.on('connection', (socket) => {
|
|
1651
1731
|
this.logger.info('Client connected', { socketId: socket.id });
|
|
1732
|
+
// Tell the tab which dashboard build is served now (#1010 review).
|
|
1733
|
+
if (this.dashboardEntry)
|
|
1734
|
+
socket.emit(OWNER_AUTH_CONSTANTS.BUILD_EVENT, dashboardBuildMessage(this.dashboardEntry));
|
|
1652
1735
|
socket.on('disconnect', () => {
|
|
1653
1736
|
this.logger.info('Client disconnected', { socketId: socket.id });
|
|
1654
1737
|
});
|
|
@@ -1797,6 +1880,11 @@ export class CrewlyServer {
|
|
|
1797
1880
|
}
|
|
1798
1881
|
// Start activity monitoring
|
|
1799
1882
|
this.logger.info('Starting activity monitoring...');
|
|
1883
|
+
// Turn busy periods for the autonomy metrics (#984): one `turn.ended`
|
|
1884
|
+
// trace event per PTY turn, from the undelayed status listener.
|
|
1885
|
+
this.activityMonitorService.onWorkingStatusChange((session, status) => {
|
|
1886
|
+
traceTurnActivity(session, status === 'in_progress', 'pty');
|
|
1887
|
+
});
|
|
1800
1888
|
this.activityMonitorService.startPolling();
|
|
1801
1889
|
// Start idle detection for agent suspension
|
|
1802
1890
|
this.logger.info('Starting idle detection service...');
|
|
@@ -2034,6 +2122,8 @@ export class CrewlyServer {
|
|
|
2034
2122
|
const runtimeExitMonitor = RuntimeExitMonitorService.getInstance();
|
|
2035
2123
|
runtimeExitMonitor.setAgentRegistrationService(this.apiController.agentRegistrationService);
|
|
2036
2124
|
runtimeExitMonitor.setEventBusService(this.eventBusService);
|
|
2125
|
+
// #989: a runtime that keeps dying at start is told to the owner once.
|
|
2126
|
+
runtimeExitMonitor.setOwnerNotifier(slackOwnerAlertNotifier);
|
|
2037
2127
|
}
|
|
2038
2128
|
catch (error) {
|
|
2039
2129
|
this.logger.warn('Failed to wire RuntimeExitMonitorService dependencies (non-critical)', {
|
|
@@ -3014,14 +3104,15 @@ export class CrewlyServer {
|
|
|
3014
3104
|
const slack = getSlackService();
|
|
3015
3105
|
if (!slack.isConnected())
|
|
3016
3106
|
return false;
|
|
3017
|
-
|
|
3107
|
+
// Only a delivered notice counts: sendNotification resolves
|
|
3108
|
+
// false when there was no channel to send it to.
|
|
3109
|
+
return slack.sendNotification({
|
|
3018
3110
|
type: 'project_update',
|
|
3019
3111
|
title,
|
|
3020
3112
|
message,
|
|
3021
3113
|
urgency: urgent ? 'high' : 'normal',
|
|
3022
3114
|
timestamp: new Date().toISOString(),
|
|
3023
3115
|
});
|
|
3024
|
-
return true;
|
|
3025
3116
|
});
|
|
3026
3117
|
TicketAutopilotService.getInstance()?.stop();
|
|
3027
3118
|
TicketAutopilotService.setInstance(autopilot);
|
|
@@ -3034,6 +3125,16 @@ export class CrewlyServer {
|
|
|
3034
3125
|
else {
|
|
3035
3126
|
this.logger.info('Ticket autopilot off (CREWLY_TICKET_AUTOPILOT=0)');
|
|
3036
3127
|
}
|
|
3128
|
+
// The one owner card per retro that approves its harness-gap tickets
|
|
3129
|
+
// (specs/2026-10-03-autopilot-experiments.md §4). Registered even with
|
|
3130
|
+
// the autopilot switched off, so a card answered later still lands.
|
|
3131
|
+
{
|
|
3132
|
+
const { DecisionService: RetroDecisions } = await import('./services/decisions/decision.service.js');
|
|
3133
|
+
const { ticketAutopilot } = await import('./controllers/project-tickets/project-tickets.controller.js');
|
|
3134
|
+
RetroDecisions.registerKindHandler(TICKET_AUTOPILOT_CONSTANTS.RETRO_DECISION_KIND, {
|
|
3135
|
+
onSettled: (d) => ticketAutopilot().onRetroDecision(d),
|
|
3136
|
+
});
|
|
3137
|
+
}
|
|
3037
3138
|
// Experiment cards (specs/experiment-cards.md, issue #986): measure each
|
|
3038
3139
|
// shipped experiment at the end of its window, label it, log it to the
|
|
3039
3140
|
// wiki and tell the owner. Kill switch: CREWLY_EXPERIMENTS=0.
|
|
@@ -3045,14 +3146,15 @@ export class CrewlyServer {
|
|
|
3045
3146
|
const slack = getSlackService();
|
|
3046
3147
|
if (!slack.isConnected())
|
|
3047
3148
|
return false;
|
|
3048
|
-
|
|
3149
|
+
// Only a delivered notice counts: sendNotification resolves
|
|
3150
|
+
// false when there was no channel to send it to.
|
|
3151
|
+
return slack.sendNotification({
|
|
3049
3152
|
type: 'project_update',
|
|
3050
3153
|
title,
|
|
3051
3154
|
message,
|
|
3052
3155
|
urgency: urgent ? 'high' : 'normal',
|
|
3053
3156
|
timestamp: new Date().toISOString(),
|
|
3054
3157
|
});
|
|
3055
|
-
return true;
|
|
3056
3158
|
});
|
|
3057
3159
|
ExperimentService.getInstance()?.stop();
|
|
3058
3160
|
ExperimentService.setInstance(experiments);
|
|
@@ -3137,7 +3239,10 @@ export class CrewlyServer {
|
|
|
3137
3239
|
// Start NOTIFY reconciliation service (retries failed Slack deliveries)
|
|
3138
3240
|
this.notifyReconciliationService = new NotifyReconciliationService();
|
|
3139
3241
|
this.notifyReconciliationService.start();
|
|
3140
|
-
// Start system resource alert monitoring (proactive disk/memory/CPU alerts)
|
|
3242
|
+
// Start system resource alert monitoring (proactive disk/memory/CPU alerts).
|
|
3243
|
+
// Critical disk/memory alerts and auto-stopped agents also reach the
|
|
3244
|
+
// owner over Slack (#991), through the same path as the low-disk notice.
|
|
3245
|
+
this.systemResourceAlertService.setOwnerNotifier(slackOwnerAlertNotifier);
|
|
3141
3246
|
this.systemResourceAlertService.startMonitoring();
|
|
3142
3247
|
// Fire-and-forget background version check (populates cache for /health)
|
|
3143
3248
|
VersionCheckService.getInstance().checkForUpdate().catch(() => {
|
|
@@ -3372,19 +3477,7 @@ export class CrewlyServer {
|
|
|
3372
3477
|
// the usual Slack owner-notification path. Kill switch:
|
|
3373
3478
|
// CREWLY_WORKTREE_JANITOR=0.
|
|
3374
3479
|
try {
|
|
3375
|
-
WorktreeJanitorService.getInstance().setLowDiskNotifier(
|
|
3376
|
-
const slack = getSlackService();
|
|
3377
|
-
if (!slack.isConnected())
|
|
3378
|
-
return false;
|
|
3379
|
-
await slack.sendNotification({
|
|
3380
|
-
type: 'alert',
|
|
3381
|
-
title,
|
|
3382
|
-
message,
|
|
3383
|
-
urgency: urgent ? 'critical' : 'normal',
|
|
3384
|
-
timestamp: new Date().toISOString(),
|
|
3385
|
-
});
|
|
3386
|
-
return true;
|
|
3387
|
-
});
|
|
3480
|
+
WorktreeJanitorService.getInstance().setLowDiskNotifier(slackOwnerAlertNotifier);
|
|
3388
3481
|
if (WorktreeJanitorService.getInstance().start()) {
|
|
3389
3482
|
this.logger.info('WorktreeJanitorService scheduled');
|
|
3390
3483
|
}
|
|
@@ -3848,11 +3941,17 @@ export class CrewlyServer {
|
|
|
3848
3941
|
const allItems = await TaskPoolService.getInstance().getAllItems();
|
|
3849
3942
|
// Work in hand only: active statuses, touched recently (see restore-filter),
|
|
3850
3943
|
// plus agents whose turn the last restart cut off.
|
|
3944
|
+
const owed = await this.loadOwedWorkAtBoot();
|
|
3851
3945
|
targets = sessionsToRestore(allItems, [
|
|
3852
3946
|
...this.interruptedTurnsAtBoot.map((t) => t.sessionName),
|
|
3853
3947
|
// Agents with messages still waiting for them (restored from
|
|
3854
3948
|
// disk by the queue) — someone is owed an answer.
|
|
3855
3949
|
...SubAgentMessageQueue.getInstance().sessionsWithPending(),
|
|
3950
|
+
// Agents whose owner promise is past due and was never
|
|
3951
|
+
// nudged: idle or not, they come back to be reminded once
|
|
3952
|
+
// (2026-10-02, Eve). Not-yet-due and already-nudged
|
|
3953
|
+
// promises are left to the open-items sweep.
|
|
3954
|
+
...owed.map((c) => c.sessionName),
|
|
3856
3955
|
]);
|
|
3857
3956
|
}
|
|
3858
3957
|
catch (poolErr) {
|
|
@@ -4018,6 +4117,14 @@ export class CrewlyServer {
|
|
|
4018
4117
|
*/
|
|
4019
4118
|
logNetworkExposure() {
|
|
4020
4119
|
try {
|
|
4120
|
+
// A token pinned in the service environment is mirrored to the token
|
|
4121
|
+
// file, so the CLI on this machine can present it (#1010 review).
|
|
4122
|
+
const mirrored = mirrorEnvTokenToFile();
|
|
4123
|
+
if (mirrored === 'written' || mirrored === 'updated' || mirrored === 'failed') {
|
|
4124
|
+
this.logger[mirrored === 'failed' ? 'warn' : 'info'](`API token from ${API_SECURITY_CONSTANTS.ENV.API_TOKEN}: token file ${mirrored}`, {
|
|
4125
|
+
file: getApiTokenFilePath(),
|
|
4126
|
+
});
|
|
4127
|
+
}
|
|
4021
4128
|
const token = resolveApiToken();
|
|
4022
4129
|
const summary = describeNetworkExposure({
|
|
4023
4130
|
bindHost: this.config.bindHost,
|
|
@@ -4207,6 +4314,32 @@ export class CrewlyServer {
|
|
|
4207
4314
|
}
|
|
4208
4315
|
this.logger.info(`Received ${signal} while shutdown is already past the drain; continuing`);
|
|
4209
4316
|
}
|
|
4317
|
+
/**
|
|
4318
|
+
* End-of-turn settling: take down "working on it" placeholders the agent
|
|
4319
|
+
* never answered, settle its open DM threads, and submit the tickets it
|
|
4320
|
+
* replied in. Never throws.
|
|
4321
|
+
*
|
|
4322
|
+
* @param sessionName - Agent whose turn ended
|
|
4323
|
+
*/
|
|
4324
|
+
settleAfterTurn(sessionName) {
|
|
4325
|
+
// The turn ended: a "working on it" it never answered means it chose
|
|
4326
|
+
// not to reply (an "ok", "好"). Take it down rather than leave a
|
|
4327
|
+
// "still working — the reply will follow" that never follows.
|
|
4328
|
+
void getSlackTypingPlaceholderService()
|
|
4329
|
+
?.settleTurnWithoutReply(sessionName)
|
|
4330
|
+
.catch(() => undefined);
|
|
4331
|
+
// Same rule for the DM threads it was owed an answer in: one it
|
|
4332
|
+
// chose not to answer must not pull a later unattributed answer
|
|
4333
|
+
// back into it (2026-09-28).
|
|
4334
|
+
void getSlackAgentDmService()
|
|
4335
|
+
?.settleOpenThreads(sessionName)
|
|
4336
|
+
.catch(() => undefined);
|
|
4337
|
+
// Ticket loop Phase 2: an agent that finished its turn has answered
|
|
4338
|
+
// the tickets it replied in — submit them (待验收 or done).
|
|
4339
|
+
void getTicketReviewService()
|
|
4340
|
+
?.onAgentIdle(sessionName)
|
|
4341
|
+
.catch(() => undefined);
|
|
4342
|
+
}
|
|
4210
4343
|
/**
|
|
4211
4344
|
* Wire the safe-restart pieces: the turn probe, idle-event re-probing,
|
|
4212
4345
|
* readiness queue counting, and the graceful-shutdown hook used by
|
|
@@ -4215,11 +4348,68 @@ export class CrewlyServer {
|
|
|
4215
4348
|
wireSafeRestart() {
|
|
4216
4349
|
const tracker = InFlightTurnTracker.getInstance();
|
|
4217
4350
|
const activity = PtyActivityTrackerService.getInstance();
|
|
4351
|
+
const turnState = AgentTurnStateService.getInstance();
|
|
4352
|
+
const persistence = getSessionStatePersistence();
|
|
4353
|
+
const metaOf = (sessionName) => {
|
|
4354
|
+
try {
|
|
4355
|
+
return persistence.getSessionMetadata(sessionName);
|
|
4356
|
+
}
|
|
4357
|
+
catch {
|
|
4358
|
+
return undefined;
|
|
4359
|
+
}
|
|
4360
|
+
};
|
|
4361
|
+
// The runtime's own turn state (specs/2026-10-02-restart-busy-and-resume.md):
|
|
4362
|
+
// Claude Code transcripts as the fallback behind its hooks.
|
|
4363
|
+
turnState.setTranscriptLocator((sessionName) => {
|
|
4364
|
+
const meta = metaOf(sessionName);
|
|
4365
|
+
if (!meta || meta.runtimeType !== RUNTIME_TYPES.CLAUDE_CODE || !meta.claudeSessionId || !meta.cwd)
|
|
4366
|
+
return null;
|
|
4367
|
+
const homes = [meta.env?.CLAUDE_CONFIG_DIR, defaultClaudeHome()].filter((h) => typeof h === 'string' && h.length > 0);
|
|
4368
|
+
return findClaudeTranscript({ sessionId: meta.claudeSessionId, cwd: meta.cwd, claudeHomes: homes });
|
|
4369
|
+
});
|
|
4218
4370
|
tracker.setProbe(createPtyTurnProbe({
|
|
4219
4371
|
getBackend: () => getSessionBackendSync(),
|
|
4220
4372
|
getIdleTimeMs: (sessionName) => (activity.hasActivity(sessionName) ? activity.getIdleTimeMs(sessionName) : null),
|
|
4373
|
+
getRuntimeVerdict: (sessionName) => turnState.getVerdict(sessionName),
|
|
4374
|
+
getLastHookEventAt: (sessionName) => turnState.lastHookEventAt(sessionName),
|
|
4375
|
+
getRuntimeType: (sessionName) => metaOf(sessionName)?.runtimeType ?? null,
|
|
4221
4376
|
}));
|
|
4377
|
+
// Turns no delivery started (a background subagent finishing) and
|
|
4378
|
+
// background work after a turn count as mid-turn too (2026-10-02, Eve).
|
|
4379
|
+
tracker.setRuntimeBusySource((now) => {
|
|
4380
|
+
const backend = getSessionBackendSync();
|
|
4381
|
+
const out = [];
|
|
4382
|
+
for (const sessionName of turnState.knownSessions()) {
|
|
4383
|
+
if (!backend?.sessionExists(sessionName))
|
|
4384
|
+
continue;
|
|
4385
|
+
// An exited runtime is not working, whatever its last hook said.
|
|
4386
|
+
if (backend.isChildProcessAlive?.(sessionName) === false) {
|
|
4387
|
+
turnState.forget(sessionName);
|
|
4388
|
+
continue;
|
|
4389
|
+
}
|
|
4390
|
+
const v = turnState.getVerdict(sessionName, now);
|
|
4391
|
+
if (v.state === 'turn' || v.state === 'background')
|
|
4392
|
+
out.push({ sessionName, since: v.since, longRunning: v.longRunning });
|
|
4393
|
+
}
|
|
4394
|
+
return out;
|
|
4395
|
+
});
|
|
4222
4396
|
tracker.attachEventSource(this.eventBusService);
|
|
4397
|
+
// Under systemd, TimeoutStopSec decides when we are SIGKILLed: the drain
|
|
4398
|
+
// must end before it, or the interrupted turns are never saved.
|
|
4399
|
+
this.supervisorStopBudgetMs = resolveSupervisorStopBudgetMs();
|
|
4400
|
+
if (this.supervisorStopBudgetMs !== null) {
|
|
4401
|
+
const wanted = resolveBackgroundDrainMs(process.env);
|
|
4402
|
+
const capped = capDrainToSupervisor(wanted, this.supervisorStopBudgetMs, SAFE_RESTART.SHUTDOWN_MARGIN_MS);
|
|
4403
|
+
const log = capped < wanted ? this.logger.warn.bind(this.logger) : this.logger.info.bind(this.logger);
|
|
4404
|
+
log('Restart drain capped by the systemd stop timeout', {
|
|
4405
|
+
timeoutStopMs: this.supervisorStopBudgetMs,
|
|
4406
|
+
drainCapMs: capped,
|
|
4407
|
+
wantedMs: wanted,
|
|
4408
|
+
...(capped < wanted ? { fix: 'run "crewly service upgrade" (or "crewly service install --force") to regenerate the unit' } : {}),
|
|
4409
|
+
});
|
|
4410
|
+
}
|
|
4411
|
+
// A silent screen is not idle while the runtime reports a turn.
|
|
4412
|
+
this.activityMonitorService.setRuntimeTurnCheck((sessionName) => turnState.getVerdict(sessionName).state === 'turn');
|
|
4223
4413
|
const drain = RestartDrainService.getInstance();
|
|
4224
4414
|
drain.setQueueCounter(() => this.messageQueueService.pendingCount + SubAgentMessageQueue.getInstance().getTotalQueued());
|
|
4225
4415
|
drain.setShutdownHandler((request) => this.shutdown({ reason: request.reason, exitCode: request.exitCode }));
|
|
@@ -4554,6 +4744,85 @@ export class CrewlyServer {
|
|
|
4554
4744
|
});
|
|
4555
4745
|
}
|
|
4556
4746
|
}
|
|
4747
|
+
/**
|
|
4748
|
+
* Owner promises and owed answers left by the previous run. Their agents
|
|
4749
|
+
* are restored on boot even when idle (specs/2026-10-02-restart-busy-and-resume.md).
|
|
4750
|
+
* Never throws.
|
|
4751
|
+
*
|
|
4752
|
+
* @returns Open commitments and the agents owing an answer
|
|
4753
|
+
*/
|
|
4754
|
+
async loadOwedWorkAtBoot() {
|
|
4755
|
+
let commitments = [];
|
|
4756
|
+
try {
|
|
4757
|
+
const { owedCommitments } = await import('./services/open-items/open-items.service.js');
|
|
4758
|
+
commitments = owedCommitments(await RequestService.getInstance().listAll(), new Date());
|
|
4759
|
+
}
|
|
4760
|
+
catch (error) {
|
|
4761
|
+
this.logger.warn('Could not read open owner promises at boot (non-fatal)', {
|
|
4762
|
+
error: error instanceof Error ? error.message : String(error),
|
|
4763
|
+
});
|
|
4764
|
+
}
|
|
4765
|
+
this.openCommitmentsAtBoot = commitments;
|
|
4766
|
+
if (commitments.length > 0) {
|
|
4767
|
+
this.logger.info('Owner promises past due and never nudged; their agents will be restored and reminded once', {
|
|
4768
|
+
commitments: commitments.map((c) => ({ session: c.sessionName, ticket: c.ticket, due: c.due })),
|
|
4769
|
+
});
|
|
4770
|
+
}
|
|
4771
|
+
return commitments;
|
|
4772
|
+
}
|
|
4773
|
+
/**
|
|
4774
|
+
* Remind restored agents of the owner promises they still owe, once each,
|
|
4775
|
+
* skipping agents that already get an interrupted-turn note.
|
|
4776
|
+
*
|
|
4777
|
+
* @param interrupted - The interrupted entries being resumed
|
|
4778
|
+
*/
|
|
4779
|
+
async remindOpenCommitmentsAfterBoot(interrupted) {
|
|
4780
|
+
const commitments = this.openCommitmentsAtBoot;
|
|
4781
|
+
this.openCommitmentsAtBoot = [];
|
|
4782
|
+
if (commitments.length === 0)
|
|
4783
|
+
return;
|
|
4784
|
+
const registration = this.apiController.agentRegistrationService;
|
|
4785
|
+
const isRunning = (name) => Boolean(getSessionBackendSync()?.sessionExists(name)) || Boolean(registration.getInProcessRuntime(name));
|
|
4786
|
+
// One reminder per promise, ever: recorded (as the nudge) before it is
|
|
4787
|
+
// sent, so neither the next boot nor the sweep sends another.
|
|
4788
|
+
const { markRestartReminded, OpenItemsService } = await import('./services/open-items/open-items.service.js');
|
|
4789
|
+
// Through the service's queue when it runs: the sweep may be nudging the same promise.
|
|
4790
|
+
const openItems = OpenItemsService.getInstance();
|
|
4791
|
+
const markReminded = (requestId, itemId) => openItems ? openItems.markRestartReminded(requestId, itemId) : markRestartReminded(RequestService.getInstance(), requestId, itemId);
|
|
4792
|
+
const covered = new Set(interrupted.map((e) => e.sessionName));
|
|
4793
|
+
const marked = [];
|
|
4794
|
+
for (const c of commitments) {
|
|
4795
|
+
if (covered.has(c.sessionName) || !isRunning(c.sessionName))
|
|
4796
|
+
continue;
|
|
4797
|
+
try {
|
|
4798
|
+
if (await markReminded(c.requestId, c.itemId))
|
|
4799
|
+
marked.push(c);
|
|
4800
|
+
}
|
|
4801
|
+
catch (error) {
|
|
4802
|
+
this.logger.warn('Could not record a restart reminder; not sending it', {
|
|
4803
|
+
sessionName: c.sessionName,
|
|
4804
|
+
error: error instanceof Error ? error.message : String(error),
|
|
4805
|
+
});
|
|
4806
|
+
}
|
|
4807
|
+
}
|
|
4808
|
+
const notes = planCommitmentNotes(marked, interrupted, isRunning);
|
|
4809
|
+
for (const note of notes) {
|
|
4810
|
+
try {
|
|
4811
|
+
const result = await registration.sendMessageToAgent(note.sessionName, note.text);
|
|
4812
|
+
this.logger.info('Reminded a restored agent of the owner promise it still owes', {
|
|
4813
|
+
sessionName: note.sessionName,
|
|
4814
|
+
delivered: result.success,
|
|
4815
|
+
queuedUntilRegistered: result.queued === true,
|
|
4816
|
+
});
|
|
4817
|
+
}
|
|
4818
|
+
catch (error) {
|
|
4819
|
+
this.logger.warn('Could not remind a restored agent of its owner promise', {
|
|
4820
|
+
sessionName: note.sessionName,
|
|
4821
|
+
error: error instanceof Error ? error.message : String(error),
|
|
4822
|
+
});
|
|
4823
|
+
}
|
|
4824
|
+
}
|
|
4825
|
+
}
|
|
4557
4826
|
/**
|
|
4558
4827
|
* Re-deliver the turns the previous shutdown cut off, then clear the file.
|
|
4559
4828
|
* The file is rewritten after each entry so a restart during this pass
|
|
@@ -4561,6 +4830,7 @@ export class CrewlyServer {
|
|
|
4561
4830
|
*/
|
|
4562
4831
|
async resumeInterruptedTurnsAfterBoot() {
|
|
4563
4832
|
const entries = this.interruptedTurnsAtBoot;
|
|
4833
|
+
await this.remindOpenCommitmentsAfterBoot(entries);
|
|
4564
4834
|
if (entries.length === 0)
|
|
4565
4835
|
return;
|
|
4566
4836
|
this.interruptedTurnsAtBoot = [];
|
|
@@ -4615,8 +4885,11 @@ export class CrewlyServer {
|
|
|
4615
4885
|
try {
|
|
4616
4886
|
const drain = RestartDrainService.getInstance();
|
|
4617
4887
|
drain.pauseDelivery(reason);
|
|
4618
|
-
const
|
|
4619
|
-
const
|
|
4888
|
+
const budget = this.supervisorStopBudgetMs;
|
|
4889
|
+
const margin = SAFE_RESTART.SHUTDOWN_MARGIN_MS;
|
|
4890
|
+
const timeoutMs = drainEnabled ? capDrainToSupervisor(resolveRestartDrainMs(process.env), budget, margin) : 0;
|
|
4891
|
+
const backgroundTimeoutMs = drainEnabled ? capDrainToSupervisor(resolveBackgroundDrainMs(process.env), budget, margin) : 0;
|
|
4892
|
+
const result = await drain.drain({ timeoutMs, backgroundTimeoutMs });
|
|
4620
4893
|
if (result.remaining.length > 0) {
|
|
4621
4894
|
const saved = saveInterruptedTurns(interruptedTurnsPath(this.config.crewlyHome), result.remaining, `${reason}: ${result.outcome}`);
|
|
4622
4895
|
this.logger.warn('Persisted interrupted agent turns for resume after restart', {
|
|
@@ -4834,24 +5107,25 @@ export class CrewlyServer {
|
|
|
4834
5107
|
const { createDecisionService, attachDecisionSlackListeners, attachSkipAllCommand } = await import('./services/decisions/decision.wiring.js');
|
|
4835
5108
|
const { DecisionService } = await import('./services/decisions/decision.service.js');
|
|
4836
5109
|
const RUNNING = new Set(['running', 'accepted', 'proposed']);
|
|
5110
|
+
const sendToAgent = async (session, text) => {
|
|
5111
|
+
let exists = false;
|
|
5112
|
+
try {
|
|
5113
|
+
exists = getSessionBackendSync()?.sessionExists(session) ?? false;
|
|
5114
|
+
}
|
|
5115
|
+
catch {
|
|
5116
|
+
exists = false;
|
|
5117
|
+
}
|
|
5118
|
+
if (!exists) {
|
|
5119
|
+
const { activateAgentBySession } = await import('./controllers/team/team.controller.js');
|
|
5120
|
+
await activateAgentBySession(this.apiController, session).catch(() => undefined);
|
|
5121
|
+
}
|
|
5122
|
+
const result = await this.apiController.agentRegistrationService.sendMessageToAgent(session, text);
|
|
5123
|
+
return result.success;
|
|
5124
|
+
};
|
|
4837
5125
|
const decisions = createDecisionService({
|
|
4838
5126
|
crewlyHome: this.config.crewlyHome,
|
|
4839
5127
|
getTeams: () => this.storageService.getTeams(),
|
|
4840
|
-
sendToAgent
|
|
4841
|
-
let exists = false;
|
|
4842
|
-
try {
|
|
4843
|
-
exists = getSessionBackendSync()?.sessionExists(session) ?? false;
|
|
4844
|
-
}
|
|
4845
|
-
catch {
|
|
4846
|
-
exists = false;
|
|
4847
|
-
}
|
|
4848
|
-
if (!exists) {
|
|
4849
|
-
const { activateAgentBySession } = await import('./controllers/team/team.controller.js');
|
|
4850
|
-
await activateAgentBySession(this.apiController, session).catch(() => undefined);
|
|
4851
|
-
}
|
|
4852
|
-
const result = await this.apiController.agentRegistrationService.sendMessageToAgent(session, text);
|
|
4853
|
-
return result.success;
|
|
4854
|
-
},
|
|
5128
|
+
sendToAgent,
|
|
4855
5129
|
sendToOrchestrator: async (text) => {
|
|
4856
5130
|
this.messageQueueService.enqueue({ content: text, conversationId: 'system', source: 'system_event' });
|
|
4857
5131
|
return true;
|
|
@@ -4880,6 +5154,13 @@ export class CrewlyServer {
|
|
|
4880
5154
|
await attachSkipAllCommand(decisions).catch((err) => this.logger.warn('Skip-all command not wired (non-critical)', { error: err instanceof Error ? err.message : String(err) }));
|
|
4881
5155
|
decisions.start();
|
|
4882
5156
|
this.logger.info('Decision cards started');
|
|
5157
|
+
// Daily signal digest (#987, specs/2026-10-03-signal-digest.md): Do / Skip
|
|
5158
|
+
// per action on one card; Do opens an experiment ticket.
|
|
5159
|
+
const { createSignalDigestService, attachSignalDigestSlackListeners } = await import('./services/signal-digest/signal-digest.wiring.js');
|
|
5160
|
+
const { SignalDigestService } = await import('./services/signal-digest/signal-digest.service.js');
|
|
5161
|
+
const signalDigests = createSignalDigestService({ crewlyHome: this.config.crewlyHome, getTeams: () => this.storageService.getTeams(), sendToAgent });
|
|
5162
|
+
SignalDigestService.setInstance(signalDigests);
|
|
5163
|
+
attachSignalDigestSlackListeners(signalDigests);
|
|
4883
5164
|
// Runtime Terms consent (specs/2026-10-01-runtime-terms-consent.md): the
|
|
4884
5165
|
// owner agrees to a runtime's first-run Terms from a Slack card.
|
|
4885
5166
|
const { startRuntimeTerms } = await import('./services/runtime-terms/runtime-terms.wiring.js');
|