pi-crew 0.9.53 → 0.9.55
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/CHANGELOG.md +45 -0
- package/package.json +6 -3
- package/scripts/clean-strip-types.mjs +60 -0
- package/src/adapters/claude-adapter.ts +23 -0
- package/src/adapters/codex-adapter.ts +21 -0
- package/src/adapters/cursor-adapter.ts +17 -0
- package/src/adapters/export-util.ts +143 -0
- package/src/adapters/index.ts +15 -0
- package/src/adapters/registry.ts +18 -0
- package/src/adapters/types.ts +23 -0
- package/src/agents/agent-config.ts +194 -0
- package/src/agents/agent-search.ts +98 -0
- package/src/agents/agent-serializer.ts +38 -0
- package/src/agents/discover-agents.ts +623 -0
- package/src/benchmark/benchmark-runner.ts +313 -0
- package/src/benchmark/feedback-loop.ts +73 -0
- package/src/config/config.ts +1270 -0
- package/src/config/defaults.ts +193 -0
- package/src/config/drift-detector.ts +290 -0
- package/src/config/markers.ts +330 -0
- package/src/config/resilient-parser.ts +117 -0
- package/src/config/role-tools.ts +118 -0
- package/src/config/suggestions.ts +75 -0
- package/src/config/types.ts +280 -0
- package/src/errors.ts +194 -0
- package/src/extension/action-suggestions.ts +117 -0
- package/src/extension/async-notifier.ts +179 -0
- package/src/extension/autonomous-policy.ts +209 -0
- package/src/extension/command-completions.ts +120 -0
- package/src/extension/context-status-injection.ts +185 -0
- package/src/extension/crew-autocomplete.ts +131 -0
- package/src/extension/crew-cleanup.ts +168 -0
- package/src/extension/crew-input-router.ts +93 -0
- package/src/extension/crew-shortcuts.ts +87 -0
- package/src/extension/crew-vibes/cat-frames.ts +18 -0
- package/src/extension/crew-vibes/config.ts +195 -0
- package/src/extension/crew-vibes/figures.ts +101 -0
- package/src/extension/crew-vibes/font-detect.ts +71 -0
- package/src/extension/crew-vibes/footer.ts +292 -0
- package/src/extension/crew-vibes/index.ts +432 -0
- package/src/extension/crew-vibes/provider-usage.ts +396 -0
- package/src/extension/crew-vibes/render.ts +206 -0
- package/src/extension/crew-vibes/speed.ts +286 -0
- package/src/extension/cross-extension-rpc.ts +350 -0
- package/src/extension/help.ts +62 -0
- package/src/extension/import-index.ts +74 -0
- package/src/extension/knowledge-injection.ts +402 -0
- package/src/extension/management.ts +571 -0
- package/src/extension/message-renderers.ts +108 -0
- package/src/extension/notification-router.ts +152 -0
- package/src/extension/notification-sink.ts +54 -0
- package/src/extension/pi-api.ts +56 -0
- package/src/extension/plan-orchestrate.ts +302 -0
- package/src/extension/project-init.ts +170 -0
- package/src/extension/register.ts +113 -0
- package/src/extension/registration/artifact-cleanup.ts +20 -0
- package/src/extension/registration/command-registration.ts +58 -0
- package/src/extension/registration/command-utils.ts +58 -0
- package/src/extension/registration/commands.ts +1228 -0
- package/src/extension/registration/compaction-guard.ts +333 -0
- package/src/extension/registration/context-builder.ts +135 -0
- package/src/extension/registration/crash-recovery-cache.ts +54 -0
- package/src/extension/registration/foreground-run-controller.ts +238 -0
- package/src/extension/registration/hook-registration.ts +119 -0
- package/src/extension/registration/lazy-configurers.ts +124 -0
- package/src/extension/registration/lifecycle-handlers.ts +923 -0
- package/src/extension/registration/lifecycle.ts +259 -0
- package/src/extension/registration/observability.ts +322 -0
- package/src/extension/registration/registration-types.ts +158 -0
- package/src/extension/registration/runtime-cleanup.ts +230 -0
- package/src/extension/registration/subagent-helpers.ts +125 -0
- package/src/extension/registration/subagent-manager-setup.ts +330 -0
- package/src/extension/registration/subagent-tools.ts +456 -0
- package/src/extension/registration/team-tool.ts +225 -0
- package/src/extension/registration/tool-registration.ts +50 -0
- package/src/extension/registration/ui.ts +172 -0
- package/src/extension/registration/viewers.ts +121 -0
- package/src/extension/registration/wire-cross-extension.ts +37 -0
- package/src/extension/result-watcher.ts +139 -0
- package/src/extension/rpc-hmac.ts +256 -0
- package/src/extension/run-bundle-schema.ts +104 -0
- package/src/extension/run-export.ts +97 -0
- package/src/extension/run-import.ts +168 -0
- package/src/extension/run-index.ts +131 -0
- package/src/extension/run-maintenance.ts +190 -0
- package/src/extension/session-summary.ts +18 -0
- package/src/extension/team-manager-command.ts +153 -0
- package/src/extension/team-onboard.ts +180 -0
- package/src/extension/team-recommendation.ts +288 -0
- package/src/extension/team-tool/anchor.ts +172 -0
- package/src/extension/team-tool/api.ts +1244 -0
- package/src/extension/team-tool/auto-summarize.ts +142 -0
- package/src/extension/team-tool/cache-control.ts +19 -0
- package/src/extension/team-tool/cancel.ts +337 -0
- package/src/extension/team-tool/chain-dispatch.ts +95 -0
- package/src/extension/team-tool/chain-executor.ts +379 -0
- package/src/extension/team-tool/config-patch.ts +50 -0
- package/src/extension/team-tool/context.ts +149 -0
- package/src/extension/team-tool/destructive-gate.ts +52 -0
- package/src/extension/team-tool/dispatch/automate.ts +80 -0
- package/src/extension/team-tool/dispatch/control.ts +42 -0
- package/src/extension/team-tool/dispatch/index.ts +95 -0
- package/src/extension/team-tool/dispatch/manage.ts +161 -0
- package/src/extension/team-tool/dispatch/run.ts +53 -0
- package/src/extension/team-tool/dispatch/status.ts +187 -0
- package/src/extension/team-tool/doctor.ts +431 -0
- package/src/extension/team-tool/explain.ts +282 -0
- package/src/extension/team-tool/failure-patterns.ts +118 -0
- package/src/extension/team-tool/goal-wrap.ts +330 -0
- package/src/extension/team-tool/goal.ts +556 -0
- package/src/extension/team-tool/handle-schedule.ts +332 -0
- package/src/extension/team-tool/handle-settings.ts +520 -0
- package/src/extension/team-tool/health-monitor.ts +481 -0
- package/src/extension/team-tool/inspect.ts +88 -0
- package/src/extension/team-tool/intent-policy.ts +45 -0
- package/src/extension/team-tool/lifecycle-actions.ts +615 -0
- package/src/extension/team-tool/orchestrate.ts +98 -0
- package/src/extension/team-tool/parallel-dispatch.ts +183 -0
- package/src/extension/team-tool/plan.ts +50 -0
- package/src/extension/team-tool/respond.ts +150 -0
- package/src/extension/team-tool/run-deadline.ts +66 -0
- package/src/extension/team-tool/run-not-found.ts +49 -0
- package/src/extension/team-tool/run.ts +1051 -0
- package/src/extension/team-tool/status.ts +260 -0
- package/src/extension/team-tool/workflow-manage.ts +261 -0
- package/src/extension/team-tool-types.ts +26 -0
- package/src/extension/team-tool.ts +750 -0
- package/src/extension/tool-result.ts +16 -0
- package/src/extension/validate-resources.ts +108 -0
- package/src/hooks/registry.ts +200 -0
- package/src/hooks/types.ts +69 -0
- package/src/i18n.ts +212 -0
- package/src/observability/correlation.ts +50 -0
- package/src/observability/event-bus.ts +86 -0
- package/src/observability/event-to-metric.ts +170 -0
- package/src/observability/exporters/adapter.ts +27 -0
- package/src/observability/exporters/otlp-exporter.ts +356 -0
- package/src/observability/exporters/prometheus-exporter.ts +54 -0
- package/src/observability/metric-registry.ts +100 -0
- package/src/observability/metric-retention.ts +64 -0
- package/src/observability/metric-sink.ts +99 -0
- package/src/observability/metrics-primitives.ts +219 -0
- package/src/plugins/plugin-define.ts +6 -0
- package/src/plugins/plugin-registry.ts +32 -0
- package/src/plugins/plugins/index.ts +3 -0
- package/src/plugins/plugins/nextjs.ts +19 -0
- package/src/plugins/plugins/vite.ts +10 -0
- package/src/plugins/plugins/vitest.ts +9 -0
- package/src/prompt/prompt-runtime.ts +380 -0
- package/src/runtime/adaptive-plan.ts +563 -0
- package/src/runtime/agent-control.ts +215 -0
- package/src/runtime/agent-memory.ts +81 -0
- package/src/runtime/agent-observability.ts +122 -0
- package/src/runtime/anchor-manager.ts +475 -0
- package/src/runtime/async-marker.ts +32 -0
- package/src/runtime/async-runner.ts +381 -0
- package/src/runtime/attention-events.ts +28 -0
- package/src/runtime/auto-summarize.ts +344 -0
- package/src/runtime/background-runner.ts +840 -0
- package/src/runtime/batch-barrier.ts +147 -0
- package/src/runtime/broker-issuer.ts +39 -0
- package/src/runtime/cancellation-token.ts +99 -0
- package/src/runtime/cancellation.ts +99 -0
- package/src/runtime/capability-inventory.ts +137 -0
- package/src/runtime/chain-parser.ts +237 -0
- package/src/runtime/chain-runner.ts +606 -0
- package/src/runtime/checkpoint.ts +291 -0
- package/src/runtime/child-pi-constants.ts +42 -0
- package/src/runtime/child-pi-kill.ts +180 -0
- package/src/runtime/child-pi-pool.ts +68 -0
- package/src/runtime/child-pi-spawn.ts +287 -0
- package/src/runtime/child-pi-steering.ts +128 -0
- package/src/runtime/child-pi-streams.ts +296 -0
- package/src/runtime/child-pi-transcript.ts +169 -0
- package/src/runtime/child-pi.ts +1105 -0
- package/src/runtime/coalesce-tasks.ts +268 -0
- package/src/runtime/code-summary.ts +292 -0
- package/src/runtime/command-trace.ts +105 -0
- package/src/runtime/compact-pipeline.ts +56 -0
- package/src/runtime/compact-stages/ansi-strip-stage.ts +25 -0
- package/src/runtime/compact-stages/blank-collapse-stage.ts +31 -0
- package/src/runtime/compact-stages/deduplicate-stage.ts +34 -0
- package/src/runtime/compact-stages/head-snap-stage.ts +57 -0
- package/src/runtime/compact-stages/index.ts +23 -0
- package/src/runtime/compact-stages/tail-capture-stage.ts +77 -0
- package/src/runtime/compact-stages/truncation-stage.ts +74 -0
- package/src/runtime/compaction-summary.ts +278 -0
- package/src/runtime/completion-guard.ts +207 -0
- package/src/runtime/concurrency.ts +58 -0
- package/src/runtime/crash-classification.ts +229 -0
- package/src/runtime/crash-recovery.ts +594 -0
- package/src/runtime/crew-agent-records.ts +595 -0
- package/src/runtime/crew-agent-runtime.ts +62 -0
- package/src/runtime/crew-broker-child.ts +88 -0
- package/src/runtime/crew-broker-client.ts +673 -0
- package/src/runtime/crew-broker-tokens.ts +159 -0
- package/src/runtime/crew-broker.ts +1304 -0
- package/src/runtime/crew-hooks.ts +227 -0
- package/src/runtime/cross-extension-rpc.ts +143 -0
- package/src/runtime/custom-tools/irc-tool.ts +282 -0
- package/src/runtime/custom-tools/submit-result-tool.ts +102 -0
- package/src/runtime/deadletter.ts +47 -0
- package/src/runtime/delivery-coordinator.ts +211 -0
- package/src/runtime/delta-conflict.ts +348 -0
- package/src/runtime/deterministic-ast.ts +161 -0
- package/src/runtime/diagnostic-export.ts +171 -0
- package/src/runtime/direct-run.ts +45 -0
- package/src/runtime/dwf-state-store.ts +102 -0
- package/src/runtime/dynamic-workflow-context.ts +1013 -0
- package/src/runtime/dynamic-workflow-runner.ts +325 -0
- package/src/runtime/effectiveness.ts +90 -0
- package/src/runtime/errors/crew-errors.ts +162 -0
- package/src/runtime/event-stream-bridge.ts +98 -0
- package/src/runtime/foreground-control.ts +193 -0
- package/src/runtime/foreground-watchdog.ts +132 -0
- package/src/runtime/global-worker-cap.ts +96 -0
- package/src/runtime/goal-achievement.ts +148 -0
- package/src/runtime/goal-evaluator.ts +365 -0
- package/src/runtime/goal-loop-runner.ts +825 -0
- package/src/runtime/goal-state-store.ts +219 -0
- package/src/runtime/green-contract.ts +55 -0
- package/src/runtime/group-join.ts +267 -0
- package/src/runtime/handoff-manager.ts +598 -0
- package/src/runtime/heartbeat-gradient.ts +36 -0
- package/src/runtime/heartbeat-watcher.ts +239 -0
- package/src/runtime/hidden-handoff.ts +407 -0
- package/src/runtime/important-line-classifier.ts +140 -0
- package/src/runtime/intercom-bridge.ts +187 -0
- package/src/runtime/iteration-hooks.ts +305 -0
- package/src/runtime/live-agent-control.ts +136 -0
- package/src/runtime/live-agent-manager.ts +704 -0
- package/src/runtime/live-control-realtime.ts +56 -0
- package/src/runtime/live-extension-bridge.ts +148 -0
- package/src/runtime/live-irc.ts +97 -0
- package/src/runtime/live-session-health.ts +108 -0
- package/src/runtime/live-session-runtime.ts +1146 -0
- package/src/runtime/loop-gates.ts +128 -0
- package/src/runtime/manifest-cache.ts +375 -0
- package/src/runtime/mcp-proxy.ts +105 -0
- package/src/runtime/metric-parser.ts +36 -0
- package/src/runtime/model-fallback.ts +409 -0
- package/src/runtime/model-resolver.ts +126 -0
- package/src/runtime/model-scope.ts +158 -0
- package/src/runtime/orphan-worker-registry.ts +465 -0
- package/src/runtime/output-validator.ts +202 -0
- package/src/runtime/overflow-recovery.ts +206 -0
- package/src/runtime/parallel-research.ts +68 -0
- package/src/runtime/parallel-utils.ts +160 -0
- package/src/runtime/parent-guard.ts +134 -0
- package/src/runtime/path-overlap.ts +150 -0
- package/src/runtime/peer-dep.ts +292 -0
- package/src/runtime/per-write-validator.ts +181 -0
- package/src/runtime/phase-progress.ts +217 -0
- package/src/runtime/phase-tracker.ts +385 -0
- package/src/runtime/pi-args.ts +655 -0
- package/src/runtime/pi-json-output.ts +170 -0
- package/src/runtime/pi-spawn.ts +273 -0
- package/src/runtime/pipeline-runner.ts +523 -0
- package/src/runtime/plan-templates.ts +201 -0
- package/src/runtime/policy-engine.ts +115 -0
- package/src/runtime/post-checks.ts +142 -0
- package/src/runtime/post-exit-stdio-guard.ts +109 -0
- package/src/runtime/process-lifecycle.ts +491 -0
- package/src/runtime/process-status.ts +154 -0
- package/src/runtime/progress-event-coalescer.ts +44 -0
- package/src/runtime/progress-tracker.ts +124 -0
- package/src/runtime/prose-compressor.ts +162 -0
- package/src/runtime/recovery-recipes.ts +203 -0
- package/src/runtime/replace.ts +570 -0
- package/src/runtime/resilient-edit.ts +153 -0
- package/src/runtime/result-extractor.ts +217 -0
- package/src/runtime/retry-executor.ts +109 -0
- package/src/runtime/retry-runner.ts +336 -0
- package/src/runtime/role-permission.ts +59 -0
- package/src/runtime/run-coalesced-task-group.ts +308 -0
- package/src/runtime/run-drift.ts +219 -0
- package/src/runtime/run-tracker.ts +116 -0
- package/src/runtime/run-worker.ts +78 -0
- package/src/runtime/runtime-policy.ts +29 -0
- package/src/runtime/runtime-resolver.ts +172 -0
- package/src/runtime/runtime-warmup.ts +160 -0
- package/src/runtime/scheduler.ts +353 -0
- package/src/runtime/semaphore.ts +141 -0
- package/src/runtime/sensitive-paths.ts +93 -0
- package/src/runtime/session-resources.ts +25 -0
- package/src/runtime/session-snapshot.ts +59 -0
- package/src/runtime/session-usage.ts +79 -0
- package/src/runtime/settings-store.ts +155 -0
- package/src/runtime/sidechain-output.ts +35 -0
- package/src/runtime/single-agent-compose.ts +84 -0
- package/src/runtime/skill-effectiveness.ts +524 -0
- package/src/runtime/skill-instructions.ts +394 -0
- package/src/runtime/stale-reconciler.ts +680 -0
- package/src/runtime/stream-preview.ts +184 -0
- package/src/runtime/streaming-output.ts +50 -0
- package/src/runtime/subagent-manager.ts +561 -0
- package/src/runtime/subprocess-tool-registry.ts +70 -0
- package/src/runtime/supervisor-contact.ts +64 -0
- package/src/runtime/task-display.ts +52 -0
- package/src/runtime/task-graph-scheduler.ts +227 -0
- package/src/runtime/task-graph.ts +290 -0
- package/src/runtime/task-health.ts +83 -0
- package/src/runtime/task-id.ts +161 -0
- package/src/runtime/task-output-context.ts +602 -0
- package/src/runtime/task-packet.ts +268 -0
- package/src/runtime/task-quality.ts +199 -0
- package/src/runtime/task-runner/capabilities.ts +78 -0
- package/src/runtime/task-runner/child-executor.ts +790 -0
- package/src/runtime/task-runner/context-retrieval.ts +163 -0
- package/src/runtime/task-runner/live-executor.ts +227 -0
- package/src/runtime/task-runner/output-splitter.ts +152 -0
- package/src/runtime/task-runner/post-execution.ts +480 -0
- package/src/runtime/task-runner/pre-execution.ts +365 -0
- package/src/runtime/task-runner/progress.ts +157 -0
- package/src/runtime/task-runner/prompt-builder.ts +278 -0
- package/src/runtime/task-runner/prompt-pipeline.ts +88 -0
- package/src/runtime/task-runner/result-utils.ts +16 -0
- package/src/runtime/task-runner/retrieval-orchestrator.ts +310 -0
- package/src/runtime/task-runner/run-projection.ts +125 -0
- package/src/runtime/task-runner/scaffold-executor.ts +25 -0
- package/src/runtime/task-runner/state-helpers.ts +176 -0
- package/src/runtime/task-runner/tail-read.ts +34 -0
- package/src/runtime/task-runner.ts +216 -0
- package/src/runtime/team-runner-artifacts.ts +13 -0
- package/src/runtime/team-runner.ts +2396 -0
- package/src/runtime/tool-output-pruner.ts +333 -0
- package/src/runtime/tool-progress.ts +278 -0
- package/src/runtime/usage-tracker.ts +73 -0
- package/src/runtime/verification-gates.ts +579 -0
- package/src/runtime/verification-integrity.ts +108 -0
- package/src/runtime/verification-worktree.ts +186 -0
- package/src/runtime/worker-heartbeat.ts +25 -0
- package/src/runtime/worker-startup.ts +83 -0
- package/src/runtime/workflow-state.ts +195 -0
- package/src/runtime/workspace-lock.ts +443 -0
- package/src/runtime/workspace-tree.ts +312 -0
- package/src/runtime/yield-handler.ts +224 -0
- package/src/runtime/zombie-scanner.ts +298 -0
- package/src/schema/config-schema.ts +327 -0
- package/src/schema/team-tool-schema.ts +492 -0
- package/src/schema/validation-types.ts +159 -0
- package/src/skills/discover-skills.ts +203 -0
- package/src/skills/skill-templates.ts +456 -0
- package/src/skills/validate.ts +285 -0
- package/src/state/active-run-registry.ts +439 -0
- package/src/state/artifact-store.ts +176 -0
- package/src/state/atomic-write.ts +970 -0
- package/src/state/blob-store.ts +308 -0
- package/src/state/contracts.ts +160 -0
- package/src/state/crew-init.ts +269 -0
- package/src/state/decision-ledger.ts +372 -0
- package/src/state/event-log-rotation.ts +399 -0
- package/src/state/event-log.ts +1465 -0
- package/src/state/event-reconstructor.ts +229 -0
- package/src/state/gitignore-manager.ts +46 -0
- package/src/state/health-store.ts +79 -0
- package/src/state/hook-instinct-bridge.ts +94 -0
- package/src/state/hook-integrations.ts +51 -0
- package/src/state/instinct-store.ts +275 -0
- package/src/state/jsonl-writer.ts +107 -0
- package/src/state/locks.ts +562 -0
- package/src/state/mailbox.ts +916 -0
- package/src/state/observation-store.ts +176 -0
- package/src/state/run-cache.ts +193 -0
- package/src/state/run-graph.ts +183 -0
- package/src/state/run-metrics.ts +165 -0
- package/src/state/schedule.ts +166 -0
- package/src/state/session-state-map.ts +51 -0
- package/src/state/state-store.ts +973 -0
- package/src/state/task-claims.ts +61 -0
- package/src/state/tiered-eval.ts +480 -0
- package/src/state/types-eval.ts +58 -0
- package/src/state/types.ts +447 -0
- package/src/state/usage.ts +138 -0
- package/src/state/worker-atomic-writer.ts +198 -0
- package/src/subagents/async-entry.ts +1 -0
- package/src/subagents/index.ts +3 -0
- package/src/subagents/live/control.ts +1 -0
- package/src/subagents/live/manager.ts +1 -0
- package/src/subagents/live/realtime.ts +1 -0
- package/src/subagents/live/session-runtime.ts +1 -0
- package/src/subagents/manager.ts +1 -0
- package/src/subagents/spawn.ts +1 -0
- package/src/teams/discover-teams.ts +187 -0
- package/src/teams/team-config.ts +27 -0
- package/src/teams/team-serializer.ts +38 -0
- package/src/tools/safe-bash-extension.ts +54 -0
- package/src/tools/safe-bash.ts +505 -0
- package/src/types/diff.d.ts +18 -0
- package/src/types/new-api-types.ts +35 -0
- package/src/ui/agent-management-overlay.ts +160 -0
- package/src/ui/card-colors.ts +139 -0
- package/src/ui/crew-footer.ts +102 -0
- package/src/ui/crew-select-list.ts +112 -0
- package/src/ui/dashboard-panes/agents-pane.ts +164 -0
- package/src/ui/dashboard-panes/cancellation-pane.ts +66 -0
- package/src/ui/dashboard-panes/capability-pane.ts +77 -0
- package/src/ui/dashboard-panes/health-pane.ts +31 -0
- package/src/ui/dashboard-panes/mailbox-pane.ts +35 -0
- package/src/ui/dashboard-panes/metrics-pane.ts +37 -0
- package/src/ui/dashboard-panes/progress-pane.ts +38 -0
- package/src/ui/dashboard-panes/transcript-pane.ts +10 -0
- package/src/ui/deploy-bundled-themes.ts +71 -0
- package/src/ui/dwf-phase-display.ts +151 -0
- package/src/ui/dynamic-border.ts +35 -0
- package/src/ui/format-helpers.ts +31 -0
- package/src/ui/heartbeat-aggregator.ts +74 -0
- package/src/ui/key-utils.ts +42 -0
- package/src/ui/keybinding-map.ts +248 -0
- package/src/ui/layout-primitives.ts +106 -0
- package/src/ui/live-conversation-overlay.ts +183 -0
- package/src/ui/live-duration.ts +55 -0
- package/src/ui/live-run-sidebar.ts +293 -0
- package/src/ui/loaders.ts +6 -0
- package/src/ui/mascot.ts +449 -0
- package/src/ui/overlays/agent-picker-overlay.ts +66 -0
- package/src/ui/overlays/confirm-overlay.ts +60 -0
- package/src/ui/overlays/help-overlay.ts +177 -0
- package/src/ui/overlays/mailbox-compose-overlay.ts +181 -0
- package/src/ui/overlays/mailbox-compose-preview.ts +78 -0
- package/src/ui/overlays/mailbox-detail-overlay.ts +155 -0
- package/src/ui/pi-ui-compat.ts +68 -0
- package/src/ui/powerbar-publisher.ts +459 -0
- package/src/ui/render-coalescer.ts +101 -0
- package/src/ui/render-diff.ts +160 -0
- package/src/ui/render-scheduler.ts +278 -0
- package/src/ui/run-action-dispatcher.ts +182 -0
- package/src/ui/run-dashboard.ts +910 -0
- package/src/ui/run-event-bus.ts +381 -0
- package/src/ui/run-snapshot-cache.ts +1057 -0
- package/src/ui/settings-overlay.ts +1067 -0
- package/src/ui/shared-overlay-scheduler.ts +96 -0
- package/src/ui/snapshot-types.ts +90 -0
- package/src/ui/spinner.ts +17 -0
- package/src/ui/status-colors.ts +143 -0
- package/src/ui/syntax-highlight.ts +136 -0
- package/src/ui/terminal-status.ts +269 -0
- package/src/ui/theme-adapter.ts +271 -0
- package/src/ui/theme-discovery.ts +199 -0
- package/src/ui/tool-progress-formatter.ts +93 -0
- package/src/ui/tool-renderers/brief-mode.ts +225 -0
- package/src/ui/tool-renderers/index.ts +726 -0
- package/src/ui/transcript-cache.ts +128 -0
- package/src/ui/transcript-entries.ts +256 -0
- package/src/ui/transcript-viewer.ts +424 -0
- package/src/ui/widget/index.ts +418 -0
- package/src/ui/widget/widget-formatters.ts +182 -0
- package/src/ui/widget/widget-model.ts +110 -0
- package/src/ui/widget/widget-renderer.ts +182 -0
- package/src/ui/widget/widget-types.ts +36 -0
- package/src/utils/bm25-search.ts +235 -0
- package/src/utils/completion-dedupe.ts +63 -0
- package/src/utils/conflict-detect.ts +668 -0
- package/src/utils/env-allowlist.ts +30 -0
- package/src/utils/env-filter.ts +155 -0
- package/src/utils/file-coalescer.ts +98 -0
- package/src/utils/fingerprint.ts +180 -0
- package/src/utils/frontmatter.ts +70 -0
- package/src/utils/fs-watch.ts +37 -0
- package/src/utils/gh-protocol.ts +556 -0
- package/src/utils/git.ts +260 -0
- package/src/utils/guards.ts +107 -0
- package/src/utils/ids.ts +24 -0
- package/src/utils/incremental-reader.ts +220 -0
- package/src/utils/internal-error.ts +10 -0
- package/src/utils/names.ts +36 -0
- package/src/utils/ndjson.ts +115 -0
- package/src/utils/paths.ts +227 -0
- package/src/utils/project-detector.ts +160 -0
- package/src/utils/redaction.ts +370 -0
- package/src/utils/resolve-shell.ts +36 -0
- package/src/utils/run-watcher-registry.ts +152 -0
- package/src/utils/safe-paths.ts +393 -0
- package/src/utils/scan-cache.ts +144 -0
- package/src/utils/session-utils.ts +110 -0
- package/src/utils/sleep.ts +54 -0
- package/src/utils/socket-path.ts +164 -0
- package/src/utils/sse-parser.ts +131 -0
- package/src/utils/task-name-generator.ts +337 -0
- package/src/utils/timings.ts +33 -0
- package/src/utils/token-counter.ts +200 -0
- package/src/utils/visual.ts +207 -0
- package/src/workflows/cost-estimator.ts +34 -0
- package/src/workflows/discover-workflows.ts +308 -0
- package/src/workflows/intermediate-store.ts +166 -0
- package/src/workflows/preflight-validator.ts +168 -0
- package/src/workflows/topology-analyzer.ts +203 -0
- package/src/workflows/validate-workflow.ts +50 -0
- package/src/workflows/workflow-config.ts +75 -0
- package/src/workflows/workflow-serializer.ts +32 -0
- package/src/worktree/branch-freshness.ts +112 -0
- package/src/worktree/cleanup.ts +341 -0
- package/src/worktree/worktree-manager.ts +1204 -0
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import type { TeamEvent } from "../state/event-log.ts";
|
|
2
|
+
import { readEventsCursor } from "../state/event-log.ts";
|
|
3
|
+
import type { RenderSchedulerEventBus } from "./render-scheduler.ts";
|
|
4
|
+
|
|
5
|
+
export type RunEventType =
|
|
6
|
+
| "task_started"
|
|
7
|
+
| "task_completed"
|
|
8
|
+
| "task_failed"
|
|
9
|
+
| "task_cancelled"
|
|
10
|
+
| "worker_status"
|
|
11
|
+
| "mailbox_updated"
|
|
12
|
+
| "effectiveness_changed"
|
|
13
|
+
| "run_started"
|
|
14
|
+
| "run_completed"
|
|
15
|
+
| "run_blocked"
|
|
16
|
+
| "run_cancelled"
|
|
17
|
+
| "run.cache_invalidated";
|
|
18
|
+
|
|
19
|
+
/** Typed channel names for category-based event subscription. */
|
|
20
|
+
export type EventChannel = "worker:progress" | "worker:lifecycle" | "worker:stream" | "run:state" | "ui:invalidate";
|
|
21
|
+
|
|
22
|
+
/** Sets used by classifyEventChannel for O(1) lookup. */
|
|
23
|
+
const WORKER_PROGRESS_TYPES = new Set(["tool_execution_start", "tool_result", "agent_progress", "worker_status"]);
|
|
24
|
+
const WORKER_LIFECYCLE_TYPES = new Set([
|
|
25
|
+
"task.started",
|
|
26
|
+
"task.completed",
|
|
27
|
+
"task.failed",
|
|
28
|
+
"task.needs_attention",
|
|
29
|
+
"task_started",
|
|
30
|
+
"task_completed",
|
|
31
|
+
"task_failed",
|
|
32
|
+
"task_cancelled",
|
|
33
|
+
"run.started",
|
|
34
|
+
"run.completed",
|
|
35
|
+
"run.cancelled",
|
|
36
|
+
"run.failed",
|
|
37
|
+
"run_started",
|
|
38
|
+
"run_completed",
|
|
39
|
+
"run_cancelled",
|
|
40
|
+
"run_blocked",
|
|
41
|
+
]);
|
|
42
|
+
const WORKER_STREAM_TYPES = new Set(["stdout_chunk", "stderr_chunk", "stream"]);
|
|
43
|
+
const RUN_STATE_TYPES = new Set(["manifest.saved", "task.claimed", "task.unclaimed", "mailbox_updated"]);
|
|
44
|
+
const UI_INVALIDATE_TYPES = new Set(["effectiveness_changed", "snapshot_stale", "run.cache_invalidated"]);
|
|
45
|
+
|
|
46
|
+
/** Classify an event type string into a typed channel. */
|
|
47
|
+
export function classifyEventChannel(type: string): EventChannel {
|
|
48
|
+
if (WORKER_PROGRESS_TYPES.has(type)) return "worker:progress";
|
|
49
|
+
if (WORKER_LIFECYCLE_TYPES.has(type)) return "worker:lifecycle";
|
|
50
|
+
if (WORKER_STREAM_TYPES.has(type)) return "worker:stream";
|
|
51
|
+
if (RUN_STATE_TYPES.has(type)) return "run:state";
|
|
52
|
+
if (UI_INVALIDATE_TYPES.has(type)) return "ui:invalidate";
|
|
53
|
+
return "worker:progress"; // default fallback
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface RunEventPayload {
|
|
57
|
+
type: RunEventType;
|
|
58
|
+
runId: string;
|
|
59
|
+
taskId?: string;
|
|
60
|
+
timestamp?: string;
|
|
61
|
+
data?: unknown;
|
|
62
|
+
channel?: EventChannel;
|
|
63
|
+
/**
|
|
64
|
+
* L1: monotonic sequence from the durable event log
|
|
65
|
+
* (`TeamEvent.metadata.seq`). Present on events that originated from a
|
|
66
|
+
* logged TeamEvent (via emitFromTeamEvent). Absent on transient live-only
|
|
67
|
+
* events (e.g. worker_status from the stream bridge) that are never
|
|
68
|
+
* persisted and therefore cannot be replayed or deduped.
|
|
69
|
+
*
|
|
70
|
+
* Used by onWithReplay() to dedup: a live event with seq <= the last seq
|
|
71
|
+
* replayed to a subscriber is suppressed (it was already delivered from
|
|
72
|
+
* the durable log).
|
|
73
|
+
*/
|
|
74
|
+
seq?: number;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export type RunEventCallback = (event: RunEventPayload) => void;
|
|
78
|
+
|
|
79
|
+
class RunEventBus {
|
|
80
|
+
#listeners = new Map<string, Set<RunEventCallback>>();
|
|
81
|
+
#globalListeners = new Set<RunEventCallback>();
|
|
82
|
+
#channelListeners = new Map<EventChannel, Set<RunEventCallback>>();
|
|
83
|
+
#channelRunListeners = new Map<string, Map<EventChannel, Set<RunEventCallback>>>();
|
|
84
|
+
// 1.10 (FIND-13): microtask-batched listener fan-out. Events emitted in
|
|
85
|
+
// the same synchronous tick are coalesced into a single microtask flush
|
|
86
|
+
// instead of one synchronous fan-out per emit. Reduces listener dispatch
|
|
87
|
+
// overhead when many events arrive back-to-back (e.g. from a single
|
|
88
|
+
// appendEvent chain that emits several derived events).
|
|
89
|
+
#emitQueue: RunEventPayload[] = [];
|
|
90
|
+
#flushScheduled = false;
|
|
91
|
+
#disposed = false;
|
|
92
|
+
|
|
93
|
+
on(runId: string, callback: RunEventCallback): () => void {
|
|
94
|
+
const listeners = this.#listeners.get(runId) ?? new Set();
|
|
95
|
+
listeners.add(callback);
|
|
96
|
+
this.#listeners.set(runId, listeners);
|
|
97
|
+
return () => {
|
|
98
|
+
listeners.delete(callback);
|
|
99
|
+
if (listeners.size === 0) this.#listeners.delete(runId);
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
onAny(callback: RunEventCallback): () => void {
|
|
104
|
+
this.#globalListeners.add(callback);
|
|
105
|
+
return () => {
|
|
106
|
+
this.#globalListeners.delete(callback);
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
off(runId: string, callback: RunEventCallback): void {
|
|
111
|
+
const listeners = this.#listeners.get(runId);
|
|
112
|
+
if (listeners) {
|
|
113
|
+
listeners.delete(callback);
|
|
114
|
+
if (listeners.size === 0) this.#listeners.delete(runId);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** Subscribe to all events on a specific channel. */
|
|
119
|
+
onChannel(channel: EventChannel, callback: RunEventCallback): () => void {
|
|
120
|
+
const listeners = this.#channelListeners.get(channel) ?? new Set();
|
|
121
|
+
listeners.add(callback);
|
|
122
|
+
this.#channelListeners.set(channel, listeners);
|
|
123
|
+
return () => {
|
|
124
|
+
listeners.delete(callback);
|
|
125
|
+
if (listeners.size === 0) this.#channelListeners.delete(channel);
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** Subscribe to events on a specific channel for a given runId. */
|
|
130
|
+
onChannelForRun(channel: EventChannel, runId: string, callback: RunEventCallback): () => void {
|
|
131
|
+
const runKey = `${channel}::${runId}`;
|
|
132
|
+
const runMap = this.#channelRunListeners.get(runKey) ?? new Map();
|
|
133
|
+
const listeners = runMap.get(channel) ?? new Set();
|
|
134
|
+
listeners.add(callback);
|
|
135
|
+
runMap.set(channel, listeners);
|
|
136
|
+
this.#channelRunListeners.set(runKey, runMap);
|
|
137
|
+
return () => {
|
|
138
|
+
listeners.delete(callback);
|
|
139
|
+
if (listeners.size === 0) runMap.delete(channel);
|
|
140
|
+
if (runMap.size === 0) this.#channelRunListeners.delete(runKey);
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* L1: subscribe with a catch-up replay from the durable event log.
|
|
146
|
+
*
|
|
147
|
+
* Closes the transient-subscriber-absence gap: when an overlay/widget is
|
|
148
|
+
* disposed and recreated (toggle, reconnect), live events emitted in that
|
|
149
|
+
* window are lost as notification triggers. This method replays the
|
|
150
|
+
* missed TeamEvents from the durable JSONL log BEFORE attaching the live
|
|
151
|
+
* listener, then dedups so events delivered both ways fire exactly once.
|
|
152
|
+
*
|
|
153
|
+
* Unlike deer-flow's 256-event RAM ring buffer (lost on crash), this uses
|
|
154
|
+
* pi-crew's existing durable `readEventsCursor` — O(new bytes) via
|
|
155
|
+
* byte-offset incremental reads, monotonic seq, tail-capped. Strictly
|
|
156
|
+
* better: survives crashes, bounded memory.
|
|
157
|
+
*
|
|
158
|
+
* @param runId Run to subscribe to (live listener scope).
|
|
159
|
+
* @param eventsPath Path to the run's events JSONL (manifest.eventsPath).
|
|
160
|
+
* @param lastSeenSeq Last seq the caller processed; events with seq > this
|
|
161
|
+
* are replayed. Pass 0 to replay everything.
|
|
162
|
+
* @param callback Receives both replayed and live events. Replayed
|
|
163
|
+
* events are delivered directly (NOT via emit, so no
|
|
164
|
+
* fan-out to other subscribers).
|
|
165
|
+
* @returns unsubscribe handle (detaches the live listener).
|
|
166
|
+
*/
|
|
167
|
+
onWithReplay(runId: string, eventsPath: string, lastSeenSeq: number, callback: RunEventCallback): () => void {
|
|
168
|
+
// Phase 1: replay missed events from the durable log directly to this
|
|
169
|
+
// callback. Bounded by limit; readEventsCursor already tail-caps.
|
|
170
|
+
let maxReplayedSeq = lastSeenSeq;
|
|
171
|
+
try {
|
|
172
|
+
const cursor = readEventsCursor(eventsPath, {
|
|
173
|
+
sinceSeq: lastSeenSeq,
|
|
174
|
+
limit: 1000,
|
|
175
|
+
});
|
|
176
|
+
for (const teamEvent of cursor.events) {
|
|
177
|
+
const type = teamEventToRunEventType(teamEvent);
|
|
178
|
+
if (!type) continue; // not all TeamEvents map to a RunEventType
|
|
179
|
+
const payload: RunEventPayload = {
|
|
180
|
+
type,
|
|
181
|
+
runId: teamEvent.runId,
|
|
182
|
+
taskId: teamEvent.taskId,
|
|
183
|
+
timestamp: teamEvent.time,
|
|
184
|
+
data: teamEvent.data,
|
|
185
|
+
channel: classifyEventChannel(type),
|
|
186
|
+
seq: teamEvent.metadata?.seq,
|
|
187
|
+
};
|
|
188
|
+
try {
|
|
189
|
+
callback(payload);
|
|
190
|
+
} catch {
|
|
191
|
+
/* subscriber errors are non-fatal */
|
|
192
|
+
}
|
|
193
|
+
if (typeof teamEvent.metadata?.seq === "number") {
|
|
194
|
+
maxReplayedSeq = Math.max(maxReplayedSeq, teamEvent.metadata.seq);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
} catch {
|
|
198
|
+
// Log read failures are non-fatal — fall through to live-only
|
|
199
|
+
// subscription. The durable log may not exist yet for a brand-new run.
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Phase 2: attach the live listener with dedup. A live event whose seq
|
|
203
|
+
// was already replayed (seq <= maxReplayedSeq) is suppressed. Events
|
|
204
|
+
// without a seq (transient live-only, e.g. worker_status) always
|
|
205
|
+
// deliver — they are never persisted and thus never replayed.
|
|
206
|
+
const liveCallback: RunEventCallback = (event) => {
|
|
207
|
+
if (typeof event.seq === "number" && event.seq <= maxReplayedSeq) return;
|
|
208
|
+
callback(event);
|
|
209
|
+
};
|
|
210
|
+
return this.on(runId, liveCallback);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
emit(event: RunEventPayload): void {
|
|
214
|
+
if (this.#disposed) return;
|
|
215
|
+
// Auto-classify channel if not already set.
|
|
216
|
+
// M2: Use local variable for routing, but also set on event
|
|
217
|
+
// for subscriber API contract (listeners read event.channel).
|
|
218
|
+
if (!event.channel) {
|
|
219
|
+
(event as { channel?: EventChannel }).channel = classifyEventChannel(event.type);
|
|
220
|
+
}
|
|
221
|
+
// 1.10 (FIND-13): queue and defer fan-out to a microtask so multiple
|
|
222
|
+
// emits in the same synchronous tick collapse into one listener-pass
|
|
223
|
+
// each (one per emit, all in the same microtask).
|
|
224
|
+
this.#emitQueue.push(event);
|
|
225
|
+
if (this.#flushScheduled) return;
|
|
226
|
+
this.#flushScheduled = true;
|
|
227
|
+
queueMicrotask(() => {
|
|
228
|
+
this.#flushScheduled = false;
|
|
229
|
+
if (this.#disposed) {
|
|
230
|
+
this.#emitQueue.length = 0;
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
// Swap the queue before dispatching so a listener that re-emits
|
|
234
|
+
// enqueues into a fresh queue (scheduled by its own emit() call)
|
|
235
|
+
// instead of stomping the current iteration.
|
|
236
|
+
const queue = this.#emitQueue;
|
|
237
|
+
this.#emitQueue = [];
|
|
238
|
+
for (const queued of queue) this.#dispatchSync(queued);
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Synchronous per-event listener fan-out. Called from the microtask flush
|
|
244
|
+
* scheduled by emit(); not part of the public API. Mirrors the original
|
|
245
|
+
* (pre-batching) emit body so a single emit still visits every listener
|
|
246
|
+
* registered for the event's runId / channel / global set.
|
|
247
|
+
*/
|
|
248
|
+
#dispatchSync(event: RunEventPayload): void {
|
|
249
|
+
const channel = event.channel!;
|
|
250
|
+
|
|
251
|
+
// Existing: runId-specific listeners
|
|
252
|
+
const listeners = this.#listeners.get(event.runId);
|
|
253
|
+
if (listeners) {
|
|
254
|
+
for (const cb of listeners) {
|
|
255
|
+
try {
|
|
256
|
+
cb(event);
|
|
257
|
+
} catch {
|
|
258
|
+
/* subscriber errors are non-fatal */
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Existing: global listeners
|
|
264
|
+
for (const cb of this.#globalListeners) {
|
|
265
|
+
try {
|
|
266
|
+
cb(event);
|
|
267
|
+
} catch {
|
|
268
|
+
/* subscriber errors are non-fatal */
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// New: channel listeners
|
|
273
|
+
const channelListeners = this.#channelListeners.get(channel);
|
|
274
|
+
if (channelListeners) {
|
|
275
|
+
for (const cb of channelListeners) {
|
|
276
|
+
try {
|
|
277
|
+
cb(event);
|
|
278
|
+
} catch {
|
|
279
|
+
/* subscriber errors are non-fatal */
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// New: channel+runId listeners
|
|
285
|
+
const runKey = `${channel}::${event.runId}`;
|
|
286
|
+
const runMap = this.#channelRunListeners.get(runKey);
|
|
287
|
+
if (runMap) {
|
|
288
|
+
const runChannelListeners = runMap.get(channel);
|
|
289
|
+
if (runChannelListeners) {
|
|
290
|
+
for (const cb of runChannelListeners) {
|
|
291
|
+
try {
|
|
292
|
+
cb(event);
|
|
293
|
+
} catch {
|
|
294
|
+
/* subscriber errors are non-fatal */
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/** Dispose all subscriptions including channel-based ones. */
|
|
302
|
+
dispose(): void {
|
|
303
|
+
this.#disposed = true;
|
|
304
|
+
this.#listeners.clear();
|
|
305
|
+
this.#globalListeners.clear();
|
|
306
|
+
this.#channelListeners.clear();
|
|
307
|
+
this.#channelRunListeners.clear();
|
|
308
|
+
this.#emitQueue.length = 0;
|
|
309
|
+
this.#flushScheduled = false;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
listenerCount(runId?: string): number {
|
|
313
|
+
if (runId) return this.#listeners.get(runId)?.size ?? 0;
|
|
314
|
+
let total = this.#globalListeners.size;
|
|
315
|
+
for (const set of this.#listeners.values()) total += set.size;
|
|
316
|
+
for (const set of this.#channelListeners.values()) total += set.size;
|
|
317
|
+
for (const runMap of this.#channelRunListeners.values()) {
|
|
318
|
+
for (const set of runMap.values()) total += set.size;
|
|
319
|
+
}
|
|
320
|
+
return total;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/** Global singleton run event bus for UI-first event delivery. */
|
|
325
|
+
export const runEventBus = new RunEventBus();
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* 1.10 (UI-P1-1): adapt `runEventBus.onChannel` to the
|
|
329
|
+
* `RenderSchedulerEventBus` interface so overlays can route their
|
|
330
|
+
* `run:state` / `worker:lifecycle` / `ui:invalidate` subscriptions through
|
|
331
|
+
* a `RenderScheduler` (debounce + fallback + per-runId coalescing) instead of
|
|
332
|
+
* calling `runEventBus.onChannel(...)` directly three times. Without the
|
|
333
|
+
* scheduler, a single event triggers up to 9 callbacks across the 3 overlays
|
|
334
|
+
* (dashboard + sidebar + widget) and bursts into ~150 invalidate+requestRender
|
|
335
|
+
* /sec under load.
|
|
336
|
+
*
|
|
337
|
+
* Returns a fresh adapter whose `on(event, handler)` is a thin shim over
|
|
338
|
+
* `runEventBus.onChannel`. The channels list is closed-over so we can do a
|
|
339
|
+
* defensive membership check without re-reading the channel set on every
|
|
340
|
+
* subscription.
|
|
341
|
+
*/
|
|
342
|
+
export function runEventBusAsRenderScheduler(channels: readonly EventChannel[]): RenderSchedulerEventBus {
|
|
343
|
+
const allowed = new Set<EventChannel>(channels);
|
|
344
|
+
return {
|
|
345
|
+
on: (event: string, handler: (payload: unknown) => void): (() => void) | void => {
|
|
346
|
+
if (!allowed.has(event as EventChannel)) return undefined;
|
|
347
|
+
return runEventBus.onChannel(event as EventChannel, handler);
|
|
348
|
+
},
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/** Derive a RunEventType from a TeamEvent. */
|
|
353
|
+
export function teamEventToRunEventType(event: TeamEvent): RunEventType | undefined {
|
|
354
|
+
const type = event.type;
|
|
355
|
+
if (type === "task.started") return "task_started";
|
|
356
|
+
if (type === "task.completed") return "task_completed";
|
|
357
|
+
if (type === "task.failed") return "task_failed";
|
|
358
|
+
if (type === "run.completed") return "run_completed";
|
|
359
|
+
if (type === "run.blocked") return "run_blocked";
|
|
360
|
+
if (type === "run.running") return "run_started";
|
|
361
|
+
if (type === "run.cancelled") return "run_cancelled";
|
|
362
|
+
if (type === "task.progress" || type === "mailbox.message_queued" || type === "mailbox.message_delivered") return "mailbox_updated";
|
|
363
|
+
if (type === "run.effectiveness" || type === "task.attention") return "effectiveness_changed";
|
|
364
|
+
return undefined;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/** Emit a run event from a TeamEvent. */
|
|
368
|
+
export function emitFromTeamEvent(event: TeamEvent): void {
|
|
369
|
+
const type = teamEventToRunEventType(event);
|
|
370
|
+
if (!type) return;
|
|
371
|
+
runEventBus.emit({
|
|
372
|
+
type,
|
|
373
|
+
runId: event.runId,
|
|
374
|
+
taskId: event.taskId,
|
|
375
|
+
timestamp: event.time,
|
|
376
|
+
data: event.data,
|
|
377
|
+
// L1: stamp the durable-log seq so onWithReplay() can dedup live
|
|
378
|
+
// delivery against replayed events.
|
|
379
|
+
seq: event.metadata?.seq,
|
|
380
|
+
});
|
|
381
|
+
}
|