crewly 1.20.195 → 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/orchestrator/fragments/lifecycle.md +1 -1
- package/config/roles/orchestrator/prompt.md +3 -3
- package/config/skills/_common/lib.sh +28 -5
- package/config/skills/_common/lib.test.sh +32 -1
- 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 +29 -1
- package/config/skills/agent/core/experiment-card/execute.sh +35 -1
- package/config/skills/agent/core/experiment-card/execute.test.sh +11 -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/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 +10 -2
- package/config/skills/orchestrator/send-message/execute.test.sh +9 -0
- package/config/skills/team-leader/design-checklist/execute.sh +2 -0
- package/dist/backend/backend/src/constants.d.ts +223 -5
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +206 -6
- 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 +10 -1
- package/dist/backend/backend/src/controllers/chat/chat.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/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/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/signal-digest/signal-digest.controller.js +1 -1
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js.map +1 -1
- 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 +30 -4
- package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/trace/trace.controller.js +278 -10
- package/dist/backend/backend/src/controllers/trace/trace.controller.js.map +1 -1
- 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 +313 -42
- 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/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +12 -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/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/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/chat/chat.service.d.ts +99 -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 +265 -40
- 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/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/experiments/experiment.service.d.ts +97 -1
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.service.js +372 -1
- package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js +19 -2
- package/dist/backend/backend/src/services/experiments/experiment.wiring.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/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/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 +42 -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/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/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-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 +18 -0
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +32 -0
- package/dist/backend/backend/src/services/slack/slack.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 +17 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-context.service.js +58 -1
- package/dist/backend/backend/src/services/trace/trace-context.service.js.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts +4 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-http.middleware.js +32 -2
- package/dist/backend/backend/src/services/trace/trace-http.middleware.js.map +1 -1
- 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 +48 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.d.ts.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-recorder.js +121 -1
- package/dist/backend/backend/src/services/trace/trace-recorder.js.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-store.d.ts +40 -1
- package/dist/backend/backend/src/services/trace/trace-store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-store.js +126 -14
- package/dist/backend/backend/src/services/trace/trace-store.js.map +1 -1
- 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 +22 -3
- package/dist/backend/backend/src/services/trace/trace.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/trace/trace.types.js +20 -1
- package/dist/backend/backend/src/services/trace/trace.types.js.map +1 -1
- 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.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/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 +24 -2
- 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/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 +57 -0
- 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/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/work-item.types.d.ts +1 -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 +1 -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/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 +223 -5
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +206 -6
- 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 +12 -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/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/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/chat/chat.service.d.ts +99 -2
- package/dist/cli/backend/src/services/chat/chat.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat/chat.service.js +265 -40
- package/dist/cli/backend/src/services/chat/chat.service.js.map +1 -1
- 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/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/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/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 +42 -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/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-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 +18 -0
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.js +32 -0
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/cli/backend/src/services/trace/trace-context.service.d.ts +17 -0
- package/dist/cli/backend/src/services/trace/trace-context.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/trace/trace-context.service.js +58 -1
- package/dist/cli/backend/src/services/trace/trace-context.service.js.map +1 -1
- package/dist/cli/backend/src/services/trace/trace-recorder.d.ts +48 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.d.ts.map +1 -1
- package/dist/cli/backend/src/services/trace/trace-recorder.js +121 -1
- package/dist/cli/backend/src/services/trace/trace-recorder.js.map +1 -1
- package/dist/cli/backend/src/services/trace/trace-store.d.ts +40 -1
- package/dist/cli/backend/src/services/trace/trace-store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/trace/trace-store.js +126 -14
- package/dist/cli/backend/src/services/trace/trace-store.js.map +1 -1
- package/dist/cli/backend/src/services/trace/trace.types.d.ts +22 -3
- package/dist/cli/backend/src/services/trace/trace.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/trace/trace.types.js +20 -1
- package/dist/cli/backend/src/services/trace/trace.types.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/work-item.types.d.ts +1 -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 +1 -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/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)', {
|
|
@@ -3035,6 +3125,16 @@ export class CrewlyServer {
|
|
|
3035
3125
|
else {
|
|
3036
3126
|
this.logger.info('Ticket autopilot off (CREWLY_TICKET_AUTOPILOT=0)');
|
|
3037
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
|
+
}
|
|
3038
3138
|
// Experiment cards (specs/experiment-cards.md, issue #986): measure each
|
|
3039
3139
|
// shipped experiment at the end of its window, label it, log it to the
|
|
3040
3140
|
// wiki and tell the owner. Kill switch: CREWLY_EXPERIMENTS=0.
|
|
@@ -3139,7 +3239,10 @@ export class CrewlyServer {
|
|
|
3139
3239
|
// Start NOTIFY reconciliation service (retries failed Slack deliveries)
|
|
3140
3240
|
this.notifyReconciliationService = new NotifyReconciliationService();
|
|
3141
3241
|
this.notifyReconciliationService.start();
|
|
3142
|
-
// 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);
|
|
3143
3246
|
this.systemResourceAlertService.startMonitoring();
|
|
3144
3247
|
// Fire-and-forget background version check (populates cache for /health)
|
|
3145
3248
|
VersionCheckService.getInstance().checkForUpdate().catch(() => {
|
|
@@ -3374,19 +3477,7 @@ export class CrewlyServer {
|
|
|
3374
3477
|
// the usual Slack owner-notification path. Kill switch:
|
|
3375
3478
|
// CREWLY_WORKTREE_JANITOR=0.
|
|
3376
3479
|
try {
|
|
3377
|
-
WorktreeJanitorService.getInstance().setLowDiskNotifier(
|
|
3378
|
-
const slack = getSlackService();
|
|
3379
|
-
if (!slack.isConnected())
|
|
3380
|
-
return false;
|
|
3381
|
-
await slack.sendNotification({
|
|
3382
|
-
type: 'alert',
|
|
3383
|
-
title,
|
|
3384
|
-
message,
|
|
3385
|
-
urgency: urgent ? 'critical' : 'normal',
|
|
3386
|
-
timestamp: new Date().toISOString(),
|
|
3387
|
-
});
|
|
3388
|
-
return true;
|
|
3389
|
-
});
|
|
3480
|
+
WorktreeJanitorService.getInstance().setLowDiskNotifier(slackOwnerAlertNotifier);
|
|
3390
3481
|
if (WorktreeJanitorService.getInstance().start()) {
|
|
3391
3482
|
this.logger.info('WorktreeJanitorService scheduled');
|
|
3392
3483
|
}
|
|
@@ -3850,11 +3941,17 @@ export class CrewlyServer {
|
|
|
3850
3941
|
const allItems = await TaskPoolService.getInstance().getAllItems();
|
|
3851
3942
|
// Work in hand only: active statuses, touched recently (see restore-filter),
|
|
3852
3943
|
// plus agents whose turn the last restart cut off.
|
|
3944
|
+
const owed = await this.loadOwedWorkAtBoot();
|
|
3853
3945
|
targets = sessionsToRestore(allItems, [
|
|
3854
3946
|
...this.interruptedTurnsAtBoot.map((t) => t.sessionName),
|
|
3855
3947
|
// Agents with messages still waiting for them (restored from
|
|
3856
3948
|
// disk by the queue) — someone is owed an answer.
|
|
3857
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),
|
|
3858
3955
|
]);
|
|
3859
3956
|
}
|
|
3860
3957
|
catch (poolErr) {
|
|
@@ -4020,6 +4117,14 @@ export class CrewlyServer {
|
|
|
4020
4117
|
*/
|
|
4021
4118
|
logNetworkExposure() {
|
|
4022
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
|
+
}
|
|
4023
4128
|
const token = resolveApiToken();
|
|
4024
4129
|
const summary = describeNetworkExposure({
|
|
4025
4130
|
bindHost: this.config.bindHost,
|
|
@@ -4209,6 +4314,32 @@ export class CrewlyServer {
|
|
|
4209
4314
|
}
|
|
4210
4315
|
this.logger.info(`Received ${signal} while shutdown is already past the drain; continuing`);
|
|
4211
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
|
+
}
|
|
4212
4343
|
/**
|
|
4213
4344
|
* Wire the safe-restart pieces: the turn probe, idle-event re-probing,
|
|
4214
4345
|
* readiness queue counting, and the graceful-shutdown hook used by
|
|
@@ -4217,11 +4348,68 @@ export class CrewlyServer {
|
|
|
4217
4348
|
wireSafeRestart() {
|
|
4218
4349
|
const tracker = InFlightTurnTracker.getInstance();
|
|
4219
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
|
+
});
|
|
4220
4370
|
tracker.setProbe(createPtyTurnProbe({
|
|
4221
4371
|
getBackend: () => getSessionBackendSync(),
|
|
4222
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,
|
|
4223
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
|
+
});
|
|
4224
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');
|
|
4225
4413
|
const drain = RestartDrainService.getInstance();
|
|
4226
4414
|
drain.setQueueCounter(() => this.messageQueueService.pendingCount + SubAgentMessageQueue.getInstance().getTotalQueued());
|
|
4227
4415
|
drain.setShutdownHandler((request) => this.shutdown({ reason: request.reason, exitCode: request.exitCode }));
|
|
@@ -4556,6 +4744,85 @@ export class CrewlyServer {
|
|
|
4556
4744
|
});
|
|
4557
4745
|
}
|
|
4558
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
|
+
}
|
|
4559
4826
|
/**
|
|
4560
4827
|
* Re-deliver the turns the previous shutdown cut off, then clear the file.
|
|
4561
4828
|
* The file is rewritten after each entry so a restart during this pass
|
|
@@ -4563,6 +4830,7 @@ export class CrewlyServer {
|
|
|
4563
4830
|
*/
|
|
4564
4831
|
async resumeInterruptedTurnsAfterBoot() {
|
|
4565
4832
|
const entries = this.interruptedTurnsAtBoot;
|
|
4833
|
+
await this.remindOpenCommitmentsAfterBoot(entries);
|
|
4566
4834
|
if (entries.length === 0)
|
|
4567
4835
|
return;
|
|
4568
4836
|
this.interruptedTurnsAtBoot = [];
|
|
@@ -4617,8 +4885,11 @@ export class CrewlyServer {
|
|
|
4617
4885
|
try {
|
|
4618
4886
|
const drain = RestartDrainService.getInstance();
|
|
4619
4887
|
drain.pauseDelivery(reason);
|
|
4620
|
-
const
|
|
4621
|
-
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 });
|
|
4622
4893
|
if (result.remaining.length > 0) {
|
|
4623
4894
|
const saved = saveInterruptedTurns(interruptedTurnsPath(this.config.crewlyHome), result.remaining, `${reason}: ${result.outcome}`);
|
|
4624
4895
|
this.logger.warn('Persisted interrupted agent turns for resume after restart', {
|