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
package/config/constants.ts
CHANGED
|
@@ -202,6 +202,14 @@ export const SAFE_RESTART_CONSTANTS = {
|
|
|
202
202
|
DRAIN_TIMEOUT_MS: 120_000,
|
|
203
203
|
/** Env var overriding DRAIN_TIMEOUT_MS; `0` disables the wait */
|
|
204
204
|
DRAIN_ENV_VAR: 'CREWLY_RESTART_DRAIN_MS',
|
|
205
|
+
/**
|
|
206
|
+
* Hard cap on the drain while an agent it waits on has a tool call or a
|
|
207
|
+
* subagent / background task still running (ms). Such work routinely
|
|
208
|
+
* outlasts DRAIN_TIMEOUT_MS (2026-10-02, Eve).
|
|
209
|
+
*/
|
|
210
|
+
BACKGROUND_DRAIN_TIMEOUT_MS: 600_000,
|
|
211
|
+
/** Env var overriding BACKGROUND_DRAIN_TIMEOUT_MS */
|
|
212
|
+
BACKGROUND_DRAIN_ENV_VAR: 'CREWLY_RESTART_DRAIN_BACKGROUND_MS',
|
|
205
213
|
/**
|
|
206
214
|
* Time allowed after the drain for the rest of the shutdown (session state
|
|
207
215
|
* save, PTY teardown, queue flush) before a supervisor may SIGKILL (ms).
|
|
@@ -358,6 +366,66 @@ export const API_SECURITY_CONSTANTS = {
|
|
|
358
366
|
LOOPBACK_ADDRESSES: ['127.0.0.1', '::1', '::ffff:127.0.0.1'],
|
|
359
367
|
} as const;
|
|
360
368
|
|
|
369
|
+
/**
|
|
370
|
+
* Owner authentication (#999, specs/2026-10-03-owner-auth.md).
|
|
371
|
+
*
|
|
372
|
+
* Who a caller is comes from credentials, never from a missing header:
|
|
373
|
+
* - agents carry a per-session **agent badge** minted by the harness at launch;
|
|
374
|
+
* - the dashboard holds an owner session cookie plus a CSRF token;
|
|
375
|
+
* - the phone / portal relay and Cloud-forwarded Slack envelopes carry an
|
|
376
|
+
* in-memory internal credential;
|
|
377
|
+
* - remote dashboards, the phone on the LAN and the CLI present the owner API token.
|
|
378
|
+
*/
|
|
379
|
+
export const OWNER_AUTH_CONSTANTS = {
|
|
380
|
+
/**
|
|
381
|
+
* Environment variable holding the agent badge in every agent process.
|
|
382
|
+
* Deliberately free of TOKEN / KEY / SECRET: Codex's default
|
|
383
|
+
* `shell_environment_policy` strips variables whose names contain those
|
|
384
|
+
* words from the shells it runs, so the skills would never see it.
|
|
385
|
+
*/
|
|
386
|
+
AGENT_BADGE_ENV: 'CREWLY_AGENT_BADGE',
|
|
387
|
+
/** Request header carrying the agent badge */
|
|
388
|
+
AGENT_BADGE_HEADER: 'x-agent-badge',
|
|
389
|
+
/** Version prefix of a badge (`cab1.<base64url session>.<hmac>`) */
|
|
390
|
+
AGENT_BADGE_PREFIX: 'cab1',
|
|
391
|
+
/** Owner session cookie name prefix; the backend port is appended (cookies ignore ports) */
|
|
392
|
+
OWNER_SESSION_COOKIE_PREFIX: 'crewly_owner_',
|
|
393
|
+
/** Version prefix of an owner session value */
|
|
394
|
+
OWNER_SESSION_PREFIX: 'cos1',
|
|
395
|
+
/** Lifetime of an owner session cookie (seconds). The signing secret is in memory, so a restart ends it sooner. */
|
|
396
|
+
OWNER_SESSION_MAX_AGE_S: 30 * 24 * 60 * 60,
|
|
397
|
+
/** Header the dashboard sends the CSRF token in on every write */
|
|
398
|
+
CSRF_HEADER: 'x-crewly-csrf',
|
|
399
|
+
/** Header carrying the in-memory internal credential (relay / cloud) */
|
|
400
|
+
INTERNAL_HEADER: 'x-crewly-internal',
|
|
401
|
+
/** Path (under `/api`) that issues the owner session and returns the CSRF token */
|
|
402
|
+
SESSION_ROUTE: '/auth/session',
|
|
403
|
+
/** HTTP methods that change state and therefore need CSRF / a header-borne token */
|
|
404
|
+
MUTATING_METHODS: ['POST', 'PUT', 'PATCH', 'DELETE'] as readonly string[],
|
|
405
|
+
/**
|
|
406
|
+
* What a browser without a session (a dashboard tab opened before the
|
|
407
|
+
* upgrade) is told in the 401's `error`, which that old tab shows as is.
|
|
408
|
+
*/
|
|
409
|
+
RELOAD_MESSAGE: 'Reload this page — Crewly was updated.',
|
|
410
|
+
/** Response header naming the dashboard build the backend serves (its hashed entry script) */
|
|
411
|
+
BUILD_HEADER: 'x-crewly-dashboard-build',
|
|
412
|
+
/** socket.io event announcing the served dashboard build on each connection */
|
|
413
|
+
BUILD_EVENT: 'dashboard_build',
|
|
414
|
+
/** Error codes in `{ success: false, error }` */
|
|
415
|
+
ERRORS: {
|
|
416
|
+
/** No owner credential (401). The dashboard refreshes its session and retries once. */
|
|
417
|
+
OWNER_AUTH_REQUIRED: 'owner_auth_required',
|
|
418
|
+
/** An agent called an owner-only route (403) */
|
|
419
|
+
OWNER_ONLY: 'owner_only',
|
|
420
|
+
},
|
|
421
|
+
/** Give up looking up a local client's process after this long (fail open) */
|
|
422
|
+
PEER_LOOKUP_TIMEOUT_MS: 3000,
|
|
423
|
+
/** Longest parent chain walked from a client process */
|
|
424
|
+
PEER_MAX_ANCESTRY_DEPTH: 64,
|
|
425
|
+
/** `X-Agent-Session` without a badge (migration window) is logged at most this often per session */
|
|
426
|
+
LEGACY_WARN_THROTTLE_MS: 10 * 60 * 1000,
|
|
427
|
+
} as const;
|
|
428
|
+
|
|
361
429
|
// ========================= TIMING CONSTANTS =========================
|
|
362
430
|
|
|
363
431
|
/**
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# Crewly agent-status hook — tells the backend when Claude Code is waiting on
|
|
3
|
-
# the user (a permission prompt or a question) and when it stops waiting
|
|
3
|
+
# the user (a permission prompt or a question) and when it stops waiting, and
|
|
4
|
+
# where it is in its turn (turn start/end, tool calls, subagents).
|
|
4
5
|
#
|
|
5
|
-
# Spec: specs/2026-09-26-agent-waiting-on-human.md (#815, hook ingestion)
|
|
6
|
+
# Spec: specs/2026-09-26-agent-waiting-on-human.md (#815, hook ingestion);
|
|
7
|
+
# specs/2026-10-02-restart-busy-and-resume.md (runtime turn state).
|
|
6
8
|
#
|
|
7
9
|
# Wired by the backend into the per-session settings file it already passes
|
|
8
10
|
# with `claude --settings <file>` (the control-plane guard's file) for:
|
|
9
|
-
# Notification, PermissionRequest, Stop, UserPromptSubmit,
|
|
11
|
+
# Notification, PermissionRequest, Stop, UserPromptSubmit, PreToolUse,
|
|
12
|
+
# PostToolUse, SubagentStart, SubagentStop, SessionStart
|
|
10
13
|
#
|
|
11
14
|
# Usage: bash report.sh # hook JSON on stdin
|
|
12
15
|
#
|
|
13
16
|
# PRIVACY: the stdin JSON can hold tool_input, file contents, prompts and a
|
|
14
17
|
# transcript path, any of which may contain secrets. This script extracts
|
|
15
|
-
# exactly
|
|
16
|
-
#
|
|
18
|
+
# exactly five TOP-LEVEL fields — hook_event_name, notification_type and
|
|
19
|
+
# source (kept only as plain identifiers, [A-Za-z_], max 64 chars), tool_use_id and
|
|
20
|
+
# agent_id (kept only as [A-Za-z0-9_-], max 128 chars) — and sends those plus
|
|
17
21
|
# the session name. Nothing else from stdin is sent, printed or logged.
|
|
18
22
|
#
|
|
19
23
|
# It never blocks or slows the agent: every path exits 0, and the POST has a
|
|
@@ -34,8 +38,9 @@ API_URL="${CREWLY_API_URL:-http://localhost:${WEB_PORT:-8787}}"
|
|
|
34
38
|
# tool_input (a regex cannot: `"hook_event_name":"Stop"` inside a command would
|
|
35
39
|
# spoof the event). So: jq, else node's JSON.parse, else nothing — the event is
|
|
36
40
|
# dropped and the backend's screen detection still covers the state.
|
|
41
|
+
NAME_PATTERN='^[A-Za-z_]{1,64}$'
|
|
37
42
|
field() {
|
|
38
|
-
local name="$1" value=""
|
|
43
|
+
local name="$1" pattern="${2:-$NAME_PATTERN}" value=""
|
|
39
44
|
if command -v jq >/dev/null 2>&1; then
|
|
40
45
|
value="$(printf '%s' "$INPUT" | jq -r --arg k "$name" 'if type == "object" then (.[$k] // empty | select(type == "string")) else empty end' 2>/dev/null)"
|
|
41
46
|
elif command -v node >/dev/null 2>&1; then
|
|
@@ -51,7 +56,7 @@ field() {
|
|
|
51
56
|
});' "$name" 2>/dev/null)"
|
|
52
57
|
fi
|
|
53
58
|
# Keep only a plain identifier; anything else is discarded, not sanitised.
|
|
54
|
-
if printf '%s' "$value" | grep -Eq
|
|
59
|
+
if printf '%s' "$value" | grep -Eq "$pattern"; then
|
|
55
60
|
printf '%s' "$value"
|
|
56
61
|
fi
|
|
57
62
|
}
|
|
@@ -59,17 +64,31 @@ field() {
|
|
|
59
64
|
EVENT="$(field hook_event_name)"
|
|
60
65
|
[ -z "$EVENT" ] && exit 0
|
|
61
66
|
NOTIFICATION_TYPE="$(field notification_type)"
|
|
67
|
+
ID_PATTERN='^[A-Za-z0-9_-]{1,128}$'
|
|
68
|
+
TOOL_USE_ID=""
|
|
69
|
+
AGENT_ID=""
|
|
70
|
+
SOURCE=""
|
|
71
|
+
case "$EVENT" in
|
|
72
|
+
PreToolUse|PostToolUse) TOOL_USE_ID="$(field tool_use_id "$ID_PATTERN")" ;;
|
|
73
|
+
SubagentStart|SubagentStop) AGENT_ID="$(field agent_id "$ID_PATTERN")" ;;
|
|
74
|
+
SessionStart) SOURCE="$(field source)" ;;
|
|
75
|
+
esac
|
|
62
76
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
77
|
+
BODY="{\"event\":\"$EVENT\""
|
|
78
|
+
[ -n "$NOTIFICATION_TYPE" ] && BODY="$BODY,\"notificationType\":\"$NOTIFICATION_TYPE\""
|
|
79
|
+
[ -n "$TOOL_USE_ID" ] && BODY="$BODY,\"toolUseId\":\"$TOOL_USE_ID\""
|
|
80
|
+
[ -n "$AGENT_ID" ] && BODY="$BODY,\"agentId\":\"$AGENT_ID\""
|
|
81
|
+
[ -n "$SOURCE" ] && BODY="$BODY,\"source\":\"$SOURCE\""
|
|
82
|
+
BODY="$BODY}"
|
|
68
83
|
|
|
69
84
|
ARGS=(-s -o /dev/null --max-time 2 -X POST "$API_URL/api/agent-hooks"
|
|
70
85
|
-H "Content-Type: application/json"
|
|
71
86
|
-H "User-Agent: crewly-agent-status-hook/1"
|
|
72
87
|
-H "X-Agent-Session: $SESSION")
|
|
88
|
+
# The agent badge (#999): the credential behind X-Agent-Session.
|
|
89
|
+
if [ -n "${CREWLY_AGENT_BADGE:-}" ]; then
|
|
90
|
+
ARGS+=(-H "X-Agent-Badge: $CREWLY_AGENT_BADGE")
|
|
91
|
+
fi
|
|
73
92
|
if [ -n "${CREWLY_AGENT_AUTHORIZATION:-}" ]; then
|
|
74
93
|
ARGS+=(-H "X-Agent-Authorization: b64:$(printf '%s' "$CREWLY_AGENT_AUTHORIZATION" | base64 | tr -d '\n')")
|
|
75
94
|
fi
|
|
@@ -108,6 +108,30 @@ process.stdin.on("end", () => {
|
|
|
108
108
|
JS
|
|
109
109
|
)"
|
|
110
110
|
|
|
111
|
-
printf '%s' "$INPUT" | MARKER_DIR="$MARKER_DIR" node -e "$PROGRAM" 2>/dev/null
|
|
111
|
+
OUT="$(printf '%s' "$INPUT" | MARKER_DIR="$MARKER_DIR" node -e "$PROGRAM" 2>/dev/null)"
|
|
112
|
+
printf '%s' "$OUT"
|
|
113
|
+
|
|
114
|
+
# A subagent was sent back: tell the backend so the run's trace records it
|
|
115
|
+
# (autonomy metrics, #984). Only a fixed event name and the session leave the
|
|
116
|
+
# machine's hook; nothing from the transcript or stdin is sent. Backgrounded
|
|
117
|
+
# (2-second ceiling, failures ignored), so the stop never waits on it.
|
|
118
|
+
case "$OUT" in
|
|
119
|
+
*'"decision":"block"'*)
|
|
120
|
+
SESSION="${CREWLY_SESSION_NAME:-}"
|
|
121
|
+
if [ -n "$SESSION" ] && command -v curl >/dev/null 2>&1; then
|
|
122
|
+
API_URL="${CREWLY_API_URL:-http://localhost:${WEB_PORT:-8787}}"
|
|
123
|
+
ARGS=(-s -o /dev/null --max-time 2 -X POST "$API_URL/api/agent-hooks"
|
|
124
|
+
-H "Content-Type: application/json"
|
|
125
|
+
-H "User-Agent: crewly-subagent-guard-hook/1"
|
|
126
|
+
-H "X-Agent-Session: $SESSION")
|
|
127
|
+
if [ -n "${CREWLY_AGENT_AUTHORIZATION:-}" ]; then
|
|
128
|
+
ARGS+=(-H "X-Agent-Authorization: b64:$(printf '%s' "$CREWLY_AGENT_AUTHORIZATION" | base64 | tr -d '\n')")
|
|
129
|
+
fi
|
|
130
|
+
# In the background: a subagent stop never waits on the backend.
|
|
131
|
+
curl "${ARGS[@]}" --data '{"event":"SubagentSendBack"}' >/dev/null 2>&1 &
|
|
132
|
+
disown 2>/dev/null || true
|
|
133
|
+
fi
|
|
134
|
+
;;
|
|
135
|
+
esac
|
|
112
136
|
|
|
113
137
|
exit 0
|
|
@@ -12,7 +12,7 @@ Do NOT create monitoring WorkItems for yourself. Delegations are already covered
|
|
|
12
12
|
|----------|---------------|----------|
|
|
13
13
|
| 🔴 **Critical** — Notify IMMEDIATELY | Agent crash, task failure, blocked, error | Runtime exited, build failed, agent stuck >15min |
|
|
14
14
|
| 🟡 **Important** — Notify within 1 min | Task completed, needs user decision, milestone reached | Agent finished feature, needs review approval |
|
|
15
|
-
| ⚪ **Info** — Log only,
|
|
15
|
+
| ⚪ **Info** — Log only, do not notify (mention it only if the owner asks, or in the daily summary when Onboarding Mode is on) | Agent started working, routine status change, heartbeat | idle→in_progress, scheduled check with no changes |
|
|
16
16
|
|
|
17
17
|
### Decision Rules for Events
|
|
18
18
|
|
|
@@ -1136,7 +1136,7 @@ Not every event deserves a user notification. Use this priority system to decide
|
|
|
1136
1136
|
| 🔴 **Critical** — Notify IMMEDIATELY | Agent crash, task failure, blocked, error | Runtime exited, build failed, agent stuck >15min |
|
|
1137
1137
|
| 🟡 **Important** — Notify within 1 min | Task completed, needs user decision, milestone reached | Agent finished feature, needs review approval |
|
|
1138
1138
|
| 🟡 **`[MILESTONE]` envelope** (#436) — **ALWAYS notify, never downgrade to ⚪ Info** | Agent emitted an explicit `[MILESTONE]` via `report-status` `status: "milestone"` — see `config/sops/common/mid-flight-milestone-surface.md` | "PR #420 merged — agent state file is now corruption-resistant", "Spec finalized + handed off to Atlas" |
|
|
1139
|
-
| ⚪ **Info** — Log only,
|
|
1139
|
+
| ⚪ **Info** — Log only, do not notify (mention it only if the owner asks, or in the daily summary when Onboarding Mode is on) | Agent started working, routine status change, heartbeat | idle→in_progress, scheduled check with no changes |
|
|
1140
1140
|
|
|
1141
1141
|
**Rule at ALL trust levels (never skip)**: when an agent surfaces a
|
|
1142
1142
|
`[MILESTONE]` envelope, you forward it to the owner. The agent
|
|
@@ -1203,7 +1203,7 @@ When you receive one, you MUST:
|
|
|
1203
1203
|
3. **Decide whether to notify** — Use the Smart Event Notification Protocol above:
|
|
1204
1204
|
- 🔴 Critical → notify immediately via `[NOTIFY]` + `reply-slack`
|
|
1205
1205
|
- 🟡 Important → notify with summary, batch if multiple events within 60s
|
|
1206
|
-
- ⚪ Info →
|
|
1206
|
+
- ⚪ Info → do not notify. Mention it only if the owner asks, or in the daily summary when Onboarding Mode is on
|
|
1207
1207
|
|
|
1208
1208
|
4. **Never output plain text for status updates** — it won't reach the user. Always use `[NOTIFY]` markers
|
|
1209
1209
|
|
|
@@ -1336,7 +1336,7 @@ All actions are performed by running bash scripts. Each script outputs JSON to s
|
|
|
1336
1336
|
|
|
1337
1337
|
**IMPORTANT: Always use skill scripts instead of raw `curl` commands.** The skill scripts use `api_call()` from the common library which:
|
|
1338
1338
|
- Automatically resolves the correct API URL (falls back to `http://localhost:8787`)
|
|
1339
|
-
- Includes
|
|
1339
|
+
- Includes your identity headers (`X-Agent-Session` and your agent badge `X-Agent-Badge`)
|
|
1340
1340
|
- Handles error formatting and HTTP status code checking
|
|
1341
1341
|
- Uses the correct HTTP methods for each endpoint
|
|
1342
1342
|
|
|
@@ -224,6 +224,13 @@ api_call() {
|
|
|
224
224
|
local args=(-s -w '\n%{http_code}' -X "$method" -H "Content-Type: application/json")
|
|
225
225
|
# Include agent session identity header for heartbeat tracking
|
|
226
226
|
# Use ${VAR:-} pattern to avoid 'unbound variable' error under set -u (nounset)
|
|
227
|
+
# The agent badge (#999): the credential that makes the backend treat this
|
|
228
|
+
# call as this agent. Injected by the harness at launch; without it the
|
|
229
|
+
# session header alone is accepted for one release only. Never the owner
|
|
230
|
+
# either way.
|
|
231
|
+
if [ -n "${CREWLY_AGENT_BADGE:-}" ]; then
|
|
232
|
+
args+=(-H "X-Agent-Badge: $CREWLY_AGENT_BADGE")
|
|
233
|
+
fi
|
|
227
234
|
if [ -n "${CREWLY_SESSION_NAME:-}" ]; then
|
|
228
235
|
args+=(-H "X-Agent-Session: $CREWLY_SESSION_NAME")
|
|
229
236
|
# This shell's pid: the backend walks its parents to the agent PTY it
|
|
@@ -433,11 +440,27 @@ auto_remember() {
|
|
|
433
440
|
# The background curl is non-blocking (~5ms) and errors are silently ignored.
|
|
434
441
|
# -----------------------------------------------------------------------------
|
|
435
442
|
_skill_heartbeat() {
|
|
436
|
-
|
|
437
|
-
-H "X-Agent-Session: ${CREWLY_SESSION_NAME:-}"
|
|
438
|
-
-H "X-Agent-Pid: $$"
|
|
439
|
-
-H "Content-Type: application/json"
|
|
440
|
-
|
|
443
|
+
local hb_args=(-s -X POST "${CREWLY_API_URL}/api/heartbeat"
|
|
444
|
+
-H "X-Agent-Session: ${CREWLY_SESSION_NAME:-}"
|
|
445
|
+
-H "X-Agent-Pid: $$"
|
|
446
|
+
-H "Content-Type: application/json")
|
|
447
|
+
[ -n "${CREWLY_AGENT_BADGE:-}" ] && hb_args+=(-H "X-Agent-Badge: $CREWLY_AGENT_BADGE")
|
|
448
|
+
curl "${hb_args[@]}" -d '{"source":"skill-start"}' >/dev/null 2>&1 &
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
# -----------------------------------------------------------------------------
|
|
452
|
+
# agent_auth_curl_args
|
|
453
|
+
#
|
|
454
|
+
# For a skill that calls the backend with its own `curl` instead of api_call:
|
|
455
|
+
# prints the identity headers as curl arguments, one per line, so they can be
|
|
456
|
+
# read into an array without word-splitting surprises:
|
|
457
|
+
# mapfile -t AUTH < <(agent_auth_curl_args) # bash 4+
|
|
458
|
+
# while IFS= read -r a; do AUTH+=("$a"); done < <(agent_auth_curl_args) # bash 3.2
|
|
459
|
+
# curl "${AUTH[@]}" ...
|
|
460
|
+
# -----------------------------------------------------------------------------
|
|
461
|
+
agent_auth_curl_args() {
|
|
462
|
+
if [ -n "${CREWLY_AGENT_BADGE:-}" ]; then printf '%s\n' -H "X-Agent-Badge: $CREWLY_AGENT_BADGE"; fi
|
|
463
|
+
if [ -n "${CREWLY_SESSION_NAME:-}" ]; then printf '%s\n' -H "X-Agent-Session: $CREWLY_SESSION_NAME"; fi
|
|
441
464
|
}
|
|
442
465
|
|
|
443
466
|
# Auto-heartbeat on skill entry when running inside a Crewly agent session
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Tests for lib.sh — shared skills library
|
|
4
4
|
# Covers: --file preprocessor, read_json_input, require_param, error_exit,
|
|
5
5
|
# api_call output cap (CREWLY_SKILL_MAX_OUTPUT_BYTES),
|
|
6
|
-
# CREWLY_API_URL default (#777)
|
|
6
|
+
# CREWLY_API_URL default (#777), agent badge header (#999)
|
|
7
7
|
# =============================================================================
|
|
8
8
|
set -euo pipefail
|
|
9
9
|
|
|
@@ -88,6 +88,11 @@ SKILL_EOF
|
|
|
88
88
|
chmod +x "$TEMP_DIR/test_read_json.sh"
|
|
89
89
|
|
|
90
90
|
export LIB_PATH="$SCRIPT_DIR/lib.sh"
|
|
91
|
+
# Sourcing lib.sh with CREWLY_SESSION_NAME set fires a real skill-start
|
|
92
|
+
# heartbeat (curl in the background). Point it at a closed port so a test
|
|
93
|
+
# run never writes to a Crewly backend running on this machine — it used to
|
|
94
|
+
# post heartbeats for the fake sessions here to the live :8787.
|
|
95
|
+
export CREWLY_API_URL="http://127.0.0.1:9"
|
|
91
96
|
|
|
92
97
|
echo "=== lib.sh Test Suite ==="
|
|
93
98
|
echo ""
|
|
@@ -315,6 +320,32 @@ assert_eq "lib.sh: default API URL without WEB_PORT is 8787" "http://localhost:8
|
|
|
315
320
|
RESULT=$(CREWLY_API_URL=http://localhost:9001 WEB_PORT=8797 bash -c 'source "$1"; echo "$CREWLY_API_URL"' _ "$SCRIPT_DIR/lib.sh")
|
|
316
321
|
assert_eq "lib.sh: CREWLY_API_URL set by the backend wins" "http://localhost:9001" "$RESULT"
|
|
317
322
|
|
|
323
|
+
# ---- Test 28: api_call sends the agent badge (#999) ----
|
|
324
|
+
mkdir -p "$TEMP_DIR/skills/fake-badge"
|
|
325
|
+
cat > "$TEMP_DIR/skills/fake-badge/execute.sh" << 'SKILL_EOF'
|
|
326
|
+
#!/bin/bash
|
|
327
|
+
set -euo pipefail
|
|
328
|
+
source "$LIB_PATH"
|
|
329
|
+
# Record every argument curl got, one per line, then answer 200.
|
|
330
|
+
curl() {
|
|
331
|
+
printf '%s\n' "$@" > "$ARGS_OUT"
|
|
332
|
+
printf '%s\n%s' '{"ok":true}' 200
|
|
333
|
+
}
|
|
334
|
+
api_call POST "/decisions" '{}'
|
|
335
|
+
SKILL_EOF
|
|
336
|
+
chmod +x "$TEMP_DIR/skills/fake-badge/execute.sh"
|
|
337
|
+
export ARGS_OUT="$TEMP_DIR/curl-args.txt"
|
|
338
|
+
CREWLY_SESSION_NAME=dev-1 CREWLY_AGENT_BADGE=cab1.ZGV2LTE.sig bash "$TEMP_DIR/skills/fake-badge/execute.sh" >/dev/null 2>&1
|
|
339
|
+
assert_contains "api_call: sends X-Agent-Badge when the harness set CREWLY_AGENT_BADGE" "X-Agent-Badge: cab1.ZGV2LTE.sig" "$(cat "$ARGS_OUT")"
|
|
340
|
+
assert_contains "api_call: still sends X-Agent-Session" "X-Agent-Session: dev-1" "$(cat "$ARGS_OUT")"
|
|
341
|
+
env -u CREWLY_AGENT_BADGE CREWLY_SESSION_NAME=dev-1 bash "$TEMP_DIR/skills/fake-badge/execute.sh" >/dev/null 2>&1
|
|
342
|
+
assert_eq "api_call: no badge header when there is no badge" "0" "$(grep -c 'X-Agent-Badge' "$ARGS_OUT" || true)"
|
|
343
|
+
|
|
344
|
+
# ---- Test 29: agent_auth_curl_args for skills that run their own curl ----
|
|
345
|
+
RESULT=$(CREWLY_SESSION_NAME=dev-1 CREWLY_AGENT_BADGE=b1 bash -c 'source "$1"; agent_auth_curl_args' _ "$SCRIPT_DIR/lib.sh" 2>/dev/null)
|
|
346
|
+
assert_eq "agent_auth_curl_args: badge and session as curl args" "$(printf '%s\n' -H 'X-Agent-Badge: b1' -H 'X-Agent-Session: dev-1')" "$RESULT"
|
|
347
|
+
unset ARGS_OUT
|
|
348
|
+
|
|
318
349
|
echo ""
|
|
319
350
|
echo "=== Results: $PASS/$TOTAL passed, $FAIL failed ==="
|
|
320
351
|
|
|
@@ -73,6 +73,8 @@ API_URL="${CREWLY_API_URL:-http://localhost:${CREWLY_PORT}}"
|
|
|
73
73
|
RESPONSE=$(curl -s -w "\n%{http_code}" \
|
|
74
74
|
-X POST \
|
|
75
75
|
-H "Content-Type: application/json" \
|
|
76
|
+
-H "X-Agent-Badge: ${CREWLY_AGENT_BADGE:-}" \
|
|
77
|
+
-H "X-Agent-Session: ${CREWLY_SESSION_NAME:-}" \
|
|
76
78
|
-d "$BODY" \
|
|
77
79
|
"${API_URL}/api/intent-tasks/batch" 2>&1) || {
|
|
78
80
|
echo "{\"success\":false,\"error\":\"Failed to connect to backend at ${API_URL}\"}"
|
|
@@ -88,6 +88,8 @@ API_URL="${CREWLY_API_URL:-http://localhost:${CREWLY_PORT}}"
|
|
|
88
88
|
RESPONSE=$(curl -s -w "\n%{http_code}" \
|
|
89
89
|
-X POST \
|
|
90
90
|
-H "Content-Type: application/json" \
|
|
91
|
+
-H "X-Agent-Badge: ${CREWLY_AGENT_BADGE:-}" \
|
|
92
|
+
-H "X-Agent-Session: ${CREWLY_SESSION_NAME:-}" \
|
|
91
93
|
-d "$BODY" \
|
|
92
94
|
"${API_URL}/api/intent-tasks/decompose" 2>&1) || {
|
|
93
95
|
echo "{\"success\":false,\"error\":\"Failed to connect to backend at ${API_URL}\"}"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Experiment Card
|
|
3
3
|
description: Attach an experiment to an optimisation ticket — hypothesis ("change X → metric Y from a to b"), a Search Console or GA4 metric (via seo-ops), an observation window (default 14 days). Crewly captures the baseline when the change ships, measures it when the window ends, labels it worked / didn't / inconclusive, resolves your prediction, writes the wiki experiment log and tells the owner.
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
category: analysis
|
|
6
6
|
skillType: claude-skill
|
|
7
7
|
assignableRoles:
|
|
@@ -87,6 +87,34 @@ bash execute.sh create --hypothesis "3-field inquiry form → submissions from 8
|
|
|
87
87
|
- One experiment per change: two changes on the same page in one window
|
|
88
88
|
can't be told apart.
|
|
89
89
|
|
|
90
|
+
## Measure a ticket-autopilot period (owner / orchestrator / team lead)
|
|
91
|
+
|
|
92
|
+
When the owner lets a project's ticket autopilot drive a feature, one card
|
|
93
|
+
measures both the business number and how autonomous the run was:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
bash execute.sh create --autopilot --project <project id> --label feed \
|
|
97
|
+
--hypothesis "Autopilot drives /feed for 4 weeks → feed card clicks up" \
|
|
98
|
+
--source ga4 --measure events --event feed_card_click --channel all \
|
|
99
|
+
--config /abs/path/ce.seo-ops.json --metric-label "Feed card clicks" \
|
|
100
|
+
--metric "ga4:sessions:page=/feed,pageMatch=contains,channel=all" \
|
|
101
|
+
--window-days 28 [--started-at ISO]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
- **Start** is now (or `--started-at`); the baseline is the equal window
|
|
105
|
+
before it. The card is `running` right away.
|
|
106
|
+
- `--label` (with `--autopilot`): only tickets carrying that label count in
|
|
107
|
+
the process numbers. Use `--metric-label` to name the metric.
|
|
108
|
+
- `--metric "source:measure:key=value,…"` (repeatable): more outcome
|
|
109
|
+
metrics, each with its own baseline, result and verdict. Keys: `page`,
|
|
110
|
+
`pageMatch`, `query`, `queryMatch`, `event`, `channel`, `label`, `config`
|
|
111
|
+
(default: `--config`). The primary metric gives the verdict.
|
|
112
|
+
- **Process**: tickets shipped, owner touches per ticket, stall time and $
|
|
113
|
+
per shipped ticket, from the autopilot stats of the same windows.
|
|
114
|
+
- The owner gets one short note a week while it runs, and the full result
|
|
115
|
+
(outcome verdicts + process) at the end. Everything is in the timeline.
|
|
116
|
+
- While it runs, the team lead's daily autopilot retro is on by default.
|
|
117
|
+
|
|
90
118
|
## Follow it
|
|
91
119
|
|
|
92
120
|
```bash
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
# [--event NAME] [--channel all] [--label "…"] [--title "…"]
|
|
12
12
|
# [--from A] [--to B] [--direction increase|decrease] [--window-days 14]
|
|
13
13
|
# [--confidence 0.6] [--project P --ticket ID | --tkt TKT-12] [--shipped-at ISO]
|
|
14
|
+
# bash execute.sh create --autopilot --project P [--label feed] [--started-at ISO] --hypothesis "…"
|
|
15
|
+
# --source … --measure … --config … [--metric "ga4:sessions:page=/feed,pageMatch=contains"] …
|
|
14
16
|
# bash execute.sh ship --id EXP-3 [--shipped-at ISO]
|
|
15
17
|
# bash execute.sh show --id EXP-3
|
|
16
18
|
# bash execute.sh list [--status planned|running|done|cancelled] [--ticket ID]
|
|
@@ -29,6 +31,13 @@ Usage:
|
|
|
29
31
|
--config /abs/path/seo-ops.config.json [filters] [--from A] [--to B]
|
|
30
32
|
[--window-days 14] [--confidence 0.6] [--project P --ticket ID | --tkt TKT-12]
|
|
31
33
|
[--shipped-at ISO] (required when the ticket is already done but has no recorded done time)
|
|
34
|
+
bash execute.sh create --autopilot --project P [--label feed] [--started-at ISO] --hypothesis "…"
|
|
35
|
+
--source S --measure M --config /abs/seo-ops.config.json [filters]
|
|
36
|
+
[--metric "source:measure:key=value,key=value" …] [--window-days 28]
|
|
37
|
+
Measure a period of ticket-autopilot work on project P: the primary metric
|
|
38
|
+
(and each --metric) before vs after the start, plus the process (tickets
|
|
39
|
+
shipped, owner touches per ticket, stall time, $ per shipped ticket).
|
|
40
|
+
--label: only tickets with this label; --metric-label names the metric
|
|
32
41
|
gsc measures: clicks impressions ctr position (filters: --page URL --query Q, --page-match/--query-match exact|contains)
|
|
33
42
|
ga4 measures: sessions events conversions (filters: --page /path, --event NAME, --channel all)
|
|
34
43
|
bash execute.sh ship --id EXP-3 [--shipped-at ISO] The change is live (automatic when the ticket is done)
|
|
@@ -43,6 +52,7 @@ ACTION=""; ID=""; JSON_BODY=""
|
|
|
43
52
|
HYPOTHESIS=""; TITLE=""; SOURCE=""; MEASURE=""; CONFIG=""; PAGE=""; PAGE_MATCH=""; QUERY=""; QUERY_MATCH=""
|
|
44
53
|
EVENT=""; CHANNEL=""; LABEL=""; FROM=""; TO=""; DIRECTION=""; WINDOW=""; CONFIDENCE=""; PROJECT=""; TICKET=""; TKT=""
|
|
45
54
|
SHIPPED_AT=""; STATUS=""; REASON=""
|
|
55
|
+
AUTOPILOT=""; STARTED_AT=""; METRIC_LABEL=""; EXTRA_METRICS="[]"
|
|
46
56
|
|
|
47
57
|
if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
|
|
48
58
|
J=$(read_json_input "$1"); shift
|
|
@@ -80,6 +90,16 @@ while [[ $# -gt 0 ]]; do
|
|
|
80
90
|
--ticket) [ $# -ge 2 ] || error_exit "--ticket requires a value"; TICKET="$2"; shift 2 ;;
|
|
81
91
|
--tkt) [ $# -ge 2 ] || error_exit "--tkt requires a value"; TKT="$2"; shift 2 ;;
|
|
82
92
|
--shipped-at) [ $# -ge 2 ] || error_exit "--shipped-at requires a value"; SHIPPED_AT="$2"; shift 2 ;;
|
|
93
|
+
--autopilot) AUTOPILOT=1; shift ;;
|
|
94
|
+
--started-at) [ $# -ge 2 ] || error_exit "--started-at requires a value"; STARTED_AT="$2"; shift 2 ;;
|
|
95
|
+
--metric-label) [ $# -ge 2 ] || error_exit "--metric-label requires a value"; METRIC_LABEL="$2"; shift 2 ;;
|
|
96
|
+
--metric) [ $# -ge 2 ] || error_exit "--metric requires \"source:measure:key=value,…\""
|
|
97
|
+
M=$(jq -cn --arg s "$2" '($s | capture("^(?<source>[^:]+):(?<measure>[^:]+)(:(?<rest>.*))?$")) as $c
|
|
98
|
+
| {source: $c.source, measure: $c.measure}
|
|
99
|
+
+ (($c.rest // "") | split(",") | map(select(length > 0) | capture("^(?<k>[^=]+)=(?<v>.*)$") | {(.k): .v}) | add // {})') \
|
|
100
|
+
|| M=""
|
|
101
|
+
[ -n "$M" ] || error_exit "--metric must look like ga4:sessions:page=/feed,pageMatch=contains"
|
|
102
|
+
EXTRA_METRICS=$(jq -c --argjson m "$M" '. + [$m]' <<<"$EXTRA_METRICS"); shift 2 ;;
|
|
83
103
|
--status) [ $# -ge 2 ] || error_exit "--status requires a value"; STATUS="$2"; shift 2 ;;
|
|
84
104
|
--reason) [ $# -ge 2 ] || error_exit "--reason requires a value"; REASON="$2"; shift 2 ;;
|
|
85
105
|
--help|-h) print_usage; exit 0 ;;
|
|
@@ -88,7 +108,8 @@ while [[ $# -gt 0 ]]; do
|
|
|
88
108
|
done
|
|
89
109
|
|
|
90
110
|
enc() { jq -rn --arg v "$1" '$v|@uri'; }
|
|
91
|
-
CARD='{id, status, title, hypothesis, metric: (.metric | {source, measure, page, query, event, label} | with_entries(select(.value != null))), windowDays, ticket, shippedAt, dueAt, baseline: (.baseline.total // null), result: (.result.total // null), verdict, verdictReason, lastError, traceId}
|
|
111
|
+
CARD='{id, status, title, hypothesis, metric: (.metric | {source, measure, page, query, event, label} | with_entries(select(.value != null))), windowDays, ticket, shippedAt, dueAt, baseline: (.baseline.total // null), result: (.result.total // null), verdict, verdictReason, lastError, traceId}
|
|
112
|
+
+ (if .autopilot then {autopilot: (.autopilot | {projectName, label, outcomes: [.outcomes[]? | {metric: (.metric | {source, measure, page, event}), baseline: (.baseline.total // null), result: (.result.total // null), verdict}], processBaseline, processResult, checkIns})} else {} end)'
|
|
92
113
|
|
|
93
114
|
case "$ACTION" in
|
|
94
115
|
create)
|
|
@@ -100,6 +121,14 @@ case "$ACTION" in
|
|
|
100
121
|
require_param "measure (--measure)" "$MEASURE"
|
|
101
122
|
require_param "config (--config, the seo-ops site config)" "$CONFIG"
|
|
102
123
|
if [ -n "$TICKET" ] && [ -z "$PROJECT" ]; then error_exit "--ticket needs --project (or use --tkt TKT-n for a harness ticket)"; fi
|
|
124
|
+
if [ -n "$AUTOPILOT" ]; then
|
|
125
|
+
require_param "project (--project, the autopilot project)" "$PROJECT"
|
|
126
|
+
[ -z "$TICKET" ] || error_exit "--autopilot measures a period of the project's work; leave out --ticket"
|
|
127
|
+
AP_LABEL="$LABEL"; LABEL="$METRIC_LABEL"; AP_PROJECT="$PROJECT"; PROJECT=""
|
|
128
|
+
else
|
|
129
|
+
[ "$EXTRA_METRICS" = "[]" ] || error_exit "--metric (extra outcome metrics) needs --autopilot"
|
|
130
|
+
[ -z "$METRIC_LABEL" ] || LABEL="$METRIC_LABEL"
|
|
131
|
+
fi
|
|
103
132
|
BODY=$(jq -cn \
|
|
104
133
|
--arg h "$HYPOTHESIS" --arg t "$TITLE" --arg s "$SOURCE" --arg m "$MEASURE" --arg c "$CONFIG" \
|
|
105
134
|
--arg page "$PAGE" --arg pm "$PAGE_MATCH" --arg q "$QUERY" --arg qm "$QUERY_MATCH" --arg ev "$EVENT" \
|
|
@@ -117,6 +146,11 @@ case "$ACTION" in
|
|
|
117
146
|
elif $tic != "" then {ticket: {kind: "project", project: $proj, id: $tic}}
|
|
118
147
|
else {} end)')
|
|
119
148
|
fi
|
|
149
|
+
if [ -n "$AUTOPILOT" ] && [ -n "${AP_PROJECT:-}" ]; then
|
|
150
|
+
BODY=$(printf '%s' "$BODY" | jq -c --arg p "$AP_PROJECT" --arg l "${AP_LABEL:-}" --argjson m "$EXTRA_METRICS" \
|
|
151
|
+
'. + {autopilot: ({project: $p} + (if $l != "" then {label: $l} else {} end))} + (if ($m | length) > 0 then {metrics: $m} else {} end)')
|
|
152
|
+
fi
|
|
153
|
+
if [ -n "$STARTED_AT" ]; then BODY=$(printf '%s' "$BODY" | jq -c --arg at "$STARTED_AT" '. + {startedAt: $at}'); fi
|
|
120
154
|
if [ -n "$SHIPPED_AT" ]; then BODY=$(printf '%s' "$BODY" | jq -c --arg at "$SHIPPED_AT" '. + {shippedAt: $at}'); fi
|
|
121
155
|
api_call POST "/experiments" "$BODY" | jq "{success, experiment: (.data | ${CARD})}"
|
|
122
156
|
;;
|
|
@@ -70,6 +70,17 @@ check "create shipped-at: body" "$(last '.body.shippedAt')" "2026-10-01T10:00:00
|
|
|
70
70
|
run '{"action":"create","hypothesis":"J","metric":{"source":"gsc","measure":"ctr","config":"/c.json"},"shippedAt":"2026-10-01T10:00:00Z"}' >/dev/null
|
|
71
71
|
check "create json shipped-at: body" "$(last '.body.shippedAt')" "2026-10-01T10:00:00Z"
|
|
72
72
|
|
|
73
|
+
# --- autopilot scope: project + label, extra outcome metrics, start time ---
|
|
74
|
+
run create --autopilot --project 7667a919 --label feed --started-at 2026-10-03T00:00:00Z \
|
|
75
|
+
--hypothesis "Autopilot on /feed → feed clicks up" --source ga4 --measure events --event feed_card_click --channel all --config /c.json \
|
|
76
|
+
--metric "ga4:sessions:page=/feed,pageMatch=contains,channel=all" --metric "gsc:clicks:page=https://visa.careerengine.us/feed,pageMatch=contains" \
|
|
77
|
+
--metric-label "Feed card clicks" --window-days 28 >/dev/null
|
|
78
|
+
check "autopilot: body" "$(last '.body | tostring')" '{"hypothesis":"Autopilot on /feed → feed clicks up","metric":{"source":"ga4","measure":"events","config":"/c.json","event":"feed_card_click","channel":"all","label":"Feed card clicks"},"windowDays":"28","autopilot":{"project":"7667a919","label":"feed"},"metrics":[{"source":"ga4","measure":"sessions","page":"/feed","pageMatch":"contains","channel":"all"},{"source":"gsc","measure":"clicks","page":"https://visa.careerengine.us/feed","pageMatch":"contains"}],"startedAt":"2026-10-03T00:00:00Z"}'
|
|
79
|
+
check "autopilot: needs project" "$(run_err create --autopilot --hypothesis h --source gsc --measure clicks --config /c | grep -c 'project')" "1"
|
|
80
|
+
check "autopilot: no ticket" "$(run_err create --autopilot --project p --ticket T-1 --hypothesis h --source gsc --measure clicks --config /c | grep -c 'leave out --ticket')" "1"
|
|
81
|
+
check "metric needs autopilot" "$(run_err create --hypothesis h --source gsc --measure clicks --config /c --metric gsc:clicks | grep -c 'needs --autopilot')" "1"
|
|
82
|
+
check "bad metric spec" "$(run_err create --autopilot --project p --hypothesis h --source gsc --measure clicks --config /c --metric nonsense | grep -c 'must look like')" "1"
|
|
83
|
+
|
|
73
84
|
# --- missing params / a ticket without its project ---
|
|
74
85
|
check "create: missing" "$(run_err create --hypothesis h --source gsc --measure clicks | grep -c 'config')" "1"
|
|
75
86
|
check "create: ticket w/o project" "$(run_err create --hypothesis h --source gsc --measure clicks --config /c --ticket T-1 | grep -c 'needs --project')" "1"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Project Tickets
|
|
3
|
-
description: A project's own backlog — list, read, create, update, claim, release, assign, link, log and ask-owner (structured decision cards) on project tickets (markdown files in <project>/.crewly/tickets/, tracked in git), plus the per-project ticket autopilot switch.
|
|
4
|
-
version: 1.
|
|
3
|
+
description: A project's own backlog — list, read, create, update, claim, release, assign, link, log and ask-owner (structured decision cards) on project tickets (markdown files in <project>/.crewly/tickets/, tracked in git), plus the per-project ticket autopilot switch, its stats and the daily retro.
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
category: task-management
|
|
6
6
|
skillType: claude-skill
|
|
7
7
|
assignableRoles:
|
|
@@ -189,3 +189,36 @@ split, ask the owner, or cancel), pauses for the day at the daily token budget
|
|
|
189
189
|
sends the owner the batched questions plus one evening digest. Only switch it
|
|
190
190
|
on when the owner asked for it. Refused for anyone but the owner and the
|
|
191
191
|
orchestrator.
|
|
192
|
+
|
|
193
|
+
`--retro on|off|default` switches the team lead's daily retro (default: on
|
|
194
|
+
while an autopilot experiment on the project is running).
|
|
195
|
+
|
|
196
|
+
## Autopilot numbers and retro (owner / orchestrator / team lead)
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
bash execute.sh stats --project P [--days 14] [--label feed] # per day + total
|
|
200
|
+
bash execute.sh runs --project P [--days 7] [--label feed] # run trace + ticket traces per day
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
`stats` counts tickets triaged / started / done (worker finished) / verified
|
|
204
|
+
(ticket done) / sent back / stalled, cycle times, owner touches by kind,
|
|
205
|
+
stalls by cause, harness interventions, traced tokens and $ against the daily
|
|
206
|
+
budget, and time paused on the budget. Read a day's run with `trace-read
|
|
207
|
+
--trace <runTraceId>`.
|
|
208
|
+
|
|
209
|
+
Once a day (09:00) the driver gets an `autopilot_retro` WorkItem for the
|
|
210
|
+
previous day. File it with:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
bash execute.sh retro --project P --day 2026-10-02 \
|
|
214
|
+
--summary "Shipped CE-12 and CE-14. CE-15 stalled 3h waiting on the owner for the copy." \
|
|
215
|
+
--problem "owner_dependency|CE-15 waited 3h for copy approval|Decision D-40 open 3h|tr-20261002-ab12cd34" \
|
|
216
|
+
--problem "harness_gap|Triage brief listed a stopped member as busy"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
`--problem "class|title|detail|evidence"`, class one of `agent_judgment`,
|
|
220
|
+
`missing_skill`, `harness_gap`, `owner_dependency`. Crewly writes the retro to
|
|
221
|
+
the project wiki (`llm-curated/autopilot-retros/<day>.md`); harness gaps
|
|
222
|
+
become backlog tickets on the Crewly project, deduplicated and at most 3 a
|
|
223
|
+
day, and the owner approves them with one card. Never file harness gaps as
|
|
224
|
+
tickets yourself.
|