crewly 1.20.193 → 1.20.195
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/roles/auditor/prompt.md +2 -2
- package/config/roles/orchestrator/fragments/communication.md +1 -1
- package/config/roles/orchestrator/prompt.md +15 -505
- package/config/skills/agent/computer-use/SKILL.md +6 -0
- package/config/skills/agent/core/experiment-card/SKILL.md +101 -0
- package/config/skills/agent/core/experiment-card/execute.sh +149 -0
- package/config/skills/agent/core/experiment-card/execute.test.sh +97 -0
- package/config/skills/agent/desktop-app-control/execute.sh +5 -2
- package/config/skills/orchestrator/send-message/execute.sh +19 -2
- package/config/skills/orchestrator/send-message/execute.test.sh +80 -0
- package/config/skills/registry.json +7 -5
- 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 +191 -1
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +194 -1
- package/dist/backend/backend/src/constants.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 +6 -0
- 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/experiments/experiments.routes.d.ts +27 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.js +96 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.js.map +1 -0
- 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/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/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/trace/trace.controller.d.ts +47 -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 +169 -0
- package/dist/backend/backend/src/controllers/trace/trace.controller.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +66 -20
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +14 -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 +6 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/agent/auditor-scheduler.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/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/canva/canva-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/canva/canva-token.service.js +5 -0
- package/dist/backend/backend/src/services/canva/canva-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.d.ts +78 -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 +210 -26
- 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 +14 -3
- 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 +28 -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/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 +88 -0
- package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment-verdict.js +226 -0
- package/dist/backend/backend/src/services/experiments/experiment-verdict.js.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +350 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.js +908 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts +88 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js +162 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts +67 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js +133 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js.map +1 -0
- package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/google-workspace-token.service.js +5 -0
- package/dist/backend/backend/src/services/google/google-workspace-token.service.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/queue-processor.service.d.ts +11 -3
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +24 -7
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js +5 -0
- package/dist/backend/backend/src/services/microsoft/microsoft-token.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/orc/orc-status-router.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js +12 -3
- 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/people/acting-for.service.d.ts +42 -5
- package/dist/backend/backend/src/services/people/acting-for.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/people/acting-for.service.js +80 -5
- package/dist/backend/backend/src/services/people/acting-for.service.js.map +1 -1
- package/dist/backend/backend/src/services/people/grant-sharing.d.ts +5 -4
- package/dist/backend/backend/src/services/people/grant-sharing.d.ts.map +1 -1
- package/dist/backend/backend/src/services/people/grant-sharing.js +12 -4
- package/dist/backend/backend/src/services/people/grant-sharing.js.map +1 -1
- package/dist/backend/backend/src/services/people/people-directory.service.d.ts +71 -13
- package/dist/backend/backend/src/services/people/people-directory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/people/people-directory.service.js +164 -27
- package/dist/backend/backend/src/services/people/people-directory.service.js.map +1 -1
- 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 +2 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket.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/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-bot-ids.d.ts +33 -0
- package/dist/backend/backend/src/services/slack/slack-bot-ids.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-bot-ids.js +56 -0
- package/dist/backend/backend/src/services/slack/slack-bot-ids.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +14 -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 +30 -10
- 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.service.d.ts +31 -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 +52 -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-context.service.d.ts +195 -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 +432 -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 +42 -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 +146 -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-recorder.d.ts +290 -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 +669 -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 +269 -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 +602 -0
- package/dist/backend/backend/src/services/trace/trace-store.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace.types.d.ts +118 -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 +85 -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.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/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/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +22 -2
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.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/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/experiment.types.d.ts +155 -0
- package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/experiment.types.js +32 -0
- package/dist/backend/backend/src/types/experiment.types.js.map +1 -0
- package/dist/backend/backend/src/types/messaging.types.d.ts +6 -0
- package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/messaging.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/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 +4 -0
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +1 -0
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/backend/src/utils/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/cli/backend/src/constants.d.ts +191 -1
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +194 -1
- 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 +6 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +3 -0
- package/dist/cli/backend/src/services/agent/auditor-scheduler.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-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 +185 -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 +558 -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 +14 -3
- 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 +28 -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/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/queue-processor.service.d.ts +11 -3
- package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js +24 -7
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- 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/people/acting-for.service.d.ts +42 -5
- package/dist/cli/backend/src/services/people/acting-for.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/people/acting-for.service.js +80 -5
- package/dist/cli/backend/src/services/people/acting-for.service.js.map +1 -1
- package/dist/cli/backend/src/services/people/people-directory.service.d.ts +71 -13
- package/dist/cli/backend/src/services/people/people-directory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/people/people-directory.service.js +164 -27
- package/dist/cli/backend/src/services/people/people-directory.service.js.map +1 -1
- 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 +2 -0
- package/dist/cli/backend/src/services/project-tickets/project-ticket.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-orchestrator-bridge.d.ts +14 -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 +30 -10
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +31 -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 +52 -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 +195 -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 +432 -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 +290 -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 +669 -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 +269 -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 +602 -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 +118 -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 +85 -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/messaging.types.d.ts +6 -0
- package/dist/cli/backend/src/types/messaging.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/messaging.types.js.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 +4 -0
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +1 -0
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/utils/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/frontend/dist/assets/{index-465d1f8f.js → index-800118ca.js} +274 -274
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace context: which trace each agent session's turn is working on.
|
|
3
|
+
*
|
|
4
|
+
* Every message written into an agent turn passes through
|
|
5
|
+
* {@link TraceContext.noteTurnDelivery}. The trace of the text (a
|
|
6
|
+
* `[TRACE:…]` marker, a ticket marker, or a work item / decision / ticket id
|
|
7
|
+
* the index knows) becomes the session's current trace, and later events of
|
|
8
|
+
* that session (skill calls, replies, usage) are attributed to it.
|
|
9
|
+
*
|
|
10
|
+
* An owner message that names no trace is kept as a *pending root*: the trace
|
|
11
|
+
* is only created when the turn starts work ({@link TraceContext.ensureTraceForSession}),
|
|
12
|
+
* so chit-chat makes no trace.
|
|
13
|
+
*
|
|
14
|
+
* The current trace ends (so nothing later is billed to a finished run) when:
|
|
15
|
+
* - a delivery names no trace (cron / scheduled prompts, system notices,
|
|
16
|
+
* digests, an untraced owner message);
|
|
17
|
+
* - the session's work item in that trace reaches a terminal status
|
|
18
|
+
* ({@link TraceContext.clearIfCurrent});
|
|
19
|
+
* - the session shows no activity (deliveries, API calls) for the idle gap
|
|
20
|
+
* ({@link defaultIdleClearMs}).
|
|
21
|
+
*
|
|
22
|
+
* All state is in memory; a restart starts clean (new deliveries set it again).
|
|
23
|
+
*
|
|
24
|
+
* specs/2026-10-03-run-traces.md
|
|
25
|
+
*
|
|
26
|
+
* @module services/trace/trace-context.service
|
|
27
|
+
*/
|
|
28
|
+
import { TRACE_CONSTANTS } from '../../constants.js';
|
|
29
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
30
|
+
import { getTraceStore } from './trace-store.js';
|
|
31
|
+
import { cleanTraceData, extractTextRefs, parseTraceMarkers, safeSummary } from './trace-markers.js';
|
|
32
|
+
import { isTraceId, newTraceId, } from './trace.types.js';
|
|
33
|
+
/**
|
|
34
|
+
* Idle gap after which a session's current trace is dropped: the
|
|
35
|
+
* `CREWLY_TRACE_IDLE_CLEAR_MINUTES` env var, else
|
|
36
|
+
* {@link TRACE_CONSTANTS.IDLE_CLEAR_MS}.
|
|
37
|
+
*
|
|
38
|
+
* @returns Milliseconds
|
|
39
|
+
*/
|
|
40
|
+
export function defaultIdleClearMs() {
|
|
41
|
+
const minutes = Number(process.env.CREWLY_TRACE_IDLE_CLEAR_MINUTES);
|
|
42
|
+
return Number.isFinite(minutes) && minutes > 0 ? minutes * 60_000 : TRACE_CONSTANTS.IDLE_CLEAR_MS;
|
|
43
|
+
}
|
|
44
|
+
/** A `[CHAT:…]` / `[GCHAT:…]` routing prefix (owner or chat-routed message). */
|
|
45
|
+
const CHAT_PREFIX = /^\s*\[G?CHAT:[^\]]*\]/;
|
|
46
|
+
/**
|
|
47
|
+
* Classify a delivered text.
|
|
48
|
+
*
|
|
49
|
+
* @param text - Exactly what was written into the turn
|
|
50
|
+
* @returns The delivery kind
|
|
51
|
+
*/
|
|
52
|
+
export function classifyDelivery(text) {
|
|
53
|
+
if (/\[TASK RE-DELIVERY\]|\[CREWLY-DISPATCH\] \d+ WorkItems are still queued/.test(text))
|
|
54
|
+
return 'redelivery';
|
|
55
|
+
if (/\[CREWLY-DISPATCH\]|\[TASK ASSIGNMENT\]|^\s*\[TASK\]/.test(text))
|
|
56
|
+
return 'dispatch';
|
|
57
|
+
if (/Agent status:|Status from \S+ \(reports to you\)|\[STATUS DIGEST\]|\[STATUS REPORT\]/.test(text))
|
|
58
|
+
return 'status';
|
|
59
|
+
if (/\[DECISION\b/.test(text))
|
|
60
|
+
return 'decision';
|
|
61
|
+
if (/\[FOLLOW-UP\b/.test(text))
|
|
62
|
+
return 'follow_up';
|
|
63
|
+
if (/^\s*\[SYSTEM\b|\[EVENT:/.test(text))
|
|
64
|
+
return 'system';
|
|
65
|
+
if (CHAT_PREFIX.test(text))
|
|
66
|
+
return 'owner_message';
|
|
67
|
+
return 'system';
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Per-session trace context. Singleton (see {@link getTraceContext}).
|
|
71
|
+
*/
|
|
72
|
+
export class TraceContext {
|
|
73
|
+
storeOf;
|
|
74
|
+
logger;
|
|
75
|
+
spans = new Map();
|
|
76
|
+
pending = new Map();
|
|
77
|
+
now;
|
|
78
|
+
idleClearMs;
|
|
79
|
+
/**
|
|
80
|
+
* @param storeOf - Store accessor (default: the process-wide store)
|
|
81
|
+
* @param now - Clock (ms)
|
|
82
|
+
* @param idleClearMs - Idle gap that ends a session's current trace (default {@link defaultIdleClearMs})
|
|
83
|
+
*/
|
|
84
|
+
constructor(storeOf = getTraceStore, now, idleClearMs) {
|
|
85
|
+
this.storeOf = storeOf;
|
|
86
|
+
this.logger = LoggerService.getInstance().createComponentLogger('TraceContext');
|
|
87
|
+
this.now = now ?? (() => Date.now());
|
|
88
|
+
this.idleClearMs = idleClearMs ?? defaultIdleClearMs();
|
|
89
|
+
}
|
|
90
|
+
/** The store. */
|
|
91
|
+
get store() {
|
|
92
|
+
return this.storeOf();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Start a trace and write its root event.
|
|
96
|
+
*
|
|
97
|
+
* @param input - Root kind, summary, actor, refs, optional session to bind
|
|
98
|
+
* @returns The new trace id, or null when the store refused it
|
|
99
|
+
*/
|
|
100
|
+
startTrace(input) {
|
|
101
|
+
try {
|
|
102
|
+
const at = input.now ?? new Date(this.now());
|
|
103
|
+
const traceId = newTraceId(at);
|
|
104
|
+
const ok = this.store.createRoot({
|
|
105
|
+
traceId,
|
|
106
|
+
kind: input.kind,
|
|
107
|
+
summary: safeSummary(input.summary) || input.kind,
|
|
108
|
+
createdAt: at.toISOString(),
|
|
109
|
+
actor: input.actor,
|
|
110
|
+
refs: input.refs ?? {},
|
|
111
|
+
});
|
|
112
|
+
if (!ok)
|
|
113
|
+
return null;
|
|
114
|
+
if (input.session)
|
|
115
|
+
this.setCurrent(input.session, traceId, at.getTime());
|
|
116
|
+
this.logger.debug('Trace started', { traceId, kind: input.kind, session: input.session });
|
|
117
|
+
return traceId;
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
this.logger.debug('Trace could not be started', { error: errText(err) });
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Append an event (summary cleaned, data trimmed). Never throws.
|
|
126
|
+
*
|
|
127
|
+
* @param input - The event
|
|
128
|
+
* @returns True when queued
|
|
129
|
+
*/
|
|
130
|
+
record(input) {
|
|
131
|
+
try {
|
|
132
|
+
if (!isTraceId(input.traceId))
|
|
133
|
+
return false;
|
|
134
|
+
const refs = {};
|
|
135
|
+
for (const [k, v] of Object.entries(input.refs ?? {})) {
|
|
136
|
+
if (typeof v === 'string' && v.length > 0)
|
|
137
|
+
refs[k] = v;
|
|
138
|
+
}
|
|
139
|
+
const data = cleanTraceData(input.data);
|
|
140
|
+
const event = {
|
|
141
|
+
ts: (input.at ?? new Date(this.now())).toISOString(),
|
|
142
|
+
traceId: input.traceId,
|
|
143
|
+
type: input.type,
|
|
144
|
+
actor: input.actor,
|
|
145
|
+
refs,
|
|
146
|
+
summary: safeSummary(input.summary),
|
|
147
|
+
outcome: input.outcome ?? 'info',
|
|
148
|
+
...(data ? { data } : {}),
|
|
149
|
+
};
|
|
150
|
+
return this.store.append(event);
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
this.logger.debug('Trace event dropped', { type: input.type, error: errText(err) });
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* The trace the session's turn is working on now.
|
|
159
|
+
*
|
|
160
|
+
* @param session - Agent session
|
|
161
|
+
* @returns Trace id, or null
|
|
162
|
+
*/
|
|
163
|
+
currentTrace(session) {
|
|
164
|
+
if (!session)
|
|
165
|
+
return null;
|
|
166
|
+
const last = this.expireIfIdle(session);
|
|
167
|
+
if (!last?.traceId)
|
|
168
|
+
return null;
|
|
169
|
+
return this.store.has(last.traceId) ? last.traceId : null;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* The session did something (an API call, a delivery): keep its current
|
|
173
|
+
* trace alive. A trace already past the idle gap is ended first, so a
|
|
174
|
+
* session coming back after a long pause does not revive it.
|
|
175
|
+
*
|
|
176
|
+
* @param session - Agent session
|
|
177
|
+
* @param at - When (ms)
|
|
178
|
+
*/
|
|
179
|
+
touch(session, at = this.now()) {
|
|
180
|
+
if (!session)
|
|
181
|
+
return;
|
|
182
|
+
const last = this.expireIfIdle(session, at);
|
|
183
|
+
if (last?.traceId && at > last.lastActive)
|
|
184
|
+
last.lastActive = at;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* End the session's current trace if it is this one (its work item
|
|
188
|
+
* reached a terminal status).
|
|
189
|
+
*
|
|
190
|
+
* @param session - Agent session
|
|
191
|
+
* @param traceId - The trace that finished for it
|
|
192
|
+
* @returns True when it was cleared
|
|
193
|
+
*/
|
|
194
|
+
clearIfCurrent(session, traceId) {
|
|
195
|
+
if (!session || !traceId)
|
|
196
|
+
return false;
|
|
197
|
+
const spans = this.spans.get(session);
|
|
198
|
+
const last = spans?.[spans.length - 1];
|
|
199
|
+
if (last?.traceId !== traceId)
|
|
200
|
+
return false;
|
|
201
|
+
this.setCurrent(session, null);
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* The session's last span, after ending it when the session has been idle
|
|
206
|
+
* longer than the idle gap (a null span then starts where the gap ended).
|
|
207
|
+
*
|
|
208
|
+
* @param session - Agent session
|
|
209
|
+
* @param at - Now (ms)
|
|
210
|
+
* @returns The last span after the check, or undefined
|
|
211
|
+
*/
|
|
212
|
+
expireIfIdle(session, at = this.now()) {
|
|
213
|
+
const spans = this.spans.get(session);
|
|
214
|
+
const last = spans?.[spans.length - 1];
|
|
215
|
+
if (!spans || !last?.traceId || at - last.lastActive <= this.idleClearMs)
|
|
216
|
+
return last;
|
|
217
|
+
const since = last.lastActive + this.idleClearMs;
|
|
218
|
+
spans.push({ since, traceId: null, lastActive: since });
|
|
219
|
+
while (spans.length > TRACE_CONSTANTS.SESSION_HISTORY_SPANS)
|
|
220
|
+
spans.shift();
|
|
221
|
+
return spans[spans.length - 1];
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* The trace the session was working on at a given time (usage entries are
|
|
225
|
+
* often recorded after the turn, e.g. by the Claude transcript sync).
|
|
226
|
+
*
|
|
227
|
+
* @param session - Agent session
|
|
228
|
+
* @param at - Time of the entry (ms); default now
|
|
229
|
+
* @returns Trace id, or null
|
|
230
|
+
*/
|
|
231
|
+
traceAt(session, at) {
|
|
232
|
+
if (!session)
|
|
233
|
+
return null;
|
|
234
|
+
const spans = this.spans.get(session);
|
|
235
|
+
if (!spans || spans.length === 0)
|
|
236
|
+
return null;
|
|
237
|
+
const t = at ?? this.now();
|
|
238
|
+
for (let i = spans.length - 1; i >= 0; i--) {
|
|
239
|
+
if (spans[i].since <= t) {
|
|
240
|
+
const id = spans[i].traceId;
|
|
241
|
+
// Past the idle gap of that span: the session had stopped working on it.
|
|
242
|
+
if (id && t - spans[i].lastActive > this.idleClearMs)
|
|
243
|
+
return null;
|
|
244
|
+
return id && this.store.has(id) ? id : null;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Set (or clear) the session's current trace.
|
|
251
|
+
*
|
|
252
|
+
* @param session - Agent session
|
|
253
|
+
* @param traceId - Trace, or null for none
|
|
254
|
+
* @param at - Since when (ms)
|
|
255
|
+
*/
|
|
256
|
+
setCurrent(session, traceId, at = this.now()) {
|
|
257
|
+
const spans = this.spans.get(session) ?? [];
|
|
258
|
+
const last = spans[spans.length - 1];
|
|
259
|
+
if (last && last.traceId === traceId) {
|
|
260
|
+
if (at > last.lastActive)
|
|
261
|
+
last.lastActive = at;
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
spans.push({ since: at, traceId, lastActive: at });
|
|
265
|
+
while (spans.length > TRACE_CONSTANTS.SESSION_HISTORY_SPANS)
|
|
266
|
+
spans.shift();
|
|
267
|
+
this.spans.set(session, spans);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* The session's current trace; when it has none but an owner message is
|
|
271
|
+
* waiting, that message becomes the root of a new trace now (the turn is
|
|
272
|
+
* starting work).
|
|
273
|
+
*
|
|
274
|
+
* @param session - Agent session
|
|
275
|
+
* @returns Trace id, or null
|
|
276
|
+
*/
|
|
277
|
+
ensureTraceForSession(session) {
|
|
278
|
+
if (!session)
|
|
279
|
+
return null;
|
|
280
|
+
const current = this.currentTrace(session);
|
|
281
|
+
if (current)
|
|
282
|
+
return current;
|
|
283
|
+
const pending = this.pending.get(session);
|
|
284
|
+
if (!pending)
|
|
285
|
+
return null;
|
|
286
|
+
this.pending.delete(session);
|
|
287
|
+
if (this.now() - pending.at > TRACE_CONSTANTS.PENDING_ROOT_TTL_MS)
|
|
288
|
+
return null;
|
|
289
|
+
const traceId = this.startTrace({
|
|
290
|
+
kind: 'owner_message',
|
|
291
|
+
summary: pending.summary,
|
|
292
|
+
actor: { kind: 'owner' },
|
|
293
|
+
refs: { session },
|
|
294
|
+
now: new Date(pending.at),
|
|
295
|
+
});
|
|
296
|
+
if (!traceId)
|
|
297
|
+
return null;
|
|
298
|
+
this.record({
|
|
299
|
+
traceId,
|
|
300
|
+
type: 'turn.delivered',
|
|
301
|
+
actor: { kind: 'owner' },
|
|
302
|
+
summary: `Owner message delivered to ${session}: ${pending.summary}`,
|
|
303
|
+
refs: { session },
|
|
304
|
+
data: { kind: 'owner_message' },
|
|
305
|
+
at: new Date(pending.at),
|
|
306
|
+
});
|
|
307
|
+
this.setCurrent(session, traceId);
|
|
308
|
+
return traceId;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Traces a text refers to: `[TRACE:…]` markers win; otherwise ticket
|
|
312
|
+
* markers, then work item / decision / ticket ids the index knows.
|
|
313
|
+
*
|
|
314
|
+
* @param text - Any text
|
|
315
|
+
* @returns Trace ids, in order, de-duplicated
|
|
316
|
+
*/
|
|
317
|
+
resolveTracesFromText(text) {
|
|
318
|
+
const store = this.store;
|
|
319
|
+
const markers = parseTraceMarkers(text).filter((id) => store.has(id));
|
|
320
|
+
if (markers.length > 0)
|
|
321
|
+
return markers;
|
|
322
|
+
const refs = extractTextRefs(text);
|
|
323
|
+
const out = [];
|
|
324
|
+
const add = (id) => {
|
|
325
|
+
if (id && !out.includes(id))
|
|
326
|
+
out.push(id);
|
|
327
|
+
};
|
|
328
|
+
for (const id of refs.requestIds)
|
|
329
|
+
add(store.traceByRef('request', id));
|
|
330
|
+
for (const id of refs.workItemIds)
|
|
331
|
+
add(store.traceByRef('workItem', id));
|
|
332
|
+
for (const id of refs.decisionIds)
|
|
333
|
+
add(store.traceByRef('decision', id));
|
|
334
|
+
for (const id of refs.ticketIds)
|
|
335
|
+
add(store.traceByRef('ticket', id));
|
|
336
|
+
return out;
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* A message was written into an agent's turn. Sets the session's current
|
|
340
|
+
* trace and records `turn.delivered` (see the module doc). Never throws.
|
|
341
|
+
*
|
|
342
|
+
* @param session - Agent session written to
|
|
343
|
+
* @param text - Exactly what was delivered
|
|
344
|
+
* @param runtime - `pty` or `in-process`
|
|
345
|
+
* @returns The trace the turn is now on, or null
|
|
346
|
+
*/
|
|
347
|
+
noteTurnDelivery(session, text, runtime = 'pty') {
|
|
348
|
+
try {
|
|
349
|
+
if (!session || typeof text !== 'string' || text.length === 0)
|
|
350
|
+
return null;
|
|
351
|
+
const kind = classifyDelivery(text);
|
|
352
|
+
const traces = this.resolveTracesFromText(text);
|
|
353
|
+
const now = this.now();
|
|
354
|
+
if (traces.length === 0) {
|
|
355
|
+
// Nothing in the text names a run. An owner message may start one
|
|
356
|
+
// (pending root); anything else — a cron / scheduled prompt, a system
|
|
357
|
+
// notice, a digest — is not part of the run the session was on, so
|
|
358
|
+
// later calls and usage must not be billed to it.
|
|
359
|
+
this.setCurrent(session, null, now);
|
|
360
|
+
if (kind === 'owner_message')
|
|
361
|
+
this.pending.set(session, { summary: safeSummary(text), at: now });
|
|
362
|
+
return null;
|
|
363
|
+
}
|
|
364
|
+
const current = this.currentTrace(session);
|
|
365
|
+
const next = current && traces.includes(current) ? current : traces[0];
|
|
366
|
+
this.setCurrent(session, next, now);
|
|
367
|
+
this.pending.delete(session);
|
|
368
|
+
const actor = kind === 'owner_message' ? { kind: 'owner' } : { kind: 'system' };
|
|
369
|
+
for (const traceId of traces) {
|
|
370
|
+
this.record({
|
|
371
|
+
traceId,
|
|
372
|
+
type: 'turn.delivered',
|
|
373
|
+
actor,
|
|
374
|
+
summary: `${DELIVERY_LABELS[kind]} delivered to ${session}: ${text}`,
|
|
375
|
+
refs: { session },
|
|
376
|
+
data: { kind, runtime },
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
return next;
|
|
380
|
+
}
|
|
381
|
+
catch (err) {
|
|
382
|
+
this.logger.debug('Turn delivery not traced', { session, error: errText(err) });
|
|
383
|
+
return null;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Forget everything (tests).
|
|
388
|
+
*/
|
|
389
|
+
reset() {
|
|
390
|
+
this.spans.clear();
|
|
391
|
+
this.pending.clear();
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
/** Human labels of delivery kinds (summaries). */
|
|
395
|
+
const DELIVERY_LABELS = {
|
|
396
|
+
owner_message: 'Owner message',
|
|
397
|
+
dispatch: 'Work item brief',
|
|
398
|
+
redelivery: 'Work item redelivery',
|
|
399
|
+
status: 'Status report',
|
|
400
|
+
decision: 'Decision answer',
|
|
401
|
+
follow_up: 'Follow-up',
|
|
402
|
+
system: 'System message',
|
|
403
|
+
};
|
|
404
|
+
/**
|
|
405
|
+
* Error text.
|
|
406
|
+
*
|
|
407
|
+
* @param err - Anything thrown
|
|
408
|
+
* @returns Message
|
|
409
|
+
*/
|
|
410
|
+
function errText(err) {
|
|
411
|
+
return err instanceof Error ? err.message : String(err);
|
|
412
|
+
}
|
|
413
|
+
let instance = null;
|
|
414
|
+
/**
|
|
415
|
+
* The process-wide trace context.
|
|
416
|
+
*
|
|
417
|
+
* @returns The context (created on first use)
|
|
418
|
+
*/
|
|
419
|
+
export function getTraceContext() {
|
|
420
|
+
if (!instance)
|
|
421
|
+
instance = new TraceContext();
|
|
422
|
+
return instance;
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Replace the process-wide context (tests).
|
|
426
|
+
*
|
|
427
|
+
* @param context - Context, or null to rebuild the default lazily
|
|
428
|
+
*/
|
|
429
|
+
export function setTraceContextForTesting(context) {
|
|
430
|
+
instance = context;
|
|
431
|
+
}
|
|
432
|
+
//# sourceMappingURL=trace-context.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-context.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/trace/trace-context.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text helpers for run traces: the `[TRACE:<id>]` prompt marker, the ids a
|
|
3
|
+
* delivered text refers to, safe summaries, and skill-call path labels.
|
|
4
|
+
*
|
|
5
|
+
* All pure; no I/O.
|
|
6
|
+
*
|
|
7
|
+
* @module services/trace/trace-markers
|
|
8
|
+
*/
|
|
9
|
+
import { type TraceData } from './trace.types.js';
|
|
10
|
+
/**
|
|
11
|
+
* The marker for a trace.
|
|
12
|
+
*
|
|
13
|
+
* @param traceId - Trace id
|
|
14
|
+
* @returns `[TRACE:<id>]`
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatTraceMarker(traceId: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Trace ids named by `[TRACE:…]` markers in a text, in order, de-duplicated.
|
|
19
|
+
*
|
|
20
|
+
* @param text - Delivered text
|
|
21
|
+
* @returns Trace ids
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseTraceMarkers(text: string): string[];
|
|
24
|
+
/**
|
|
25
|
+
* Append the trace marker as the last line, unless the text already names
|
|
26
|
+
* this trace. Used where a prefix could disturb routing parsers (status
|
|
27
|
+
* reports, agent-to-agent messages).
|
|
28
|
+
*
|
|
29
|
+
* @param text - Message text
|
|
30
|
+
* @param traceId - Trace to carry (no-op when absent)
|
|
31
|
+
* @returns The text with the marker
|
|
32
|
+
*/
|
|
33
|
+
export declare function appendTraceMarker(text: string, traceId: string | null | undefined): string;
|
|
34
|
+
/**
|
|
35
|
+
* Remove every `[TRACE:…]` marker from text going to the owner or an outside
|
|
36
|
+
* channel (Slack, chat, the portal). Trace ids are harness plumbing; an
|
|
37
|
+
* agent that copies a prompt's marker into its reply must not show it.
|
|
38
|
+
*
|
|
39
|
+
* @param text - Outgoing text
|
|
40
|
+
* @returns The text without markers (unchanged when it had none)
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* stripTraceMarkers('Done.\n[TRACE:tr-20261003-0123abcd]') // 'Done.'
|
|
44
|
+
*/
|
|
45
|
+
export declare function stripTraceMarkers(text: string): string;
|
|
46
|
+
/** Ids a delivered text refers to, by kind. */
|
|
47
|
+
export interface TextRefs {
|
|
48
|
+
/** Request ids from `[TICKET:TKT-n <id>]` markers */
|
|
49
|
+
requestIds: string[];
|
|
50
|
+
/** UUIDs (candidate work item ids) */
|
|
51
|
+
workItemIds: string[];
|
|
52
|
+
/** `D-n` */
|
|
53
|
+
decisionIds: string[];
|
|
54
|
+
/** `CE-7`, `TKT-12`, … (not `D-n`) */
|
|
55
|
+
ticketIds: string[];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Every id in a text that the trace index might know.
|
|
59
|
+
*
|
|
60
|
+
* @param text - Delivered text
|
|
61
|
+
* @returns Ids by kind, each de-duplicated
|
|
62
|
+
*/
|
|
63
|
+
export declare function extractTextRefs(text: string): TextRefs;
|
|
64
|
+
/**
|
|
65
|
+
* A summary safe to store: one line, routing prefixes and trace markers
|
|
66
|
+
* removed, secrets redacted, cut to {@link TRACE_CONSTANTS.SUMMARY_MAX_CHARS}.
|
|
67
|
+
*
|
|
68
|
+
* @param text - Raw text (a message body, an error, a title)
|
|
69
|
+
* @param max - Character limit
|
|
70
|
+
* @returns The summary
|
|
71
|
+
*/
|
|
72
|
+
export declare function safeSummary(text: string | null | undefined, max?: number): string;
|
|
73
|
+
/**
|
|
74
|
+
* Keep only small values in an event's data map: strings are summarised,
|
|
75
|
+
* non-finite numbers and empty values are dropped.
|
|
76
|
+
*
|
|
77
|
+
* @param data - Raw data
|
|
78
|
+
* @returns Cleaned data, or undefined when nothing is left
|
|
79
|
+
*/
|
|
80
|
+
export declare function cleanTraceData(data: Record<string, unknown> | undefined): TraceData | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* The label of a skill call: method plus API path with ids replaced, so calls
|
|
83
|
+
* group by endpoint.
|
|
84
|
+
*
|
|
85
|
+
* @param method - HTTP method
|
|
86
|
+
* @param apiPath - Path relative to `/api` (query string ignored)
|
|
87
|
+
* @returns e.g. `POST /task-pool/:id/complete`
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* skillLabel('post', '/terminal/crewly-orc/write?x=1') // 'POST /terminal/:session/write'
|
|
91
|
+
*/
|
|
92
|
+
export declare function skillLabel(method: string, apiPath: string): string;
|
|
93
|
+
//# sourceMappingURL=trace-markers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-markers.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/trace/trace-markers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAoB7D;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAG1F;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,+CAA+C;AAC/C,MAAM,WAAW,QAAQ;IACxB,qDAAqD;IACrD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,sCAAsC;IACtC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY;IACZ,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sCAAsC;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAOtD;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAE,MAA0C,GAAG,MAAM,CAOpH;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAS/F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAWlE"}
|