@fitchmultz/pi-subagents 0.49.1 → 0.51.0
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 +72 -1
- package/README.md +119 -94
- package/dist/agent/contracts.js +104 -0
- package/dist/agent/cwd.js +51 -0
- package/dist/agent/host.js +69 -0
- package/dist/agent/index.js +456 -0
- package/dist/agent/journal-tail.js +142 -0
- package/dist/agent/launch.js +99 -0
- package/dist/agent/legacy.js +183 -0
- package/dist/agent/notifications.js +210 -0
- package/dist/agent/observation-state.js +246 -0
- package/dist/agent/observation-view.js +258 -0
- package/dist/agent/observation.js +346 -0
- package/dist/agent/observe-card.js +243 -0
- package/dist/agent/observe-chrome.js +85 -0
- package/dist/agent/observe-client.js +285 -0
- package/dist/agent/observe-layout.js +65 -0
- package/dist/agent/observe-reading.js +84 -0
- package/dist/agent/observe-screen.js +436 -0
- package/dist/agent/observe-transcript.js +382 -0
- package/dist/agent/observe.js +441 -0
- package/dist/agent/process.js +346 -0
- package/dist/agent/receipts.js +147 -0
- package/dist/agent/runner.js +477 -0
- package/dist/agent/saved.js +195 -0
- package/dist/agent/shell.js +44 -0
- package/dist/agent/storage.js +130 -0
- package/dist/agent/tool-schemas.js +20 -0
- package/dist/agent/typebox.js +25 -0
- package/dist/agent/usage.js +117 -0
- package/dist/agent/view.js +194 -0
- package/dist/agent/wake.js +99 -0
- package/dist/build-info.js +1 -0
- package/dist/index.js +8 -0
- package/dist/intercom-client.d.ts +26 -0
- package/dist/intercom-client.js +45 -0
- package/dist/pi-intercom/agent-dir.d.ts +1 -0
- package/dist/pi-intercom/bridge-config.js +12 -19
- package/dist/pi-intercom/bridge-http.js +1 -2
- package/dist/pi-intercom/bridge-mailbox.js +2 -7
- package/dist/pi-intercom/bridge-protocol.js +3 -10
- package/dist/pi-intercom/bridge-routes.js +15 -186
- package/dist/pi-intercom/bridge-session.js +4 -97
- package/dist/pi-intercom/bridge.js +12 -35
- package/dist/pi-intercom/broker/broker.js +57 -56
- package/dist/pi-intercom/broker/client-last.d.ts +13 -0
- package/dist/pi-intercom/broker/client-last.js +60 -0
- package/dist/pi-intercom/broker/client.d.ts +60 -0
- package/dist/pi-intercom/broker/client.js +75 -4
- package/dist/pi-intercom/broker/connection.d.ts +29 -0
- package/dist/pi-intercom/broker/connection.js +5 -18
- package/dist/pi-intercom/broker/framing.d.ts +17 -0
- package/dist/pi-intercom/broker/framing.js +10 -7
- package/dist/pi-intercom/broker/guard.js +23 -0
- package/dist/pi-intercom/broker/last.d.ts +26 -0
- package/dist/pi-intercom/broker/last.js +198 -0
- package/dist/pi-intercom/broker/paths.d.ts +13 -0
- package/dist/pi-intercom/broker/paths.js +58 -16
- package/dist/pi-intercom/broker/pid.js +5 -1
- package/dist/pi-intercom/broker/server-connection.js +37 -0
- package/dist/pi-intercom/broker/snapshot-reader.d.ts +9 -0
- package/dist/pi-intercom/broker/snapshots.d.ts +29 -0
- package/dist/pi-intercom/broker/spawn.js +32 -16
- package/dist/pi-intercom/broker/targets.d.ts +9 -0
- package/dist/pi-intercom/broker/targets.js +24 -0
- package/dist/pi-intercom/config.js +0 -23
- package/dist/pi-intercom/connection.js +40 -72
- package/dist/pi-intercom/identity.js +15 -44
- package/dist/pi-intercom/inbound-delivery.js +20 -125
- package/dist/pi-intercom/inbound-journal.js +85 -73
- package/dist/pi-intercom/inbound-record.js +20 -49
- package/dist/pi-intercom/inbound.js +17 -90
- package/dist/pi-intercom/index.js +11 -47
- package/dist/pi-intercom/last-message.js +46 -0
- package/dist/pi-intercom/lifecycle.js +96 -36
- package/dist/pi-intercom/message-format.js +1 -32
- package/dist/pi-intercom/outbound.js +14 -16
- package/dist/pi-intercom/reply-tracker.js +9 -18
- package/dist/pi-intercom/reply-wait.js +17 -108
- package/dist/pi-intercom/runtime-types.js +0 -1
- package/dist/pi-intercom/session-events.js +5 -21
- package/dist/pi-intercom/session-targets.d.ts +24 -0
- package/dist/pi-intercom/tool-arguments.js +4 -0
- package/dist/pi-intercom/tool-registration.js +8 -86
- package/dist/pi-intercom/tool-results.js +5 -7
- package/dist/pi-intercom/tool-schemas.js +13 -67
- package/dist/pi-intercom/tools.js +55 -29
- package/dist/pi-intercom/types.d.ts +212 -0
- package/dist/pi-intercom/types.js +62 -4
- package/dist/pi-intercom/ui/session-format.js +3 -3
- package/dist/pi-intercom/validation.d.ts +12 -0
- package/dist/pi-intercom/validation.js +3 -0
- package/dist/shared/bounded-json.js +151 -0
- package/dist/shared/compact-cards.js +66 -0
- package/dist/shared/journal-frames.js +3 -6
- package/dist/shared/journal-projections.js +0 -31
- package/dist/shared/json-projection.js +267 -129
- package/dist/shared/native-journal.js +123 -56
- package/dist/shared/post-exit-stdio-guard.js +120 -7
- package/dist/shared/tui-action.js +29 -0
- package/dist/shared/types.js +0 -195
- package/dist/shared/unknown.d.ts +9 -0
- package/docs/code-quality.md +6 -3
- package/docs/development.md +93 -92
- package/docs/intercom-bridge.md +211 -415
- package/docs/intercom.md +362 -593
- package/docs/performance.md +185 -192
- package/docs/reference.md +282 -1458
- package/docs/retired-history-maintenance.md +252 -0
- package/package.json +33 -27
- package/scripts/archive-retired-history.mjs +464 -0
- package/scripts/build.mjs +49 -29
- package/scripts/intercom-bridge-credentials.mjs +1 -1
- package/scripts/intercom-remote.mjs +55 -272
- package/scripts/local-install-smoke.mjs +3 -1
- package/scripts/measure-size.mjs +64 -0
- package/scripts/native-package-smoke.mjs +409 -110
- package/scripts/package-smoke.mjs +184 -358
- package/scripts/prepare.mjs +2 -2
- package/scripts/real-pi-live.mjs +377 -0
- package/scripts/real-pi-processes.mjs +12 -39
- package/scripts/real-pi-smoke.mjs +39 -306
- package/scripts/run-tests.mjs +5 -2
- package/scripts/typescript.mjs +35 -0
- package/skills/pi-intercom/SKILL.md +54 -107
- package/skills/pi-subagents/SKILL.md +76 -72
- package/src/agent/contracts.ts +118 -0
- package/src/agent/cwd.ts +69 -0
- package/src/agent/host.ts +81 -0
- package/src/agent/index.ts +520 -0
- package/src/agent/journal-tail.ts +172 -0
- package/src/agent/launch.ts +136 -0
- package/src/agent/legacy.ts +221 -0
- package/src/agent/notifications.ts +256 -0
- package/src/agent/observation-state.ts +277 -0
- package/src/agent/observation-view.ts +267 -0
- package/src/agent/observation.ts +405 -0
- package/src/agent/observe-card.ts +304 -0
- package/src/agent/observe-chrome.ts +170 -0
- package/src/agent/observe-client.ts +318 -0
- package/src/agent/observe-layout.ts +79 -0
- package/src/agent/observe-reading.ts +97 -0
- package/src/agent/observe-screen.ts +481 -0
- package/src/agent/observe-transcript.ts +434 -0
- package/src/agent/observe.ts +473 -0
- package/src/agent/process.ts +385 -0
- package/src/agent/receipts.ts +178 -0
- package/src/agent/runner.ts +515 -0
- package/src/agent/saved.ts +220 -0
- package/src/agent/shell.ts +57 -0
- package/src/agent/storage.ts +139 -0
- package/src/agent/tool-schemas.ts +33 -0
- package/src/agent/typebox.ts +22 -0
- package/src/agent/usage.ts +133 -0
- package/src/agent/view.ts +296 -0
- package/src/agent/wake.ts +107 -0
- package/src/index.ts +10 -0
- package/src/intercom-client.ts +108 -0
- package/src/pi-intercom/bridge-config.ts +13 -24
- package/src/pi-intercom/bridge-http.ts +1 -2
- package/src/pi-intercom/bridge-mailbox.ts +8 -8
- package/src/pi-intercom/bridge-protocol.ts +7 -11
- package/src/pi-intercom/bridge-routes.ts +29 -277
- package/src/pi-intercom/bridge-session.ts +5 -116
- package/src/pi-intercom/bridge.ts +12 -35
- package/src/pi-intercom/broker/broker.ts +63 -74
- package/src/pi-intercom/broker/client-last.ts +78 -0
- package/src/pi-intercom/broker/client.ts +87 -23
- package/src/pi-intercom/broker/connection.ts +5 -17
- package/src/pi-intercom/broker/framing.ts +11 -8
- package/src/pi-intercom/broker/guard.ts +33 -0
- package/src/pi-intercom/broker/last.ts +275 -0
- package/src/pi-intercom/broker/paths.ts +65 -16
- package/src/pi-intercom/broker/pid.ts +6 -1
- package/src/pi-intercom/broker/server-connection.ts +63 -0
- package/src/pi-intercom/broker/spawn.ts +44 -16
- package/src/pi-intercom/broker/targets.ts +42 -0
- package/src/pi-intercom/config.ts +0 -27
- package/src/pi-intercom/connection.ts +60 -92
- package/src/pi-intercom/identity.ts +24 -49
- package/src/pi-intercom/inbound-delivery.ts +25 -154
- package/src/pi-intercom/inbound-journal.ts +105 -86
- package/src/pi-intercom/inbound-record.ts +23 -65
- package/src/pi-intercom/inbound.ts +24 -117
- package/src/pi-intercom/index.ts +13 -49
- package/src/pi-intercom/last-message.ts +64 -0
- package/src/pi-intercom/lifecycle.ts +126 -50
- package/src/pi-intercom/message-format.ts +1 -34
- package/src/pi-intercom/outbound.ts +23 -17
- package/src/pi-intercom/reply-tracker.ts +10 -25
- package/src/pi-intercom/reply-wait.ts +23 -129
- package/src/pi-intercom/runtime-types.ts +5 -59
- package/src/pi-intercom/session-events.ts +7 -35
- package/src/pi-intercom/tool-arguments.ts +6 -0
- package/src/pi-intercom/tool-registration.ts +12 -109
- package/src/pi-intercom/tool-results.ts +10 -9
- package/src/pi-intercom/tool-schemas.ts +13 -108
- package/src/pi-intercom/tools.ts +58 -44
- package/src/pi-intercom/transport.ts +1 -0
- package/src/pi-intercom/types.ts +156 -6
- package/src/pi-intercom/ui/session-format.ts +3 -3
- package/src/pi-intercom/validation.ts +4 -0
- package/src/shared/bounded-json.ts +162 -0
- package/src/shared/compact-cards.ts +118 -0
- package/src/shared/journal-frames.ts +3 -19
- package/src/shared/journal-projections.ts +0 -35
- package/src/shared/json-projection.ts +267 -147
- package/src/shared/native-journal.ts +157 -75
- package/src/shared/post-exit-stdio-guard.ts +172 -8
- package/src/shared/tui-action.ts +39 -0
- package/src/shared/types.ts +0 -257
- package/tsconfig.client.json +8 -0
- package/tsconfig.json +1 -0
- package/agents/context-builder.md +0 -115
- package/agents/debugger.md +0 -58
- package/agents/delegate.md +0 -14
- package/agents/fixer.md +0 -40
- package/agents/oracle.md +0 -82
- package/agents/planner.md +0 -83
- package/agents/researcher.md +0 -60
- package/agents/reviewer-claude.md +0 -78
- package/agents/reviewer-gpt.md +0 -78
- package/agents/reviewer-ponytail.md +0 -92
- package/agents/reviewer-security.md +0 -92
- package/agents/reviewer.md +0 -78
- package/agents/scout.md +0 -77
- package/agents/ui-designer.md +0 -58
- package/agents/watcher.md +0 -27
- package/agents/worker.md +0 -52
- package/agents/writer.md +0 -39
- package/dist/agents/agent-defaults.js +0 -9
- package/dist/agents/agent-definition.js +0 -196
- package/dist/agents/agent-management.js +0 -88
- package/dist/agents/agent-scope.js +0 -9
- package/dist/agents/agent-selection.js +0 -13
- package/dist/agents/agent-serializer.js +0 -88
- package/dist/agents/agents.js +0 -111
- package/dist/agents/builtin-overrides.js +0 -218
- package/dist/agents/chain-serializer.js +0 -3
- package/dist/agents/config-values.js +0 -52
- package/dist/agents/discovery-paths.js +0 -91
- package/dist/agents/frontmatter.js +0 -31
- package/dist/agents/identity.js +0 -46
- package/dist/agents/json-chain.js +0 -254
- package/dist/agents/management-config.js +0 -332
- package/dist/agents/management-format.js +0 -231
- package/dist/agents/management-persistence.js +0 -287
- package/dist/agents/management-targets.js +0 -136
- package/dist/agents/management-warnings.js +0 -81
- package/dist/agents/markdown-chain.js +0 -210
- package/dist/agents/package-agents.js +0 -154
- package/dist/agents/skill-files.js +0 -157
- package/dist/agents/skill-search-paths.js +0 -246
- package/dist/agents/skill-types.js +0 -1
- package/dist/agents/skills.js +0 -125
- package/dist/extension/acceptance-schema.js +0 -55
- package/dist/extension/build-info.js +0 -1
- package/dist/extension/chain-schema.js +0 -196
- package/dist/extension/child-runtime.js +0 -237
- package/dist/extension/compact-tools.js +0 -183
- package/dist/extension/config-schema.js +0 -29
- package/dist/extension/config.js +0 -38
- package/dist/extension/control-notice-schema.js +0 -37
- package/dist/extension/control-notices.js +0 -36
- package/dist/extension/delegation-bridges.js +0 -43
- package/dist/extension/doctor.js +0 -166
- package/dist/extension/everyday-schemas.js +0 -207
- package/dist/extension/fanout-child.js +0 -25
- package/dist/extension/index.js +0 -28
- package/dist/extension/message-renderers.js +0 -225
- package/dist/extension/nested-control-inbox.js +0 -154
- package/dist/extension/parent-runtime.js +0 -339
- package/dist/extension/primary-tool.js +0 -69
- package/dist/extension/result-snapshot.js +0 -4
- package/dist/extension/runtime-reload.js +0 -62
- package/dist/extension/runtime-storage.js +0 -43
- package/dist/extension/schema-overrides.js +0 -75
- package/dist/extension/schemas.js +0 -345
- package/dist/extension/tool-input.js +0 -35
- package/dist/extension/tool-result.js +0 -29
- package/dist/history/answer-texts.js +0 -57
- package/dist/history/canonical-result.js +0 -114
- package/dist/history/canonical-selection.js +0 -40
- package/dist/history/database-generation.js +0 -82
- package/dist/history/database.js +0 -96
- package/dist/history/entry-ingestion.js +0 -61
- package/dist/history/index.js +0 -344
- package/dist/history/ingest.js +0 -314
- package/dist/history/output-digests.js +0 -40
- package/dist/history/preview.js +0 -210
- package/dist/history/prune.js +0 -33
- package/dist/history/queries.js +0 -81
- package/dist/history/query-scope.js +0 -190
- package/dist/history/rows.js +0 -77
- package/dist/history/run-projection.js +0 -136
- package/dist/history/run-queries.js +0 -153
- package/dist/history/schema.js +0 -31
- package/dist/history/search-queries.js +0 -169
- package/dist/history/selected-record.js +0 -108
- package/dist/history/source-file.js +0 -45
- package/dist/history/source-watches.js +0 -141
- package/dist/history/store.js +0 -243
- package/dist/history/text-chunks.js +0 -168
- package/dist/history/text.js +0 -35
- package/dist/history/transcript-queries.js +0 -183
- package/dist/history/types.js +0 -8
- package/dist/history/values.js +0 -36
- package/dist/history/wire-inputs.js +0 -122
- package/dist/history/wire-models.js +0 -38
- package/dist/history/worker-runtime.js +0 -441
- package/dist/history/worker.js +0 -91
- package/dist/intercom/intercom-bridge.js +0 -140
- package/dist/intercom/live-intercom.js +0 -151
- package/dist/intercom/nested-result-tree.js +0 -163
- package/dist/intercom/result-delivery.js +0 -40
- package/dist/intercom/result-intercom.js +0 -216
- package/dist/pi-intercom/bridge-ask.js +0 -57
- package/dist/pi-intercom/bridge-broadcast.js +0 -60
- package/dist/pi-intercom/bridge-catalog.js +0 -372
- package/dist/pi-intercom/bridge-control.js +0 -104
- package/dist/pi-intercom/bridge-groups.js +0 -135
- package/dist/pi-intercom/bridge-launch-journal.js +0 -84
- package/dist/pi-intercom/bridge-launch-policy.js +0 -154
- package/dist/pi-intercom/bridge-launch.js +0 -327
- package/dist/pi-intercom/bridge-operations.js +0 -127
- package/dist/pi-intercom/bridge-rpc-process.js +0 -292
- package/dist/pi-intercom/interview.js +0 -236
- package/dist/pi-intercom/native-control-auth.js +0 -80
- package/dist/pi-intercom/native-control-protocol.js +0 -111
- package/dist/pi-intercom/native-control.js +0 -130
- package/dist/pi-intercom/peer-awareness.js +0 -66
- package/dist/pi-intercom/saved-transcript.js +0 -135
- package/dist/pi-intercom/subagent-events.js +0 -238
- package/dist/pi-intercom/subagent-live-events.js +0 -175
- package/dist/pi-intercom/supervisor.js +0 -282
- package/dist/pi-intercom/topic-actions.js +0 -177
- package/dist/pi-intercom/topics.js +0 -242
- package/dist/pi-intercom/transcript.js +0 -175
- package/dist/pi-intercom/ui/compose-paste.js +0 -93
- package/dist/pi-intercom/ui/compose.js +0 -247
- package/dist/pi-intercom/ui/inline-message.js +0 -80
- package/dist/pi-intercom/ui/message-renderers.js +0 -147
- package/dist/pi-intercom/ui/overlay.js +0 -181
- package/dist/pi-intercom/ui/session-list.js +0 -157
- package/dist/pi-intercom/ui/tool-renderers.js +0 -110
- package/dist/pi-intercom/ui/topic-view.js +0 -88
- package/dist/runs/background/async-chain-plan.js +0 -265
- package/dist/runs/background/async-control.js +0 -171
- package/dist/runs/background/async-execution.js +0 -179
- package/dist/runs/background/async-job-admission.js +0 -40
- package/dist/runs/background/async-job-projection.js +0 -169
- package/dist/runs/background/async-job-tracker.js +0 -353
- package/dist/runs/background/async-launch.js +0 -216
- package/dist/runs/background/async-plan.js +0 -116
- package/dist/runs/background/async-result-file.js +0 -82
- package/dist/runs/background/async-resume.js +0 -247
- package/dist/runs/background/async-run-discovery.js +0 -211
- package/dist/runs/background/async-run-location.js +0 -135
- package/dist/runs/background/async-run-record.js +0 -1
- package/dist/runs/background/async-run-repair.js +0 -223
- package/dist/runs/background/async-run-summary.js +0 -1
- package/dist/runs/background/async-single-plan.js +0 -105
- package/dist/runs/background/async-status-projection.js +0 -155
- package/dist/runs/background/async-status-render.js +0 -117
- package/dist/runs/background/async-status-validation.js +0 -181
- package/dist/runs/background/async-status.js +0 -3
- package/dist/runs/background/async-value.js +0 -21
- package/dist/runs/background/completion-dedupe.js +0 -42
- package/dist/runs/background/completion-delivery.js +0 -251
- package/dist/runs/background/completion-receipts.js +0 -237
- package/dist/runs/background/legacy-status-acceptance.js +0 -34
- package/dist/runs/background/notify.js +0 -111
- package/dist/runs/background/parallel-groups.js +0 -72
- package/dist/runs/background/result-payload.js +0 -178
- package/dist/runs/background/result-watcher.js +0 -435
- package/dist/runs/background/run-id-resolver.js +0 -84
- package/dist/runs/background/run-schemas.js +0 -189
- package/dist/runs/background/run-status-contracts.js +0 -14
- package/dist/runs/background/run-status-render.js +0 -270
- package/dist/runs/background/run-status.js +0 -274
- package/dist/runs/background/runner-attempt-output.js +0 -155
- package/dist/runs/background/runner-attempt.js +0 -263
- package/dist/runs/background/runner-child-executor.js +0 -166
- package/dist/runs/background/runner-child-observer.js +0 -197
- package/dist/runs/background/runner-completion-summary.js +0 -71
- package/dist/runs/background/runner-completion.js +0 -211
- package/dist/runs/background/runner-config.js +0 -1
- package/dist/runs/background/runner-contract.js +0 -1
- package/dist/runs/background/runner-dynamic.js +0 -121
- package/dist/runs/background/runner-finalization.js +0 -149
- package/dist/runs/background/runner-graph.js +0 -68
- package/dist/runs/background/runner-initial-status.js +0 -60
- package/dist/runs/background/runner-lifecycle.js +0 -142
- package/dist/runs/background/runner-monitor.js +0 -311
- package/dist/runs/background/runner-parallel.js +0 -203
- package/dist/runs/background/runner-prepare-step.js +0 -86
- package/dist/runs/background/runner-reporting.js +0 -153
- package/dist/runs/background/runner-status.js +0 -148
- package/dist/runs/background/runner-step-output.js +0 -90
- package/dist/runs/background/runner-step-record.js +0 -45
- package/dist/runs/background/runner-step.js +0 -112
- package/dist/runs/background/runner-streaming.js +0 -173
- package/dist/runs/background/runner-workflow.js +0 -213
- package/dist/runs/background/stale-run-reconciler.js +0 -198
- package/dist/runs/background/subagent-runner-launcher.js +0 -75
- package/dist/runs/background/subagent-runner.js +0 -81
- package/dist/runs/background/top-level-async.js +0 -6
- package/dist/runs/foreground/chain-clarify.js +0 -428
- package/dist/runs/foreground/clarification-draft.js +0 -87
- package/dist/runs/foreground/clarify-contracts.js +0 -1
- package/dist/runs/foreground/clarify-invocation.js +0 -163
- package/dist/runs/foreground/clarify-text-editor.js +0 -210
- package/dist/runs/foreground/clarify-view.js +0 -167
- package/dist/runs/foreground/execution-input.js +0 -296
- package/dist/runs/foreground/execution-routing.js +0 -33
- package/dist/runs/foreground/execution-timeout.js +0 -81
- package/dist/runs/foreground/foreground-control.js +0 -276
- package/dist/runs/foreground/foreground-memory.js +0 -99
- package/dist/runs/foreground/invocation-context.js +0 -55
- package/dist/runs/foreground/invocation-execution.js +0 -331
- package/dist/runs/foreground/invocation-expansion.js +0 -48
- package/dist/runs/foreground/management-actions.js +0 -295
- package/dist/runs/foreground/nested-control.js +0 -179
- package/dist/runs/foreground/question-continuation.js +0 -78
- package/dist/runs/foreground/question-control.js +0 -193
- package/dist/runs/foreground/resume-target.js +0 -221
- package/dist/runs/foreground/revival-launch-policy.js +0 -58
- package/dist/runs/foreground/run-async-path.js +0 -217
- package/dist/runs/foreground/run-interrupt.js +0 -164
- package/dist/runs/foreground/run-nudge.js +0 -278
- package/dist/runs/foreground/saved-revival.js +0 -251
- package/dist/runs/foreground/subagent-executor.js +0 -153
- package/dist/runs/foreground/subagent-params.js +0 -202
- package/dist/runs/foreground/wait-observation.js +0 -104
- package/dist/runs/foreground/wait-registration.js +0 -17
- package/dist/runs/foreground/wait-run.js +0 -301
- package/dist/runs/shared/acceptance-contract.js +0 -347
- package/dist/runs/shared/acceptance-defaults.js +0 -1
- package/dist/runs/shared/acceptance-evaluation.js +0 -276
- package/dist/runs/shared/acceptance-finalization.js +0 -356
- package/dist/runs/shared/acceptance-outcome.js +0 -53
- package/dist/runs/shared/acceptance-reports.js +0 -212
- package/dist/runs/shared/acceptance-submission.js +0 -167
- package/dist/runs/shared/acceptance-verification.js +0 -100
- package/dist/runs/shared/acceptance.js +0 -4
- package/dist/runs/shared/chain-outputs.js +0 -138
- package/dist/runs/shared/child-attempt-types.js +0 -1
- package/dist/runs/shared/child-attempt.js +0 -340
- package/dist/runs/shared/child-boundaries.js +0 -173
- package/dist/runs/shared/child-context-filter.js +0 -44
- package/dist/runs/shared/child-event-observer.js +0 -390
- package/dist/runs/shared/child-execution-cwd.js +0 -126
- package/dist/runs/shared/child-execution-outcome.js +0 -72
- package/dist/runs/shared/child-invocation.js +0 -54
- package/dist/runs/shared/child-message-validation.js +0 -215
- package/dist/runs/shared/child-native-accounting.js +0 -106
- package/dist/runs/shared/child-native-observation.js +0 -69
- package/dist/runs/shared/child-observation-spool.js +0 -169
- package/dist/runs/shared/child-observations.js +0 -195
- package/dist/runs/shared/child-presence.js +0 -3
- package/dist/runs/shared/child-route-env.js +0 -119
- package/dist/runs/shared/child-stream-observer.js +0 -221
- package/dist/runs/shared/child-stream-projection.js +0 -137
- package/dist/runs/shared/child-structured-tool.js +0 -27
- package/dist/runs/shared/claude-code.js +0 -162
- package/dist/runs/shared/claude-model.js +0 -42
- package/dist/runs/shared/claude-session.js +0 -83
- package/dist/runs/shared/claude-types.js +0 -1
- package/dist/runs/shared/completion-guard.js +0 -31
- package/dist/runs/shared/control-event-policy.js +0 -8
- package/dist/runs/shared/control-notification-owner.js +0 -13
- package/dist/runs/shared/dynamic-fanout.js +0 -289
- package/dist/runs/shared/dynamic-item.js +0 -102
- package/dist/runs/shared/history-index.js +0 -98
- package/dist/runs/shared/legacy-async-recovery.js +0 -114
- package/dist/runs/shared/legacy-output-recovery.js +0 -148
- package/dist/runs/shared/mcp-config-schema.js +0 -36
- package/dist/runs/shared/mcp-direct-tool-allowlist.js +0 -365
- package/dist/runs/shared/model-fallback.js +0 -247
- package/dist/runs/shared/mutating-tool-guard.js +0 -210
- package/dist/runs/shared/native-finalization-types.js +0 -1
- package/dist/runs/shared/native-finalization.js +0 -180
- package/dist/runs/shared/native-usage.js +0 -293
- package/dist/runs/shared/nested-control-records.js +0 -128
- package/dist/runs/shared/nested-events.js +0 -8
- package/dist/runs/shared/nested-path.js +0 -52
- package/dist/runs/shared/nested-projection.js +0 -155
- package/dist/runs/shared/nested-protocol.js +0 -18
- package/dist/runs/shared/nested-registry.js +0 -191
- package/dist/runs/shared/nested-render.js +0 -156
- package/dist/runs/shared/nested-route.js +0 -220
- package/dist/runs/shared/nested-validation.js +0 -216
- package/dist/runs/shared/owned-child-evidence.js +0 -125
- package/dist/runs/shared/owned-run-list.js +0 -146
- package/dist/runs/shared/owned-run-observation.js +0 -267
- package/dist/runs/shared/owned-run-progress.js +0 -109
- package/dist/runs/shared/owned-run-read-state.js +0 -1
- package/dist/runs/shared/owned-run-results.js +0 -202
- package/dist/runs/shared/owned-run-status.js +0 -180
- package/dist/runs/shared/owned-run-view.js +0 -51
- package/dist/runs/shared/owned-workflow-details.js +0 -17
- package/dist/runs/shared/owner-output.js +0 -43
- package/dist/runs/shared/parallel-utils.js +0 -49
- package/dist/runs/shared/parent-receipts.js +0 -126
- package/dist/runs/shared/parent-usage.js +0 -233
- package/dist/runs/shared/pi-args.js +0 -217
- package/dist/runs/shared/pi-launch-input.js +0 -1
- package/dist/runs/shared/pi-session-launch.js +0 -86
- package/dist/runs/shared/pi-spawn.js +0 -66
- package/dist/runs/shared/run-history-queries.js +0 -136
- package/dist/runs/shared/run-history.js +0 -176
- package/dist/runs/shared/run-id-ambiguity.js +0 -4
- package/dist/runs/shared/run-metadata-paths.js +0 -14
- package/dist/runs/shared/run-metadata.js +0 -158
- package/dist/runs/shared/run-persistence.js +0 -131
- package/dist/runs/shared/run-records.js +0 -9
- package/dist/runs/shared/run-restoration.js +0 -337
- package/dist/runs/shared/run-state-owner.js +0 -26
- package/dist/runs/shared/session-cwd-preload.js +0 -42
- package/dist/runs/shared/single-output.js +0 -297
- package/dist/runs/shared/stable-value.js +0 -15
- package/dist/runs/shared/streaming-text.js +0 -26
- package/dist/runs/shared/structured-output.js +0 -67
- package/dist/runs/shared/subagent-control.js +0 -246
- package/dist/runs/shared/subagent-prompt-runtime.js +0 -94
- package/dist/runs/shared/subagent-tool-loop-guard.js +0 -95
- package/dist/runs/shared/supervisor-question-state.js +0 -145
- package/dist/runs/shared/supervisor-questions.js +0 -284
- package/dist/runs/shared/workflow-graph.js +0 -306
- package/dist/runs/shared/workflow-policy.js +0 -157
- package/dist/runs/shared/worktree-contract.js +0 -1
- package/dist/runs/shared/worktree-hook.js +0 -138
- package/dist/runs/shared/worktree-location.js +0 -47
- package/dist/runs/shared/worktree-preservation.js +0 -8
- package/dist/runs/shared/worktree-process.js +0 -107
- package/dist/runs/shared/worktree.js +0 -386
- package/dist/shared/agent-context-policy.js +0 -116
- package/dist/shared/agent-dir.js +0 -14
- package/dist/shared/artifacts.js +0 -114
- package/dist/shared/atomic-json.js +0 -16
- package/dist/shared/chain-files.js +0 -72
- package/dist/shared/concurrency.js +0 -18
- package/dist/shared/content-preview.js +0 -115
- package/dist/shared/execution-cwd.js +0 -22
- package/dist/shared/file-coalescer.js +0 -22
- package/dist/shared/fork-context.js +0 -47
- package/dist/shared/formatters.js +0 -111
- package/dist/shared/journal-reader.js +0 -6
- package/dist/shared/lazy-tools.js +0 -43
- package/dist/shared/message-output.js +0 -116
- package/dist/shared/model-info.js +0 -85
- package/dist/shared/native-import.js +0 -20
- package/dist/shared/native-session-loader.js +0 -17
- package/dist/shared/native-session.js +0 -4
- package/dist/shared/native-tui.js +0 -23
- package/dist/shared/native-typebox.js +0 -32
- package/dist/shared/prompt-sections.js +0 -10
- package/dist/shared/session-entries.js +0 -87
- package/dist/shared/session-identity.js +0 -16
- package/dist/shared/settings.js +0 -121
- package/dist/shared/status-format.js +0 -171
- package/dist/shared/task-file-policy.js +0 -24
- package/dist/shared/temp-root.js +0 -143
- package/dist/shared/types/acceptance.js +0 -1
- package/dist/shared/types/async.js +0 -1
- package/dist/shared/types/config.js +0 -1
- package/dist/shared/types/details.js +0 -1
- package/dist/shared/types/history.js +0 -1
- package/dist/shared/types/inputs.js +0 -1
- package/dist/shared/types/intercom.js +0 -1
- package/dist/shared/types/launch.js +0 -1
- package/dist/shared/types/messages.js +0 -1
- package/dist/shared/types/nested.js +0 -1
- package/dist/shared/types/owned-runs.js +0 -1
- package/dist/shared/types/progress.js +0 -1
- package/dist/shared/types/questions.js +0 -1
- package/dist/shared/types/results.js +0 -1
- package/dist/shared/types/state.js +0 -1
- package/dist/shared/types/usage.js +0 -1
- package/dist/shared/types/workflow.js +0 -1
- package/dist/shared/ui-mode.js +0 -3
- package/dist/shared/utils.js +0 -128
- package/dist/slash/command-discovery.js +0 -83
- package/dist/slash/command-input.js +0 -190
- package/dist/slash/prompt-template-bridge.js +0 -122
- package/dist/slash/prompt-template-contract.js +0 -77
- package/dist/slash/prompt-template-results.js +0 -125
- package/dist/slash/request-protocol.js +0 -68
- package/dist/slash/result-delivery.js +0 -237
- package/dist/slash/saved-chain.js +0 -78
- package/dist/slash/slash-bridge.js +0 -150
- package/dist/slash/slash-commands.js +0 -136
- package/dist/slash/slash-live-state.js +0 -267
- package/dist/tui/action-hints.js +0 -103
- package/dist/tui/activity-lines.js +0 -32
- package/dist/tui/agent-browser.js +0 -290
- package/dist/tui/agent-controls.js +0 -289
- package/dist/tui/agent-conversation.js +0 -444
- package/dist/tui/agent-dock.js +0 -171
- package/dist/tui/agent-history.js +0 -50
- package/dist/tui/agent-model.js +0 -62
- package/dist/tui/agent-picker.js +0 -262
- package/dist/tui/agent-view.js +0 -350
- package/dist/tui/compact-results.js +0 -193
- package/dist/tui/conversation-details.js +0 -190
- package/dist/tui/conversation-frame.js +0 -135
- package/dist/tui/conversation-history.js +0 -210
- package/dist/tui/conversation-menu.js +0 -78
- package/dist/tui/conversation-notices.js +0 -79
- package/dist/tui/conversation-selection.js +0 -58
- package/dist/tui/conversation-viewport.js +0 -129
- package/dist/tui/direction-message.js +0 -27
- package/dist/tui/display.js +0 -282
- package/dist/tui/editor-viewport.js +0 -18
- package/dist/tui/expanded-content.js +0 -87
- package/dist/tui/expanded-multi.js +0 -170
- package/dist/tui/expanded-single.js +0 -65
- package/dist/tui/history-cards.js +0 -202
- package/dist/tui/history-display.js +0 -238
- package/dist/tui/history-json.js +0 -16
- package/dist/tui/history-metadata.js +0 -152
- package/dist/tui/history-record.js +0 -251
- package/dist/tui/history-text.js +0 -34
- package/dist/tui/indexed-history.js +0 -116
- package/dist/tui/nested-widget.js +0 -120
- package/dist/tui/picker-page.js +0 -59
- package/dist/tui/render.js +0 -72
- package/dist/tui/result-facts.js +0 -64
- package/dist/tui/task-observation.js +0 -59
- package/dist/tui/task-store.js +0 -366
- package/dist/tui/text-values.js +0 -16
- package/dist/tui/view-connections.js +0 -47
- package/dist/tui/view-model.js +0 -94
- package/dist/tui/view-persistence.js +0 -51
- package/dist/tui/view-ports.js +0 -1
- package/dist/tui/view-session.js +0 -37
- package/dist/tui/widget-details.js +0 -144
- package/dist/tui/widget-status.js +0 -245
- package/dist/tui/widget.js +0 -145
- package/dist/tui/workflow-labels.js +0 -223
- package/dist/tui/workflow-outcomes.js +0 -124
- package/generated/RunValidators.d.ts +0 -28
- package/generated/RunValidators.js +0 -2
- package/prompts/gather-context-and-clarify.md +0 -14
- package/prompts/parallel-cleanup.md +0 -65
- package/prompts/parallel-context-build.md +0 -59
- package/prompts/parallel-handoff-plan.md +0 -68
- package/prompts/parallel-research.md +0 -55
- package/prompts/parallel-review.md +0 -61
- package/prompts/review-loop.md +0 -44
- package/scripts/generate-run-schemas.mjs +0 -210
- package/skills/pi-intercom/evals/evals.json +0 -29
- package/skills/pi-intercom/evals/trigger-evals.json +0 -47
- package/skills/pi-intercom/references/peer-sessions.md +0 -74
- package/skills/pi-subagents/evals/evals.json +0 -29
- package/skills/pi-subagents/evals/trigger-evals.json +0 -42
- package/skills/pi-subagents/references/full-orchestration-guide.md +0 -1005
- package/src/agents/agent-defaults.ts +0 -13
- package/src/agents/agent-definition.ts +0 -253
- package/src/agents/agent-management.ts +0 -120
- package/src/agents/agent-scope.ts +0 -11
- package/src/agents/agent-selection.ts +0 -22
- package/src/agents/agent-serializer.ts +0 -90
- package/src/agents/agents.ts +0 -214
- package/src/agents/builtin-overrides.ts +0 -297
- package/src/agents/chain-serializer.ts +0 -3
- package/src/agents/config-values.ts +0 -57
- package/src/agents/discovery-paths.ts +0 -134
- package/src/agents/frontmatter.ts +0 -39
- package/src/agents/identity.ts +0 -61
- package/src/agents/json-chain.ts +0 -305
- package/src/agents/management-config.ts +0 -342
- package/src/agents/management-format.ts +0 -243
- package/src/agents/management-persistence.ts +0 -408
- package/src/agents/management-targets.ts +0 -260
- package/src/agents/management-warnings.ts +0 -115
- package/src/agents/markdown-chain.ts +0 -237
- package/src/agents/package-agents.ts +0 -231
- package/src/agents/skill-files.ts +0 -182
- package/src/agents/skill-search-paths.ts +0 -289
- package/src/agents/skill-types.ts +0 -31
- package/src/agents/skills.ts +0 -179
- package/src/extension/acceptance-schema.ts +0 -88
- package/src/extension/build-info.ts +0 -2
- package/src/extension/chain-schema.ts +0 -276
- package/src/extension/child-runtime.ts +0 -302
- package/src/extension/compact-tools.ts +0 -271
- package/src/extension/config-schema.ts +0 -59
- package/src/extension/config.ts +0 -45
- package/src/extension/control-notice-schema.ts +0 -55
- package/src/extension/control-notices.ts +0 -71
- package/src/extension/delegation-bridges.ts +0 -59
- package/src/extension/doctor.ts +0 -207
- package/src/extension/everyday-schemas.ts +0 -252
- package/src/extension/fanout-child.ts +0 -33
- package/src/extension/index.ts +0 -31
- package/src/extension/message-renderers.ts +0 -334
- package/src/extension/nested-control-inbox.ts +0 -196
- package/src/extension/parent-runtime.ts +0 -405
- package/src/extension/primary-tool.ts +0 -130
- package/src/extension/result-snapshot.ts +0 -9
- package/src/extension/runtime-reload.ts +0 -72
- package/src/extension/runtime-storage.ts +0 -49
- package/src/extension/schema-overrides.ts +0 -114
- package/src/extension/schemas.ts +0 -477
- package/src/extension/tool-input.ts +0 -46
- package/src/extension/tool-result.ts +0 -47
- package/src/history/answer-texts.ts +0 -74
- package/src/history/canonical-result.ts +0 -138
- package/src/history/canonical-selection.ts +0 -54
- package/src/history/database-generation.ts +0 -86
- package/src/history/database.ts +0 -97
- package/src/history/entry-ingestion.ts +0 -129
- package/src/history/index.ts +0 -434
- package/src/history/ingest.ts +0 -387
- package/src/history/output-digests.ts +0 -41
- package/src/history/preview.ts +0 -235
- package/src/history/prune.ts +0 -48
- package/src/history/queries.ts +0 -125
- package/src/history/query-scope.ts +0 -278
- package/src/history/rows.ts +0 -118
- package/src/history/run-projection.ts +0 -162
- package/src/history/run-queries.ts +0 -199
- package/src/history/schema.ts +0 -34
- package/src/history/search-queries.ts +0 -223
- package/src/history/selected-record.ts +0 -140
- package/src/history/source-file.ts +0 -51
- package/src/history/source-watches.ts +0 -156
- package/src/history/store.ts +0 -332
- package/src/history/text-chunks.ts +0 -186
- package/src/history/text.ts +0 -43
- package/src/history/transcript-queries.ts +0 -257
- package/src/history/types.ts +0 -29
- package/src/history/values.ts +0 -36
- package/src/history/wire-inputs.ts +0 -141
- package/src/history/wire-models.ts +0 -51
- package/src/history/worker-runtime.ts +0 -502
- package/src/history/worker.ts +0 -99
- package/src/intercom/intercom-bridge.ts +0 -190
- package/src/intercom/live-intercom.ts +0 -209
- package/src/intercom/nested-result-tree.ts +0 -213
- package/src/intercom/result-delivery.ts +0 -56
- package/src/intercom/result-intercom.ts +0 -308
- package/src/pi-intercom/bridge-ask.ts +0 -64
- package/src/pi-intercom/bridge-broadcast.ts +0 -70
- package/src/pi-intercom/bridge-catalog.ts +0 -489
- package/src/pi-intercom/bridge-control.ts +0 -179
- package/src/pi-intercom/bridge-groups.ts +0 -169
- package/src/pi-intercom/bridge-launch-journal.ts +0 -122
- package/src/pi-intercom/bridge-launch-policy.ts +0 -190
- package/src/pi-intercom/bridge-launch.ts +0 -506
- package/src/pi-intercom/bridge-operations.ts +0 -169
- package/src/pi-intercom/bridge-rpc-process.ts +0 -330
- package/src/pi-intercom/interview.ts +0 -295
- package/src/pi-intercom/native-control-auth.ts +0 -89
- package/src/pi-intercom/native-control-protocol.ts +0 -180
- package/src/pi-intercom/native-control.ts +0 -160
- package/src/pi-intercom/peer-awareness.ts +0 -84
- package/src/pi-intercom/saved-transcript.ts +0 -175
- package/src/pi-intercom/subagent-events.ts +0 -299
- package/src/pi-intercom/subagent-live-events.ts +0 -236
- package/src/pi-intercom/supervisor.ts +0 -362
- package/src/pi-intercom/topic-actions.ts +0 -243
- package/src/pi-intercom/topics.ts +0 -271
- package/src/pi-intercom/transcript.ts +0 -226
- package/src/pi-intercom/ui/compose-paste.ts +0 -109
- package/src/pi-intercom/ui/compose.ts +0 -305
- package/src/pi-intercom/ui/inline-message.ts +0 -110
- package/src/pi-intercom/ui/message-renderers.ts +0 -182
- package/src/pi-intercom/ui/overlay.ts +0 -238
- package/src/pi-intercom/ui/session-list.ts +0 -222
- package/src/pi-intercom/ui/tool-renderers.ts +0 -148
- package/src/pi-intercom/ui/topic-view.ts +0 -107
- package/src/runs/background/async-chain-plan.ts +0 -451
- package/src/runs/background/async-control.ts +0 -219
- package/src/runs/background/async-execution.ts +0 -227
- package/src/runs/background/async-job-admission.ts +0 -54
- package/src/runs/background/async-job-projection.ts +0 -225
- package/src/runs/background/async-job-tracker.ts +0 -441
- package/src/runs/background/async-launch.ts +0 -319
- package/src/runs/background/async-plan.ts +0 -285
- package/src/runs/background/async-result-file.ts +0 -104
- package/src/runs/background/async-resume.ts +0 -386
- package/src/runs/background/async-run-discovery.ts +0 -264
- package/src/runs/background/async-run-location.ts +0 -194
- package/src/runs/background/async-run-record.ts +0 -14
- package/src/runs/background/async-run-repair.ts +0 -307
- package/src/runs/background/async-run-summary.ts +0 -71
- package/src/runs/background/async-single-plan.ts +0 -168
- package/src/runs/background/async-status-projection.ts +0 -188
- package/src/runs/background/async-status-render.ts +0 -164
- package/src/runs/background/async-status-validation.ts +0 -238
- package/src/runs/background/async-status.ts +0 -9
- package/src/runs/background/async-value.ts +0 -29
- package/src/runs/background/completion-dedupe.ts +0 -65
- package/src/runs/background/completion-delivery.ts +0 -321
- package/src/runs/background/completion-receipts.ts +0 -309
- package/src/runs/background/legacy-status-acceptance.ts +0 -38
- package/src/runs/background/notify.ts +0 -174
- package/src/runs/background/parallel-groups.ts +0 -102
- package/src/runs/background/result-payload.ts +0 -268
- package/src/runs/background/result-watcher.ts +0 -520
- package/src/runs/background/run-id-resolver.ts +0 -138
- package/src/runs/background/run-schemas.ts +0 -240
- package/src/runs/background/run-status-contracts.ts +0 -46
- package/src/runs/background/run-status-render.ts +0 -364
- package/src/runs/background/run-status.ts +0 -366
- package/src/runs/background/runner-attempt-output.ts +0 -281
- package/src/runs/background/runner-attempt.ts +0 -354
- package/src/runs/background/runner-child-executor.ts +0 -232
- package/src/runs/background/runner-child-observer.ts +0 -278
- package/src/runs/background/runner-completion-summary.ts +0 -106
- package/src/runs/background/runner-completion.ts +0 -274
- package/src/runs/background/runner-config.ts +0 -52
- package/src/runs/background/runner-contract.ts +0 -51
- package/src/runs/background/runner-dynamic.ts +0 -185
- package/src/runs/background/runner-finalization.ts +0 -203
- package/src/runs/background/runner-graph.ts +0 -91
- package/src/runs/background/runner-initial-status.ts +0 -72
- package/src/runs/background/runner-lifecycle.ts +0 -159
- package/src/runs/background/runner-monitor.ts +0 -401
- package/src/runs/background/runner-parallel.ts +0 -279
- package/src/runs/background/runner-prepare-step.ts +0 -128
- package/src/runs/background/runner-reporting.ts +0 -192
- package/src/runs/background/runner-status.ts +0 -220
- package/src/runs/background/runner-step-output.ts +0 -156
- package/src/runs/background/runner-step-record.ts +0 -76
- package/src/runs/background/runner-step.ts +0 -150
- package/src/runs/background/runner-streaming.ts +0 -220
- package/src/runs/background/runner-workflow.ts +0 -284
- package/src/runs/background/stale-run-reconciler.ts +0 -312
- package/src/runs/background/subagent-runner-launcher.ts +0 -88
- package/src/runs/background/subagent-runner.ts +0 -85
- package/src/runs/background/top-level-async.ts +0 -15
- package/src/runs/foreground/chain-clarify.ts +0 -505
- package/src/runs/foreground/clarification-draft.ts +0 -92
- package/src/runs/foreground/clarify-contracts.ts +0 -33
- package/src/runs/foreground/clarify-invocation.ts +0 -204
- package/src/runs/foreground/clarify-text-editor.ts +0 -229
- package/src/runs/foreground/clarify-view.ts +0 -222
- package/src/runs/foreground/execution-input.ts +0 -401
- package/src/runs/foreground/execution-routing.ts +0 -41
- package/src/runs/foreground/execution-timeout.ts +0 -92
- package/src/runs/foreground/foreground-control.ts +0 -342
- package/src/runs/foreground/foreground-memory.ts +0 -132
- package/src/runs/foreground/invocation-context.ts +0 -88
- package/src/runs/foreground/invocation-execution.ts +0 -465
- package/src/runs/foreground/invocation-expansion.ts +0 -58
- package/src/runs/foreground/management-actions.ts +0 -360
- package/src/runs/foreground/nested-control.ts +0 -248
- package/src/runs/foreground/question-continuation.ts +0 -112
- package/src/runs/foreground/question-control.ts +0 -309
- package/src/runs/foreground/resume-target.ts +0 -330
- package/src/runs/foreground/revival-launch-policy.ts +0 -112
- package/src/runs/foreground/run-async-path.ts +0 -327
- package/src/runs/foreground/run-interrupt.ts +0 -202
- package/src/runs/foreground/run-nudge.ts +0 -355
- package/src/runs/foreground/saved-revival.ts +0 -356
- package/src/runs/foreground/subagent-executor.ts +0 -203
- package/src/runs/foreground/subagent-params.ts +0 -392
- package/src/runs/foreground/wait-observation.ts +0 -160
- package/src/runs/foreground/wait-registration.ts +0 -18
- package/src/runs/foreground/wait-run.ts +0 -366
- package/src/runs/shared/acceptance-contract.ts +0 -458
- package/src/runs/shared/acceptance-defaults.ts +0 -1
- package/src/runs/shared/acceptance-evaluation.ts +0 -349
- package/src/runs/shared/acceptance-finalization.ts +0 -495
- package/src/runs/shared/acceptance-outcome.ts +0 -69
- package/src/runs/shared/acceptance-reports.ts +0 -246
- package/src/runs/shared/acceptance-submission.ts +0 -251
- package/src/runs/shared/acceptance-verification.ts +0 -118
- package/src/runs/shared/acceptance.ts +0 -31
- package/src/runs/shared/chain-outputs.ts +0 -206
- package/src/runs/shared/child-attempt-types.ts +0 -118
- package/src/runs/shared/child-attempt.ts +0 -387
- package/src/runs/shared/child-boundaries.ts +0 -217
- package/src/runs/shared/child-context-filter.ts +0 -53
- package/src/runs/shared/child-event-observer.ts +0 -496
- package/src/runs/shared/child-execution-cwd.ts +0 -162
- package/src/runs/shared/child-execution-outcome.ts +0 -103
- package/src/runs/shared/child-invocation.ts +0 -74
- package/src/runs/shared/child-message-validation.ts +0 -233
- package/src/runs/shared/child-native-accounting.ts +0 -154
- package/src/runs/shared/child-native-observation.ts +0 -79
- package/src/runs/shared/child-observation-spool.ts +0 -193
- package/src/runs/shared/child-observations.ts +0 -229
- package/src/runs/shared/child-presence.ts +0 -6
- package/src/runs/shared/child-route-env.ts +0 -142
- package/src/runs/shared/child-stream-observer.ts +0 -302
- package/src/runs/shared/child-stream-projection.ts +0 -160
- package/src/runs/shared/child-structured-tool.ts +0 -38
- package/src/runs/shared/claude-code.ts +0 -216
- package/src/runs/shared/claude-model.ts +0 -67
- package/src/runs/shared/claude-session.ts +0 -124
- package/src/runs/shared/claude-types.ts +0 -31
- package/src/runs/shared/completion-guard.ts +0 -44
- package/src/runs/shared/control-event-policy.ts +0 -15
- package/src/runs/shared/control-notification-owner.ts +0 -20
- package/src/runs/shared/dynamic-fanout.ts +0 -459
- package/src/runs/shared/dynamic-item.ts +0 -114
- package/src/runs/shared/history-index.ts +0 -130
- package/src/runs/shared/legacy-async-recovery.ts +0 -153
- package/src/runs/shared/legacy-output-recovery.ts +0 -214
- package/src/runs/shared/mcp-config-schema.ts +0 -46
- package/src/runs/shared/mcp-direct-tool-allowlist.ts +0 -465
- package/src/runs/shared/model-fallback.ts +0 -344
- package/src/runs/shared/mutating-tool-guard.ts +0 -295
- package/src/runs/shared/native-finalization-types.ts +0 -29
- package/src/runs/shared/native-finalization.ts +0 -252
- package/src/runs/shared/native-usage.ts +0 -396
- package/src/runs/shared/nested-control-records.ts +0 -178
- package/src/runs/shared/nested-events.ts +0 -45
- package/src/runs/shared/nested-path.ts +0 -65
- package/src/runs/shared/nested-projection.ts +0 -230
- package/src/runs/shared/nested-protocol.ts +0 -67
- package/src/runs/shared/nested-registry.ts +0 -273
- package/src/runs/shared/nested-render.ts +0 -217
- package/src/runs/shared/nested-route.ts +0 -292
- package/src/runs/shared/nested-validation.ts +0 -291
- package/src/runs/shared/owned-child-evidence.ts +0 -184
- package/src/runs/shared/owned-run-list.ts +0 -187
- package/src/runs/shared/owned-run-observation.ts +0 -368
- package/src/runs/shared/owned-run-progress.ts +0 -172
- package/src/runs/shared/owned-run-read-state.ts +0 -7
- package/src/runs/shared/owned-run-results.ts +0 -289
- package/src/runs/shared/owned-run-status.ts +0 -239
- package/src/runs/shared/owned-run-view.ts +0 -65
- package/src/runs/shared/owned-workflow-details.ts +0 -24
- package/src/runs/shared/owner-output.ts +0 -73
- package/src/runs/shared/parallel-utils.ts +0 -93
- package/src/runs/shared/parent-receipts.ts +0 -186
- package/src/runs/shared/parent-usage.ts +0 -344
- package/src/runs/shared/pi-args.ts +0 -280
- package/src/runs/shared/pi-launch-input.ts +0 -48
- package/src/runs/shared/pi-session-launch.ts +0 -94
- package/src/runs/shared/pi-spawn.ts +0 -76
- package/src/runs/shared/run-history-queries.ts +0 -195
- package/src/runs/shared/run-history.ts +0 -221
- package/src/runs/shared/run-id-ambiguity.ts +0 -8
- package/src/runs/shared/run-metadata-paths.ts +0 -17
- package/src/runs/shared/run-metadata.ts +0 -240
- package/src/runs/shared/run-persistence.ts +0 -181
- package/src/runs/shared/run-records.ts +0 -19
- package/src/runs/shared/run-restoration.ts +0 -455
- package/src/runs/shared/run-state-owner.ts +0 -31
- package/src/runs/shared/session-cwd-preload.ts +0 -47
- package/src/runs/shared/single-output.ts +0 -416
- package/src/runs/shared/stable-value.ts +0 -15
- package/src/runs/shared/streaming-text.ts +0 -45
- package/src/runs/shared/structured-output.ts +0 -98
- package/src/runs/shared/subagent-control.ts +0 -352
- package/src/runs/shared/subagent-prompt-runtime.ts +0 -119
- package/src/runs/shared/subagent-tool-loop-guard.ts +0 -139
- package/src/runs/shared/supervisor-question-state.ts +0 -221
- package/src/runs/shared/supervisor-questions.ts +0 -410
- package/src/runs/shared/workflow-graph.ts +0 -422
- package/src/runs/shared/workflow-policy.ts +0 -260
- package/src/runs/shared/worktree-contract.ts +0 -29
- package/src/runs/shared/worktree-hook.ts +0 -181
- package/src/runs/shared/worktree-location.ts +0 -61
- package/src/runs/shared/worktree-preservation.ts +0 -10
- package/src/runs/shared/worktree-process.ts +0 -132
- package/src/runs/shared/worktree.ts +0 -507
- package/src/shared/agent-context-policy.ts +0 -215
- package/src/shared/agent-dir.ts +0 -15
- package/src/shared/artifacts.ts +0 -126
- package/src/shared/atomic-json.ts +0 -19
- package/src/shared/chain-files.ts +0 -72
- package/src/shared/concurrency.ts +0 -27
- package/src/shared/content-preview.ts +0 -117
- package/src/shared/execution-cwd.ts +0 -39
- package/src/shared/file-coalescer.ts +0 -31
- package/src/shared/fork-context.ts +0 -72
- package/src/shared/formatters.ts +0 -125
- package/src/shared/journal-reader.ts +0 -18
- package/src/shared/lazy-tools.ts +0 -85
- package/src/shared/message-output.ts +0 -146
- package/src/shared/model-info.ts +0 -117
- package/src/shared/native-import.ts +0 -25
- package/src/shared/native-session-loader.ts +0 -13
- package/src/shared/native-session.ts +0 -6
- package/src/shared/native-tui.ts +0 -20
- package/src/shared/native-typebox.ts +0 -29
- package/src/shared/prompt-sections.ts +0 -16
- package/src/shared/session-entries.ts +0 -108
- package/src/shared/session-identity.ts +0 -25
- package/src/shared/settings.ts +0 -196
- package/src/shared/status-format.ts +0 -232
- package/src/shared/stream-json.d.ts +0 -10
- package/src/shared/task-file-policy.ts +0 -35
- package/src/shared/temp-root.ts +0 -158
- package/src/shared/types/acceptance.ts +0 -149
- package/src/shared/types/async.ts +0 -247
- package/src/shared/types/config.ts +0 -139
- package/src/shared/types/details.ts +0 -104
- package/src/shared/types/history.ts +0 -217
- package/src/shared/types/inputs.ts +0 -4
- package/src/shared/types/intercom.ts +0 -57
- package/src/shared/types/launch.ts +0 -39
- package/src/shared/types/messages.ts +0 -104
- package/src/shared/types/nested.ts +0 -153
- package/src/shared/types/owned-runs.ts +0 -148
- package/src/shared/types/progress.ts +0 -106
- package/src/shared/types/questions.ts +0 -103
- package/src/shared/types/results.ts +0 -119
- package/src/shared/types/state.ts +0 -56
- package/src/shared/types/usage.ts +0 -36
- package/src/shared/types/workflow.ts +0 -187
- package/src/shared/ui-mode.ts +0 -5
- package/src/shared/utils.ts +0 -148
- package/src/slash/command-discovery.ts +0 -110
- package/src/slash/command-input.ts +0 -232
- package/src/slash/prompt-template-bridge.ts +0 -161
- package/src/slash/prompt-template-contract.ts +0 -152
- package/src/slash/prompt-template-results.ts +0 -189
- package/src/slash/request-protocol.ts +0 -87
- package/src/slash/result-delivery.ts +0 -312
- package/src/slash/saved-chain.ts +0 -115
- package/src/slash/slash-bridge.ts +0 -224
- package/src/slash/slash-commands.ts +0 -195
- package/src/slash/slash-live-state.ts +0 -350
- package/src/tui/action-hints.ts +0 -155
- package/src/tui/activity-lines.ts +0 -40
- package/src/tui/agent-browser.ts +0 -354
- package/src/tui/agent-controls.ts +0 -355
- package/src/tui/agent-conversation.ts +0 -514
- package/src/tui/agent-dock.ts +0 -250
- package/src/tui/agent-history.ts +0 -68
- package/src/tui/agent-model.ts +0 -78
- package/src/tui/agent-picker.ts +0 -325
- package/src/tui/agent-view.ts +0 -403
- package/src/tui/compact-results.ts +0 -342
- package/src/tui/conversation-details.ts +0 -206
- package/src/tui/conversation-frame.ts +0 -184
- package/src/tui/conversation-history.ts +0 -260
- package/src/tui/conversation-menu.ts +0 -119
- package/src/tui/conversation-notices.ts +0 -116
- package/src/tui/conversation-selection.ts +0 -66
- package/src/tui/conversation-viewport.ts +0 -169
- package/src/tui/direction-message.ts +0 -35
- package/src/tui/display.ts +0 -409
- package/src/tui/editor-viewport.ts +0 -19
- package/src/tui/expanded-content.ts +0 -134
- package/src/tui/expanded-multi.ts +0 -264
- package/src/tui/expanded-single.ts +0 -92
- package/src/tui/history-cards.ts +0 -298
- package/src/tui/history-display.ts +0 -334
- package/src/tui/history-json.ts +0 -17
- package/src/tui/history-metadata.ts +0 -177
- package/src/tui/history-record.ts +0 -321
- package/src/tui/history-text.ts +0 -34
- package/src/tui/indexed-history.ts +0 -149
- package/src/tui/nested-widget.ts +0 -192
- package/src/tui/picker-page.ts +0 -80
- package/src/tui/render.ts +0 -104
- package/src/tui/result-facts.ts +0 -99
- package/src/tui/task-observation.ts +0 -96
- package/src/tui/task-store.ts +0 -432
- package/src/tui/text-values.ts +0 -20
- package/src/tui/view-connections.ts +0 -64
- package/src/tui/view-model.ts +0 -181
- package/src/tui/view-persistence.ts +0 -57
- package/src/tui/view-ports.ts +0 -55
- package/src/tui/view-session.ts +0 -42
- package/src/tui/widget-details.ts +0 -220
- package/src/tui/widget-status.ts +0 -331
- package/src/tui/widget.ts +0 -208
- package/src/tui/workflow-labels.ts +0 -340
- package/src/tui/workflow-outcomes.ts +0 -150
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import net from "node:net";
|
|
2
|
+
export declare function connectBrokerSocket(): Promise<net.Socket>;
|
|
3
|
+
interface ConnectionHandlers {
|
|
4
|
+
readonly message: (message: unknown) => void;
|
|
5
|
+
readonly error: (error: Readonly<Error>) => void;
|
|
6
|
+
readonly closed: (error: Readonly<Error>, expected: boolean) => void;
|
|
7
|
+
}
|
|
8
|
+
/** One socket owns registration, read/error listeners, and graceful shutdown. */
|
|
9
|
+
export declare class BrokerConnection {
|
|
10
|
+
private registered;
|
|
11
|
+
private closing;
|
|
12
|
+
private failure;
|
|
13
|
+
private registration;
|
|
14
|
+
private registrationTimer;
|
|
15
|
+
private readonly reader;
|
|
16
|
+
readonly socket: net.Socket;
|
|
17
|
+
private readonly handlers;
|
|
18
|
+
constructor(socket: net.Socket, handlers: ConnectionHandlers);
|
|
19
|
+
start(registration: unknown): Promise<void>;
|
|
20
|
+
confirmRegistration(): void;
|
|
21
|
+
private clearRegistration;
|
|
22
|
+
private failRegistration;
|
|
23
|
+
private protocolError;
|
|
24
|
+
private readonly onError;
|
|
25
|
+
private readonly onClose;
|
|
26
|
+
isActive(): boolean;
|
|
27
|
+
disconnect(): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import net from "node:net";
|
|
2
2
|
import { errorMessage } from "../../shared/unknown.js";
|
|
3
|
-
import { getBrokerSocketPath,
|
|
3
|
+
import { getBrokerSocketPath, isOwnedBrokerSocket } from "./paths.js";
|
|
4
4
|
import { createMessageReader, writeMessage } from "./framing.js";
|
|
5
5
|
function connectSocket(socketPath, timeoutMs = 500) {
|
|
6
6
|
return new Promise((resolve, reject) => {
|
|
@@ -26,24 +26,11 @@ function connectSocket(socketPath, timeoutMs = 500) {
|
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
export async function connectBrokerSocket() {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
let lastError;
|
|
33
|
-
for (const candidate of candidates) {
|
|
34
|
-
if (!isOwnedBrokerSocket(candidate)) {
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
try {
|
|
38
|
-
// Preferred and legacy sockets must be tried in order, never connected concurrently.
|
|
39
|
-
// oxlint-disable-next-line no-await-in-loop
|
|
40
|
-
return await connectSocket(candidate);
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
lastError = error instanceof Error ? error : new Error(errorMessage(error));
|
|
44
|
-
}
|
|
29
|
+
const socketPath = getBrokerSocketPath();
|
|
30
|
+
if (!isOwnedBrokerSocket(socketPath)) {
|
|
31
|
+
throw new Error(`Intercom broker socket is unavailable: ${socketPath}`);
|
|
45
32
|
}
|
|
46
|
-
|
|
33
|
+
return await connectSocket(socketPath);
|
|
47
34
|
}
|
|
48
35
|
/** One socket owns registration, read/error listeners, and graceful shutdown. */
|
|
49
36
|
export class BrokerConnection {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Socket } from "net";
|
|
2
|
+
export declare const MAX_FRAME_SIZE_BYTES: number;
|
|
3
|
+
export declare function intercomMessageSizeBytes(msg: unknown): number;
|
|
4
|
+
export declare function validateIntercomMessageSize(msg: unknown): Error | null;
|
|
5
|
+
/**
|
|
6
|
+
* Write a length-prefixed message to a socket.
|
|
7
|
+
* Format: 4-byte big-endian length + JSON payload
|
|
8
|
+
*/
|
|
9
|
+
export declare function writeMessage(socket: Socket, msg: unknown): void;
|
|
10
|
+
/** Write serialized JSON; false means Node accepted it but the caller should wait for drain. */
|
|
11
|
+
export declare function writeFrame(socket: Socket, json: string, limit?: number): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Create a message reader that handles partial reads.
|
|
14
|
+
* Calls onMessage for each complete message received.
|
|
15
|
+
* Protocol or handler errors are reported to onError so the caller can close the socket.
|
|
16
|
+
*/
|
|
17
|
+
export declare function createMessageReader(onMessage: (msg: unknown) => void, onError: (error: Readonly<Error>) => void, limit?: number): (data: Buffer) => void;
|
|
@@ -14,15 +14,18 @@ export function validateIntercomMessageSize(msg) {
|
|
|
14
14
|
* Format: 4-byte big-endian length + JSON payload
|
|
15
15
|
*/
|
|
16
16
|
export function writeMessage(socket, msg) {
|
|
17
|
-
|
|
17
|
+
writeFrame(socket, JSON.stringify(msg));
|
|
18
|
+
}
|
|
19
|
+
/** Write serialized JSON; false means Node accepted it but the caller should wait for drain. */
|
|
20
|
+
export function writeFrame(socket, json, limit = MAX_FRAME_SIZE_BYTES) {
|
|
18
21
|
const size = Buffer.byteLength(json, "utf-8");
|
|
19
|
-
if (size >
|
|
20
|
-
throw new Error(`Intercom message too large (${size} bytes; max ${
|
|
22
|
+
if (size > limit) {
|
|
23
|
+
throw new Error(`Intercom message too large (${size} bytes; max ${limit})`);
|
|
21
24
|
}
|
|
22
25
|
const payload = Buffer.from(json, "utf-8");
|
|
23
26
|
const header = Buffer.alloc(4);
|
|
24
27
|
header.writeUInt32BE(payload.length, 0);
|
|
25
|
-
socket.write(Buffer.concat([header, payload]));
|
|
28
|
+
return socket.write(Buffer.concat([header, payload]));
|
|
26
29
|
}
|
|
27
30
|
/** Retain fragments until a header or payload is complete; copy each fragmented value once. */
|
|
28
31
|
class MessageBuffer {
|
|
@@ -77,7 +80,7 @@ class MessageBuffer {
|
|
|
77
80
|
* Calls onMessage for each complete message received.
|
|
78
81
|
* Protocol or handler errors are reported to onError so the caller can close the socket.
|
|
79
82
|
*/
|
|
80
|
-
export function createMessageReader(onMessage, onError) {
|
|
83
|
+
export function createMessageReader(onMessage, onError, limit = MAX_FRAME_SIZE_BYTES) {
|
|
81
84
|
const buffer = new MessageBuffer();
|
|
82
85
|
let length;
|
|
83
86
|
return (data) => {
|
|
@@ -85,8 +88,8 @@ export function createMessageReader(onMessage, onError) {
|
|
|
85
88
|
while (buffer.length >= (length ?? 4)) {
|
|
86
89
|
if (length === undefined) {
|
|
87
90
|
length = buffer.read(4).readUInt32BE(0);
|
|
88
|
-
if (length >
|
|
89
|
-
onError(new Error(`Intercom frame too large (${length} bytes; max ${
|
|
91
|
+
if (length > limit) {
|
|
92
|
+
onError(new Error(`Intercom frame too large (${length} bytes; max ${limit})`));
|
|
90
93
|
buffer.clear();
|
|
91
94
|
length = undefined;
|
|
92
95
|
return;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Guarded commands use an exact main, never convenience names or a replacement context. */
|
|
2
|
+
export function guardedDeliveryError(sessions, to, message) {
|
|
3
|
+
const guard = message.guard;
|
|
4
|
+
if (!guard) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
const registered = sessions.get(to);
|
|
8
|
+
if (!registered || to !== guard.peerId) {
|
|
9
|
+
return "Guarded target not found";
|
|
10
|
+
}
|
|
11
|
+
const target = registered.info;
|
|
12
|
+
if (target.guardedDelivery !== 1) {
|
|
13
|
+
return "Recipient does not support guarded delivery";
|
|
14
|
+
}
|
|
15
|
+
if (target.parentSessionId !== undefined ||
|
|
16
|
+
target.rootSessionId !== guard.rootSessionId ||
|
|
17
|
+
target.incarnation !== guard.incarnation ||
|
|
18
|
+
target.applicationGuard !== guard.applicationGuard) {
|
|
19
|
+
return "Guarded target changed";
|
|
20
|
+
}
|
|
21
|
+
const mains = [...sessions.values()].filter(({ info }) => info.rootSessionId === guard.rootSessionId && info.parentSessionId === undefined);
|
|
22
|
+
return mains.length === 1 ? null : "Guarded root is ambiguous";
|
|
23
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type net from "node:net";
|
|
2
|
+
import { type UnknownRecord } from "../../shared/unknown.ts";
|
|
3
|
+
import { type LastMessageQuery, type LastMessageResult, type SessionInfo, type ReceiptQuery, type ReceiptResult } from "../types.ts";
|
|
4
|
+
export type NativeReadQuery = LastMessageQuery | ReceiptQuery;
|
|
5
|
+
export type NativeReadResult = LastMessageResult | ReceiptResult;
|
|
6
|
+
export declare function isNativeReadQuery(value: unknown): value is NativeReadQuery;
|
|
7
|
+
export declare function isReceiptResult(value: unknown): value is ReceiptResult;
|
|
8
|
+
export declare function isNativeReadResult(value: unknown): value is NativeReadResult;
|
|
9
|
+
export declare function isLastMessageResult(value: unknown): value is LastMessageResult;
|
|
10
|
+
interface LastPeer {
|
|
11
|
+
readonly socket: net.Socket;
|
|
12
|
+
readonly info: SessionInfo;
|
|
13
|
+
readonly lastMessages: boolean;
|
|
14
|
+
readonly receiptReads: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** Correlation belongs to the broker, not the requester or the recipient's model queue. */
|
|
17
|
+
export declare class LastMessageRelay {
|
|
18
|
+
private readonly pending;
|
|
19
|
+
private readonly sessions;
|
|
20
|
+
constructor(sessions: ReadonlyMap<string, LastPeer>);
|
|
21
|
+
request(fromId: string, message: UnknownRecord): void;
|
|
22
|
+
respond(fromId: string, message: UnknownRecord): void;
|
|
23
|
+
disconnected(sessionId: string): void;
|
|
24
|
+
private finish;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { isRecord } from "../../shared/unknown.js";
|
|
3
|
+
import { isDeliveryGuard, isPublicationReplyHint, isLastMessageQuery, isReceiptQuery, LAST_MESSAGE_PAGE_LIMIT, normalizeSessionInfo, } from "../types.js";
|
|
4
|
+
import { finiteNumber, nonNegativeInteger, optionalLabel, safeLabel } from "../validation.js";
|
|
5
|
+
import { validateIntercomMessageSize, writeMessage } from "./framing.js";
|
|
6
|
+
import { messageSender } from "./snapshots.js";
|
|
7
|
+
import { findSessions } from "./targets.js";
|
|
8
|
+
export function isNativeReadQuery(value) {
|
|
9
|
+
return isReceiptQuery(value) || isLastMessageQuery(value);
|
|
10
|
+
}
|
|
11
|
+
function isNativeReceipt(value) {
|
|
12
|
+
if (!isReceiptQuery(value) || !isRecord(value) || !isRecord(value.sender)) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
return (value.version === 1 &&
|
|
16
|
+
safeLabel(value.sender.peerId) &&
|
|
17
|
+
[value.sender.rootSessionId, value.sender.incarnation].every(optionalLabel) &&
|
|
18
|
+
typeof value.textSha256 === "string" &&
|
|
19
|
+
/^[a-f0-9]{64}$/.test(value.textSha256) &&
|
|
20
|
+
receiptPublication(value) &&
|
|
21
|
+
receiptFacts(value));
|
|
22
|
+
}
|
|
23
|
+
function receiptPublication(value) {
|
|
24
|
+
return (typeof value.delivery === "string" &&
|
|
25
|
+
["queue", "steer", "passive"].includes(value.delivery) &&
|
|
26
|
+
(value.guard === undefined || isDeliveryGuard(value.guard)) &&
|
|
27
|
+
(value.replyHint === undefined || isPublicationReplyHint(value.replyHint)));
|
|
28
|
+
}
|
|
29
|
+
function receiptFacts(value) {
|
|
30
|
+
return (safeLabel(value.checkpointEntryId) &&
|
|
31
|
+
finiteNumber(value.receivedAt) &&
|
|
32
|
+
[value.queued, value.nativeHandoff, value.discarded].every((field) => typeof field === "boolean") &&
|
|
33
|
+
(value.placementEntryId === null || safeLabel(value.placementEntryId)));
|
|
34
|
+
}
|
|
35
|
+
export function isReceiptResult(value) {
|
|
36
|
+
return isRecord(value) && (typeof value.error === "string" || isNativeReceipt(value.receipt));
|
|
37
|
+
}
|
|
38
|
+
export function isNativeReadResult(value) {
|
|
39
|
+
return isReceiptResult(value) || isLastMessageResult(value);
|
|
40
|
+
}
|
|
41
|
+
function pageIdentity(value) {
|
|
42
|
+
return (normalizeSessionInfo(value.session) !== null &&
|
|
43
|
+
(value.entryId === null || (typeof value.entryId === "string" && value.entryId.length > 0)) &&
|
|
44
|
+
typeof value.text === "string" &&
|
|
45
|
+
value.text.length <= LAST_MESSAGE_PAGE_LIMIT);
|
|
46
|
+
}
|
|
47
|
+
function pageOffsets(value) {
|
|
48
|
+
if (!nonNegativeInteger(value.offset) ||
|
|
49
|
+
!nonNegativeInteger(value.totalLength) ||
|
|
50
|
+
typeof value.text !== "string") {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
const end = value.offset + value.text.length;
|
|
54
|
+
if (value.entryId === null) {
|
|
55
|
+
return end === 0 && value.totalLength === 0 && value.nextOffset === undefined;
|
|
56
|
+
}
|
|
57
|
+
if (value.nextOffset === undefined) {
|
|
58
|
+
return end === value.totalLength;
|
|
59
|
+
}
|
|
60
|
+
return value.nextOffset === end && end < value.totalLength && value.text.length > 0;
|
|
61
|
+
}
|
|
62
|
+
export function isLastMessageResult(value) {
|
|
63
|
+
return (isRecord(value) &&
|
|
64
|
+
(typeof value.error === "string" || (pageIdentity(value) && pageOffsets(value))));
|
|
65
|
+
}
|
|
66
|
+
function unavailable(targets, name, pending, query) {
|
|
67
|
+
if (targets.length === 0) {
|
|
68
|
+
return "Session not found";
|
|
69
|
+
}
|
|
70
|
+
if (targets.length > 1) {
|
|
71
|
+
return `Multiple sessions named "${name}" are connected. Use the session ID instead.`;
|
|
72
|
+
}
|
|
73
|
+
if (!targets[0].lastMessages) {
|
|
74
|
+
return "Recipient does not support last-message reads; reload its extension.";
|
|
75
|
+
}
|
|
76
|
+
if ("messageId" in query &&
|
|
77
|
+
(!targets[0].receiptReads || targets[0].info.rootSessionId !== query.rootSessionId)) {
|
|
78
|
+
return "publication_unavailable";
|
|
79
|
+
}
|
|
80
|
+
if (pending >= 128) {
|
|
81
|
+
return "Too many pending last-message reads; retry after they settle.";
|
|
82
|
+
}
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
function matchesPage(result, pending, fromId) {
|
|
86
|
+
if ("error" in result) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
if ("messageId" in pending.query) {
|
|
90
|
+
return ("receipt" in result &&
|
|
91
|
+
result.receipt.messageId === pending.query.messageId &&
|
|
92
|
+
result.receipt.rootSessionId === pending.query.rootSessionId);
|
|
93
|
+
}
|
|
94
|
+
if ("receipt" in result) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return matchesLastPage(result, pending.query, fromId);
|
|
98
|
+
}
|
|
99
|
+
function matchesLastPage(result, query, fromId) {
|
|
100
|
+
return (result.session.id === fromId &&
|
|
101
|
+
result.offset === (query.offset ?? 0) &&
|
|
102
|
+
(query.entryId === undefined || result.entryId === query.entryId) &&
|
|
103
|
+
result.text.length <= (query.limit ?? LAST_MESSAGE_PAGE_LIMIT));
|
|
104
|
+
}
|
|
105
|
+
/** Correlation belongs to the broker, not the requester or the recipient's model queue. */
|
|
106
|
+
export class LastMessageRelay {
|
|
107
|
+
pending = new Map();
|
|
108
|
+
sessions;
|
|
109
|
+
constructor(sessions) {
|
|
110
|
+
this.sessions = sessions;
|
|
111
|
+
}
|
|
112
|
+
request(fromId, message) {
|
|
113
|
+
if (typeof message.requestId !== "string" ||
|
|
114
|
+
typeof message.to !== "string" ||
|
|
115
|
+
!isNativeReadQuery(message.query)) {
|
|
116
|
+
throw new Error("Invalid last message request");
|
|
117
|
+
}
|
|
118
|
+
const targets = findSessions(this.sessions, message.to, fromId);
|
|
119
|
+
const target = targets[0];
|
|
120
|
+
const from = this.sessions.get(fromId);
|
|
121
|
+
if (!from) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const token = randomUUID();
|
|
125
|
+
const frame = {
|
|
126
|
+
type: "last_request",
|
|
127
|
+
requestId: token,
|
|
128
|
+
from: messageSender(from.info),
|
|
129
|
+
query: message.query,
|
|
130
|
+
};
|
|
131
|
+
const error = unavailable(targets, message.to, this.pending.size, message.query) ??
|
|
132
|
+
validateIntercomMessageSize(frame)?.message;
|
|
133
|
+
if (error !== undefined) {
|
|
134
|
+
writeMessage(from.socket, {
|
|
135
|
+
type: "last_response",
|
|
136
|
+
requestId: message.requestId,
|
|
137
|
+
result: { error },
|
|
138
|
+
});
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const timer = setTimeout(() => this.finish(token, { error: "Last-message read timed out" }), 5000);
|
|
142
|
+
timer.unref();
|
|
143
|
+
this.pending.set(token, {
|
|
144
|
+
fromId,
|
|
145
|
+
toId: target.info.id,
|
|
146
|
+
requestId: message.requestId,
|
|
147
|
+
query: message.query,
|
|
148
|
+
timer,
|
|
149
|
+
});
|
|
150
|
+
try {
|
|
151
|
+
writeMessage(target.socket, frame);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
this.finish(token, { error: "Recipient disconnected before last-message read" });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
respond(fromId, message) {
|
|
158
|
+
if (typeof message.requestId !== "string") {
|
|
159
|
+
throw new Error("Invalid last message response");
|
|
160
|
+
}
|
|
161
|
+
const pending = this.pending.get(message.requestId);
|
|
162
|
+
if (!pending || pending.toId !== fromId) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const result = message.result;
|
|
166
|
+
this.finish(message.requestId, isNativeReadResult(result) && matchesPage(result, pending, fromId)
|
|
167
|
+
? result
|
|
168
|
+
: { error: "Recipient returned an invalid last-message page" });
|
|
169
|
+
}
|
|
170
|
+
disconnected(sessionId) {
|
|
171
|
+
for (const [token, pending] of this.pending) {
|
|
172
|
+
if (pending.fromId === sessionId || pending.toId === sessionId) {
|
|
173
|
+
this.finish(token, { error: "Peer disconnected during last-message read" });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
finish(token, result) {
|
|
178
|
+
const pending = this.pending.get(token);
|
|
179
|
+
if (!pending) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
clearTimeout(pending.timer);
|
|
183
|
+
this.pending.delete(token);
|
|
184
|
+
const from = this.sessions.get(pending.fromId);
|
|
185
|
+
if (!from) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const frame = { type: "last_response", requestId: pending.requestId, result };
|
|
189
|
+
const invalid = validateIntercomMessageSize(frame);
|
|
190
|
+
writeMessage(from.socket, invalid
|
|
191
|
+
? {
|
|
192
|
+
type: "last_response",
|
|
193
|
+
requestId: pending.requestId,
|
|
194
|
+
result: { error: invalid.message },
|
|
195
|
+
}
|
|
196
|
+
: frame);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Old agent-directory namespaces are inspected for migration, never used for routing. */
|
|
2
|
+
export declare function getPreviousBrokerSocketPaths(): readonly string[];
|
|
3
|
+
export declare function isOwnedBrokerSocket(socketPath: string): boolean;
|
|
4
|
+
/** A deployment can explicitly opt out of same-user discovery with a private runtime directory. */
|
|
5
|
+
export declare function getBrokerRuntimeDir(): string;
|
|
6
|
+
/** Read-only child observation endpoints share the runtime policy, not the broker namespace.
|
|
7
|
+
* The endpoint name is a short token digest because the private runtime directory also counts
|
|
8
|
+
* toward the Unix-socket path limit; a full token made nested test/deployment roots overflow. */
|
|
9
|
+
export declare function agentObservationSocketPath(token: string): string;
|
|
10
|
+
export declare function getBrokerSocketPath(): string;
|
|
11
|
+
/** Create or verify an owned, non-symlink, private socket directory. */
|
|
12
|
+
export declare function preparePrivateSocketPath(socketPath: string): string;
|
|
13
|
+
export declare function prepareBrokerSocketPath(): string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
|
-
import { dirname, join } from "node:path";
|
|
4
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
5
5
|
import { getPiAgentDir } from "../agent-dir.js";
|
|
6
6
|
const MAX_UNIX_SOCKET_PATH_BYTES = 100;
|
|
7
7
|
function agentDigest(agentDir, uid) {
|
|
@@ -10,8 +10,17 @@ function agentDigest(agentDir, uid) {
|
|
|
10
10
|
.digest("hex")
|
|
11
11
|
.slice(0, 16);
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
/** Old agent-directory namespaces are inspected for migration, never used for routing. */
|
|
14
|
+
export function getPreviousBrokerSocketPaths() {
|
|
15
|
+
const agentDir = getPiAgentDir();
|
|
16
|
+
const suffix = `pi-intercom-${agentDigest(agentDir, process.getuid?.())}`;
|
|
17
|
+
const preferred = join(tmpdir(), suffix, "broker.sock");
|
|
18
|
+
return [
|
|
19
|
+
Buffer.byteLength(preferred) <= MAX_UNIX_SOCKET_PATH_BYTES
|
|
20
|
+
? preferred
|
|
21
|
+
: join("/tmp", suffix, "broker.sock"),
|
|
22
|
+
join(tmpdir(), `pi-intercom-${agentDigest(agentDir)}.sock`),
|
|
23
|
+
];
|
|
15
24
|
}
|
|
16
25
|
export function isOwnedBrokerSocket(socketPath) {
|
|
17
26
|
try {
|
|
@@ -23,23 +32,56 @@ export function isOwnedBrokerSocket(socketPath) {
|
|
|
23
32
|
return false;
|
|
24
33
|
}
|
|
25
34
|
}
|
|
26
|
-
|
|
35
|
+
function defaultRuntimeRoot() {
|
|
36
|
+
if (process.platform !== "android") {
|
|
37
|
+
return "/tmp";
|
|
38
|
+
}
|
|
39
|
+
return process.env.PREFIX === undefined ? tmpdir() : join(process.env.PREFIX, "tmp");
|
|
40
|
+
}
|
|
41
|
+
function runtimeDirectory(socketName, sibling = "") {
|
|
42
|
+
const configured = process.env.PI_INTERCOM_RUNTIME_DIR;
|
|
27
43
|
const uid = process.getuid?.();
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
44
|
+
if (uid === undefined) {
|
|
45
|
+
throw new Error("Intercom requires Unix user IDs and Unix domain sockets.");
|
|
46
|
+
}
|
|
47
|
+
const base = configured ?? join(defaultRuntimeRoot(), `pi-intercom-${uid}`);
|
|
48
|
+
const directory = isAbsolute(base) && sibling !== "" ? `${resolve(base)}${sibling}` : base;
|
|
49
|
+
if (!isAbsolute(directory) ||
|
|
50
|
+
directory.includes("\0") ||
|
|
51
|
+
Buffer.byteLength(join(directory, socketName)) > MAX_UNIX_SOCKET_PATH_BYTES) {
|
|
52
|
+
throw new Error("PI_INTERCOM_RUNTIME_DIR must be an absolute short Unix socket directory.");
|
|
53
|
+
}
|
|
54
|
+
return directory;
|
|
33
55
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
56
|
+
/** A deployment can explicitly opt out of same-user discovery with a private runtime directory. */
|
|
57
|
+
export function getBrokerRuntimeDir() {
|
|
58
|
+
return runtimeDirectory("broker.sock");
|
|
59
|
+
}
|
|
60
|
+
/** Read-only child observation endpoints share the runtime policy, not the broker namespace.
|
|
61
|
+
* The endpoint name is a short token digest because the private runtime directory also counts
|
|
62
|
+
* toward the Unix-socket path limit; a full token made nested test/deployment roots overflow. */
|
|
63
|
+
export function agentObservationSocketPath(token) {
|
|
64
|
+
if (!/^[a-zA-Z0-9_-]{1,64}$/.test(token)) {
|
|
65
|
+
throw new Error("Invalid actor token.");
|
|
66
|
+
}
|
|
67
|
+
const name = `obs-${createHash("sha256").update(token).digest("hex").slice(0, 16)}.sock`;
|
|
68
|
+
return join(runtimeDirectory(name, "-agents"), name);
|
|
69
|
+
}
|
|
70
|
+
export function getBrokerSocketPath() {
|
|
71
|
+
return join(getBrokerRuntimeDir(), "broker.sock");
|
|
72
|
+
}
|
|
73
|
+
/** Create or verify an owned, non-symlink, private socket directory. */
|
|
74
|
+
export function preparePrivateSocketPath(socketPath) {
|
|
75
|
+
const directory = dirname(socketPath);
|
|
76
|
+
fs.mkdirSync(directory, { recursive: true, mode: 0o700 });
|
|
77
|
+
const stat = fs.lstatSync(directory);
|
|
39
78
|
const uid = process.getuid?.();
|
|
40
79
|
if (!stat.isDirectory() || stat.isSymbolicLink() || (uid !== undefined && stat.uid !== uid)) {
|
|
41
|
-
throw new Error(`Unsafe intercom socket directory: ${
|
|
80
|
+
throw new Error(`Unsafe intercom socket directory: ${directory}`);
|
|
42
81
|
}
|
|
43
|
-
fs.chmodSync(
|
|
82
|
+
fs.chmodSync(directory, 0o700);
|
|
44
83
|
return socketPath;
|
|
45
84
|
}
|
|
85
|
+
export function prepareBrokerSocketPath() {
|
|
86
|
+
return preparePrivateSocketPath(getBrokerSocketPath());
|
|
87
|
+
}
|
|
@@ -73,6 +73,10 @@ export function brokerPidRecord() {
|
|
|
73
73
|
return `${process.pid}\n${identity !== undefined ? `${identity}\n` : ""}`;
|
|
74
74
|
}
|
|
75
75
|
export function isBrokerPidReused(pid, record) {
|
|
76
|
+
return isLinuxProcessReplaced(pid, record.slice(record.indexOf("\n") + 1));
|
|
77
|
+
}
|
|
78
|
+
/** True only when a live Linux PID provably names a different process than the identity. */
|
|
79
|
+
export function isLinuxProcessReplaced(pid, identity) {
|
|
76
80
|
const current = readLinuxProcess(pid);
|
|
77
81
|
if (!current) {
|
|
78
82
|
return false;
|
|
@@ -80,7 +84,7 @@ export function isBrokerPidReused(pid, record) {
|
|
|
80
84
|
if (current.tgid !== pid) {
|
|
81
85
|
return true;
|
|
82
86
|
}
|
|
83
|
-
const saved = IDENTITY.exec(
|
|
87
|
+
const saved = IDENTITY.exec(identity.trim());
|
|
84
88
|
const actual = IDENTITY.exec(current.identity ?? "");
|
|
85
89
|
if (!saved || !actual) {
|
|
86
90
|
return false;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { createMessageReader } from "./framing.js";
|
|
3
|
+
import { assertMainParent } from "./targets.js";
|
|
4
|
+
import { isSessionRegistration } from "../types.js";
|
|
5
|
+
export function registeredSessionInfo(msg, sessions) {
|
|
6
|
+
if (!isSessionRegistration(msg.session)) {
|
|
7
|
+
throw new Error("Invalid register message");
|
|
8
|
+
}
|
|
9
|
+
assertMainParent(msg.session, sessions);
|
|
10
|
+
const requestedId = typeof msg.requestedId === "string" && /^[a-zA-Z0-9_-]{8,80}$/.test(msg.requestedId)
|
|
11
|
+
? msg.requestedId
|
|
12
|
+
: undefined;
|
|
13
|
+
const id = requestedId !== undefined && !sessions.has(requestedId) ? requestedId : randomUUID();
|
|
14
|
+
return {
|
|
15
|
+
...msg.session,
|
|
16
|
+
id,
|
|
17
|
+
guardedDelivery: msg.guardedDelivery === 1 ? msg.session.guardedDelivery : undefined,
|
|
18
|
+
lastSeen: msg.session.lastSeen ?? Date.now(),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** A server connection owns its registration identity until the socket closes. */
|
|
22
|
+
export function acceptBrokerConnection(socket, handleMessage, disconnected) {
|
|
23
|
+
let sessionId = null;
|
|
24
|
+
socket.on("data", createMessageReader((message) => handleMessage(socket, message, sessionId, (id) => {
|
|
25
|
+
sessionId = id;
|
|
26
|
+
}), (error) => {
|
|
27
|
+
socket.destroy(error);
|
|
28
|
+
}));
|
|
29
|
+
socket.on("close", () => {
|
|
30
|
+
if (sessionId !== null) {
|
|
31
|
+
disconnected(sessionId);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
socket.on("error", (error) => {
|
|
35
|
+
console.error("Socket error:", error);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type SessionSnapshot } from "../types.ts";
|
|
2
|
+
/** Multipart frames build a private cache; only a complete validated snapshot escapes. */
|
|
3
|
+
export declare class SnapshotReader {
|
|
4
|
+
private readonly sessions;
|
|
5
|
+
private readonly receipts;
|
|
6
|
+
private addSession;
|
|
7
|
+
append(sessions: readonly unknown[], receipts: unknown): void;
|
|
8
|
+
finish(): SessionSnapshot;
|
|
9
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type SessionInfo, type TopicUpdate, type Message, type BrokerMessage, type TopicSubscription, type SendResult } from "../types.ts";
|
|
2
|
+
/** Direct messages and old clients receive identity, not potentially large topic state. */
|
|
3
|
+
export declare function messageSender(info: SessionInfo): SessionInfo;
|
|
4
|
+
export declare function snapshotFrames(requestId: string, infos: readonly SessionInfo[], stream: boolean): BrokerMessage[];
|
|
5
|
+
interface PreparedTopicChange {
|
|
6
|
+
readonly topic?: TopicUpdate;
|
|
7
|
+
readonly subscription?: TopicSubscription;
|
|
8
|
+
readonly unsubscribe?: string;
|
|
9
|
+
readonly publication?: TopicUpdate;
|
|
10
|
+
readonly restore: boolean;
|
|
11
|
+
readonly changed: boolean;
|
|
12
|
+
readonly bytes: number;
|
|
13
|
+
}
|
|
14
|
+
/** Keep committed records indexed; restores validate only new bytes and cached envelope maxima. */
|
|
15
|
+
export declare class TopicSnapshot {
|
|
16
|
+
private readonly topics;
|
|
17
|
+
private readonly subscriptions;
|
|
18
|
+
constructor(info: SessionInfo);
|
|
19
|
+
subscription(topic: string): TopicSubscription | undefined;
|
|
20
|
+
prepare(change: unknown, supported: boolean): PreparedTopicChange;
|
|
21
|
+
private preparePublication;
|
|
22
|
+
snapshot(info: SessionInfo, prepared?: PreparedTopicChange): SessionInfo;
|
|
23
|
+
validateRestore(info: SessionInfo, prepared: PreparedTopicChange, requestId: string): void;
|
|
24
|
+
commit(prepared: PreparedTopicChange): void;
|
|
25
|
+
}
|
|
26
|
+
export declare function deliveryAcknowledgement(receipt: SendResult): BrokerMessage;
|
|
27
|
+
export declare function shouldReplaceDelivery(message: Message, info: SessionInfo): boolean;
|
|
28
|
+
export declare function publicationMessage(publication: TopicUpdate, awaitRelease: boolean): Message;
|
|
29
|
+
export {};
|