crewly 1.20.194 → 1.20.196
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/constants.ts +68 -0
- package/config/hooks/agent-status/report.sh +31 -12
- package/config/hooks/subagent-guard/subagent.sh +25 -1
- package/config/roles/auditor/prompt.md +2 -2
- package/config/roles/orchestrator/fragments/communication.md +1 -1
- package/config/roles/orchestrator/fragments/lifecycle.md +1 -1
- package/config/roles/orchestrator/prompt.md +18 -508
- package/config/skills/_common/lib.sh +28 -5
- package/config/skills/_common/lib.test.sh +32 -1
- package/config/skills/agent/computer-use/SKILL.md +6 -0
- package/config/skills/agent/core/create-intent-tasks/execute.sh +2 -0
- package/config/skills/agent/core/decompose-intent/execute.sh +2 -0
- package/config/skills/agent/core/experiment-card/SKILL.md +38 -5
- package/config/skills/agent/core/experiment-card/execute.sh +40 -4
- package/config/skills/agent/core/experiment-card/execute.test.sh +17 -0
- package/config/skills/agent/core/project-tickets/SKILL.md +35 -2
- package/config/skills/agent/core/project-tickets/execute.sh +59 -6
- package/config/skills/agent/core/project-tickets/execute.test.sh +24 -0
- package/config/skills/agent/core/send-message/execute.sh +16 -0
- package/config/skills/agent/core/send-message/execute.test.sh +10 -0
- package/config/skills/agent/core/trace-read/SKILL.md +117 -0
- package/config/skills/agent/core/trace-read/execute.sh +116 -0
- package/config/skills/agent/core/update-intent-task/execute.sh +2 -0
- package/config/skills/agent/desktop-app-control/execute.sh +5 -2
- package/config/skills/agent/marketing/submit-for-approval/execute.sh +3 -2
- package/config/skills/orchestrator/decompose-mission/execute.sh +2 -0
- package/config/skills/orchestrator/decompose-okr/execute.sh +1 -0
- package/config/skills/orchestrator/design-team/execute.sh +2 -0
- package/config/skills/orchestrator/measure-kr/execute.sh +2 -0
- package/config/skills/orchestrator/review-mission/execute.sh +2 -0
- package/config/skills/orchestrator/send-message/execute.sh +27 -2
- package/config/skills/orchestrator/send-message/execute.test.sh +89 -0
- package/config/skills/registry.json +6 -5
- package/config/skills/team-leader/design-checklist/execute.sh +2 -0
- package/config/skills/team-leader/signal-digest/SKILL.md +110 -0
- package/config/skills/team-leader/signal-digest/execute.sh +173 -0
- package/config/skills/team-leader/signal-digest/execute.test.sh +123 -0
- package/config/skills/team-leader/signal-digest/signal-digest.config.example.json +23 -0
- package/config/skills/team-leader/signal-digest/signal_digest.py +572 -0
- package/config/skills/team-leader/signal-digest/signal_digest.test.py +319 -0
- package/dist/backend/backend/src/constants.d.ts +356 -5
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +341 -8
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts +9 -3
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +38 -5
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts +4 -9
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.js +6 -14
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/auth/owner-session.controller.d.ts +64 -0
- package/dist/backend/backend/src/controllers/auth/owner-session.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/auth/owner-session.controller.js +164 -0
- package/dist/backend/backend/src/controllers/auth/owner-session.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.js +18 -5
- package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.routes.js +8 -1
- package/dist/backend/backend/src/controllers/canva/canva.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +16 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +3 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.js +3 -5
- package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts +4 -2
- package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/connector/connector.controller.js +17 -2
- package/dist/backend/backend/src/controllers/connector/connector.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js +2 -3
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js.map +1 -1
- package/dist/backend/backend/src/controllers/decisions/decisions.controller.d.ts +4 -2
- package/dist/backend/backend/src/controllers/decisions/decisions.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/decisions/decisions.controller.js +31 -20
- package/dist/backend/backend/src/controllers/decisions/decisions.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/desktop/desktop.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/desktop/desktop.controller.js +16 -0
- package/dist/backend/backend/src/controllers/desktop/desktop.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.js +9 -5
- package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.routes.js +16 -3
- package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/harness/harness.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/harness/harness.controller.js +3 -5
- package/dist/backend/backend/src/controllers/harness/harness.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts +1 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +1 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js +8 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +5 -2
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js +3 -5
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/people/people.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/people/people.routes.js +3 -5
- package/dist/backend/backend/src/controllers/people/people.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +35 -2
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +138 -4
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +2 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +7 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/request/open-items.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/request/open-items.controller.js +2 -4
- package/dist/backend/backend/src/controllers/request/open-items.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/request/request.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/request/request.controller.js +5 -1
- package/dist/backend/backend/src/controllers/request/request.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/settings/settings.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/settings/settings.controller.js +18 -2
- package/dist/backend/backend/src/controllers/settings/settings.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts +26 -0
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js +100 -0
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +9 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +11 -0
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/system-control.controller.d.ts +6 -4
- package/dist/backend/backend/src/controllers/system/system-control.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/system-control.controller.js +20 -13
- package/dist/backend/backend/src/controllers/system/system-control.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +14 -7
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +5 -7
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts +73 -0
- package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/trace/trace.controller.js +437 -0
- package/dist/backend/backend/src/controllers/trace/trace.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.d.ts +3 -3
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.js +4 -2
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp.controller.js +10 -2
- package/dist/backend/backend/src/controllers/whatsapp/whatsapp.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +34 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +342 -61
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/middleware/agent-origin-correction.d.ts +31 -0
- package/dist/backend/backend/src/middleware/agent-origin-correction.d.ts.map +1 -0
- package/dist/backend/backend/src/middleware/agent-origin-correction.js +31 -0
- package/dist/backend/backend/src/middleware/agent-origin-correction.js.map +1 -0
- package/dist/backend/backend/src/middleware/agent-origin.middleware.d.ts +6 -0
- package/dist/backend/backend/src/middleware/agent-origin.middleware.d.ts.map +1 -1
- package/dist/backend/backend/src/middleware/agent-origin.middleware.js +4 -1
- package/dist/backend/backend/src/middleware/agent-origin.middleware.js.map +1 -1
- package/dist/backend/backend/src/middleware/api-token.middleware.d.ts +20 -17
- package/dist/backend/backend/src/middleware/api-token.middleware.d.ts.map +1 -1
- package/dist/backend/backend/src/middleware/api-token.middleware.js +27 -37
- package/dist/backend/backend/src/middleware/api-token.middleware.js.map +1 -1
- package/dist/backend/backend/src/middleware/caller-identity.middleware.d.ts +213 -0
- package/dist/backend/backend/src/middleware/caller-identity.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/middleware/caller-identity.middleware.js +481 -0
- package/dist/backend/backend/src/middleware/caller-identity.middleware.js.map +1 -0
- package/dist/backend/backend/src/middleware/caller-identity.testing.d.ts +67 -0
- package/dist/backend/backend/src/middleware/caller-identity.testing.d.ts.map +1 -0
- package/dist/backend/backend/src/middleware/caller-identity.testing.js +108 -0
- package/dist/backend/backend/src/middleware/caller-identity.testing.js.map +1 -0
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +11 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +17 -2
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +7 -5
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +19 -10
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +10 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/restore-filter.d.ts +5 -2
- package/dist/backend/backend/src/services/agent/restore-filter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/restore-filter.js +5 -2
- package/dist/backend/backend/src/services/agent/restore-filter.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +4 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +29 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +77 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +22 -6
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +6 -0
- package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.js +7 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
- package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts +1 -1
- package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.d.ts +175 -2
- package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.js +444 -35
- package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -5
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +34 -4
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +7 -4
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +18 -11
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +19 -25
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +7 -4
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +8 -4
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/types.d.ts +0 -1
- package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/types.js +0 -1
- package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +5 -0
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/api-token.service.d.ts +28 -0
- package/dist/backend/backend/src/services/core/api-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/api-token.service.js +46 -0
- package/dist/backend/backend/src/services/core/api-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/dashboard-build.d.ts +49 -0
- package/dist/backend/backend/src/services/core/dashboard-build.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/dashboard-build.js +68 -0
- package/dist/backend/backend/src/services/core/dashboard-build.js.map +1 -0
- package/dist/backend/backend/src/services/core/owner-auth.service.d.ts +127 -0
- package/dist/backend/backend/src/services/core/owner-auth.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/owner-auth.service.js +205 -0
- package/dist/backend/backend/src/services/core/owner-auth.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/peer-process.service.d.ts +168 -0
- package/dist/backend/backend/src/services/core/peer-process.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/peer-process.service.js +352 -0
- package/dist/backend/backend/src/services/core/peer-process.service.js.map +1 -0
- package/dist/backend/backend/src/services/decisions/decision-store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-store.js +5 -1
- package/dist/backend/backend/src/services/decisions/decision-store.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts +10 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.js +20 -9
- package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts +1 -1
- package/dist/backend/backend/src/services/experiments/experiment-verdict.js +2 -2
- package/dist/backend/backend/src/services/experiments/experiment-verdict.js.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +149 -4
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.service.js +549 -24
- package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts +20 -5
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js +46 -9
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts +7 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts.map +1 -1
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js +21 -1
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js +2 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts +0 -8
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js +0 -18
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts +19 -0
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +41 -5
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts +184 -0
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.js +391 -0
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts +35 -1
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js +138 -2
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.d.ts +73 -0
- package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.js +258 -0
- package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.d.ts +82 -0
- package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.js +141 -0
- package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts +51 -1
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js +118 -2
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js +4 -0
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.d.ts +103 -0
- package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.js +86 -0
- package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.js.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +57 -0
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.service.js +100 -4
- package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js +10 -2
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +16 -0
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +13 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts +36 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +44 -3
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-assignee-waker.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-assignee-waker.js +2 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-assignee-waker.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +3 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.d.ts +156 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.js +308 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.d.ts +212 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js +515 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.d.ts +186 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.js +341 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +309 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +726 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js +15 -0
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +34 -3
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js +57 -2
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -1
- package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts +61 -3
- package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts.map +1 -1
- package/dist/backend/backend/src/services/restart/interrupted-turns.js +106 -9
- package/dist/backend/backend/src/services/restart/interrupted-turns.js.map +1 -1
- package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts +22 -0
- package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/restart/restart-drain.service.js +37 -5
- package/dist/backend/backend/src/services/restart/restart-drain.service.js.map +1 -1
- package/dist/backend/backend/src/services/restart/supervisor-stop-budget.d.ts +62 -0
- package/dist/backend/backend/src/services/restart/supervisor-stop-budget.d.ts.map +1 -0
- package/dist/backend/backend/src/services/restart/supervisor-stop-budget.js +126 -0
- package/dist/backend/backend/src/services/restart/supervisor-stop-budget.js.map +1 -0
- package/dist/backend/backend/src/services/restart/turn-probe.d.ts +17 -2
- package/dist/backend/backend/src/services/restart/turn-probe.d.ts.map +1 -1
- package/dist/backend/backend/src/services/restart/turn-probe.js +29 -4
- package/dist/backend/backend/src/services/restart/turn-probe.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +4 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-handoff.service.js +8 -5
- package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts +75 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js +187 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts +86 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js +307 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts +85 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js +185 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts +272 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js +570 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts +51 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js +116 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts +5 -1
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js +6 -2
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-auto-working.service.d.ts +29 -0
- package/dist/backend/backend/src/services/slack/slack-auto-working.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-auto-working.service.js +66 -3
- package/dist/backend/backend/src/services/slack/slack-auto-working.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +2 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +3 -2
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts +1 -1
- package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +79 -15
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +200 -41
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +43 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +76 -7
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/system/auto-update.service.d.ts +2 -2
- package/dist/backend/backend/src/services/system/auto-update.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.js +4 -0
- package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +2 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-analysis.service.d.ts +99 -0
- package/dist/backend/backend/src/services/trace/trace-analysis.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-analysis.service.js +148 -0
- package/dist/backend/backend/src/services/trace/trace-analysis.service.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.d.ts +212 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.js +489 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts +46 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.js +176 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-markers.d.ts +93 -0
- package/dist/backend/backend/src/services/trace/trace-markers.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-markers.js +162 -0
- package/dist/backend/backend/src/services/trace/trace-markers.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-metrics.d.ts +262 -0
- package/dist/backend/backend/src/services/trace/trace-metrics.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-metrics.js +810 -0
- package/dist/backend/backend/src/services/trace/trace-metrics.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.d.ts +338 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.js +789 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-store.d.ts +308 -0
- package/dist/backend/backend/src/services/trace/trace-store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-store.js +714 -0
- package/dist/backend/backend/src/services/trace/trace-store.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-summary.d.ts +77 -0
- package/dist/backend/backend/src/services/trace/trace-summary.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-summary.js +239 -0
- package/dist/backend/backend/src/services/trace/trace-summary.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-timeline.d.ts +74 -0
- package/dist/backend/backend/src/services/trace/trace-timeline.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-timeline.js +162 -0
- package/dist/backend/backend/src/services/trace/trace-timeline.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace.types.d.ts +137 -0
- package/dist/backend/backend/src/services/trace/trace.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace.types.js +104 -0
- package/dist/backend/backend/src/services/trace/trace.types.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.d.ts +80 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.js +184 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts +7 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js +16 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts +16 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.js +4 -0
- package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js +2 -1
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +8 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +46 -4
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.d.ts +4 -3
- package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.d.ts.map +1 -1
- package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.js +3 -2
- package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js +2 -1
- package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +3 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +7 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
- package/dist/backend/backend/src/types/decision.types.d.ts +3 -1
- package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/experiment.types.d.ts +65 -6
- package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/experiment.types.js.map +1 -1
- package/dist/backend/backend/src/types/signal-digest.types.d.ts +185 -0
- package/dist/backend/backend/src/types/signal-digest.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/signal-digest.types.js +21 -0
- package/dist/backend/backend/src/types/signal-digest.types.js.map +1 -0
- package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts +9 -0
- package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/ticket-autopilot.types.js +14 -0
- package/dist/backend/backend/src/types/ticket-autopilot.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/open-item.types.d.ts +4 -0
- package/dist/backend/backend/src/types/v2/open-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.d.ts +4 -0
- package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +5 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +2 -0
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/backend/src/utils/agent-caller.utils.d.ts +44 -37
- package/dist/backend/backend/src/utils/agent-caller.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/agent-caller.utils.js +48 -42
- package/dist/backend/backend/src/utils/agent-caller.utils.js.map +1 -1
- package/dist/backend/backend/src/utils/secret-env.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/secret-env.js +8 -1
- package/dist/backend/backend/src/utils/secret-env.js.map +1 -1
- package/dist/backend/backend/src/utils/security.d.ts +2 -0
- package/dist/backend/backend/src/utils/security.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/security.js +3 -1
- package/dist/backend/backend/src/utils/security.js.map +1 -1
- package/dist/backend/backend/src/websocket/chat.gateway.d.ts +9 -0
- package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/chat.gateway.js +26 -0
- package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +67 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +67 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +356 -5
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +341 -8
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +17 -2
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +7 -5
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +19 -10
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +10 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +4 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +29 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +77 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +22 -6
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +6 -0
- package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.js +7 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat/chat.service.d.ts +282 -0
- package/dist/cli/backend/src/services/chat/chat.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat/chat.service.js +783 -0
- package/dist/cli/backend/src/services/chat/chat.service.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -5
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +34 -4
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +7 -4
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +18 -11
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +19 -25
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +7 -4
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +8 -4
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/types.d.ts +0 -1
- package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/types.js +0 -1
- package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -1
- package/dist/cli/backend/src/services/core/api-token.service.d.ts +28 -0
- package/dist/cli/backend/src/services/core/api-token.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/api-token.service.js +46 -0
- package/dist/cli/backend/src/services/core/api-token.service.js.map +1 -1
- package/dist/cli/backend/src/services/core/owner-auth.service.d.ts +127 -0
- package/dist/cli/backend/src/services/core/owner-auth.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/owner-auth.service.js +205 -0
- package/dist/cli/backend/src/services/core/owner-auth.service.js.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-store.js +5 -1
- package/dist/cli/backend/src/services/decisions/decision-store.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +0 -8
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +0 -18
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts +19 -0
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js +41 -5
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts +184 -0
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -0
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.js +391 -0
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.js.map +1 -0
- package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.d.ts +73 -0
- package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.d.ts.map +1 -0
- package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.js +258 -0
- package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.js.map +1 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js +4 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-items.service.d.ts +57 -0
- package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-items.service.js +100 -4
- package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts +36 -0
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +44 -3
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +34 -3
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js +57 -2
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -1
- package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts +22 -0
- package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/restart/restart-drain.service.js +37 -5
- package/dist/cli/backend/src/services/restart/restart-drain.service.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-handoff.service.js +8 -5
- package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-auto-working.service.d.ts +29 -0
- package/dist/cli/backend/src/services/slack/slack-auto-working.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-auto-working.service.js +66 -3
- package/dist/cli/backend/src/services/slack/slack-auto-working.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +2 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +3 -2
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +79 -15
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +200 -41
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +43 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.js +76 -7
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.js +4 -0
- package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +2 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/trace/trace-context.service.d.ts +212 -0
- package/dist/cli/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-context.service.js +489 -0
- package/dist/cli/backend/src/services/trace/trace-context.service.js.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-markers.d.ts +93 -0
- package/dist/cli/backend/src/services/trace/trace-markers.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-markers.js +162 -0
- package/dist/cli/backend/src/services/trace/trace-markers.js.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.d.ts +338 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.js +789 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.js.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-store.d.ts +308 -0
- package/dist/cli/backend/src/services/trace/trace-store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-store.js +714 -0
- package/dist/cli/backend/src/services/trace/trace-store.js.map +1 -0
- package/dist/cli/backend/src/services/trace/trace.types.d.ts +137 -0
- package/dist/cli/backend/src/services/trace/trace.types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace.types.js +104 -0
- package/dist/cli/backend/src/services/trace/trace.types.js.map +1 -0
- package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.js +4 -0
- package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/cli/backend/src/types/decision.types.d.ts +3 -1
- package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts +9 -0
- package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/ticket-autopilot.types.js +14 -0
- package/dist/cli/backend/src/types/ticket-autopilot.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/open-item.types.d.ts +4 -0
- package/dist/cli/backend/src/types/v2/open-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.d.ts +4 -0
- package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +5 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +2 -0
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/utils/secret-env.d.ts.map +1 -1
- package/dist/cli/backend/src/utils/secret-env.js +8 -1
- package/dist/cli/backend/src/utils/secret-env.js.map +1 -1
- package/dist/cli/backend/src/utils/security.d.ts +196 -0
- package/dist/cli/backend/src/utils/security.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/security.js +538 -0
- package/dist/cli/backend/src/utils/security.js.map +1 -0
- package/dist/cli/backend/src/websocket/chat.gateway.d.ts +9 -0
- package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -1
- package/dist/cli/backend/src/websocket/chat.gateway.js +26 -0
- package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -1
- package/dist/cli/cli/src/commands/service.d.ts +12 -0
- package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/service.js +36 -2
- package/dist/cli/cli/src/commands/service.js.map +1 -1
- package/dist/cli/cli/src/index.js +4 -0
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/cli/src/utils/owner-token-fetch.d.ts +41 -0
- package/dist/cli/cli/src/utils/owner-token-fetch.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/owner-token-fetch.js +83 -0
- package/dist/cli/cli/src/utils/owner-token-fetch.js.map +1 -0
- package/dist/cli/cli/src/utils/safe-shutdown.d.ts +13 -3
- package/dist/cli/cli/src/utils/safe-shutdown.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/safe-shutdown.js +26 -4
- package/dist/cli/cli/src/utils/safe-shutdown.js.map +1 -1
- package/dist/cli/config/constants.d.ts +67 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +67 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/frontend/dist/assets/index-bfa0e2e8.css +42 -0
- package/frontend/dist/assets/{index-800118ca.js → index-edfa8e04.js} +285 -285
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/packages/crewly-agent/src/runtime/api-client.test.ts +42 -0
- package/packages/crewly-agent/src/runtime/api-client.ts +6 -0
- package/dist/backend/backend/src/services/v3/request-notification.service.d.ts +0 -52
- package/dist/backend/backend/src/services/v3/request-notification.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/v3/request-notification.service.js +0 -161
- package/dist/backend/backend/src/services/v3/request-notification.service.js.map +0 -1
- package/frontend/dist/assets/index-5e967795.css +0 -42
|
@@ -0,0 +1,570 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daily signal digest (#987, specs/2026-10-03-signal-digest.md).
|
|
3
|
+
*
|
|
4
|
+
* A team lead proposes 3–5 actions for a site (the `signal-digest` skill
|
|
5
|
+
* collects the signals and drafts them). This service:
|
|
6
|
+
* 1. refuses actions the site's history blocks (tried with Do, or skipped
|
|
7
|
+
* recently), and replaces the site's earlier unanswered actions;
|
|
8
|
+
* 2. posts ONE Slack card with Do / Skip per action, from the lead's bot, in
|
|
9
|
+
* the lead's team channel (else the owner's DM);
|
|
10
|
+
* 3. on Do, opens an experiment ticket in the site's project and tells the
|
|
11
|
+
* lead; on Skip, records it so the action stays off the list for a while;
|
|
12
|
+
* 4. keeps each site's signal-source status and tells the owner once when a
|
|
13
|
+
* source starts or stops failing (nothing on the days it does not change).
|
|
14
|
+
*
|
|
15
|
+
* @module services/signal-digest/signal-digest.service
|
|
16
|
+
*/
|
|
17
|
+
import { SIGNAL_DIGEST_CONSTANTS } from '../../constants.js';
|
|
18
|
+
import { SignalDigestError, blockedLines, normalizeKey, parseSourceStatuses, siteHistory, validateSignalDigest, validateSite } from './signal-digest-contract.js';
|
|
19
|
+
import { digestFallbackText, parseSignalButtonValue, renderDigestCard } from './signal-digest-card.js';
|
|
20
|
+
/**
|
|
21
|
+
* Error text.
|
|
22
|
+
*
|
|
23
|
+
* @param err - Anything thrown
|
|
24
|
+
* @returns Message
|
|
25
|
+
*/
|
|
26
|
+
function errText(err) {
|
|
27
|
+
return err instanceof Error ? err.message : String(err);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The description of the ticket a Do opens: the digest item plus the
|
|
31
|
+
* experiment card fields #986 measures (hypothesis, metric, baseline, window).
|
|
32
|
+
*
|
|
33
|
+
* @param digest - Digest
|
|
34
|
+
* @param item - The action
|
|
35
|
+
* @returns Markdown
|
|
36
|
+
*/
|
|
37
|
+
export function experimentTicketDescription(digest, item) {
|
|
38
|
+
return [
|
|
39
|
+
`From the daily signal digest ${digest.id} for ${digest.site} (${digest.createdAt.slice(0, 10)}), action ${item.n}. The owner chose Do.`,
|
|
40
|
+
'',
|
|
41
|
+
'## Signal',
|
|
42
|
+
item.signal,
|
|
43
|
+
'',
|
|
44
|
+
'## Proposal',
|
|
45
|
+
item.proposal,
|
|
46
|
+
'',
|
|
47
|
+
'## Expected effect',
|
|
48
|
+
item.expectedEffect,
|
|
49
|
+
'',
|
|
50
|
+
'## Effort',
|
|
51
|
+
item.effort,
|
|
52
|
+
'',
|
|
53
|
+
'## Experiment',
|
|
54
|
+
`- Hypothesis: ${item.proposal} → ${item.expectedEffect}`,
|
|
55
|
+
`- Metric: ${item.metric ?? (item.experiment ? `${item.experiment.source} ${item.experiment.measure}` : 'name the metric (GA4 / Search Console) before shipping')}`,
|
|
56
|
+
item.experiment && digest.config
|
|
57
|
+
? '- Baseline and result: measured automatically by the experiment card linked to this ticket (when it is done, and after the window)'
|
|
58
|
+
: '- Baseline: capture it right before the change ships (or add an experiment card)',
|
|
59
|
+
`- Window: ${SIGNAL_DIGEST_CONSTANTS.EXPERIMENT_WINDOW_DAYS} days after shipping`,
|
|
60
|
+
`- Signal key: \`${item.key}\` (source: ${item.source})`,
|
|
61
|
+
].join('\n');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* How a source is named to the owner.
|
|
65
|
+
*
|
|
66
|
+
* @param name - Source name
|
|
67
|
+
* @returns Label
|
|
68
|
+
*/
|
|
69
|
+
export function sourceLabel(name) {
|
|
70
|
+
return SIGNAL_DIGEST_CONSTANTS.SOURCE_LABELS[name] ?? name;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Whether a digest holds the same actions (by key) as a proposal.
|
|
74
|
+
*
|
|
75
|
+
* @param digest - Stored digest
|
|
76
|
+
* @param items - Proposed actions
|
|
77
|
+
* @returns True for the same key set
|
|
78
|
+
*/
|
|
79
|
+
function sameActions(digest, items) {
|
|
80
|
+
const a = digest.items.map((i) => normalizeKey(i.key)).sort();
|
|
81
|
+
const b = items.map((i) => normalizeKey(i.key)).sort();
|
|
82
|
+
return a.length === b.length && a.every((k, i) => k === b[i]);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Signal digests: proposals, the Slack card, the owner's answers.
|
|
86
|
+
*/
|
|
87
|
+
export class SignalDigestService {
|
|
88
|
+
deps;
|
|
89
|
+
static instance = null;
|
|
90
|
+
now;
|
|
91
|
+
/** Source reports are handled one at a time (one change notice per change) */
|
|
92
|
+
sourceChain = Promise.resolve();
|
|
93
|
+
/**
|
|
94
|
+
* @param deps - Collaborators
|
|
95
|
+
*/
|
|
96
|
+
constructor(deps) {
|
|
97
|
+
this.deps = deps;
|
|
98
|
+
this.now = deps.now ?? (() => new Date());
|
|
99
|
+
}
|
|
100
|
+
/** The running service, when started. */
|
|
101
|
+
static getInstance() {
|
|
102
|
+
return SignalDigestService.instance;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Set (or clear) the running service.
|
|
106
|
+
*
|
|
107
|
+
* @param service - Service or null
|
|
108
|
+
*/
|
|
109
|
+
static setInstance(service) {
|
|
110
|
+
SignalDigestService.instance = service;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Propose a digest. The site's earlier unanswered actions are replaced
|
|
114
|
+
* (expired) first; then any action the history still blocks is refused.
|
|
115
|
+
*
|
|
116
|
+
* @param callerSession - Team lead session (X-Agent-Session)
|
|
117
|
+
* @param input - `{ site, project?, config?, items }`
|
|
118
|
+
* @returns The stored digest (with `card`, or `postError` when Slack refused)
|
|
119
|
+
* @throws SignalDigestError(400) for a contract violation, (409) for blocked actions
|
|
120
|
+
*/
|
|
121
|
+
async propose(callerSession, input) {
|
|
122
|
+
if (!callerSession)
|
|
123
|
+
throw new SignalDigestError(400, 'Who is proposing? Run signal-digest propose from the team lead\'s agent session.');
|
|
124
|
+
const valid = validateSignalDigest(input);
|
|
125
|
+
// One card a day: a digest from the last DUPLICATE_WINDOW_MS with actions
|
|
126
|
+
// still open stands. The same actions again (a retried call) get it back;
|
|
127
|
+
// different ones are refused instead of posting a second card.
|
|
128
|
+
const recent = await this.recentOpenDigest(valid.site);
|
|
129
|
+
if (recent) {
|
|
130
|
+
if (sameActions(recent, valid.items)) {
|
|
131
|
+
this.deps.logger.info('Signal digest proposed again — returning the open one', { digestId: recent.id, site: recent.site });
|
|
132
|
+
return recent;
|
|
133
|
+
}
|
|
134
|
+
const open = recent.items.filter((i) => i.status === 'open').length;
|
|
135
|
+
throw new SignalDigestError(409, `${recent.id} for ${recent.site} was posted at ${recent.createdAt} and still has ${open} open action(s) waiting for the owner. Do not post another card today; the next run replaces the unanswered actions.`);
|
|
136
|
+
}
|
|
137
|
+
const sources = valid.sources ? (await this.recordSources(callerSession, valid.site, valid.sources)).sources : await this.latestSources(valid.site);
|
|
138
|
+
const all = await this.deps.store.list();
|
|
139
|
+
const history = siteHistory(all, valid.site, this.now()).filter((h) => h.status !== 'open');
|
|
140
|
+
const blocked = blockedLines(valid.items, history);
|
|
141
|
+
if (blocked.length > 0) {
|
|
142
|
+
throw new SignalDigestError(409, `These actions were already decided for ${valid.site}; replace them with other actions and propose again:\n- ${blocked.join('\n- ')}`);
|
|
143
|
+
}
|
|
144
|
+
await this.expireOpen(valid.site);
|
|
145
|
+
await this.deps.store.prune().catch(() => 0);
|
|
146
|
+
const teamId = await this.deps.teamOf(callerSession).catch(() => undefined);
|
|
147
|
+
const digest = await this.deps.store.create({
|
|
148
|
+
site: valid.site,
|
|
149
|
+
asker: callerSession,
|
|
150
|
+
...(teamId ? { teamId } : {}),
|
|
151
|
+
...(valid.project ? { project: valid.project } : {}),
|
|
152
|
+
...(valid.config ? { config: valid.config } : {}),
|
|
153
|
+
...(sources ? { sources } : {}),
|
|
154
|
+
items: valid.items.map((item, i) => ({ ...item, n: i + 1, status: 'open' })),
|
|
155
|
+
});
|
|
156
|
+
this.deps.logger.info('Signal digest proposed', { digestId: digest.id, site: digest.site, asker: callerSession, items: digest.items.length });
|
|
157
|
+
return this.postCard(digest);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* A site's digest proposed within DUPLICATE_WINDOW_MS that still has open actions.
|
|
161
|
+
*
|
|
162
|
+
* @param site - Site
|
|
163
|
+
* @returns The newest such digest, or null
|
|
164
|
+
*/
|
|
165
|
+
async recentOpenDigest(site) {
|
|
166
|
+
const want = site.trim().toLowerCase();
|
|
167
|
+
const since = this.now().getTime() - SIGNAL_DIGEST_CONSTANTS.DUPLICATE_WINDOW_MS;
|
|
168
|
+
const recent = await this.deps.store.list((d) => d.site.trim().toLowerCase() === want && Date.parse(d.createdAt) >= since && d.items.some((i) => i.status === 'open'));
|
|
169
|
+
return recent[0] ?? null;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* The site's latest source report, when it is recent enough to describe today's run.
|
|
173
|
+
*
|
|
174
|
+
* @param site - Site
|
|
175
|
+
* @returns Statuses, or undefined
|
|
176
|
+
*/
|
|
177
|
+
async latestSources(site) {
|
|
178
|
+
const s = await this.deps.store.getSiteSources(site).catch(() => null);
|
|
179
|
+
if (!s || this.now().getTime() - Date.parse(s.reportedAt) > SIGNAL_DIGEST_CONSTANTS.SOURCE_REPORT_MAX_AGE_MS)
|
|
180
|
+
return undefined;
|
|
181
|
+
return s.sources;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* A collect run's source statuses (`POST /api/signal-digests/sources`).
|
|
185
|
+
* Stored per site; the owner is told once when a source starts or stops
|
|
186
|
+
* failing — not every day it stays broken.
|
|
187
|
+
*
|
|
188
|
+
* @param callerSession - Team lead session (X-Agent-Session)
|
|
189
|
+
* @param input - `{ site, sources }`
|
|
190
|
+
* @returns What changed and whether the owner was told
|
|
191
|
+
* @throws SignalDigestError(400)
|
|
192
|
+
*/
|
|
193
|
+
async reportSources(callerSession, input) {
|
|
194
|
+
if (!callerSession)
|
|
195
|
+
throw new SignalDigestError(400, "Who is reporting? Run signal-digest collect from the team lead's agent session.");
|
|
196
|
+
const site = validateSite(input.site);
|
|
197
|
+
const sources = parseSourceStatuses(input.sources);
|
|
198
|
+
if (!sources || sources.length === 0)
|
|
199
|
+
throw new SignalDigestError(400, '"sources" is required: {"ga4":"ok","gsc":"error: why",…} as collect prints it.');
|
|
200
|
+
return this.recordSources(callerSession, site, sources);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Store a source report and send the change notice (see {@link reportSources}).
|
|
204
|
+
*
|
|
205
|
+
* @param caller - Reporting session
|
|
206
|
+
* @param site - Site
|
|
207
|
+
* @param sources - Statuses
|
|
208
|
+
* @returns The report outcome
|
|
209
|
+
*/
|
|
210
|
+
recordSources(caller, site, sources) {
|
|
211
|
+
const run = async () => {
|
|
212
|
+
const at = this.now().toISOString();
|
|
213
|
+
const failing = sources.filter((s) => s.state === 'error').map((s) => s.name);
|
|
214
|
+
const state = await this.deps.store.updateSiteSources(site, (cur) => ({
|
|
215
|
+
site,
|
|
216
|
+
sources,
|
|
217
|
+
reportedAt: at,
|
|
218
|
+
reportedBy: caller,
|
|
219
|
+
toldFailing: cur?.toldFailing ?? [],
|
|
220
|
+
...(cur?.toldAt ? { toldAt: cur.toldAt } : {}),
|
|
221
|
+
}));
|
|
222
|
+
const told = new Set(state.toldFailing);
|
|
223
|
+
const started = failing.filter((n) => !told.has(n));
|
|
224
|
+
const stopped = state.toldFailing.filter((n) => !failing.includes(n));
|
|
225
|
+
const out = { site, sources, started, stopped, notified: false };
|
|
226
|
+
if ((started.length === 0 && stopped.length === 0) || !this.deps.notifyOwner)
|
|
227
|
+
return out;
|
|
228
|
+
const lines = [];
|
|
229
|
+
for (const n of started)
|
|
230
|
+
lines.push(`Not working: ${sourceLabel(n)} — ${sources.find((s) => s.name === n)?.detail ?? 'failed'}`);
|
|
231
|
+
for (const n of stopped)
|
|
232
|
+
lines.push(`Working again: ${sourceLabel(n)}`);
|
|
233
|
+
if (started.length > 0)
|
|
234
|
+
lines.push('The daily digest runs without it until it is fixed. You will hear again only when this changes.');
|
|
235
|
+
const sent = await this.deps
|
|
236
|
+
.notifyOwner({
|
|
237
|
+
title: `Signal digest · ${site}: ${started.length > 0 ? 'a signal source is failing' : 'signal sources work again'}`,
|
|
238
|
+
message: lines.join('\n'),
|
|
239
|
+
urgent: false,
|
|
240
|
+
})
|
|
241
|
+
.catch(() => false);
|
|
242
|
+
if (sent) {
|
|
243
|
+
await this.deps.store.updateSiteSources(site, (cur) => ({ ...(cur ?? { site, sources, reportedAt: at }), toldFailing: failing, toldAt: at }));
|
|
244
|
+
out.notified = true;
|
|
245
|
+
}
|
|
246
|
+
this.deps.logger.info('Signal digest source status changed', { site, started, stopped, notified: out.notified });
|
|
247
|
+
return out;
|
|
248
|
+
};
|
|
249
|
+
const next = this.sourceChain.then(run, run);
|
|
250
|
+
this.sourceChain = next.catch(() => undefined);
|
|
251
|
+
return next;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* The site's blocked keys (Do within 90 days, Skip within 30) and its open ones.
|
|
255
|
+
*
|
|
256
|
+
* @param site - Site
|
|
257
|
+
* @returns History entries
|
|
258
|
+
*/
|
|
259
|
+
async history(site) {
|
|
260
|
+
return siteHistory(await this.deps.store.list(), site, this.now());
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Digests, newest first.
|
|
264
|
+
*
|
|
265
|
+
* @param site - Only this site, when given
|
|
266
|
+
* @returns Digests
|
|
267
|
+
*/
|
|
268
|
+
async list(site) {
|
|
269
|
+
const want = site?.trim().toLowerCase();
|
|
270
|
+
return this.deps.store.list((d) => !want || d.site.trim().toLowerCase() === want);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* One digest.
|
|
274
|
+
*
|
|
275
|
+
* @param id - Digest id
|
|
276
|
+
* @returns Digest or null
|
|
277
|
+
*/
|
|
278
|
+
get(id) {
|
|
279
|
+
return this.deps.store.get(id);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Answer one action from the dashboard / API (owner only; the caller checks).
|
|
283
|
+
*
|
|
284
|
+
* @param id - Digest id
|
|
285
|
+
* @param n - Item number
|
|
286
|
+
* @param choice - do / skip
|
|
287
|
+
* @returns The updated digest
|
|
288
|
+
* @throws SignalDigestError(404) unknown digest / item, (409) already answered
|
|
289
|
+
*/
|
|
290
|
+
async choose(id, n, choice) {
|
|
291
|
+
const digest = await this.deps.store.get(id);
|
|
292
|
+
if (!digest)
|
|
293
|
+
throw new SignalDigestError(404, `Signal digest ${id} not found`);
|
|
294
|
+
const item = digest.items.find((i) => i.n === n);
|
|
295
|
+
if (!item)
|
|
296
|
+
throw new SignalDigestError(404, `${id} has no action ${n}`);
|
|
297
|
+
if (item.status !== 'open')
|
|
298
|
+
throw new SignalDigestError(409, `${id} action ${n} is already ${item.status}`);
|
|
299
|
+
const out = await this.apply(id, n, choice, 'dashboard');
|
|
300
|
+
if (!out)
|
|
301
|
+
throw new SignalDigestError(409, `${id} action ${n} was answered meanwhile`);
|
|
302
|
+
return out;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* A Slack `block_actions` payload. Ignores anything that is not a click on
|
|
306
|
+
* one of this instance's digest cards by the owner.
|
|
307
|
+
*
|
|
308
|
+
* @param payload - Slack payload
|
|
309
|
+
* @returns What happened
|
|
310
|
+
*/
|
|
311
|
+
async handleInteraction(payload) {
|
|
312
|
+
const action = payload?.actions?.[0];
|
|
313
|
+
if (!action?.action_id?.startsWith(SIGNAL_DIGEST_CONSTANTS.ACTION_PREFIX))
|
|
314
|
+
return { handled: false, reason: 'not a signal digest action' };
|
|
315
|
+
const value = parseSignalButtonValue(action.value);
|
|
316
|
+
if (!value)
|
|
317
|
+
return { handled: false, reason: 'unreadable button value' };
|
|
318
|
+
const self = this.deps.instanceId();
|
|
319
|
+
if (value.i && self && value.i !== self)
|
|
320
|
+
return { handled: false, reason: `card belongs to instance ${value.i}` };
|
|
321
|
+
const digest = await this.deps.store.get(value.s);
|
|
322
|
+
if (!digest)
|
|
323
|
+
return { handled: false, reason: `unknown digest ${value.s}` };
|
|
324
|
+
const channel = payload.container?.channel_id ?? payload.channel?.id;
|
|
325
|
+
const ts = payload.container?.message_ts ?? payload.message?.ts;
|
|
326
|
+
if (!digest.card || digest.card.slackChannelId !== channel || digest.card.messageTs !== ts) {
|
|
327
|
+
return { handled: false, reason: 'click is not on the stored card', digest };
|
|
328
|
+
}
|
|
329
|
+
const user = payload.user?.id ?? '';
|
|
330
|
+
if (!user || !this.deps.isOwner(user)) {
|
|
331
|
+
this.deps.logger.info('Signal digest click by someone other than the owner — ignored', { digestId: digest.id, user });
|
|
332
|
+
return { handled: false, reason: 'not the owner', digest };
|
|
333
|
+
}
|
|
334
|
+
const item = digest.items.find((i) => i.n === value.n);
|
|
335
|
+
if (!item)
|
|
336
|
+
return { handled: false, reason: `no action ${value.n}`, digest };
|
|
337
|
+
if (item.status !== 'open')
|
|
338
|
+
return { handled: false, reason: `already ${item.status}`, digest };
|
|
339
|
+
const out = await this.apply(digest.id, value.n, value.o, user);
|
|
340
|
+
return out ? { handled: true, reason: value.o, digest: out } : { handled: false, reason: 'answered meanwhile', digest };
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Record the answer; on Do open the ticket and tell the lead; redraw the card.
|
|
344
|
+
*
|
|
345
|
+
* @param id - Digest id
|
|
346
|
+
* @param n - Item number
|
|
347
|
+
* @param choice - do / skip
|
|
348
|
+
* @param by - Slack user id, or `dashboard`
|
|
349
|
+
* @returns The updated digest, or null when the item was not open
|
|
350
|
+
*/
|
|
351
|
+
async apply(id, n, choice, by) {
|
|
352
|
+
const at = this.now().toISOString();
|
|
353
|
+
let digest = await this.deps.store.update(id, (d) => {
|
|
354
|
+
const item = d.items.find((i) => i.n === n);
|
|
355
|
+
if (!item || item.status !== 'open')
|
|
356
|
+
return null;
|
|
357
|
+
Object.assign(item, { status: choice, answeredAt: at, answeredBy: by });
|
|
358
|
+
return d;
|
|
359
|
+
});
|
|
360
|
+
if (!digest)
|
|
361
|
+
return null;
|
|
362
|
+
const item = digest.items.find((i) => i.n === n);
|
|
363
|
+
this.deps.logger.info('Signal digest answered', { digestId: id, item: n, choice, by });
|
|
364
|
+
if (choice === 'do') {
|
|
365
|
+
const ticket = await this.openTicket(digest, item);
|
|
366
|
+
const experiment = ticket.id ? await this.openExperiment(digest, item, ticket.id) : null;
|
|
367
|
+
digest = (await this.deps.store.update(id, (d) => {
|
|
368
|
+
const it = d.items.find((i) => i.n === n);
|
|
369
|
+
if (!it)
|
|
370
|
+
return null;
|
|
371
|
+
if (ticket.id)
|
|
372
|
+
it.ticketId = ticket.id;
|
|
373
|
+
else
|
|
374
|
+
it.ticketError = ticket.error;
|
|
375
|
+
if (experiment?.id)
|
|
376
|
+
it.experimentId = experiment.id;
|
|
377
|
+
else if (experiment?.error)
|
|
378
|
+
it.experimentError = experiment.error;
|
|
379
|
+
return d;
|
|
380
|
+
})) ?? digest;
|
|
381
|
+
const updated = digest.items.find((i) => i.n === n);
|
|
382
|
+
await this.tellAsker(digest, this.doNote(digest, updated));
|
|
383
|
+
}
|
|
384
|
+
await this.refreshCard(digest);
|
|
385
|
+
return digest;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Open the experiment ticket of a Do.
|
|
389
|
+
*
|
|
390
|
+
* @param digest - Digest
|
|
391
|
+
* @param item - The action
|
|
392
|
+
* @returns The ticket id, or why there is none
|
|
393
|
+
*/
|
|
394
|
+
async openTicket(digest, item) {
|
|
395
|
+
if (!digest.project)
|
|
396
|
+
return { error: 'no project set for this site (signalDigest.project in its config)' };
|
|
397
|
+
try {
|
|
398
|
+
const ticket = await this.deps.createTicket({
|
|
399
|
+
project: digest.project,
|
|
400
|
+
...(digest.teamId ? { team: digest.teamId } : {}),
|
|
401
|
+
title: `Experiment: ${item.proposal}`.slice(0, SIGNAL_DIGEST_CONSTANTS.TICKET_TITLE_MAX_CHARS),
|
|
402
|
+
description: experimentTicketDescription(digest, item),
|
|
403
|
+
acceptance: [
|
|
404
|
+
'Baseline of the metric recorded right before the change ships',
|
|
405
|
+
'Change shipped',
|
|
406
|
+
`Result recorded after ${SIGNAL_DIGEST_CONSTANTS.EXPERIMENT_WINDOW_DAYS} days: worked / didn't / inconclusive`,
|
|
407
|
+
],
|
|
408
|
+
labels: [...SIGNAL_DIGEST_CONSTANTS.TICKET_LABELS],
|
|
409
|
+
source: `signal-digest:${digest.id}#${item.n}`,
|
|
410
|
+
});
|
|
411
|
+
return { id: ticket.id };
|
|
412
|
+
}
|
|
413
|
+
catch (err) {
|
|
414
|
+
this.deps.logger.warn('Signal digest: Do ticket not created', { digestId: digest.id, item: item.n, error: errText(err) });
|
|
415
|
+
return { error: errText(err).slice(0, SIGNAL_DIGEST_CONSTANTS.EXPECTED_MAX_CHARS) };
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Create the experiment card of a Do (#986), linked to its ticket, as the
|
|
420
|
+
* lead (its prediction is recorded under the lead). Only when the action
|
|
421
|
+
* names a metric and the digest has the seo-ops config.
|
|
422
|
+
*
|
|
423
|
+
* @param digest - Digest
|
|
424
|
+
* @param item - The action
|
|
425
|
+
* @param ticketId - The ticket the Do opened
|
|
426
|
+
* @returns The card id, why there is none, or null when none was asked for
|
|
427
|
+
*/
|
|
428
|
+
async openExperiment(digest, item, ticketId) {
|
|
429
|
+
if (!item.experiment || !digest.config || !digest.project)
|
|
430
|
+
return null;
|
|
431
|
+
if (!this.deps.createExperiment)
|
|
432
|
+
return { error: 'experiment cards are not running on this instance' };
|
|
433
|
+
try {
|
|
434
|
+
const { source, measure, ...filters } = item.experiment;
|
|
435
|
+
const card = await this.deps.createExperiment({
|
|
436
|
+
title: item.proposal.slice(0, SIGNAL_DIGEST_CONSTANTS.TICKET_TITLE_MAX_CHARS),
|
|
437
|
+
hypothesis: `${item.proposal} → ${item.expectedEffect}`,
|
|
438
|
+
metric: { source, measure, config: digest.config, ...filters, ...(item.metric ? { label: item.metric } : {}) },
|
|
439
|
+
ticket: { kind: 'project', project: digest.project, id: ticketId },
|
|
440
|
+
}, digest.asker);
|
|
441
|
+
return { id: card.id };
|
|
442
|
+
}
|
|
443
|
+
catch (err) {
|
|
444
|
+
this.deps.logger.warn('Signal digest: experiment card not created', { digestId: digest.id, item: item.n, error: errText(err) });
|
|
445
|
+
return { error: errText(err).slice(0, SIGNAL_DIGEST_CONSTANTS.EXPECTED_MAX_CHARS) };
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* What the lead is told after a Do.
|
|
450
|
+
*
|
|
451
|
+
* @param digest - Digest
|
|
452
|
+
* @param item - The answered action
|
|
453
|
+
* @returns Message text
|
|
454
|
+
*/
|
|
455
|
+
doNote(digest, item) {
|
|
456
|
+
const head = `[SIGNAL DIGEST] The owner chose Do for ${digest.id} action ${item.n} (${digest.site}): "${item.proposal}".`;
|
|
457
|
+
if (item.ticketId && item.experimentId) {
|
|
458
|
+
return `${head} Ticket ${item.ticketId} is ready in ${digest.project}, with experiment card ${item.experimentId}: ship the change and close the ticket — the baseline and the result are measured automatically.`;
|
|
459
|
+
}
|
|
460
|
+
if (item.ticketId) {
|
|
461
|
+
const why = item.experimentError ? ` The experiment card was not created (${item.experimentError}); create it with experiment-card before you ship.` : '';
|
|
462
|
+
return `${head} Ticket ${item.ticketId} is ready in ${digest.project}: run it as an experiment — record the baseline of "${item.metric ?? 'the metric'}" right before you ship, then the result after ${SIGNAL_DIGEST_CONSTANTS.EXPERIMENT_WINDOW_DAYS} days.${why}`;
|
|
463
|
+
}
|
|
464
|
+
return `${head} No ticket was created (${item.ticketError}). Create it yourself with project-tickets, labelled ${SIGNAL_DIGEST_CONSTANTS.TICKET_LABELS.join(' + ')}, and run it as an experiment.`;
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Replace the site's earlier unanswered actions: they become `expired` and
|
|
468
|
+
* their cards say so.
|
|
469
|
+
*
|
|
470
|
+
* @param site - Site
|
|
471
|
+
*/
|
|
472
|
+
async expireOpen(site) {
|
|
473
|
+
const want = site.trim().toLowerCase();
|
|
474
|
+
const open = await this.deps.store.list((d) => d.site.trim().toLowerCase() === want && d.items.some((i) => i.status === 'open'));
|
|
475
|
+
const at = this.now().toISOString();
|
|
476
|
+
for (const d of open) {
|
|
477
|
+
const expired = await this.deps.store.update(d.id, (cur) => {
|
|
478
|
+
for (const item of cur.items)
|
|
479
|
+
if (item.status === 'open')
|
|
480
|
+
Object.assign(item, { status: 'expired', answeredAt: at });
|
|
481
|
+
return cur;
|
|
482
|
+
});
|
|
483
|
+
if (expired)
|
|
484
|
+
await this.refreshCard(expired);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Post the card: the lead's team channel from the lead's bot, else the
|
|
489
|
+
* owner's DM.
|
|
490
|
+
*
|
|
491
|
+
* @param digest - Digest without a card
|
|
492
|
+
* @returns The digest with `card`, or `postError`
|
|
493
|
+
*/
|
|
494
|
+
async postCard(digest) {
|
|
495
|
+
const slack = this.deps.slack();
|
|
496
|
+
if (!slack || !slack.isConnected()) {
|
|
497
|
+
return (await this.deps.store.update(digest.id, (d) => ({ ...d, postError: 'Slack is not connected' }))) ?? digest;
|
|
498
|
+
}
|
|
499
|
+
try {
|
|
500
|
+
const identity = await this.deps.identityOf(digest.asker);
|
|
501
|
+
const channel = (digest.teamId ? await this.deps.teamChannelOf(digest.teamId) : null) ?? (await this.deps.ownerDmOf?.(identity)) ?? null;
|
|
502
|
+
if (!channel)
|
|
503
|
+
throw new Error(`No Slack team channel for ${digest.asker} and no DM with the owner`);
|
|
504
|
+
const askerName = await this.deps.displayName?.(digest.asker).catch(() => undefined);
|
|
505
|
+
const message = { channelId: channel, text: digestFallbackText(digest), blocks: renderDigestCard(digest, this.deps.instanceId(), askerName), skipChatV2Mirror: true };
|
|
506
|
+
let ts;
|
|
507
|
+
let ownBot = false;
|
|
508
|
+
if (identity.botToken) {
|
|
509
|
+
try {
|
|
510
|
+
ts = await slack.sendMessage({ ...message, botToken: identity.botToken });
|
|
511
|
+
ownBot = true;
|
|
512
|
+
}
|
|
513
|
+
catch (err) {
|
|
514
|
+
this.deps.logger.warn("Lead's own bot could not post the signal digest — using the shared bot", { digestId: digest.id, error: errText(err) });
|
|
515
|
+
ts = await slack.sendMessage({ ...message, ...identity, botToken: undefined });
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
ts = await slack.sendMessage({ ...message, ...identity });
|
|
520
|
+
}
|
|
521
|
+
const updated = await this.deps.store.update(digest.id, (d) => {
|
|
522
|
+
const next = { ...d, card: { slackChannelId: channel, messageTs: ts, postedBy: ownBot ? digest.asker : 'crewly', ownBot } };
|
|
523
|
+
delete next.postError;
|
|
524
|
+
return next;
|
|
525
|
+
});
|
|
526
|
+
this.deps.logger.info('Signal digest card posted', { digestId: digest.id, channel, ownBot });
|
|
527
|
+
return updated ?? digest;
|
|
528
|
+
}
|
|
529
|
+
catch (err) {
|
|
530
|
+
this.deps.logger.warn('Signal digest card not posted', { digestId: digest.id, error: errText(err) });
|
|
531
|
+
return (await this.deps.store.update(digest.id, (d) => ({ ...d, postError: errText(err) }))) ?? digest;
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Redraw a posted card.
|
|
536
|
+
*
|
|
537
|
+
* @param digest - Digest
|
|
538
|
+
* @returns True when Slack accepted the update
|
|
539
|
+
*/
|
|
540
|
+
async refreshCard(digest) {
|
|
541
|
+
const slack = this.deps.slack();
|
|
542
|
+
if (!digest.card || !slack)
|
|
543
|
+
return false;
|
|
544
|
+
try {
|
|
545
|
+
const askerName = await this.deps.displayName?.(digest.asker).catch(() => undefined);
|
|
546
|
+
const token = digest.card.ownBot ? (await this.deps.identityOf(digest.card.postedBy).catch(() => ({}))).botToken : undefined;
|
|
547
|
+
await slack.updateMessage(digest.card.slackChannelId, digest.card.messageTs, digestFallbackText(digest), renderDigestCard(digest, this.deps.instanceId(), askerName), token);
|
|
548
|
+
return true;
|
|
549
|
+
}
|
|
550
|
+
catch (err) {
|
|
551
|
+
this.deps.logger.warn('Could not update the signal digest card', { digestId: digest.id, error: errText(err) });
|
|
552
|
+
return false;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Tell the lead (best effort).
|
|
557
|
+
*
|
|
558
|
+
* @param digest - Digest
|
|
559
|
+
* @param text - Message
|
|
560
|
+
*/
|
|
561
|
+
async tellAsker(digest, text) {
|
|
562
|
+
try {
|
|
563
|
+
await this.deps.deliverToAgent(digest.asker, text);
|
|
564
|
+
}
|
|
565
|
+
catch (err) {
|
|
566
|
+
this.deps.logger.warn('Could not tell the lead about the signal digest answer', { digestId: digest.id, error: errText(err) });
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
//# sourceMappingURL=signal-digest.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-digest.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/signal-digest/signal-digest.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signal digest — wiring with the real Slack, project tickets and teams
|
|
3
|
+
* (#987, specs/2026-10-03-signal-digest.md). Process-specific hooks (how to
|
|
4
|
+
* reach an agent) come from `index.ts`.
|
|
5
|
+
*
|
|
6
|
+
* @module services/signal-digest/signal-digest.wiring
|
|
7
|
+
*/
|
|
8
|
+
import type { Team } from '../../types/index.js';
|
|
9
|
+
import { SignalDigestService, type SignalTicketInput } from './signal-digest.service.js';
|
|
10
|
+
/** What the composition root provides. */
|
|
11
|
+
export interface SignalDigestWiringInput {
|
|
12
|
+
crewlyHome: string;
|
|
13
|
+
getTeams: () => Promise<Team[]>;
|
|
14
|
+
/** Deliver text to an agent; wakes it when needed */
|
|
15
|
+
sendToAgent: (session: string, text: string) => Promise<boolean>;
|
|
16
|
+
}
|
|
17
|
+
/** The ticket workflow slice a Do uses. */
|
|
18
|
+
export interface SignalTicketWorkflow {
|
|
19
|
+
create(ref: string, input: Record<string, unknown>, caller: {
|
|
20
|
+
session?: string;
|
|
21
|
+
}): Promise<{
|
|
22
|
+
id: string;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Open a Do ticket as the owner (who clicked Do). When the lead's team is not
|
|
27
|
+
* on the site's project, the ticket is opened without a team rather than not
|
|
28
|
+
* at all.
|
|
29
|
+
*
|
|
30
|
+
* @param workflow - Ticket workflow
|
|
31
|
+
* @param input - Ticket
|
|
32
|
+
* @returns The new ticket's id
|
|
33
|
+
*/
|
|
34
|
+
export declare function createSignalTicket(workflow: SignalTicketWorkflow, input: SignalTicketInput): Promise<{
|
|
35
|
+
id: string;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Build the service with the real collaborators.
|
|
39
|
+
*
|
|
40
|
+
* @param input - Composition-root hooks
|
|
41
|
+
* @returns The service
|
|
42
|
+
*/
|
|
43
|
+
export declare function createSignalDigestService(input: SignalDigestWiringInput): SignalDigestService;
|
|
44
|
+
/**
|
|
45
|
+
* Subscribe the service to Slack button clicks (Cloud relay, Socket Mode, HTTP).
|
|
46
|
+
*
|
|
47
|
+
* @param service - Signal digest service
|
|
48
|
+
* @returns Unsubscribe
|
|
49
|
+
*/
|
|
50
|
+
export declare function attachSignalDigestSlackListeners(service: SignalDigestService): () => void;
|
|
51
|
+
//# sourceMappingURL=signal-digest.wiring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-digest.wiring.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/signal-digest/signal-digest.wiring.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AASjD,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGzF,0CAA0C;AAC1C,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,qDAAqD;IACrD,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClE;AAED,2CAA2C;AAC3C,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5G;AAID;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB1H;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,uBAAuB,GAAG,mBAAmB,CAuC7F;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,IAAI,CAYzF"}
|