@north-light/cli 0.0.0-stage → 0.3.413
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/LICENSE +18 -0
- package/README.md +182 -2
- package/bin/crouter +4 -0
- package/bin/crtr +4 -0
- package/bin/crtr-launcher +4 -0
- package/bin/crtrd +4 -0
- package/bin/progress-painter.mjs +89 -0
- package/bin/runtime-generation-manifest.mjs +286 -0
- package/bin/runtime-selector.mjs +510 -0
- package/dist/api/client.d.ts +501 -0
- package/dist/api/client.js +3 -0
- package/dist/api/command-manifest/index.d.ts +3 -0
- package/dist/api/command-manifest/index.js +1 -0
- package/dist/api/command-manifest/manifest.d.ts +51 -0
- package/dist/api/command-manifest/manifest.js +1 -0
- package/dist/api/command-manifest/result.d.ts +25 -0
- package/dist/api/command-manifest/result.js +1 -0
- package/dist/api/command-manifest/schema.d.ts +28 -0
- package/dist/api/command-manifest/schema.js +1 -0
- package/dist/api/dto/analytics.d.ts +184 -0
- package/dist/api/dto/analytics.js +0 -0
- package/dist/api/dto/attach.d.ts +22 -0
- package/dist/api/dto/attach.js +0 -0
- package/dist/api/dto/bash-jobs.d.ts +24 -0
- package/dist/api/dto/bash-jobs.js +1 -0
- package/dist/api/dto/bash.d.ts +17 -0
- package/dist/api/dto/bash.js +0 -0
- package/dist/api/dto/broker-ops.d.ts +187 -0
- package/dist/api/dto/broker-ops.js +0 -0
- package/dist/api/dto/broker-signals.d.ts +25 -0
- package/dist/api/dto/broker-signals.js +0 -0
- package/dist/api/dto/broker.d.ts +86 -0
- package/dist/api/dto/broker.js +0 -0
- package/dist/api/dto/canvas.d.ts +359 -0
- package/dist/api/dto/canvas.js +0 -0
- package/dist/api/dto/chat-inventory.d.ts +56 -0
- package/dist/api/dto/chat-inventory.js +0 -0
- package/dist/api/dto/common.d.ts +29 -0
- package/dist/api/dto/common.js +1 -0
- package/dist/api/dto/config.d.ts +46 -0
- package/dist/api/dto/config.js +0 -0
- package/dist/api/dto/crons.d.ts +158 -0
- package/dist/api/dto/crons.js +1 -0
- package/dist/api/dto/custom-objects.d.ts +66 -0
- package/dist/api/dto/custom-objects.js +0 -0
- package/dist/api/dto/delivery.d.ts +71 -0
- package/dist/api/dto/delivery.js +0 -0
- package/dist/api/dto/docs.d.ts +135 -0
- package/dist/api/dto/docs.js +1 -0
- package/dist/api/dto/files.d.ts +21 -0
- package/dist/api/dto/files.js +0 -0
- package/dist/api/dto/focus.d.ts +24 -0
- package/dist/api/dto/focus.js +0 -0
- package/dist/api/dto/grants.d.ts +28 -0
- package/dist/api/dto/grants.js +0 -0
- package/dist/api/dto/health.d.ts +116 -0
- package/dist/api/dto/health.js +0 -0
- package/dist/api/dto/human-requests.d.ts +113 -0
- package/dist/api/dto/human-requests.js +0 -0
- package/dist/api/dto/human.d.ts +28 -0
- package/dist/api/dto/human.js +0 -0
- package/dist/api/dto/inbox.d.ts +273 -0
- package/dist/api/dto/inbox.js +0 -0
- package/dist/api/dto/lifecycle.d.ts +88 -0
- package/dist/api/dto/lifecycle.js +0 -0
- package/dist/api/dto/limits.d.ts +29 -0
- package/dist/api/dto/limits.js +0 -0
- package/dist/api/dto/mail.d.ts +44 -0
- package/dist/api/dto/mail.js +0 -0
- package/dist/api/dto/messages.d.ts +104 -0
- package/dist/api/dto/messages.js +0 -0
- package/dist/api/dto/model-config.d.ts +25 -0
- package/dist/api/dto/model-config.js +0 -0
- package/dist/api/dto/modelauth.d.ts +132 -0
- package/dist/api/dto/modelauth.js +0 -0
- package/dist/api/dto/node-events.d.ts +65 -0
- package/dist/api/dto/node-events.js +0 -0
- package/dist/api/dto/node-outcomes.d.ts +88 -0
- package/dist/api/dto/node-outcomes.js +0 -0
- package/dist/api/dto/node-records.d.ts +35 -0
- package/dist/api/dto/node-records.js +0 -0
- package/dist/api/dto/nodes.d.ts +371 -0
- package/dist/api/dto/nodes.js +0 -0
- package/dist/api/dto/objects.d.ts +172 -0
- package/dist/api/dto/objects.js +1 -0
- package/dist/api/dto/profiles.d.ts +117 -0
- package/dist/api/dto/profiles.js +1 -0
- package/dist/api/dto/recovery.d.ts +104 -0
- package/dist/api/dto/recovery.js +0 -0
- package/dist/api/dto/reports.d.ts +95 -0
- package/dist/api/dto/reports.js +0 -0
- package/dist/api/dto/review-comments.d.ts +146 -0
- package/dist/api/dto/review-comments.js +0 -0
- package/dist/api/dto/reviews.d.ts +113 -0
- package/dist/api/dto/reviews.js +0 -0
- package/dist/api/dto/run-events.d.ts +295 -0
- package/dist/api/dto/run-events.js +0 -0
- package/dist/api/dto/structured-requests.d.ts +64 -0
- package/dist/api/dto/structured-requests.js +1 -0
- package/dist/api/dto/subscriptions.d.ts +14 -0
- package/dist/api/dto/subscriptions.js +0 -0
- package/dist/api/dto/worktree.d.ts +55 -0
- package/dist/api/dto/worktree.js +0 -0
- package/dist/api/error-codes.d.ts +259 -0
- package/dist/api/error-codes.js +1 -0
- package/dist/api/errors.d.ts +47 -0
- package/dist/api/errors.js +1 -0
- package/dist/api/index.d.ts +48 -0
- package/dist/api/index.js +1 -0
- package/dist/api/long-poll.d.ts +59 -0
- package/dist/api/long-poll.js +1 -0
- package/dist/api/node-transport.d.ts +18 -0
- package/dist/api/node-transport.js +1 -0
- package/dist/api/plugin-manifest-schema.d.ts +233 -0
- package/dist/api/plugin-manifest-schema.js +0 -0
- package/dist/api/routes.d.ts +164 -0
- package/dist/api/routes.js +1 -0
- package/dist/api/runtime-version.d.ts +31 -0
- package/dist/api/runtime-version.js +1 -0
- package/dist/build-root.d.ts +58 -0
- package/dist/build-root.js +1 -0
- package/dist/builtin-memory/00-runtime-base/00-authoring.md +46 -0
- package/dist/builtin-memory/00-runtime-base/01-escalation-unattended.md +15 -0
- package/dist/builtin-memory/00-runtime-base/01-escalation.md +15 -0
- package/dist/builtin-memory/00-runtime-base/02-insight-capture.md +11 -0
- package/dist/builtin-memory/01-spine/00-has-manager.md +14 -0
- package/dist/builtin-memory/02-turn-lifecycle/00-ending-a-turn.md +28 -0
- package/dist/builtin-memory/02-turn-lifecycle/01-terminal-user.md +11 -0
- package/dist/builtin-memory/02-turn-lifecycle/01-terminal.md +13 -0
- package/dist/builtin-memory/02-turn-lifecycle/02-resident.md +19 -0
- package/dist/builtin-memory/04-base-worker-exploring.md +13 -0
- package/dist/builtin-memory/04-base-worker.md +15 -0
- package/dist/builtin-memory/04-orchestration-kernel.md +62 -0
- package/dist/builtin-memory/05-kinds/advisor/01-orchestrator.md +17 -0
- package/dist/builtin-memory/05-kinds/advisor/advice-contract.md +15 -0
- package/dist/builtin-memory/05-kinds/explore/00-base.md +19 -0
- package/dist/builtin-memory/05-kinds/explore/01-orchestrator.md +17 -0
- package/dist/builtin-memory/05-kinds/general/00-base.md +15 -0
- package/dist/builtin-memory/05-kinds/review/00-base.md +17 -0
- package/dist/builtin-memory/05-kinds/review/01-orchestrator.md +20 -0
- package/dist/builtin-memory/05-kinds/review/companion/00-base.md +21 -0
- package/dist/builtin-memory/05-kinds/review/security-findings.md +13 -0
- package/dist/builtin-memory/advisor/council.md +33 -0
- package/dist/builtin-memory/crouter-concepts/INDEX.md +15 -0
- package/dist/builtin-memory/crouter-concepts/README.md +19 -0
- package/dist/builtin-memory/crouter-concepts/documents.md +54 -0
- package/dist/builtin-memory/crouter-concepts/lifecycle-and-wakes.md +28 -0
- package/dist/builtin-memory/crouter-concepts/nodes-and-the-canvas.md +31 -0
- package/dist/builtin-memory/crouter-concepts/profiles-kinds-and-modes.md +33 -0
- package/dist/builtin-memory/crouter-concepts/scopes-and-trust.md +41 -0
- package/dist/builtin-memory/crouter-concepts/why-a-daemon.md +31 -0
- package/dist/builtin-memory/crouter-plugin/INDEX.md +12 -0
- package/dist/builtin-memory/crouter-plugin/README.md +22 -0
- package/dist/builtin-memory/crouter-plugin/bundles-and-memory.md +30 -0
- package/dist/builtin-memory/crouter-plugin/commands.md +24 -0
- package/dist/builtin-memory/crouter-plugin/deploying.md +36 -0
- package/dist/builtin-memory/crouter-plugin/errors.md +41 -0
- package/dist/builtin-memory/crouter-plugin/getting-started.md +25 -0
- package/dist/builtin-memory/crouter-plugin/output.md +52 -0
- package/dist/builtin-memory/crouter-plugin/parameters.md +31 -0
- package/dist/builtin-memory/crouter-sdk/INDEX.md +13 -0
- package/dist/builtin-memory/crouter-sdk/README.md +92 -0
- package/dist/builtin-memory/crouter-sdk/bash.md +40 -0
- package/dist/builtin-memory/crouter-sdk/client.md +299 -0
- package/dist/builtin-memory/crouter-sdk/docker.md +70 -0
- package/dist/builtin-memory/crouter-sdk/error-envelope.md +38 -0
- package/dist/builtin-memory/crouter-sdk/errors.md +113 -0
- package/dist/builtin-memory/crouter-sdk/files.md +50 -0
- package/dist/builtin-memory/crouter-sdk/getting-started.md +226 -0
- package/dist/builtin-memory/crouter-sdk/guides/README.md +20 -0
- package/dist/builtin-memory/crouter-sdk/guides/apps-on-crouter-cloud.md +117 -0
- package/dist/builtin-memory/crouter-sdk/guides/apps-with-many-users.md +61 -0
- package/dist/builtin-memory/crouter-sdk/guides/event-driven-assistant.md +91 -0
- package/dist/builtin-memory/crouter-sdk/guides/fan-out-pipeline.md +57 -0
- package/dist/builtin-memory/crouter-sdk/guides/human-approval.md +79 -0
- package/dist/builtin-memory/crouter-sdk/guides/typed-extraction.md +55 -0
- package/dist/builtin-memory/crouter-sdk/memory.md +49 -0
- package/dist/builtin-memory/crouter-sdk/nodes.md +195 -0
- package/dist/builtin-memory/crouter-sdk/release-notes.md +209 -0
- package/dist/builtin-memory/crouter-sdk/resources.md +101 -0
- package/dist/builtin-memory/crouter-sdk/streaming.md +218 -0
- package/dist/builtin-memory/crouter-sdk/testing.md +165 -0
- package/dist/builtin-memory/explore/exploration-doc.md +27 -0
- package/dist/builtin-memory/insights/capture.md +49 -0
- package/dist/builtin-memory/insights/init.md +88 -0
- package/dist/builtin-memory/internal/INDEX.md +40 -0
- package/dist/builtin-memory/internal/agent-shaping.md +80 -0
- package/dist/builtin-memory/internal/examples/INDEX.md +16 -0
- package/dist/builtin-memory/internal/examples/imessage-assistant.md +101 -0
- package/dist/builtin-memory/internal/marketplaces.md +160 -0
- package/dist/builtin-memory/internal/memory-loading.md +68 -0
- package/dist/builtin-memory/internal/nodes-and-canvas.md +60 -0
- package/dist/builtin-memory/internal/plugins.md +457 -0
- package/dist/builtin-memory/internal/storage-tiers.md +51 -0
- package/dist/builtin-memory/memory-read-orientation.md +13 -0
- package/dist/builtin-memory/wedged-child-on-runaway-bash.md +21 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/README.md +49 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/claude-plugin-commands.ts +440 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-commands/filters.json +7 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-commands/index.ts +214 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/index.ts +421 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/memory-slash-commands.ts +145 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/pi-shell-runner.ts +34 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.d.ts +78 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +1181 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +1409 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/sysprompt-window.ts +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/lib/package.json +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/lib/subscription-state.js +1 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/lib/subscription-state.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/LICENSE +13 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/README.md +172 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/bin.mjs +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/composer.js +219 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/Document.js +335 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/directives.js +176 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/errors.js +57 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/index.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/log.js +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst.js +98 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/parser.js +975 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/public-api.js +102 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/tags.js +96 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/util.js +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/visit.js +233 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/index.js +5 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/package.json +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/cli.d.ts +8 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/cli.mjs +201 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-collection.js +90 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-doc.js +45 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-node.js +112 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/composer.d.ts +63 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/composer.js +224 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-end.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-props.js +148 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/Document.d.ts +141 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/Document.js +337 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/anchors.js +76 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/applyReviver.js +57 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/createNode.js +90 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/directives.d.ts +49 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/directives.js +178 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/errors.d.ts +21 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/errors.js +62 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/index.d.ts +25 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/index.js +50 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/log.d.ts +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/log.js +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Alias.js +118 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Collection.js +151 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Node.js +40 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Pair.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Scalar.js +27 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/identity.js +53 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/toJS.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/options.d.ts +350 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-visit.js +99 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst.d.ts +109 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst.js +112 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/lexer.js +723 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/line-counter.js +41 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/parser.d.ts +84 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/parser.js +980 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/public-api.d.ts +44 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/public-api.js +107 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/Schema.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/map.js +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/null.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/seq.js +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/string.js +16 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/bool.js +21 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/float.js +47 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/int.js +42 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/schema.js +25 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json/schema.js +64 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/tags.d.ts +48 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/tags.js +99 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/types.d.ts +92 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringify.js +132 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/test-events.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/test-events.js +134 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/util.d.ts +16 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/util.js +28 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/visit.d.ts +102 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/visit.js +236 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/package.json +97 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/util.js +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/package-lock.json +3857 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/package.json +25 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/tsconfig.json +10 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +11 -0
- package/dist/clients/attach/ansi-cells.d.ts +44 -0
- package/dist/clients/attach/ansi-cells.js +1 -0
- package/dist/clients/attach/assets/README.md +7 -0
- package/dist/clients/attach/assets/whip-06.mp3 +0 -0
- package/dist/clients/attach/assets/whip-crack.mp3 +0 -0
- package/dist/clients/attach/assets/whip-snap.mp3 +0 -0
- package/dist/clients/attach/chrome/bash-jobs.d.ts +6 -0
- package/dist/clients/attach/chrome/bash-jobs.js +1 -0
- package/dist/clients/attach/chrome/canvas-panels.d.ts +38 -0
- package/dist/clients/attach/chrome/canvas-panels.js +1 -0
- package/dist/clients/attach/chrome/completion-bell.d.ts +10 -0
- package/dist/clients/attach/chrome/completion-bell.js +1 -0
- package/dist/clients/attach/chrome/cron-wait.d.ts +3 -0
- package/dist/clients/attach/chrome/cron-wait.js +1 -0
- package/dist/clients/attach/chrome/git-info.d.ts +20 -0
- package/dist/clients/attach/chrome/git-info.js +2 -0
- package/dist/clients/attach/chrome/header.d.ts +10 -0
- package/dist/clients/attach/chrome/header.js +1 -0
- package/dist/clients/attach/chrome/inbox-strip.d.ts +31 -0
- package/dist/clients/attach/chrome/inbox-strip.js +1 -0
- package/dist/clients/attach/chrome/key-hint.d.ts +9 -0
- package/dist/clients/attach/chrome/key-hint.js +1 -0
- package/dist/clients/attach/chrome/recap.d.ts +7 -0
- package/dist/clients/attach/chrome/recap.js +1 -0
- package/dist/clients/attach/chrome/review-wait.d.ts +6 -0
- package/dist/clients/attach/chrome/review-wait.js +1 -0
- package/dist/clients/attach/chrome/roster.d.ts +36 -0
- package/dist/clients/attach/chrome/roster.js +4 -0
- package/dist/clients/attach/chrome/status-line.d.ts +38 -0
- package/dist/clients/attach/chrome/status-line.js +1 -0
- package/dist/clients/attach/chrome/ticket-panel.d.ts +29 -0
- package/dist/clients/attach/chrome/ticket-panel.js +1 -0
- package/dist/clients/attach/chrome/widgets.d.ts +9 -0
- package/dist/clients/attach/chrome/widgets.js +1 -0
- package/dist/clients/attach/command.d.ts +3 -0
- package/dist/clients/attach/command.js +1 -0
- package/dist/clients/attach/config.d.ts +95 -0
- package/dist/clients/attach/config.js +1 -0
- package/dist/clients/attach/input/capabilities.d.ts +30 -0
- package/dist/clients/attach/input/capabilities.js +1 -0
- package/dist/clients/attach/input/clipboard-image.d.ts +55 -0
- package/dist/clients/attach/input/clipboard-image.js +20 -0
- package/dist/clients/attach/input/completion-frecency.d.ts +45 -0
- package/dist/clients/attach/input/completion-frecency.js +1 -0
- package/dist/clients/attach/input/controller.d.ts +91 -0
- package/dist/clients/attach/input/controller.js +7 -0
- package/dist/clients/attach/input/overlay-owner.d.ts +41 -0
- package/dist/clients/attach/input/overlay-owner.js +1 -0
- package/dist/clients/attach/input/ref-autocomplete.d.ts +77 -0
- package/dist/clients/attach/input/ref-autocomplete.js +2 -0
- package/dist/clients/attach/input/titled-editor.d.ts +225 -0
- package/dist/clients/attach/input/titled-editor.js +4 -0
- package/dist/clients/attach/overlays/auth.d.ts +13 -0
- package/dist/clients/attach/overlays/auth.js +2 -0
- package/dist/clients/attach/overlays/dialogs.d.ts +27 -0
- package/dist/clients/attach/overlays/dialogs.js +2 -0
- package/dist/clients/attach/overlays/file-review.d.ts +10 -0
- package/dist/clients/attach/overlays/file-review.js +2 -0
- package/dist/clients/attach/overlays/graph.d.ts +83 -0
- package/dist/clients/attach/overlays/graph.js +1 -0
- package/dist/clients/attach/overlays/help.d.ts +33 -0
- package/dist/clients/attach/overlays/help.js +1 -0
- package/dist/clients/attach/overlays/mcp.d.ts +32 -0
- package/dist/clients/attach/overlays/mcp.js +1 -0
- package/dist/clients/attach/overlays/pickers.d.ts +56 -0
- package/dist/clients/attach/overlays/pickers.js +1 -0
- package/dist/clients/attach/photon_rs_bg.wasm +0 -0
- package/dist/clients/attach/render/activity-slot.d.ts +4 -0
- package/dist/clients/attach/render/activity-slot.js +1 -0
- package/dist/clients/attach/render/assistant-message.d.ts +13 -0
- package/dist/clients/attach/render/assistant-message.js +1 -0
- package/dist/clients/attach/render/card-presentation.d.ts +36 -0
- package/dist/clients/attach/render/card-presentation.js +5 -0
- package/dist/clients/attach/render/chat-view.d.ts +356 -0
- package/dist/clients/attach/render/chat-view.js +5 -0
- package/dist/clients/attach/render/condensed-history.d.ts +21 -0
- package/dist/clients/attach/render/condensed-history.js +1 -0
- package/dist/clients/attach/render/context-message.d.ts +22 -0
- package/dist/clients/attach/render/context-message.js +1 -0
- package/dist/clients/attach/render/crtr-output.d.ts +52 -0
- package/dist/clients/attach/render/crtr-output.js +17 -0
- package/dist/clients/attach/render/diagram.d.ts +4 -0
- package/dist/clients/attach/render/diagram.js +7 -0
- package/dist/clients/attach/render/doc-links.d.ts +34 -0
- package/dist/clients/attach/render/doc-links.js +1 -0
- package/dist/clients/attach/render/edit-diff.d.ts +12 -0
- package/dist/clients/attach/render/edit-diff.js +5 -0
- package/dist/clients/attach/render/glyph-codepoints.d.ts +3 -0
- package/dist/clients/attach/render/glyph-codepoints.js +1 -0
- package/dist/clients/attach/render/group-activity.d.ts +84 -0
- package/dist/clients/attach/render/group-activity.js +2 -0
- package/dist/clients/attach/render/group-recap.d.ts +13 -0
- package/dist/clients/attach/render/group-recap.js +1 -0
- package/dist/clients/attach/render/markdown-source.d.ts +16 -0
- package/dist/clients/attach/render/markdown-source.js +5 -0
- package/dist/clients/attach/render/measured-container.d.ts +96 -0
- package/dist/clients/attach/render/measured-container.js +1 -0
- package/dist/clients/attach/render/page-block.d.ts +37 -0
- package/dist/clients/attach/render/page-block.js +1 -0
- package/dist/clients/attach/render/scroll-animation.d.ts +8 -0
- package/dist/clients/attach/render/scroll-animation.js +1 -0
- package/dist/clients/attach/render/tool-calls.d.ts +53 -0
- package/dist/clients/attach/render/tool-calls.js +3 -0
- package/dist/clients/attach/render/transcript-copy.d.ts +9 -0
- package/dist/clients/attach/render/transcript-copy.js +2 -0
- package/dist/clients/attach/render/transcript-search.d.ts +28 -0
- package/dist/clients/attach/render/transcript-search.js +1 -0
- package/dist/clients/attach/render/viewport.d.ts +38 -0
- package/dist/clients/attach/render/viewport.js +1 -0
- package/dist/clients/attach/session/banner.d.ts +13 -0
- package/dist/clients/attach/session/banner.js +1 -0
- package/dist/clients/attach/session/bindings.d.ts +20 -0
- package/dist/clients/attach/session/bindings.js +1 -0
- package/dist/clients/attach/session/chrome-refresh.d.ts +40 -0
- package/dist/clients/attach/session/chrome-refresh.js +1 -0
- package/dist/clients/attach/session/connection.d.ts +53 -0
- package/dist/clients/attach/session/connection.js +1 -0
- package/dist/clients/attach/session/context.d.ts +59 -0
- package/dist/clients/attach/session/context.js +0 -0
- package/dist/clients/attach/session/doc-materialize.d.ts +53 -0
- package/dist/clients/attach/session/doc-materialize.js +3 -0
- package/dist/clients/attach/session/document-links.d.ts +21 -0
- package/dist/clients/attach/session/document-links.js +1 -0
- package/dist/clients/attach/session/editor-frame.d.ts +47 -0
- package/dist/clients/attach/session/editor-frame.js +1 -0
- package/dist/clients/attach/session/editor-inventory.d.ts +63 -0
- package/dist/clients/attach/session/editor-inventory.js +6 -0
- package/dist/clients/attach/session/file-links.d.ts +24 -0
- package/dist/clients/attach/session/file-links.js +1 -0
- package/dist/clients/attach/session/focus-events.d.ts +4 -0
- package/dist/clients/attach/session/focus-events.js +1 -0
- package/dist/clients/attach/session/frame.d.ts +46 -0
- package/dist/clients/attach/session/frame.js +1 -0
- package/dist/clients/attach/session/frames.d.ts +49 -0
- package/dist/clients/attach/session/frames.js +1 -0
- package/dist/clients/attach/session/identity.d.ts +16 -0
- package/dist/clients/attach/session/identity.js +1 -0
- package/dist/clients/attach/session/input-wiring.d.ts +50 -0
- package/dist/clients/attach/session/input-wiring.js +1 -0
- package/dist/clients/attach/session/invariant.d.ts +9 -0
- package/dist/clients/attach/session/invariant.js +1 -0
- package/dist/clients/attach/session/keys.d.ts +46 -0
- package/dist/clients/attach/session/keys.js +1 -0
- package/dist/clients/attach/session/layout.d.ts +22 -0
- package/dist/clients/attach/session/layout.js +1 -0
- package/dist/clients/attach/session/mouse.d.ts +27 -0
- package/dist/clients/attach/session/mouse.js +1 -0
- package/dist/clients/attach/session/pane-focus.d.ts +8 -0
- package/dist/clients/attach/session/pane-focus.js +1 -0
- package/dist/clients/attach/session/pane-tag.d.ts +44 -0
- package/dist/clients/attach/session/pane-tag.js +1 -0
- package/dist/clients/attach/session/pi-assets.d.ts +1 -0
- package/dist/clients/attach/session/pi-assets.js +1 -0
- package/dist/clients/attach/session/pi-oauth-flows.d.ts +1 -0
- package/dist/clients/attach/session/pi-oauth-flows.js +1 -0
- package/dist/clients/attach/session/profile-files.d.ts +17 -0
- package/dist/clients/attach/session/profile-files.js +1 -0
- package/dist/clients/attach/session/reconnect.d.ts +44 -0
- package/dist/clients/attach/session/reconnect.js +1 -0
- package/dist/clients/attach/session/selection.d.ts +28 -0
- package/dist/clients/attach/session/selection.js +3 -0
- package/dist/clients/attach/session/state-sync.d.ts +38 -0
- package/dist/clients/attach/session/state-sync.js +1 -0
- package/dist/clients/attach/session/surface-frame.d.ts +20 -0
- package/dist/clients/attach/session/surface-frame.js +1 -0
- package/dist/clients/attach/session/surface-host.d.ts +65 -0
- package/dist/clients/attach/session/surface-host.js +1 -0
- package/dist/clients/attach/session/teardown.d.ts +30 -0
- package/dist/clients/attach/session/teardown.js +5 -0
- package/dist/clients/attach/session/transcript-search.d.ts +20 -0
- package/dist/clients/attach/session/transcript-search.js +3 -0
- package/dist/clients/attach/session/whip-achievements.d.ts +4 -0
- package/dist/clients/attach/session/whip-achievements.js +2 -0
- package/dist/clients/attach/session/whip.d.ts +20 -0
- package/dist/clients/attach/session/whip.js +1 -0
- package/dist/clients/attach/slash/dispatch.d.ts +116 -0
- package/dist/clients/attach/slash/dispatch.js +2 -0
- package/dist/clients/attach/slash/prompt-preview.d.ts +30 -0
- package/dist/clients/attach/slash/prompt-preview.js +1 -0
- package/dist/clients/attach/viewer.d.ts +8 -0
- package/dist/clients/attach/viewer.js +1946 -0
- package/dist/clients/conversation/projection.d.ts +79 -0
- package/dist/clients/conversation/projection.js +1 -0
- package/dist/clients/conversation/submit.d.ts +38 -0
- package/dist/clients/conversation/submit.js +1 -0
- package/dist/clients/inbox/controller.d.ts +174 -0
- package/dist/clients/inbox/controller.js +1 -0
- package/dist/clients/inbox/dto-adapt.d.ts +28 -0
- package/dist/clients/inbox/dto-adapt.js +1 -0
- package/dist/clients/inbox/layout.d.ts +8 -0
- package/dist/clients/inbox/layout.js +1 -0
- package/dist/clients/inbox/page-adapter.d.ts +33 -0
- package/dist/clients/inbox/page-adapter.js +1 -0
- package/dist/clients/inbox/resolve.d.ts +16 -0
- package/dist/clients/inbox/resolve.js +1 -0
- package/dist/clients/inbox/review/anchors.d.ts +41 -0
- package/dist/clients/inbox/review/anchors.js +1 -0
- package/dist/clients/inbox/review/comments-client.d.ts +74 -0
- package/dist/clients/inbox/review/comments-client.js +1 -0
- package/dist/clients/inbox/review/companion-pane.d.ts +47 -0
- package/dist/clients/inbox/review/companion-pane.js +1 -0
- package/dist/clients/inbox/review/document-surface.d.ts +212 -0
- package/dist/clients/inbox/review/document-surface.js +2 -0
- package/dist/clients/inbox/review/frame.d.ts +57 -0
- package/dist/clients/inbox/review/frame.js +1 -0
- package/dist/clients/inbox/review/keys.d.ts +69 -0
- package/dist/clients/inbox/review/keys.js +1 -0
- package/dist/clients/inbox/review/launch.d.ts +16 -0
- package/dist/clients/inbox/review/launch.js +1 -0
- package/dist/clients/inbox/review/live-source.d.ts +24 -0
- package/dist/clients/inbox/review/live-source.js +1 -0
- package/dist/clients/inbox/review/nvim.d.ts +15 -0
- package/dist/clients/inbox/review/nvim.js +1 -0
- package/dist/clients/inbox/review/remap.d.ts +51 -0
- package/dist/clients/inbox/review/remap.js +1 -0
- package/dist/clients/inbox/review/review-client.d.ts +43 -0
- package/dist/clients/inbox/review/review-client.js +1 -0
- package/dist/clients/inbox/review/roundtrip.d.ts +5 -0
- package/dist/clients/inbox/review/roundtrip.js +3 -0
- package/dist/clients/inbox/review/state.d.ts +153 -0
- package/dist/clients/inbox/review/state.js +4 -0
- package/dist/clients/inbox/review-adapter.d.ts +17 -0
- package/dist/clients/inbox/review-adapter.js +1 -0
- package/dist/clients/inbox/surface.d.ts +25 -0
- package/dist/clients/inbox/surface.js +1 -0
- package/dist/clients/inbox/tui/ansi.d.ts +68 -0
- package/dist/clients/inbox/tui/ansi.js +3 -0
- package/dist/clients/inbox/tui/input.d.ts +5 -0
- package/dist/clients/inbox/tui/input.js +5 -0
- package/dist/clients/inbox/tui/keys.d.ts +28 -0
- package/dist/clients/inbox/tui/keys.js +1 -0
- package/dist/clients/inbox/tui/page-body.d.ts +10 -0
- package/dist/clients/inbox/tui/page-body.js +1 -0
- package/dist/clients/inbox/tui/panel.d.ts +4 -0
- package/dist/clients/inbox/tui/panel.js +1 -0
- package/dist/clients/inbox/tui/render.d.ts +23 -0
- package/dist/clients/inbox/tui/render.js +2 -0
- package/dist/clients/inbox/tui/slots.d.ts +33 -0
- package/dist/clients/inbox/tui/slots.js +3 -0
- package/dist/clients/inbox/tui/types.d.ts +73 -0
- package/dist/clients/inbox/tui/types.js +0 -0
- package/dist/clients/inbox/tui.d.ts +17 -0
- package/dist/clients/inbox/tui.js +1 -0
- package/dist/clients/surfaces/host.d.ts +74 -0
- package/dist/clients/surfaces/host.js +0 -0
- package/dist/commands/api-client.d.ts +104 -0
- package/dist/commands/api-client.js +4 -0
- package/dist/commands/attention.d.ts +2 -0
- package/dist/commands/attention.js +1 -0
- package/dist/commands/canvas/edges.d.ts +2 -0
- package/dist/commands/canvas/edges.js +2 -0
- package/dist/commands/canvas/list.d.ts +4 -0
- package/dist/commands/canvas/list.js +3 -0
- package/dist/commands/canvas/read.d.ts +14 -0
- package/dist/commands/canvas/read.js +10 -0
- package/dist/commands/canvas/search.d.ts +2 -0
- package/dist/commands/canvas/search.js +3 -0
- package/dist/commands/canvas/unwatch.d.ts +2 -0
- package/dist/commands/canvas/unwatch.js +1 -0
- package/dist/commands/canvas/watch.d.ts +3 -0
- package/dist/commands/canvas/watch.js +1 -0
- package/dist/commands/canvas-analytics/chart.d.ts +52 -0
- package/dist/commands/canvas-analytics/chart.js +1 -0
- package/dist/commands/canvas-analytics/drilldown.d.ts +34 -0
- package/dist/commands/canvas-analytics/drilldown.js +1 -0
- package/dist/commands/canvas-analytics/format.d.ts +29 -0
- package/dist/commands/canvas-analytics/format.js +1 -0
- package/dist/commands/canvas-analytics/graph-detail.d.ts +2 -0
- package/dist/commands/canvas-analytics/graph-detail.js +2 -0
- package/dist/commands/canvas-analytics/graphs.d.ts +9 -0
- package/dist/commands/canvas-analytics/graphs.js +1 -0
- package/dist/commands/canvas-analytics/memory.d.ts +2 -0
- package/dist/commands/canvas-analytics/memory.js +1 -0
- package/dist/commands/canvas-analytics/overview.d.ts +2 -0
- package/dist/commands/canvas-analytics/overview.js +1 -0
- package/dist/commands/canvas-analytics/shell.d.ts +60 -0
- package/dist/commands/canvas-analytics/shell.js +2 -0
- package/dist/commands/canvas-analytics/time.d.ts +2 -0
- package/dist/commands/canvas-analytics/time.js +1 -0
- package/dist/commands/canvas-analytics/usage.d.ts +2 -0
- package/dist/commands/canvas-analytics/usage.js +1 -0
- package/dist/commands/canvas-analytics/view.d.ts +85 -0
- package/dist/commands/canvas-analytics/view.js +1 -0
- package/dist/commands/canvas-analytics.d.ts +2 -0
- package/dist/commands/canvas-analytics.js +1 -0
- package/dist/commands/canvas-browse.d.ts +2 -0
- package/dist/commands/canvas-browse.js +1 -0
- package/dist/commands/canvas-config.d.ts +2 -0
- package/dist/commands/canvas-config.js +2 -0
- package/dist/commands/canvas-history/grep.d.ts +1 -0
- package/dist/commands/canvas-history/grep.js +7 -0
- package/dist/commands/canvas-history/read.d.ts +1 -0
- package/dist/commands/canvas-history/read.js +3 -0
- package/dist/commands/canvas-history/search.d.ts +1 -0
- package/dist/commands/canvas-history/search.js +10 -0
- package/dist/commands/canvas-history/shared.d.ts +34 -0
- package/dist/commands/canvas-history/shared.js +1 -0
- package/dist/commands/canvas-history/stats.d.ts +1 -0
- package/dist/commands/canvas-history/stats.js +6 -0
- package/dist/commands/canvas-history.d.ts +2 -0
- package/dist/commands/canvas-history.js +1 -0
- package/dist/commands/canvas-issue.d.ts +2 -0
- package/dist/commands/canvas-issue.js +14 -0
- package/dist/commands/canvas-prune.d.ts +2 -0
- package/dist/commands/canvas-prune.js +1 -0
- package/dist/commands/canvas-roster.d.ts +2 -0
- package/dist/commands/canvas-roster.js +1 -0
- package/dist/commands/canvas-snapshot.d.ts +2 -0
- package/dist/commands/canvas-snapshot.js +1 -0
- package/dist/commands/canvas-use.d.ts +1 -0
- package/dist/commands/canvas-use.js +1 -0
- package/dist/commands/canvas.d.ts +3 -0
- package/dist/commands/canvas.js +1 -0
- package/dist/commands/chord.d.ts +2 -0
- package/dist/commands/chord.js +1 -0
- package/dist/commands/cron.d.ts +2 -0
- package/dist/commands/cron.js +11 -0
- package/dist/commands/custom-object/ack.d.ts +2 -0
- package/dist/commands/custom-object/ack.js +3 -0
- package/dist/commands/custom-object/publish.d.ts +2 -0
- package/dist/commands/custom-object/publish.js +1 -0
- package/dist/commands/custom-object/receive.d.ts +2 -0
- package/dist/commands/custom-object/receive.js +2 -0
- package/dist/commands/custom-object/register.d.ts +2 -0
- package/dist/commands/custom-object/register.js +3 -0
- package/dist/commands/custom-object/shared.d.ts +5 -0
- package/dist/commands/custom-object/shared.js +1 -0
- package/dist/commands/custom-object/unregister.d.ts +2 -0
- package/dist/commands/custom-object/unregister.js +1 -0
- package/dist/commands/custom-object.d.ts +2 -0
- package/dist/commands/custom-object.js +1 -0
- package/dist/commands/dashboard.d.ts +2 -0
- package/dist/commands/dashboard.js +1 -0
- package/dist/commands/doc/delete.d.ts +2 -0
- package/dist/commands/doc/delete.js +1 -0
- package/dist/commands/doc/edit.d.ts +2 -0
- package/dist/commands/doc/edit.js +1 -0
- package/dist/commands/doc/history.d.ts +2 -0
- package/dist/commands/doc/history.js +2 -0
- package/dist/commands/doc/lint.d.ts +2 -0
- package/dist/commands/doc/lint.js +2 -0
- package/dist/commands/doc/list.d.ts +2 -0
- package/dist/commands/doc/list.js +1 -0
- package/dist/commands/doc/move.d.ts +2 -0
- package/dist/commands/doc/move.js +1 -0
- package/dist/commands/doc/read.d.ts +2 -0
- package/dist/commands/doc/read.js +1 -0
- package/dist/commands/doc/replace-blocks.d.ts +6 -0
- package/dist/commands/doc/replace-blocks.js +4 -0
- package/dist/commands/doc/shared.d.ts +25 -0
- package/dist/commands/doc/shared.js +2 -0
- package/dist/commands/doc/write.d.ts +2 -0
- package/dist/commands/doc/write.js +1 -0
- package/dist/commands/doc.d.ts +2 -0
- package/dist/commands/doc.js +1 -0
- package/dist/commands/human/components.d.ts +4 -0
- package/dist/commands/human/components.js +3 -0
- package/dist/commands/human/feedback.d.ts +2 -0
- package/dist/commands/human/feedback.js +1 -0
- package/dist/commands/human/prompts.d.ts +21 -0
- package/dist/commands/human/prompts.js +1 -0
- package/dist/commands/human/queue.d.ts +3 -0
- package/dist/commands/human/queue.js +1 -0
- package/dist/commands/human/request.d.ts +2 -0
- package/dist/commands/human/request.js +1 -0
- package/dist/commands/human/review.d.ts +2 -0
- package/dist/commands/human/review.js +1 -0
- package/dist/commands/human/shared.d.ts +16 -0
- package/dist/commands/human/shared.js +1 -0
- package/dist/commands/human.d.ts +2 -0
- package/dist/commands/human.js +4 -0
- package/dist/commands/node/bash.d.ts +1 -0
- package/dist/commands/node/bash.js +5 -0
- package/dist/commands/node/create.d.ts +6 -0
- package/dist/commands/node/create.js +2 -0
- package/dist/commands/node/inspect.d.ts +2 -0
- package/dist/commands/node/inspect.js +12 -0
- package/dist/commands/node/lifecycle.d.ts +4 -0
- package/dist/commands/node/lifecycle.js +4 -0
- package/dist/commands/node/message.d.ts +1 -0
- package/dist/commands/node/message.js +1 -0
- package/dist/commands/node/outcome.d.ts +2 -0
- package/dist/commands/node/outcome.js +4 -0
- package/dist/commands/node/pyramid.d.ts +2 -0
- package/dist/commands/node/pyramid.js +2 -0
- package/dist/commands/node/subscription.d.ts +1 -0
- package/dist/commands/node/subscription.js +1 -0
- package/dist/commands/node/wait.d.ts +1 -0
- package/dist/commands/node/wait.js +7 -0
- package/dist/commands/node-context.d.ts +2 -0
- package/dist/commands/node-context.js +2 -0
- package/dist/commands/node-lifecycle-revive.d.ts +12 -0
- package/dist/commands/node-lifecycle-revive.js +1 -0
- package/dist/commands/node-snapshot.d.ts +2 -0
- package/dist/commands/node-snapshot.js +1 -0
- package/dist/commands/node-transcript.d.ts +2 -0
- package/dist/commands/node-transcript.js +1 -0
- package/dist/commands/node-worktree.d.ts +2 -0
- package/dist/commands/node-worktree.js +1 -0
- package/dist/commands/node.d.ts +2 -0
- package/dist/commands/node.js +1 -0
- package/dist/commands/pkg/browse/actions.d.ts +7 -0
- package/dist/commands/pkg/browse/actions.js +1 -0
- package/dist/commands/pkg/browse/catalog.d.ts +9 -0
- package/dist/commands/pkg/browse/catalog.js +1 -0
- package/dist/commands/pkg/browse/command-view.d.ts +3 -0
- package/dist/commands/pkg/browse/command-view.js +1 -0
- package/dist/commands/pkg/browse/detail-panel.d.ts +66 -0
- package/dist/commands/pkg/browse/detail-panel.js +1 -0
- package/dist/commands/pkg/browse/doc-view.d.ts +3 -0
- package/dist/commands/pkg/browse/doc-view.js +1 -0
- package/dist/commands/pkg/browse/list-panel.d.ts +28 -0
- package/dist/commands/pkg/browse/list-panel.js +2 -0
- package/dist/commands/pkg/browse/model.d.ts +223 -0
- package/dist/commands/pkg/browse/model.js +1 -0
- package/dist/commands/pkg/browse/shell.d.ts +93 -0
- package/dist/commands/pkg/browse/shell.js +1 -0
- package/dist/commands/pkg/browse.d.ts +2 -0
- package/dist/commands/pkg/browse.js +1 -0
- package/dist/commands/pkg/market-inspect.d.ts +2 -0
- package/dist/commands/pkg/market-inspect.js +1 -0
- package/dist/commands/pkg/market-manage.d.ts +16 -0
- package/dist/commands/pkg/market-manage.js +1 -0
- package/dist/commands/pkg/market.d.ts +1 -0
- package/dist/commands/pkg/market.js +1 -0
- package/dist/commands/pkg/plugin-env.d.ts +3 -0
- package/dist/commands/pkg/plugin-env.js +4 -0
- package/dist/commands/pkg/plugin-inspect.d.ts +2 -0
- package/dist/commands/pkg/plugin-inspect.js +1 -0
- package/dist/commands/pkg/plugin-manage.d.ts +94 -0
- package/dist/commands/pkg/plugin-manage.js +17 -0
- package/dist/commands/pkg/plugin.d.ts +1 -0
- package/dist/commands/pkg/plugin.js +1 -0
- package/dist/commands/pkg/shared.d.ts +13 -0
- package/dist/commands/pkg/shared.js +1 -0
- package/dist/commands/pkg.d.ts +2 -0
- package/dist/commands/pkg.js +1 -0
- package/dist/commands/profile/daemon-profiles.d.ts +13 -0
- package/dist/commands/profile/daemon-profiles.js +4 -0
- package/dist/commands/profile/default.d.ts +2 -0
- package/dist/commands/profile/default.js +2 -0
- package/dist/commands/profile/delete.d.ts +1 -0
- package/dist/commands/profile/delete.js +1 -0
- package/dist/commands/profile/env.d.ts +8 -0
- package/dist/commands/profile/env.js +3 -0
- package/dist/commands/profile/kind.d.ts +1 -0
- package/dist/commands/profile/kind.js +1 -0
- package/dist/commands/profile/list.d.ts +1 -0
- package/dist/commands/profile/list.js +1 -0
- package/dist/commands/profile/meta.d.ts +4 -0
- package/dist/commands/profile/meta.js +1 -0
- package/dist/commands/profile/new.d.ts +1 -0
- package/dist/commands/profile/new.js +1 -0
- package/dist/commands/profile/pause.d.ts +2 -0
- package/dist/commands/profile/pause.js +1 -0
- package/dist/commands/profile/project.d.ts +2 -0
- package/dist/commands/profile/project.js +1 -0
- package/dist/commands/profile/rename.d.ts +1 -0
- package/dist/commands/profile/rename.js +1 -0
- package/dist/commands/profile/show.d.ts +1 -0
- package/dist/commands/profile/show.js +1 -0
- package/dist/commands/profile.d.ts +2 -0
- package/dist/commands/profile.js +1 -0
- package/dist/commands/push.d.ts +2 -0
- package/dist/commands/push.js +9 -0
- package/dist/commands/revive.d.ts +2 -0
- package/dist/commands/revive.js +10 -0
- package/dist/commands/surface/node/cycle.d.ts +1 -0
- package/dist/commands/surface/node/cycle.js +1 -0
- package/dist/commands/surface/node/focus.d.ts +1 -0
- package/dist/commands/surface/node/focus.js +1 -0
- package/dist/commands/surface/node/id.d.ts +1 -0
- package/dist/commands/surface/node/id.js +1 -0
- package/dist/commands/surface/node/pin.d.ts +1 -0
- package/dist/commands/surface/node/pin.js +1 -0
- package/dist/commands/surface/node/placement.d.ts +30 -0
- package/dist/commands/surface/node/placement.js +1 -0
- package/dist/commands/surface-edit.d.ts +2 -0
- package/dist/commands/surface-edit.js +1 -0
- package/dist/commands/surface-inbox.d.ts +2 -0
- package/dist/commands/surface-inbox.js +1 -0
- package/dist/commands/surface-inspect.d.ts +2 -0
- package/dist/commands/surface-inspect.js +1 -0
- package/dist/commands/surface-node.d.ts +2 -0
- package/dist/commands/surface-node.js +1 -0
- package/dist/commands/surface-reload.d.ts +7 -0
- package/dist/commands/surface-reload.js +1 -0
- package/dist/commands/surface-tmux-spread.d.ts +2 -0
- package/dist/commands/surface-tmux-spread.js +1 -0
- package/dist/commands/surface.d.ts +2 -0
- package/dist/commands/surface.js +1 -0
- package/dist/commands/sys/branch.d.ts +2 -0
- package/dist/commands/sys/branch.js +1 -0
- package/dist/commands/sys/config.d.ts +1 -0
- package/dist/commands/sys/config.js +1 -0
- package/dist/commands/sys/connect.d.ts +1 -0
- package/dist/commands/sys/connect.js +3 -0
- package/dist/commands/sys/context/admin/actions.d.ts +23 -0
- package/dist/commands/sys/context/admin/actions.js +1 -0
- package/dist/commands/sys/context/admin/detail-panel.d.ts +73 -0
- package/dist/commands/sys/context/admin/detail-panel.js +2 -0
- package/dist/commands/sys/context/admin/docs-panel.d.ts +63 -0
- package/dist/commands/sys/context/admin/docs-panel.js +1 -0
- package/dist/commands/sys/context/admin/list-view.d.ts +62 -0
- package/dist/commands/sys/context/admin/list-view.js +1 -0
- package/dist/commands/sys/context/admin/model.d.ts +123 -0
- package/dist/commands/sys/context/admin/model.js +1 -0
- package/dist/commands/sys/context/admin/rail-panel.d.ts +84 -0
- package/dist/commands/sys/context/admin/rail-panel.js +1 -0
- package/dist/commands/sys/context/admin/read-view.d.ts +27 -0
- package/dist/commands/sys/context/admin/read-view.js +1 -0
- package/dist/commands/sys/context/admin/shell.d.ts +125 -0
- package/dist/commands/sys/context/admin/shell.js +1 -0
- package/dist/commands/sys/context/admin.d.ts +1 -0
- package/dist/commands/sys/context/admin.js +2 -0
- package/dist/commands/sys/context/doc.d.ts +1 -0
- package/dist/commands/sys/context/doc.js +2 -0
- package/dist/commands/sys/context/expose.d.ts +1 -0
- package/dist/commands/sys/context/expose.js +2 -0
- package/dist/commands/sys/context/prompt-review.d.ts +1 -0
- package/dist/commands/sys/context/prompt-review.js +11 -0
- package/dist/commands/sys/context/resolve.d.ts +115 -0
- package/dist/commands/sys/context/resolve.js +8 -0
- package/dist/commands/sys/context/sysprompt.d.ts +1 -0
- package/dist/commands/sys/context/sysprompt.js +5 -0
- package/dist/commands/sys/context.d.ts +2 -0
- package/dist/commands/sys/context.js +1 -0
- package/dist/commands/sys/daemon.d.ts +4 -0
- package/dist/commands/sys/daemon.js +1 -0
- package/dist/commands/sys/doctor.d.ts +36 -0
- package/dist/commands/sys/doctor.js +1 -0
- package/dist/commands/sys/env.d.ts +1 -0
- package/dist/commands/sys/env.js +1 -0
- package/dist/commands/sys/feedback.d.ts +1 -0
- package/dist/commands/sys/feedback.js +7 -0
- package/dist/commands/sys/join.d.ts +1 -0
- package/dist/commands/sys/join.js +1 -0
- package/dist/commands/sys/limits.d.ts +1 -0
- package/dist/commands/sys/limits.js +3 -0
- package/dist/commands/sys/logs.d.ts +1 -0
- package/dist/commands/sys/logs.js +3 -0
- package/dist/commands/sys/migrate.d.ts +1 -0
- package/dist/commands/sys/migrate.js +1 -0
- package/dist/commands/sys/panels/broker-limits-panel.d.ts +17 -0
- package/dist/commands/sys/panels/broker-limits-panel.js +2 -0
- package/dist/commands/sys/panels/dependencies-panel.d.ts +14 -0
- package/dist/commands/sys/panels/dependencies-panel.js +1 -0
- package/dist/commands/sys/panels/keybindings-panel.d.ts +56 -0
- package/dist/commands/sys/panels/keybindings-panel.js +1 -0
- package/dist/commands/sys/panels/models-panel.d.ts +100 -0
- package/dist/commands/sys/panels/models-panel.js +1 -0
- package/dist/commands/sys/panels/plugin-env-panel.d.ts +19 -0
- package/dist/commands/sys/panels/plugin-env-panel.js +2 -0
- package/dist/commands/sys/panels/plugins-panel.d.ts +16 -0
- package/dist/commands/sys/panels/plugins-panel.js +1 -0
- package/dist/commands/sys/panels/prefs-panel.d.ts +21 -0
- package/dist/commands/sys/panels/prefs-panel.js +1 -0
- package/dist/commands/sys/panels/profiles-panel.d.ts +70 -0
- package/dist/commands/sys/panels/profiles-panel.js +1 -0
- package/dist/commands/sys/panels/provider-panel.d.ts +68 -0
- package/dist/commands/sys/panels/provider-panel.js +1 -0
- package/dist/commands/sys/panels/terminal-panel.d.ts +19 -0
- package/dist/commands/sys/panels/terminal-panel.js +1 -0
- package/dist/commands/sys/provider-login.d.ts +8 -0
- package/dist/commands/sys/provider-login.js +9 -0
- package/dist/commands/sys/retry-delivery.d.ts +1 -0
- package/dist/commands/sys/retry-delivery.js +1 -0
- package/dist/commands/sys/settings-shell.d.ts +54 -0
- package/dist/commands/sys/settings-shell.js +1 -0
- package/dist/commands/sys/settings.d.ts +2 -0
- package/dist/commands/sys/settings.js +1 -0
- package/dist/commands/sys/setup-core.d.ts +121 -0
- package/dist/commands/sys/setup-core.js +9 -0
- package/dist/commands/sys/setup-settings-runner.d.ts +13 -0
- package/dist/commands/sys/setup-settings-runner.js +1 -0
- package/dist/commands/sys/setup-wizard.d.ts +52 -0
- package/dist/commands/sys/setup-wizard.js +1 -0
- package/dist/commands/sys/setup.d.ts +6 -0
- package/dist/commands/sys/setup.js +1 -0
- package/dist/commands/sys/shared.d.ts +51 -0
- package/dist/commands/sys/shared.js +1 -0
- package/dist/commands/sys/spaces.d.ts +1 -0
- package/dist/commands/sys/spaces.js +2 -0
- package/dist/commands/sys/support/prepare.d.ts +13 -0
- package/dist/commands/sys/support/prepare.js +3 -0
- package/dist/commands/sys/support/submit.d.ts +19 -0
- package/dist/commands/sys/support/submit.js +6 -0
- package/dist/commands/sys/support.d.ts +2 -0
- package/dist/commands/sys/support.js +1 -0
- package/dist/commands/sys/sync-deps.d.ts +16 -0
- package/dist/commands/sys/sync-deps.js +14 -0
- package/dist/commands/sys/sync-project-guidance.d.ts +1 -0
- package/dist/commands/sys/sync-project-guidance.js +5 -0
- package/dist/commands/sys/sync-shared.d.ts +44 -0
- package/dist/commands/sys/sync-shared.js +1 -0
- package/dist/commands/sys/sync-skills.d.ts +1 -0
- package/dist/commands/sys/sync-skills.js +2 -0
- package/dist/commands/sys/sync.d.ts +2 -0
- package/dist/commands/sys/sync.js +1 -0
- package/dist/commands/sys/terminal-option.d.ts +112 -0
- package/dist/commands/sys/terminal-option.js +15 -0
- package/dist/commands/sys/tutorial/branch.d.ts +1 -0
- package/dist/commands/sys/tutorial/branch.js +1 -0
- package/dist/commands/sys/tutorial/lessons.d.ts +5 -0
- package/dist/commands/sys/tutorial/lessons.js +8 -0
- package/dist/commands/sys/tutorial/scenario.d.ts +1 -0
- package/dist/commands/sys/tutorial/scenario.js +3 -0
- package/dist/commands/sys/tutorial/tracks.d.ts +1 -0
- package/dist/commands/sys/tutorial/tracks.js +4 -0
- package/dist/commands/sys/update.d.ts +2 -0
- package/dist/commands/sys/update.js +1 -0
- package/dist/commands/sys/worktrees.d.ts +2 -0
- package/dist/commands/sys/worktrees.js +5 -0
- package/dist/commands/sys.d.ts +2 -0
- package/dist/commands/sys.js +1 -0
- package/dist/core/activity-signal.d.ts +7 -0
- package/dist/core/activity-signal.js +2 -0
- package/dist/core/asset-root.d.ts +7 -0
- package/dist/core/asset-root.js +1 -0
- package/dist/core/auth-file.d.ts +41 -0
- package/dist/core/auth-file.js +2 -0
- package/dist/core/auth-interaction.d.ts +19 -0
- package/dist/core/auth-interaction.js +3 -0
- package/dist/core/auto-update.d.ts +1 -0
- package/dist/core/auto-update.js +4 -0
- package/dist/core/bash-guard.d.ts +6 -0
- package/dist/core/bash-guard.js +11 -0
- package/dist/core/bash-job-supervisor.d.ts +5 -0
- package/dist/core/bash-job-supervisor.js +4 -0
- package/dist/core/bash-jobs.d.ts +180 -0
- package/dist/core/bash-jobs.js +8 -0
- package/dist/core/bootstrap.d.ts +1 -0
- package/dist/core/bootstrap.js +2 -0
- package/dist/core/broker-client/client.d.ts +89 -0
- package/dist/core/broker-client/client.js +1 -0
- package/dist/core/broker-client/index.d.ts +1 -0
- package/dist/core/broker-client/index.js +1 -0
- package/dist/core/broker-client/transport-relay.d.ts +47 -0
- package/dist/core/broker-client/transport-relay.js +1 -0
- package/dist/core/broker-client/transport-socket.d.ts +35 -0
- package/dist/core/broker-client/transport-socket.js +1 -0
- package/dist/core/broker-client/transport.d.ts +36 -0
- package/dist/core/broker-client/transport.js +1 -0
- package/dist/core/canvas/app-run.d.ts +3 -0
- package/dist/core/canvas/app-run.js +1 -0
- package/dist/core/canvas/attention.d.ts +18 -0
- package/dist/core/canvas/attention.js +1 -0
- package/dist/core/canvas/boot-id.d.ts +6 -0
- package/dist/core/canvas/boot-id.js +1 -0
- package/dist/core/canvas/boot.d.ts +92 -0
- package/dist/core/canvas/boot.js +1 -0
- package/dist/core/canvas/browse/app.d.ts +26 -0
- package/dist/core/canvas/browse/app.js +3 -0
- package/dist/core/canvas/browse/model.d.ts +172 -0
- package/dist/core/canvas/browse/model.js +1 -0
- package/dist/core/canvas/browse/pins.d.ts +4 -0
- package/dist/core/canvas/browse/pins.js +1 -0
- package/dist/core/canvas/browse/render.d.ts +98 -0
- package/dist/core/canvas/browse/render.js +3 -0
- package/dist/core/canvas/canvas.d.ts +397 -0
- package/dist/core/canvas/canvas.js +65 -0
- package/dist/core/canvas/context-strip.d.ts +20 -0
- package/dist/core/canvas/context-strip.js +5 -0
- package/dist/core/canvas/crons.d.ts +298 -0
- package/dist/core/canvas/crons.js +36 -0
- package/dist/core/canvas/daemon-actions.d.ts +45 -0
- package/dist/core/canvas/daemon-actions.js +28 -0
- package/dist/core/canvas/daemon-owner.d.ts +67 -0
- package/dist/core/canvas/daemon-owner.js +6 -0
- package/dist/core/canvas/db.d.ts +33 -0
- package/dist/core/canvas/db.js +2 -0
- package/dist/core/canvas/deliveries.d.ts +120 -0
- package/dist/core/canvas/deliveries.js +102 -0
- package/dist/core/canvas/delivery-contract.d.ts +37 -0
- package/dist/core/canvas/delivery-contract.js +1 -0
- package/dist/core/canvas/executions.d.ts +29 -0
- package/dist/core/canvas/executions.js +1 -0
- package/dist/core/canvas/extensions.d.ts +9 -0
- package/dist/core/canvas/extensions.js +1 -0
- package/dist/core/canvas/focuses.d.ts +22 -0
- package/dist/core/canvas/focuses.js +1 -0
- package/dist/core/canvas/history.d.ts +104 -0
- package/dist/core/canvas/history.js +14 -0
- package/dist/core/canvas/index.d.ts +14 -0
- package/dist/core/canvas/index.js +1 -0
- package/dist/core/canvas/install-id.d.ts +9 -0
- package/dist/core/canvas/install-id.js +1 -0
- package/dist/core/canvas/labels.d.ts +30 -0
- package/dist/core/canvas/labels.js +1 -0
- package/dist/core/canvas/managed-worktree-sweep-candidates.d.ts +4 -0
- package/dist/core/canvas/managed-worktree-sweep-candidates.js +12 -0
- package/dist/core/canvas/memory-reads.d.ts +24 -0
- package/dist/core/canvas/memory-reads.js +1 -0
- package/dist/core/canvas/meta-file.d.ts +20 -0
- package/dist/core/canvas/meta-file.js +1 -0
- package/dist/core/canvas/migrations.d.ts +16 -0
- package/dist/core/canvas/migrations.js +989 -0
- package/dist/core/canvas/nav-model.d.ts +44 -0
- package/dist/core/canvas/nav-model.js +1 -0
- package/dist/core/canvas/nav-render.d.ts +136 -0
- package/dist/core/canvas/nav-render.js +1 -0
- package/dist/core/canvas/node-agent-paths.d.ts +8 -0
- package/dist/core/canvas/node-agent-paths.js +1 -0
- package/dist/core/canvas/node-order.d.ts +24 -0
- package/dist/core/canvas/node-order.js +1 -0
- package/dist/core/canvas/node-recap.d.ts +23 -0
- package/dist/core/canvas/node-recap.js +2 -0
- package/dist/core/canvas/node-sql-migration.d.ts +4 -0
- package/dist/core/canvas/node-sql-migration.js +80 -0
- package/dist/core/canvas/node-tokens.d.ts +24 -0
- package/dist/core/canvas/node-tokens.js +5 -0
- package/dist/core/canvas/outcome-actions.d.ts +23 -0
- package/dist/core/canvas/outcome-actions.js +6 -0
- package/dist/core/canvas/paths.d.ts +72 -0
- package/dist/core/canvas/paths.js +1 -0
- package/dist/core/canvas/pid.d.ts +391 -0
- package/dist/core/canvas/pid.js +5 -0
- package/dist/core/canvas/recovery.d.ts +90 -0
- package/dist/core/canvas/recovery.js +26 -0
- package/dist/core/canvas/remote-canvas-source.d.ts +70 -0
- package/dist/core/canvas/remote-canvas-source.js +1 -0
- package/dist/core/canvas/remote-transport.d.ts +7 -0
- package/dist/core/canvas/remote-transport.js +1 -0
- package/dist/core/canvas/render-source.d.ts +193 -0
- package/dist/core/canvas/render-source.js +7 -0
- package/dist/core/canvas/sessions.d.ts +57 -0
- package/dist/core/canvas/sessions.js +4 -0
- package/dist/core/canvas/source.d.ts +48 -0
- package/dist/core/canvas/source.js +1 -0
- package/dist/core/canvas/status-glyph.d.ts +52 -0
- package/dist/core/canvas/status-glyph.js +1 -0
- package/dist/core/canvas/structured-requests.d.ts +69 -0
- package/dist/core/canvas/structured-requests.js +15 -0
- package/dist/core/canvas/telemetry.d.ts +14 -0
- package/dist/core/canvas/telemetry.js +1 -0
- package/dist/core/canvas/tree.d.ts +29 -0
- package/dist/core/canvas/tree.js +12 -0
- package/dist/core/canvas/types.d.ts +454 -0
- package/dist/core/canvas/types.js +1 -0
- package/dist/core/canvas/waits.d.ts +18 -0
- package/dist/core/canvas/waits.js +6 -0
- package/dist/core/canvas/worktrees.d.ts +41 -0
- package/dist/core/canvas/worktrees.js +1 -0
- package/dist/core/clipboard-text.d.ts +11 -0
- package/dist/core/clipboard-text.js +1 -0
- package/dist/core/command-hooks/artifact.d.ts +16 -0
- package/dist/core/command-hooks/artifact.js +1 -0
- package/dist/core/command-hooks/catalog.d.ts +14 -0
- package/dist/core/command-hooks/catalog.js +1 -0
- package/dist/core/command-hooks/compose.d.ts +15 -0
- package/dist/core/command-hooks/compose.js +1 -0
- package/dist/core/command-hooks/discovery.d.ts +133 -0
- package/dist/core/command-hooks/discovery.js +1 -0
- package/dist/core/command-hooks/help.d.ts +5 -0
- package/dist/core/command-hooks/help.js +1 -0
- package/dist/core/command-hooks/index.d.ts +7 -0
- package/dist/core/command-hooks/index.js +1 -0
- package/dist/core/command-hooks/lifecycle-catalog.d.ts +21 -0
- package/dist/core/command-hooks/lifecycle-catalog.js +1 -0
- package/dist/core/command-hooks/lifecycle-create.d.ts +4 -0
- package/dist/core/command-hooks/lifecycle-create.js +1 -0
- package/dist/core/command-hooks/report.d.ts +32 -0
- package/dist/core/command-hooks/report.js +1 -0
- package/dist/core/command-hooks/schema.d.ts +42 -0
- package/dist/core/command-hooks/schema.js +1 -0
- package/dist/core/command-hooks/transport/exec-invoke.d.ts +24 -0
- package/dist/core/command-hooks/transport/exec-invoke.js +1 -0
- package/dist/core/command-hooks/transport/exec-lifecycle.d.ts +23 -0
- package/dist/core/command-hooks/transport/exec-lifecycle.js +1 -0
- package/dist/core/command-hooks/transport/plan.d.ts +3 -0
- package/dist/core/command-hooks/transport/plan.js +1 -0
- package/dist/core/command-manifests/registry.d.ts +67 -0
- package/dist/core/command-manifests/registry.js +1 -0
- package/dist/core/command-plugins/bundle.d.ts +149 -0
- package/dist/core/command-plugins/bundle.js +1 -0
- package/dist/core/command-plugins/compose.d.ts +11 -0
- package/dist/core/command-plugins/compose.js +1 -0
- package/dist/core/command-plugins/discovery.d.ts +50 -0
- package/dist/core/command-plugins/discovery.js +1 -0
- package/dist/core/command-plugins/endpoint.d.ts +24 -0
- package/dist/core/command-plugins/endpoint.js +1 -0
- package/dist/core/command-plugins/extensions.d.ts +20 -0
- package/dist/core/command-plugins/extensions.js +1 -0
- package/dist/core/command-plugins/help-addenda.d.ts +25 -0
- package/dist/core/command-plugins/help-addenda.js +1 -0
- package/dist/core/command-plugins/presence.d.ts +2 -0
- package/dist/core/command-plugins/presence.js +1 -0
- package/dist/core/command-plugins/revalidate.d.ts +18 -0
- package/dist/core/command-plugins/revalidate.js +2 -0
- package/dist/core/command-plugins/transport/exec-invoke.d.ts +28 -0
- package/dist/core/command-plugins/transport/exec-invoke.js +1 -0
- package/dist/core/command-plugins/transport/http-fetch.d.ts +41 -0
- package/dist/core/command-plugins/transport/http-fetch.js +1 -0
- package/dist/core/command-plugins/transport/http-invoke.d.ts +15 -0
- package/dist/core/command-plugins/transport/http-invoke.js +3 -0
- package/dist/core/command-plugins/transport/http-plan.d.ts +68 -0
- package/dist/core/command-plugins/transport/http-plan.js +1 -0
- package/dist/core/command.d.ts +210 -0
- package/dist/core/command.js +10 -0
- package/dist/core/config.d.ts +233 -0
- package/dist/core/config.js +1 -0
- package/dist/core/conversation-store/client-worker.d.ts +1 -0
- package/dist/core/conversation-store/client-worker.js +1 -0
- package/dist/core/conversation-store/client.d.ts +2 -0
- package/dist/core/conversation-store/client.js +2 -0
- package/dist/core/conversation-store/file-store.d.ts +37 -0
- package/dist/core/conversation-store/file-store.js +9 -0
- package/dist/core/conversation-store/index.d.ts +60 -0
- package/dist/core/conversation-store/index.js +1 -0
- package/dist/core/conversation-store/listener.d.ts +4 -0
- package/dist/core/conversation-store/listener.js +8 -0
- package/dist/core/conversation-store/patch.d.ts +1 -0
- package/dist/core/conversation-store/patch.js +1 -0
- package/dist/core/directory/join.d.ts +27 -0
- package/dist/core/directory/join.js +1 -0
- package/dist/core/disk-usage.d.ts +4 -0
- package/dist/core/disk-usage.js +1 -0
- package/dist/core/document-lines.d.ts +4 -0
- package/dist/core/document-lines.js +3 -0
- package/dist/core/editor-resolver.d.ts +28 -0
- package/dist/core/editor-resolver.js +4 -0
- package/dist/core/env-name.d.ts +6 -0
- package/dist/core/env-name.js +1 -0
- package/dist/core/errors.d.ts +38 -0
- package/dist/core/errors.js +1 -0
- package/dist/core/events/emit.d.ts +6 -0
- package/dist/core/events/emit.js +3 -0
- package/dist/core/events/envelope.d.ts +2 -0
- package/dist/core/events/envelope.js +1 -0
- package/dist/core/events/errors.d.ts +4 -0
- package/dist/core/events/errors.js +1 -0
- package/dist/core/events/index.d.ts +5 -0
- package/dist/core/events/index.js +1 -0
- package/dist/core/events/operation-id.d.ts +4 -0
- package/dist/core/events/operation-id.js +1 -0
- package/dist/core/events/read.d.ts +40 -0
- package/dist/core/events/read.js +1 -0
- package/dist/core/events/serialize.d.ts +4 -0
- package/dist/core/events/serialize.js +1 -0
- package/dist/core/events/source.d.ts +16 -0
- package/dist/core/events/source.js +1 -0
- package/dist/core/events/types.d.ts +68 -0
- package/dist/core/events/types.js +1 -0
- package/dist/core/exclusive-lock.d.ts +34 -0
- package/dist/core/exclusive-lock.js +1 -0
- package/dist/core/fault-classifier.d.ts +34 -0
- package/dist/core/fault-classifier.js +1 -0
- package/dist/core/feed/feed.d.ts +63 -0
- package/dist/core/feed/feed.js +4 -0
- package/dist/core/feed/inbox-migrate.d.ts +11 -0
- package/dist/core/feed/inbox-migrate.js +3 -0
- package/dist/core/feed/inbox.d.ts +34 -0
- package/dist/core/feed/inbox.js +1 -0
- package/dist/core/feed/messages.d.ts +83 -0
- package/dist/core/feed/messages.js +8 -0
- package/dist/core/feed/reports.d.ts +10 -0
- package/dist/core/feed/reports.js +2 -0
- package/dist/core/frontmatter.d.ts +8 -0
- package/dist/core/frontmatter.js +1 -0
- package/dist/core/fs-utils.d.ts +44 -0
- package/dist/core/fs-utils.js +3 -0
- package/dist/core/git.d.ts +28 -0
- package/dist/core/git.js +2 -0
- package/dist/core/grants/local.d.ts +4 -0
- package/dist/core/grants/local.js +1 -0
- package/dist/core/grants/mirror.d.ts +76 -0
- package/dist/core/grants/mirror.js +4 -0
- package/dist/core/grants/on-sync.d.ts +22 -0
- package/dist/core/grants/on-sync.js +1 -0
- package/dist/core/grants/remove.d.ts +7 -0
- package/dist/core/grants/remove.js +1 -0
- package/dist/core/grants/sandboxes.d.ts +7 -0
- package/dist/core/grants/sandboxes.js +1 -0
- package/dist/core/grants/sync.d.ts +40 -0
- package/dist/core/grants/sync.js +1 -0
- package/dist/core/grants/watch.d.ts +14 -0
- package/dist/core/grants/watch.js +1 -0
- package/dist/core/graph/access.d.ts +28 -0
- package/dist/core/graph/access.js +8 -0
- package/dist/core/graph/bodies.d.ts +6 -0
- package/dist/core/graph/bodies.js +1 -0
- package/dist/core/graph/custom.d.ts +74 -0
- package/dist/core/graph/custom.js +11 -0
- package/dist/core/graph/deletion.d.ts +17 -0
- package/dist/core/graph/deletion.js +6 -0
- package/dist/core/graph/diff.d.ts +4 -0
- package/dist/core/graph/diff.js +4 -0
- package/dist/core/graph/documents.d.ts +167 -0
- package/dist/core/graph/documents.js +10 -0
- package/dist/core/graph/edges.d.ts +25 -0
- package/dist/core/graph/edges.js +1 -0
- package/dist/core/graph/events.d.ts +50 -0
- package/dist/core/graph/events.js +11 -0
- package/dist/core/graph/exposures.d.ts +53 -0
- package/dist/core/graph/exposures.js +4 -0
- package/dist/core/graph/jobs.d.ts +31 -0
- package/dist/core/graph/jobs.js +2 -0
- package/dist/core/graph/kinds/action.d.ts +3 -0
- package/dist/core/graph/kinds/action.js +1 -0
- package/dist/core/graph/kinds/custom.d.ts +7 -0
- package/dist/core/graph/kinds/custom.js +7 -0
- package/dist/core/graph/kinds/document.d.ts +19 -0
- package/dist/core/graph/kinds/document.js +5 -0
- package/dist/core/graph/kinds/dto.d.ts +5 -0
- package/dist/core/graph/kinds/dto.js +1 -0
- package/dist/core/graph/kinds/job.d.ts +2 -0
- package/dist/core/graph/kinds/job.js +2 -0
- package/dist/core/graph/kinds/kind.d.ts +66 -0
- package/dist/core/graph/kinds/kind.js +1 -0
- package/dist/core/graph/kinds/node.d.ts +12 -0
- package/dist/core/graph/kinds/node.js +5 -0
- package/dist/core/graph/kinds/owner.d.ts +2 -0
- package/dist/core/graph/kinds/owner.js +2 -0
- package/dist/core/graph/kinds/registry.d.ts +13 -0
- package/dist/core/graph/kinds/registry.js +1 -0
- package/dist/core/graph/kinds/render.d.ts +9 -0
- package/dist/core/graph/kinds/render.js +1 -0
- package/dist/core/graph/names.d.ts +35 -0
- package/dist/core/graph/names.js +3 -0
- package/dist/core/graph/objects.d.ts +62 -0
- package/dist/core/graph/objects.js +11 -0
- package/dist/core/graph/package-docs.d.ts +32 -0
- package/dist/core/graph/package-docs.js +5 -0
- package/dist/core/graph/package-files.d.ts +20 -0
- package/dist/core/graph/package-files.js +2 -0
- package/dist/core/graph/reader.d.ts +30 -0
- package/dist/core/graph/reader.js +3 -0
- package/dist/core/graph/receiver-url.d.ts +11 -0
- package/dist/core/graph/receiver-url.js +1 -0
- package/dist/core/graph/receivers.d.ts +26 -0
- package/dist/core/graph/receivers.js +7 -0
- package/dist/core/graph/repo-sync/exchange.d.ts +34 -0
- package/dist/core/graph/repo-sync/exchange.js +2 -0
- package/dist/core/graph/repo-sync/identity.d.ts +30 -0
- package/dist/core/graph/repo-sync/identity.js +1 -0
- package/dist/core/graph/repo-sync/index.d.ts +4 -0
- package/dist/core/graph/repo-sync/index.js +1 -0
- package/dist/core/graph/repo-sync/mirror.d.ts +30 -0
- package/dist/core/graph/repo-sync/mirror.js +6 -0
- package/dist/core/graph/repo-sync/ref-format.d.ts +76 -0
- package/dist/core/graph/repo-sync/ref-format.js +2 -0
- package/dist/core/graph/repo-sync/repos.d.ts +19 -0
- package/dist/core/graph/repo-sync/repos.js +3 -0
- package/dist/core/graph/repo-sync/sync.d.ts +42 -0
- package/dist/core/graph/repo-sync/sync.js +2 -0
- package/dist/core/graph/rules.d.ts +26 -0
- package/dist/core/graph/rules.js +3 -0
- package/dist/core/graph/spaces/app.d.ts +3 -0
- package/dist/core/graph/spaces/app.js +1 -0
- package/dist/core/graph/spaces/index.d.ts +19 -0
- package/dist/core/graph/spaces/index.js +1 -0
- package/dist/core/graph/spaces/person.d.ts +5 -0
- package/dist/core/graph/spaces/person.js +3 -0
- package/dist/core/graph/spaces/repo.d.ts +13 -0
- package/dist/core/graph/spaces/repo.js +1 -0
- package/dist/core/graph/types.d.ts +94 -0
- package/dist/core/graph/types.js +1 -0
- package/dist/core/graph/watches.d.ts +62 -0
- package/dist/core/graph/watches.js +18 -0
- package/dist/core/help.d.ts +309 -0
- package/dist/core/help.js +9 -0
- package/dist/core/host-exports/builtins.d.ts +50 -0
- package/dist/core/host-exports/builtins.js +9 -0
- package/dist/core/host-exports/export.d.ts +31 -0
- package/dist/core/host-exports/export.js +3 -0
- package/dist/core/human/action-binding.d.ts +23 -0
- package/dist/core/human/action-binding.js +1 -0
- package/dist/core/human/answer-text.d.ts +5 -0
- package/dist/core/human/answer-text.js +5 -0
- package/dist/core/human/answer.d.ts +53 -0
- package/dist/core/human/answer.js +1 -0
- package/dist/core/human/claim.d.ts +23 -0
- package/dist/core/human/claim.js +3 -0
- package/dist/core/human/completion.d.ts +38 -0
- package/dist/core/human/completion.js +1 -0
- package/dist/core/human/component-docs.d.ts +18 -0
- package/dist/core/human/component-docs.js +248 -0
- package/dist/core/human/convention.d.ts +31 -0
- package/dist/core/human/convention.js +2 -0
- package/dist/core/human/feedback-companion.d.ts +19 -0
- package/dist/core/human/feedback-companion.js +1 -0
- package/dist/core/human/feedback.d.ts +62 -0
- package/dist/core/human/feedback.js +1 -0
- package/dist/core/human/page-authoring.d.ts +30 -0
- package/dist/core/human/page-authoring.js +1 -0
- package/dist/core/human/page-catalog.d.ts +57 -0
- package/dist/core/human/page-catalog.js +1 -0
- package/dist/core/human/page-errors.d.ts +4 -0
- package/dist/core/human/page-errors.js +1 -0
- package/dist/core/human/page-eval.d.ts +25 -0
- package/dist/core/human/page-eval.js +1 -0
- package/dist/core/human/page-html-markdown.d.ts +8 -0
- package/dist/core/human/page-html-markdown.js +8 -0
- package/dist/core/human/page-markdown.d.ts +3 -0
- package/dist/core/human/page-markdown.js +17 -0
- package/dist/core/human/page-schema.d.ts +289 -0
- package/dist/core/human/page-schema.js +1 -0
- package/dist/core/human/page-synth.d.ts +7 -0
- package/dist/core/human/page-synth.js +11 -0
- package/dist/core/human/page.d.ts +16 -0
- package/dist/core/human/page.js +1 -0
- package/dist/core/human/requests.d.ts +146 -0
- package/dist/core/human/requests.js +82 -0
- package/dist/core/human/review-schema.d.ts +20 -0
- package/dist/core/human/review-schema.js +1 -0
- package/dist/core/human/root.d.ts +4 -0
- package/dist/core/human/root.js +1 -0
- package/dist/core/human/scan.d.ts +6 -0
- package/dist/core/human/scan.js +1 -0
- package/dist/core/human/summary.d.ts +3 -0
- package/dist/core/human/summary.js +1 -0
- package/dist/core/human/tickets.d.ts +68 -0
- package/dist/core/human/tickets.js +1 -0
- package/dist/core/human/types.d.ts +118 -0
- package/dist/core/human/types.js +0 -0
- package/dist/core/human/visible-paths.d.ts +9 -0
- package/dist/core/human/visible-paths.js +1 -0
- package/dist/core/human-actions.d.ts +25 -0
- package/dist/core/human-actions.js +1 -0
- package/dist/core/inspector/chrome.d.ts +6 -0
- package/dist/core/inspector/chrome.js +1 -0
- package/dist/core/inspector/contract.d.ts +105 -0
- package/dist/core/inspector/contract.js +0 -0
- package/dist/core/inspector/core.d.ts +39 -0
- package/dist/core/inspector/core.js +2 -0
- package/dist/core/inspector/host.d.ts +46 -0
- package/dist/core/inspector/host.js +4 -0
- package/dist/core/inspector/model.d.ts +88 -0
- package/dist/core/inspector/model.js +2 -0
- package/dist/core/inspector/text.d.ts +5 -0
- package/dist/core/inspector/text.js +6 -0
- package/dist/core/inspector/transport.d.ts +6 -0
- package/dist/core/inspector/transport.js +1 -0
- package/dist/core/inspector/tui.d.ts +3 -0
- package/dist/core/inspector/tui.js +2 -0
- package/dist/core/installed-plugins.d.ts +2 -0
- package/dist/core/installed-plugins.js +1 -0
- package/dist/core/io.d.ts +122 -0
- package/dist/core/io.js +7 -0
- package/dist/core/keybindings/attach-control.d.ts +49 -0
- package/dist/core/keybindings/attach-control.js +1 -0
- package/dist/core/keybindings/background-bash.d.ts +13 -0
- package/dist/core/keybindings/background-bash.js +1 -0
- package/dist/core/keybindings/catalog.d.ts +18 -0
- package/dist/core/keybindings/catalog.js +1 -0
- package/dist/core/keybindings/inbox.d.ts +18 -0
- package/dist/core/keybindings/inbox.js +1 -0
- package/dist/core/keybindings/index.d.ts +8 -0
- package/dist/core/keybindings/index.js +1 -0
- package/dist/core/keybindings/match.d.ts +44 -0
- package/dist/core/keybindings/match.js +1 -0
- package/dist/core/keybindings/persistence.d.ts +18 -0
- package/dist/core/keybindings/persistence.js +1 -0
- package/dist/core/keybindings/resolve.d.ts +28 -0
- package/dist/core/keybindings/resolve.js +1 -0
- package/dist/core/keybindings/types.d.ts +42 -0
- package/dist/core/keybindings/types.js +0 -0
- package/dist/core/layout-migrate/index.d.ts +38 -0
- package/dist/core/layout-migrate/index.js +4 -0
- package/dist/core/layout-migrate/loose-keys.d.ts +2 -0
- package/dist/core/layout-migrate/loose-keys.js +1 -0
- package/dist/core/layout-migrate/paths.d.ts +30 -0
- package/dist/core/layout-migrate/paths.js +1 -0
- package/dist/core/layout-migrate/stored-paths.d.ts +9 -0
- package/dist/core/layout-migrate/stored-paths.js +11 -0
- package/dist/core/layout-migrate/stores.d.ts +30 -0
- package/dist/core/layout-migrate/stores.js +3 -0
- package/dist/core/layout.d.ts +34 -0
- package/dist/core/layout.js +2 -0
- package/dist/core/llm/body-limits.d.ts +7 -0
- package/dist/core/llm/body-limits.js +1 -0
- package/dist/core/llm/refusal.d.ts +13 -0
- package/dist/core/llm/refusal.js +1 -0
- package/dist/core/llm/run.d.ts +60 -0
- package/dist/core/llm/run.js +4 -0
- package/dist/core/locked-file.d.ts +27 -0
- package/dist/core/locked-file.js +1 -0
- package/dist/core/log.d.ts +9 -0
- package/dist/core/log.js +5 -0
- package/dist/core/manifest-recovery.d.ts +15 -0
- package/dist/core/manifest-recovery.js +1 -0
- package/dist/core/manifest-stale.d.ts +18 -0
- package/dist/core/manifest-stale.js +1 -0
- package/dist/core/manifest.d.ts +5 -0
- package/dist/core/manifest.js +1 -0
- package/dist/core/model-auth/daemon-login.d.ts +13 -0
- package/dist/core/model-auth/daemon-login.js +1 -0
- package/dist/core/model-auth/flows.d.ts +50 -0
- package/dist/core/model-auth/flows.js +1 -0
- package/dist/core/model-auth/handoff-jti.d.ts +4 -0
- package/dist/core/model-auth/handoff-jti.js +1 -0
- package/dist/core/model-config.d.ts +20 -0
- package/dist/core/model-config.js +1 -0
- package/dist/core/model-routes.d.ts +90 -0
- package/dist/core/model-routes.js +1 -0
- package/dist/core/nvim-launch.d.ts +7 -0
- package/dist/core/nvim-launch.js +1 -0
- package/dist/core/output.d.ts +35 -0
- package/dist/core/output.js +7 -0
- package/dist/core/pagination.d.ts +35 -0
- package/dist/core/pagination.js +1 -0
- package/dist/core/plugin-env.d.ts +8 -0
- package/dist/core/plugin-env.js +1 -0
- package/dist/core/plugin-extensions.d.ts +29 -0
- package/dist/core/plugin-extensions.js +1 -0
- package/dist/core/plugin-swap-lock.d.ts +9 -0
- package/dist/core/plugin-swap-lock.js +1 -0
- package/dist/core/pool-credential-store.d.ts +34 -0
- package/dist/core/pool-credential-store.js +1 -0
- package/dist/core/predicate.d.ts +65 -0
- package/dist/core/predicate.js +1 -0
- package/dist/core/preview-registry.d.ts +59 -0
- package/dist/core/preview-registry.js +3 -0
- package/dist/core/preview-result-path.d.ts +4 -0
- package/dist/core/preview-result-path.js +1 -0
- package/dist/core/profiles/app-env-store.d.ts +4 -0
- package/dist/core/profiles/app-env-store.js +2 -0
- package/dist/core/profiles/default-binding.d.ts +15 -0
- package/dist/core/profiles/default-binding.js +1 -0
- package/dist/core/profiles/deletion-reservation.d.ts +12 -0
- package/dist/core/profiles/deletion-reservation.js +1 -0
- package/dist/core/profiles/env-store.d.ts +22 -0
- package/dist/core/profiles/env-store.js +2 -0
- package/dist/core/profiles/fuzzy-match.d.ts +19 -0
- package/dist/core/profiles/fuzzy-match.js +1 -0
- package/dist/core/profiles/manifest.d.ts +120 -0
- package/dist/core/profiles/manifest.js +1 -0
- package/dist/core/profiles/select.d.ts +46 -0
- package/dist/core/profiles/select.js +35 -0
- package/dist/core/provider-credential.d.ts +6 -0
- package/dist/core/provider-credential.js +1 -0
- package/dist/core/provider-error-recognition.d.ts +27 -0
- package/dist/core/provider-error-recognition.js +1 -0
- package/dist/core/provider-failure.d.ts +42 -0
- package/dist/core/provider-failure.js +1 -0
- package/dist/core/provider-management.d.ts +12 -0
- package/dist/core/provider-management.js +1 -0
- package/dist/core/providers/approval.d.ts +23 -0
- package/dist/core/providers/approval.js +3 -0
- package/dist/core/providers/audit.d.ts +28 -0
- package/dist/core/providers/audit.js +4 -0
- package/dist/core/providers/bundles.d.ts +68 -0
- package/dist/core/providers/bundles.js +2 -0
- package/dist/core/providers/call.d.ts +62 -0
- package/dist/core/providers/call.js +1 -0
- package/dist/core/providers/errors.d.ts +97 -0
- package/dist/core/providers/errors.js +1 -0
- package/dist/core/providers/files.d.ts +89 -0
- package/dist/core/providers/files.js +1 -0
- package/dist/core/providers/inflight.d.ts +13 -0
- package/dist/core/providers/inflight.js +1 -0
- package/dist/core/providers/mint.d.ts +27 -0
- package/dist/core/providers/mint.js +1 -0
- package/dist/core/providers/receipts.d.ts +9 -0
- package/dist/core/providers/receipts.js +3 -0
- package/dist/core/providers/request.d.ts +27 -0
- package/dist/core/providers/request.js +1 -0
- package/dist/core/providers/token-cache.d.ts +44 -0
- package/dist/core/providers/token-cache.js +1 -0
- package/dist/core/rate-limit-scope.d.ts +25 -0
- package/dist/core/rate-limit-scope.js +1 -0
- package/dist/core/remote-canvas-target.d.ts +4 -0
- package/dist/core/remote-canvas-target.js +1 -0
- package/dist/core/render.d.ts +12 -0
- package/dist/core/render.js +18 -0
- package/dist/core/resolver.d.ts +14 -0
- package/dist/core/resolver.js +1 -0
- package/dist/core/review/birth.d.ts +7 -0
- package/dist/core/review/birth.js +1 -0
- package/dist/core/review/comments.d.ts +69 -0
- package/dist/core/review/comments.js +21 -0
- package/dist/core/review/companion.d.ts +33 -0
- package/dist/core/review/companion.js +1 -0
- package/dist/core/review/document.d.ts +27 -0
- package/dist/core/review/document.js +2 -0
- package/dist/core/review/fork.d.ts +8 -0
- package/dist/core/review/fork.js +5 -0
- package/dist/core/review/project.d.ts +17 -0
- package/dist/core/review/project.js +1 -0
- package/dist/core/review/realize.d.ts +3 -0
- package/dist/core/review/realize.js +1 -0
- package/dist/core/review/remap.d.ts +24 -0
- package/dist/core/review/remap.js +19 -0
- package/dist/core/review/signal.d.ts +5 -0
- package/dist/core/review/signal.js +1 -0
- package/dist/core/review/stage.d.ts +38 -0
- package/dist/core/review/stage.js +1 -0
- package/dist/core/review/store.d.ts +44 -0
- package/dist/core/review/store.js +1 -0
- package/dist/core/review/types.d.ts +139 -0
- package/dist/core/review/types.js +1 -0
- package/dist/core/runs/activity.d.ts +11 -0
- package/dist/core/runs/activity.js +6 -0
- package/dist/core/runs/confinement.d.ts +23 -0
- package/dist/core/runs/confinement.js +2 -0
- package/dist/core/runs/events.d.ts +41 -0
- package/dist/core/runs/events.js +7 -0
- package/dist/core/runs/operations.d.ts +75 -0
- package/dist/core/runs/operations.js +12 -0
- package/dist/core/runs/questions.d.ts +73 -0
- package/dist/core/runs/questions.js +4 -0
- package/dist/core/runtime/advertised-command-invocation.d.ts +20 -0
- package/dist/core/runtime/advertised-command-invocation.js +1 -0
- package/dist/core/runtime/auth-reload.d.ts +7 -0
- package/dist/core/runtime/auth-reload.js +1 -0
- package/dist/core/runtime/banner.d.ts +15 -0
- package/dist/core/runtime/banner.js +1 -0
- package/dist/core/runtime/bearings-render.d.ts +62 -0
- package/dist/core/runtime/bearings-render.js +18 -0
- package/dist/core/runtime/bearings.d.ts +56 -0
- package/dist/core/runtime/bearings.js +7 -0
- package/dist/core/runtime/bin-contributions.d.ts +44 -0
- package/dist/core/runtime/bin-contributions.js +2 -0
- package/dist/core/runtime/boot-root.d.ts +34 -0
- package/dist/core/runtime/boot-root.js +5 -0
- package/dist/core/runtime/branded-host.d.ts +55 -0
- package/dist/core/runtime/branded-host.js +2 -0
- package/dist/core/runtime/broker/cli-relay.d.ts +5 -0
- package/dist/core/runtime/broker/cli-relay.js +1 -0
- package/dist/core/runtime/broker/client-registry.d.ts +36 -0
- package/dist/core/runtime/broker/client-registry.js +1 -0
- package/dist/core/runtime/broker/daemon-ops.d.ts +65 -0
- package/dist/core/runtime/broker/daemon-ops.js +1 -0
- package/dist/core/runtime/broker/engine-drive.d.ts +37 -0
- package/dist/core/runtime/broker/engine-drive.js +1 -0
- package/dist/core/runtime/broker/engine-routing.d.ts +143 -0
- package/dist/core/runtime/broker/engine-routing.js +1 -0
- package/dist/core/runtime/broker/event-projection.d.ts +43 -0
- package/dist/core/runtime/broker/event-projection.js +1 -0
- package/dist/core/runtime/broker/extension-abort.d.ts +15 -0
- package/dist/core/runtime/broker/extension-abort.js +1 -0
- package/dist/core/runtime/broker/fault-retry.d.ts +127 -0
- package/dist/core/runtime/broker/fault-retry.js +1 -0
- package/dist/core/runtime/broker/frame-client.d.ts +38 -0
- package/dist/core/runtime/broker/frame-client.js +1 -0
- package/dist/core/runtime/broker/frame-dispatch.d.ts +64 -0
- package/dist/core/runtime/broker/frame-dispatch.js +1 -0
- package/dist/core/runtime/broker/frame-engine-control.d.ts +21 -0
- package/dist/core/runtime/broker/frame-engine-control.js +1 -0
- package/dist/core/runtime/broker/frame-memory-refs.d.ts +25 -0
- package/dist/core/runtime/broker/frame-memory-refs.js +1 -0
- package/dist/core/runtime/broker/frame-model-query.d.ts +13 -0
- package/dist/core/runtime/broker/frame-model-query.js +1 -0
- package/dist/core/runtime/broker/frame-read.d.ts +19 -0
- package/dist/core/runtime/broker/frame-read.js +1 -0
- package/dist/core/runtime/broker/frame-replies.d.ts +24 -0
- package/dist/core/runtime/broker/frame-replies.js +1 -0
- package/dist/core/runtime/broker/frame-session.d.ts +34 -0
- package/dist/core/runtime/broker/frame-session.js +4 -0
- package/dist/core/runtime/broker/held-deferred-inbox.d.ts +15 -0
- package/dist/core/runtime/broker/held-deferred-inbox.js +1 -0
- package/dist/core/runtime/broker/inbox.d.ts +22 -0
- package/dist/core/runtime/broker/inbox.js +1 -0
- package/dist/core/runtime/broker/model-adapter.d.ts +24 -0
- package/dist/core/runtime/broker/model-adapter.js +2 -0
- package/dist/core/runtime/broker/node-named.d.ts +15 -0
- package/dist/core/runtime/broker/node-named.js +1 -0
- package/dist/core/runtime/broker/node-token.d.ts +3 -0
- package/dist/core/runtime/broker/node-token.js +1 -0
- package/dist/core/runtime/broker/read-ops.d.ts +27 -0
- package/dist/core/runtime/broker/read-ops.js +1 -0
- package/dist/core/runtime/broker/rebind.d.ts +78 -0
- package/dist/core/runtime/broker/rebind.js +1 -0
- package/dist/core/runtime/broker/retry-card-elision.d.ts +7 -0
- package/dist/core/runtime/broker/retry-card-elision.js +1 -0
- package/dist/core/runtime/broker/run-deferred-mail.d.ts +8 -0
- package/dist/core/runtime/broker/run-deferred-mail.js +1 -0
- package/dist/core/runtime/broker/run-turn-end.d.ts +38 -0
- package/dist/core/runtime/broker/run-turn-end.js +1 -0
- package/dist/core/runtime/broker/run-turn-queue.d.ts +48 -0
- package/dist/core/runtime/broker/run-turn-queue.js +1 -0
- package/dist/core/runtime/broker/signal-stream.d.ts +30 -0
- package/dist/core/runtime/broker/signal-stream.js +1 -0
- package/dist/core/runtime/broker/tool-groups.d.ts +39 -0
- package/dist/core/runtime/broker/tool-groups.js +1 -0
- package/dist/core/runtime/broker/turn-admission.d.ts +11 -0
- package/dist/core/runtime/broker/turn-admission.js +1 -0
- package/dist/core/runtime/broker/turn-ignition.d.ts +49 -0
- package/dist/core/runtime/broker/turn-ignition.js +1 -0
- package/dist/core/runtime/broker-cli.d.ts +1 -0
- package/dist/core/runtime/broker-cli.js +3 -0
- package/dist/core/runtime/broker-extension-render.d.ts +3 -0
- package/dist/core/runtime/broker-extension-render.js +3 -0
- package/dist/core/runtime/broker-inventory.d.ts +4 -0
- package/dist/core/runtime/broker-inventory.js +1 -0
- package/dist/core/runtime/broker-persona-guidance.d.ts +27 -0
- package/dist/core/runtime/broker-persona-guidance.js +4 -0
- package/dist/core/runtime/broker-protocol.d.ts +716 -0
- package/dist/core/runtime/broker-protocol.js +3 -0
- package/dist/core/runtime/broker-request.d.ts +37 -0
- package/dist/core/runtime/broker-request.js +1 -0
- package/dist/core/runtime/broker-sdk.d.ts +36 -0
- package/dist/core/runtime/broker-sdk.js +1 -0
- package/dist/core/runtime/broker.d.ts +73 -0
- package/dist/core/runtime/broker.js +1 -0
- package/dist/core/runtime/canvas-extensions.d.ts +34 -0
- package/dist/core/runtime/canvas-extensions.js +1 -0
- package/dist/core/runtime/chat-inventory-rows.d.ts +8 -0
- package/dist/core/runtime/chat-inventory-rows.js +1 -0
- package/dist/core/runtime/close.d.ts +46 -0
- package/dist/core/runtime/close.js +1 -0
- package/dist/core/runtime/come-back-note.d.ts +5 -0
- package/dist/core/runtime/come-back-note.js +3 -0
- package/dist/core/runtime/command-expansion.d.ts +19 -0
- package/dist/core/runtime/command-expansion.js +9 -0
- package/dist/core/runtime/command-surface.d.ts +38 -0
- package/dist/core/runtime/command-surface.js +1 -0
- package/dist/core/runtime/connectivity.d.ts +12 -0
- package/dist/core/runtime/connectivity.js +1 -0
- package/dist/core/runtime/crtr-theme.d.ts +12 -0
- package/dist/core/runtime/crtr-theme.js +1 -0
- package/dist/core/runtime/deliver-live.d.ts +38 -0
- package/dist/core/runtime/deliver-live.js +1 -0
- package/dist/core/runtime/fault-recovery.d.ts +23 -0
- package/dist/core/runtime/fault-recovery.js +1 -0
- package/dist/core/runtime/fault.d.ts +6 -0
- package/dist/core/runtime/fault.js +1 -0
- package/dist/core/runtime/first-run-offer.d.ts +11 -0
- package/dist/core/runtime/first-run-offer.js +5 -0
- package/dist/core/runtime/fleet.d.ts +93 -0
- package/dist/core/runtime/fleet.js +1 -0
- package/dist/core/runtime/focus-viewer.d.ts +39 -0
- package/dist/core/runtime/focus-viewer.js +1 -0
- package/dist/core/runtime/front-door-env.d.ts +5 -0
- package/dist/core/runtime/front-door-env.js +1 -0
- package/dist/core/runtime/front-door-login.d.ts +2 -0
- package/dist/core/runtime/front-door-login.js +1 -0
- package/dist/core/runtime/front-door.d.ts +26 -0
- package/dist/core/runtime/front-door.js +11 -0
- package/dist/core/runtime/headless-pi.d.ts +37 -0
- package/dist/core/runtime/headless-pi.js +1 -0
- package/dist/core/runtime/host.d.ts +59 -0
- package/dist/core/runtime/host.js +3 -0
- package/dist/core/runtime/interactive-deliver.d.ts +22 -0
- package/dist/core/runtime/interactive-deliver.js +1 -0
- package/dist/core/runtime/invocation.d.ts +9 -0
- package/dist/core/runtime/invocation.js +0 -0
- package/dist/core/runtime/kickoff.d.ts +49 -0
- package/dist/core/runtime/kickoff.js +28 -0
- package/dist/core/runtime/launch-config-worker.d.ts +1 -0
- package/dist/core/runtime/launch-config-worker.js +1 -0
- package/dist/core/runtime/launch-prompt.d.ts +8 -0
- package/dist/core/runtime/launch-prompt.js +4 -0
- package/dist/core/runtime/launch-target.d.ts +34 -0
- package/dist/core/runtime/launch-target.js +1 -0
- package/dist/core/runtime/launch.d.ts +194 -0
- package/dist/core/runtime/launch.js +3 -0
- package/dist/core/runtime/ledger.d.ts +10 -0
- package/dist/core/runtime/ledger.js +3 -0
- package/dist/core/runtime/lifecycle.d.ts +34 -0
- package/dist/core/runtime/lifecycle.js +2 -0
- package/dist/core/runtime/managed-provider-cooling.d.ts +24 -0
- package/dist/core/runtime/managed-provider-cooling.js +1 -0
- package/dist/core/runtime/model-registry.d.ts +3 -0
- package/dist/core/runtime/model-registry.js +1 -0
- package/dist/core/runtime/model-selection.d.ts +54 -0
- package/dist/core/runtime/model-selection.js +1 -0
- package/dist/core/runtime/model-swap.d.ts +26 -0
- package/dist/core/runtime/model-swap.js +1 -0
- package/dist/core/runtime/naming.d.ts +69 -0
- package/dist/core/runtime/naming.js +14 -0
- package/dist/core/runtime/nerd-font.d.ts +46 -0
- package/dist/core/runtime/nerd-font.js +2 -0
- package/dist/core/runtime/node-id-token.d.ts +6 -0
- package/dist/core/runtime/node-id-token.js +1 -0
- package/dist/core/runtime/node-read.d.ts +51 -0
- package/dist/core/runtime/node-read.js +3 -0
- package/dist/core/runtime/nodes.d.ts +138 -0
- package/dist/core/runtime/nodes.js +1 -0
- package/dist/core/runtime/outcome-document.d.ts +59 -0
- package/dist/core/runtime/outcome-document.js +1 -0
- package/dist/core/runtime/package-health.d.ts +34 -0
- package/dist/core/runtime/package-health.js +4 -0
- package/dist/core/runtime/persona.d.ts +21 -0
- package/dist/core/runtime/persona.js +2 -0
- package/dist/core/runtime/pi-cli.d.ts +8 -0
- package/dist/core/runtime/pi-cli.js +1 -0
- package/dist/core/runtime/pi-vendored.d.ts +28 -0
- package/dist/core/runtime/pi-vendored.js +1 -0
- package/dist/core/runtime/placement-tmux.d.ts +32 -0
- package/dist/core/runtime/placement-tmux.js +1 -0
- package/dist/core/runtime/placement.d.ts +100 -0
- package/dist/core/runtime/placement.js +1 -0
- package/dist/core/runtime/progress-bar.d.ts +13 -0
- package/dist/core/runtime/progress-bar.js +2 -0
- package/dist/core/runtime/promote.d.ts +76 -0
- package/dist/core/runtime/promote.js +1 -0
- package/dist/core/runtime/prospective-inventory-cli.d.ts +1 -0
- package/dist/core/runtime/prospective-inventory-cli.js +3 -0
- package/dist/core/runtime/prospective-inventory.d.ts +10 -0
- package/dist/core/runtime/prospective-inventory.js +2 -0
- package/dist/core/runtime/provider-credential-gate.d.ts +4 -0
- package/dist/core/runtime/provider-credential-gate.js +2 -0
- package/dist/core/runtime/recap.d.ts +3 -0
- package/dist/core/runtime/recap.js +27 -0
- package/dist/core/runtime/recovery-hold.d.ts +2 -0
- package/dist/core/runtime/recovery-hold.js +1 -0
- package/dist/core/runtime/recycle.d.ts +14 -0
- package/dist/core/runtime/recycle.js +1 -0
- package/dist/core/runtime/reopen.d.ts +38 -0
- package/dist/core/runtime/reopen.js +1 -0
- package/dist/core/runtime/reset.d.ts +68 -0
- package/dist/core/runtime/reset.js +1 -0
- package/dist/core/runtime/resume-root.d.ts +34 -0
- package/dist/core/runtime/resume-root.js +11 -0
- package/dist/core/runtime/revive-all.d.ts +57 -0
- package/dist/core/runtime/revive-all.js +1 -0
- package/dist/core/runtime/revive.d.ts +105 -0
- package/dist/core/runtime/revive.js +3 -0
- package/dist/core/runtime/roadmap.d.ts +24 -0
- package/dist/core/runtime/roadmap.js +15 -0
- package/dist/core/runtime/run-command.d.ts +36 -0
- package/dist/core/runtime/run-command.js +1 -0
- package/dist/core/runtime/session-branch.d.ts +7 -0
- package/dist/core/runtime/session-branch.js +1 -0
- package/dist/core/runtime/session-cycles.d.ts +45 -0
- package/dist/core/runtime/session-cycles.js +1 -0
- package/dist/core/runtime/session-list-cache.d.ts +37 -0
- package/dist/core/runtime/session-list-cache.js +1 -0
- package/dist/core/runtime/session-visibility.d.ts +37 -0
- package/dist/core/runtime/session-visibility.js +1 -0
- package/dist/core/runtime/setup-marker.d.ts +8 -0
- package/dist/core/runtime/setup-marker.js +1 -0
- package/dist/core/runtime/shell-expansion.d.ts +32 -0
- package/dist/core/runtime/shell-expansion.js +9 -0
- package/dist/core/runtime/situational-context.d.ts +19 -0
- package/dist/core/runtime/situational-context.js +2 -0
- package/dist/core/runtime/situational-live.d.ts +9 -0
- package/dist/core/runtime/situational-live.js +1 -0
- package/dist/core/runtime/spawn-env.d.ts +54 -0
- package/dist/core/runtime/spawn-env.js +1 -0
- package/dist/core/runtime/spawn.d.ts +155 -0
- package/dist/core/runtime/spawn.js +3 -0
- package/dist/core/runtime/stamp/channel.d.ts +20 -0
- package/dist/core/runtime/stamp/channel.js +1 -0
- package/dist/core/runtime/stamp/protocol.d.ts +90 -0
- package/dist/core/runtime/stamp/protocol.js +1 -0
- package/dist/core/runtime/stop-guard.d.ts +31 -0
- package/dist/core/runtime/stop-guard.js +8 -0
- package/dist/core/runtime/stop-signals.d.ts +16 -0
- package/dist/core/runtime/stop-signals.js +1 -0
- package/dist/core/runtime/stream-watchdog.d.ts +54 -0
- package/dist/core/runtime/stream-watchdog.js +1 -0
- package/dist/core/runtime/structured-output.d.ts +91 -0
- package/dist/core/runtime/structured-output.js +5 -0
- package/dist/core/runtime/surface-bg.d.ts +13 -0
- package/dist/core/runtime/surface-bg.js +1 -0
- package/dist/core/runtime/tmux-bindings.d.ts +30 -0
- package/dist/core/runtime/tmux-bindings.js +4 -0
- package/dist/core/runtime/tmux-chrome.d.ts +2 -0
- package/dist/core/runtime/tmux-chrome.js +1 -0
- package/dist/core/runtime/tmux-driver.d.ts +314 -0
- package/dist/core/runtime/tmux-driver.js +6 -0
- package/dist/core/runtime/tmux-handoff.d.ts +36 -0
- package/dist/core/runtime/tmux-handoff.js +10 -0
- package/dist/core/runtime/tool-group-summary.d.ts +19 -0
- package/dist/core/runtime/tool-group-summary.js +6 -0
- package/dist/core/runtime/turn-visibility.d.ts +10 -0
- package/dist/core/runtime/turn-visibility.js +1 -0
- package/dist/core/runtime/view-socket.d.ts +21 -0
- package/dist/core/runtime/view-socket.js +1 -0
- package/dist/core/runtime/warm-pool.d.ts +65 -0
- package/dist/core/runtime/warm-pool.js +1 -0
- package/dist/core/scope.d.ts +32 -0
- package/dist/core/scope.js +1 -0
- package/dist/core/scoped-state/db.d.ts +17 -0
- package/dist/core/scoped-state/db.js +2 -0
- package/dist/core/scoped-state/migrate.d.ts +8 -0
- package/dist/core/scoped-state/migrate.js +3 -0
- package/dist/core/scoped-state/paths.d.ts +9 -0
- package/dist/core/scoped-state/paths.js +1 -0
- package/dist/core/scoped-state/profiles.d.ts +27 -0
- package/dist/core/scoped-state/profiles.js +1 -0
- package/dist/core/scoped-state/providers.d.ts +24 -0
- package/dist/core/scoped-state/providers.js +1 -0
- package/dist/core/scoped-state/schema.d.ts +6 -0
- package/dist/core/scoped-state/schema.js +16 -0
- package/dist/core/scoped-state/settings.d.ts +28 -0
- package/dist/core/scoped-state/settings.js +1 -0
- package/dist/core/scopes.d.ts +17 -0
- package/dist/core/scopes.js +1 -0
- package/dist/core/secrets.d.ts +40 -0
- package/dist/core/secrets.js +2 -0
- package/dist/core/self-update.d.ts +27 -0
- package/dist/core/self-update.js +1 -0
- package/dist/core/session-model/session-state.d.ts +53 -0
- package/dist/core/session-model/session-state.js +1 -0
- package/dist/core/shell-segments.d.ts +42 -0
- package/dist/core/shell-segments.js +4 -0
- package/dist/core/spaces/cache-env.d.ts +2 -0
- package/dist/core/spaces/cache-env.js +1 -0
- package/dist/core/spaces/file-root.d.ts +23 -0
- package/dist/core/spaces/file-root.js +1 -0
- package/dist/core/spaces/mounts.d.ts +34 -0
- package/dist/core/spaces/mounts.js +1 -0
- package/dist/core/spaces/open-beneath.d.ts +71 -0
- package/dist/core/spaces/open-beneath.js +1 -0
- package/dist/core/spaces/permissions.d.ts +19 -0
- package/dist/core/spaces/permissions.js +1 -0
- package/dist/core/spaces/process.d.ts +41 -0
- package/dist/core/spaces/process.js +1 -0
- package/dist/core/spaces/runtime-home.d.ts +5 -0
- package/dist/core/spaces/runtime-home.js +1 -0
- package/dist/core/spaces/space.d.ts +8 -0
- package/dist/core/spaces/space.js +2 -0
- package/dist/core/spaces/stop.d.ts +21 -0
- package/dist/core/spaces/stop.js +2 -0
- package/dist/core/spaces/users.d.ts +19 -0
- package/dist/core/spaces/users.js +1 -0
- package/dist/core/spawn.d.ts +15 -0
- package/dist/core/spawn.js +1 -0
- package/dist/core/sqlite-statements.d.ts +4 -0
- package/dist/core/sqlite-statements.js +1 -0
- package/dist/core/stdout-errors.d.ts +3 -0
- package/dist/core/stdout-errors.js +1 -0
- package/dist/core/storage/attachments.d.ts +33 -0
- package/dist/core/storage/attachments.js +1 -0
- package/dist/core/storage/client.d.ts +109 -0
- package/dist/core/storage/client.js +3 -0
- package/dist/core/storage/download.d.ts +24 -0
- package/dist/core/storage/download.js +1 -0
- package/dist/core/storage/shares.d.ts +32 -0
- package/dist/core/storage/shares.js +1 -0
- package/dist/core/storage/tables.d.ts +63 -0
- package/dist/core/storage/tables.js +3 -0
- package/dist/core/subscription-state.d.ts +121 -0
- package/dist/core/subscription-state.js +4 -0
- package/dist/core/substrate/delivery/corpus.d.ts +27 -0
- package/dist/core/substrate/delivery/corpus.js +3 -0
- package/dist/core/substrate/delivery/deliver.d.ts +76 -0
- package/dist/core/substrate/delivery/deliver.js +6 -0
- package/dist/core/substrate/delivery/listings.d.ts +30 -0
- package/dist/core/substrate/delivery/listings.js +7 -0
- package/dist/core/substrate/delivery/match.d.ts +28 -0
- package/dist/core/substrate/delivery/match.js +1 -0
- package/dist/core/substrate/delivery/plan.d.ts +67 -0
- package/dist/core/substrate/delivery/plan.js +3 -0
- package/dist/core/substrate/delivery/render-boot.d.ts +20 -0
- package/dist/core/substrate/delivery/render-boot.js +54 -0
- package/dist/core/substrate/delivery/render-event.d.ts +54 -0
- package/dist/core/substrate/delivery/render-event.js +8 -0
- package/dist/core/substrate/delivery/sub-persona-menu.d.ts +2 -0
- package/dist/core/substrate/delivery/sub-persona-menu.js +6 -0
- package/dist/core/substrate/delivery/types.d.ts +30 -0
- package/dist/core/substrate/delivery/types.js +0 -0
- package/dist/core/substrate/gate-explain.d.ts +35 -0
- package/dist/core/substrate/gate-explain.js +1 -0
- package/dist/core/substrate/schema.d.ts +29 -0
- package/dist/core/substrate/schema.js +1 -0
- package/dist/core/substrate/subject-fields.d.ts +48 -0
- package/dist/core/substrate/subject-fields.js +1 -0
- package/dist/core/substrate/subject.d.ts +13 -0
- package/dist/core/substrate/subject.js +1 -0
- package/dist/core/termrender/code-doc.d.ts +12 -0
- package/dist/core/termrender/code-doc.js +5 -0
- package/dist/core/termrender/display.d.ts +16 -0
- package/dist/core/termrender/display.js +2 -0
- package/dist/core/termrender/termrender.d.ts +71 -0
- package/dist/core/termrender/termrender.js +14 -0
- package/dist/core/termrender/version.d.ts +1 -0
- package/dist/core/termrender/version.js +1 -0
- package/dist/core/timing.d.ts +11 -0
- package/dist/core/timing.js +2 -0
- package/dist/core/tui/draw.d.ts +103 -0
- package/dist/core/tui/draw.js +2 -0
- package/dist/core/tui/fuzzy.d.ts +9 -0
- package/dist/core/tui/fuzzy.js +1 -0
- package/dist/core/tui/markdown.d.ts +17 -0
- package/dist/core/tui/markdown.js +3 -0
- package/dist/core/tui/page-host.d.ts +31 -0
- package/dist/core/tui/page-host.js +1 -0
- package/dist/core/tui/panel.d.ts +45 -0
- package/dist/core/tui/panel.js +1 -0
- package/dist/core/tui/terminal.d.ts +23 -0
- package/dist/core/tui/terminal.js +2 -0
- package/dist/core/user-settings.d.ts +377 -0
- package/dist/core/user-settings.js +1 -0
- package/dist/core/wake.d.ts +89 -0
- package/dist/core/wake.js +1 -0
- package/dist/core/worktree-close.d.ts +4 -0
- package/dist/core/worktree-close.js +6 -0
- package/dist/core/worktree-containment.d.ts +14 -0
- package/dist/core/worktree-containment.js +3 -0
- package/dist/core/worktree-landing.d.ts +44 -0
- package/dist/core/worktree-landing.js +4 -0
- package/dist/core/worktree-mutation-async.d.ts +13 -0
- package/dist/core/worktree-mutation-async.js +10 -0
- package/dist/core/worktree-quarantine.d.ts +19 -0
- package/dist/core/worktree-quarantine.js +1 -0
- package/dist/core/worktree-remove.d.ts +15 -0
- package/dist/core/worktree-remove.js +1 -0
- package/dist/core/worktree-sweep.d.ts +60 -0
- package/dist/core/worktree-sweep.js +6 -0
- package/dist/core/worktree.d.ts +120 -0
- package/dist/core/worktree.js +18 -0
- package/dist/daemon/analytics/compute.d.ts +37 -0
- package/dist/daemon/analytics/compute.js +1 -0
- package/dist/daemon/analytics/scan-worker.d.ts +1 -0
- package/dist/daemon/analytics/scan-worker.js +2 -0
- package/dist/daemon/analytics/scan.d.ts +37 -0
- package/dist/daemon/analytics/scan.js +1 -0
- package/dist/daemon/api/app-listener.d.ts +22 -0
- package/dist/daemon/api/app-listener.js +24 -0
- package/dist/daemon/api/bridge.d.ts +63 -0
- package/dist/daemon/api/bridge.js +8 -0
- package/dist/daemon/api/deferred-head.d.ts +14 -0
- package/dist/daemon/api/deferred-head.js +4 -0
- package/dist/daemon/api/handlers/analytics.d.ts +2 -0
- package/dist/daemon/api/handlers/analytics.js +1 -0
- package/dist/daemon/api/handlers/app-profiles.d.ts +17 -0
- package/dist/daemon/api/handlers/app-profiles.js +1 -0
- package/dist/daemon/api/handlers/attach.d.ts +2 -0
- package/dist/daemon/api/handlers/attach.js +1 -0
- package/dist/daemon/api/handlers/bash-jobs.d.ts +2 -0
- package/dist/daemon/api/handlers/bash-jobs.js +1 -0
- package/dist/daemon/api/handlers/bash.d.ts +2 -0
- package/dist/daemon/api/handlers/bash.js +1 -0
- package/dist/daemon/api/handlers/broker-ops.d.ts +5 -0
- package/dist/daemon/api/handlers/broker-ops.js +1 -0
- package/dist/daemon/api/handlers/broker-recovery.d.ts +4 -0
- package/dist/daemon/api/handlers/broker-recovery.js +1 -0
- package/dist/daemon/api/handlers/broker-signals.d.ts +19 -0
- package/dist/daemon/api/handlers/broker-signals.js +2 -0
- package/dist/daemon/api/handlers/canvas.d.ts +7 -0
- package/dist/daemon/api/handlers/canvas.js +6 -0
- package/dist/daemon/api/handlers/chat-inventory.d.ts +2 -0
- package/dist/daemon/api/handlers/chat-inventory.js +1 -0
- package/dist/daemon/api/handlers/crons.d.ts +2 -0
- package/dist/daemon/api/handlers/crons.js +1 -0
- package/dist/daemon/api/handlers/custom-objects.d.ts +10 -0
- package/dist/daemon/api/handlers/custom-objects.js +3 -0
- package/dist/daemon/api/handlers/daemon.d.ts +2 -0
- package/dist/daemon/api/handlers/daemon.js +1 -0
- package/dist/daemon/api/handlers/delivery-retry.d.ts +2 -0
- package/dist/daemon/api/handlers/delivery-retry.js +1 -0
- package/dist/daemon/api/handlers/delivery.d.ts +2 -0
- package/dist/daemon/api/handlers/delivery.js +1 -0
- package/dist/daemon/api/handlers/docs.d.ts +2 -0
- package/dist/daemon/api/handlers/docs.js +1 -0
- package/dist/daemon/api/handlers/feedback-comments.d.ts +2 -0
- package/dist/daemon/api/handlers/feedback-comments.js +3 -0
- package/dist/daemon/api/handlers/files.d.ts +2 -0
- package/dist/daemon/api/handlers/files.js +1 -0
- package/dist/daemon/api/handlers/focus.d.ts +2 -0
- package/dist/daemon/api/handlers/focus.js +1 -0
- package/dist/daemon/api/handlers/health.d.ts +2 -0
- package/dist/daemon/api/handlers/health.js +14 -0
- package/dist/daemon/api/handlers/hook-exec.d.ts +2 -0
- package/dist/daemon/api/handlers/hook-exec.js +1 -0
- package/dist/daemon/api/handlers/human-requests.d.ts +2 -0
- package/dist/daemon/api/handlers/human-requests.js +1 -0
- package/dist/daemon/api/handlers/human.d.ts +2 -0
- package/dist/daemon/api/handlers/human.js +1 -0
- package/dist/daemon/api/handlers/inbox-page.d.ts +4 -0
- package/dist/daemon/api/handlers/inbox-page.js +1 -0
- package/dist/daemon/api/handlers/inbox.d.ts +12 -0
- package/dist/daemon/api/handlers/inbox.js +1 -0
- package/dist/daemon/api/handlers/limits.d.ts +2 -0
- package/dist/daemon/api/handlers/limits.js +1 -0
- package/dist/daemon/api/handlers/llm.d.ts +2 -0
- package/dist/daemon/api/handlers/llm.js +3 -0
- package/dist/daemon/api/handlers/memory-reads.d.ts +4 -0
- package/dist/daemon/api/handlers/memory-reads.js +1 -0
- package/dist/daemon/api/handlers/memory.d.ts +38 -0
- package/dist/daemon/api/handlers/memory.js +8 -0
- package/dist/daemon/api/handlers/messages.d.ts +4 -0
- package/dist/daemon/api/handlers/messages.js +2 -0
- package/dist/daemon/api/handlers/model-config.d.ts +2 -0
- package/dist/daemon/api/handlers/model-config.js +1 -0
- package/dist/daemon/api/handlers/modelauth.d.ts +5 -0
- package/dist/daemon/api/handlers/modelauth.js +1 -0
- package/dist/daemon/api/handlers/node-events.d.ts +44 -0
- package/dist/daemon/api/handlers/node-events.js +6 -0
- package/dist/daemon/api/handlers/node-outcomes.d.ts +2 -0
- package/dist/daemon/api/handlers/node-outcomes.js +1 -0
- package/dist/daemon/api/handlers/node-records.d.ts +2 -0
- package/dist/daemon/api/handlers/node-records.js +3 -0
- package/dist/daemon/api/handlers/nodes.d.ts +17 -0
- package/dist/daemon/api/handlers/nodes.js +1 -0
- package/dist/daemon/api/handlers/objects.d.ts +2 -0
- package/dist/daemon/api/handlers/objects.js +2 -0
- package/dist/daemon/api/handlers/package-docs.d.ts +2 -0
- package/dist/daemon/api/handlers/package-docs.js +1 -0
- package/dist/daemon/api/handlers/profiles.d.ts +11 -0
- package/dist/daemon/api/handlers/profiles.js +1 -0
- package/dist/daemon/api/handlers/prospective-chat-inventory.d.ts +2 -0
- package/dist/daemon/api/handlers/prospective-chat-inventory.js +1 -0
- package/dist/daemon/api/handlers/providers.d.ts +70 -0
- package/dist/daemon/api/handlers/providers.js +1 -0
- package/dist/daemon/api/handlers/questions.d.ts +7 -0
- package/dist/daemon/api/handlers/questions.js +1 -0
- package/dist/daemon/api/handlers/reports.d.ts +6 -0
- package/dist/daemon/api/handlers/reports.js +18 -0
- package/dist/daemon/api/handlers/review-comments.d.ts +2 -0
- package/dist/daemon/api/handlers/review-comments.js +1 -0
- package/dist/daemon/api/handlers/reviews.d.ts +5 -0
- package/dist/daemon/api/handlers/reviews.js +1 -0
- package/dist/daemon/api/handlers/run-routes.d.ts +2 -0
- package/dist/daemon/api/handlers/run-routes.js +1 -0
- package/dist/daemon/api/handlers/runs.d.ts +9 -0
- package/dist/daemon/api/handlers/runs.js +1 -0
- package/dist/daemon/api/handlers/structured-requests.d.ts +2 -0
- package/dist/daemon/api/handlers/structured-requests.js +1 -0
- package/dist/daemon/api/handlers/subscriptions.d.ts +2 -0
- package/dist/daemon/api/handlers/subscriptions.js +1 -0
- package/dist/daemon/api/handlers/telemetry-record.d.ts +4 -0
- package/dist/daemon/api/handlers/telemetry-record.js +1 -0
- package/dist/daemon/api/handlers/transfer.d.ts +15 -0
- package/dist/daemon/api/handlers/transfer.js +1 -0
- package/dist/daemon/api/handlers/validate.d.ts +23 -0
- package/dist/daemon/api/handlers/validate.js +1 -0
- package/dist/daemon/api/handlers/vendor-status.d.ts +8 -0
- package/dist/daemon/api/handlers/vendor-status.js +1 -0
- package/dist/daemon/api/handlers/worktree.d.ts +2 -0
- package/dist/daemon/api/handlers/worktree.js +1 -0
- package/dist/daemon/api/long-poll-wait.d.ts +3 -0
- package/dist/daemon/api/long-poll-wait.js +1 -0
- package/dist/daemon/api/map.d.ts +167 -0
- package/dist/daemon/api/map.js +2 -0
- package/dist/daemon/api/operations.d.ts +18 -0
- package/dist/daemon/api/operations.js +1 -0
- package/dist/daemon/api/principal.d.ts +71 -0
- package/dist/daemon/api/principal.js +1 -0
- package/dist/daemon/api/reader.d.ts +17 -0
- package/dist/daemon/api/reader.js +1 -0
- package/dist/daemon/api/router.d.ts +123 -0
- package/dist/daemon/api/router.js +1 -0
- package/dist/daemon/api/server.d.ts +28 -0
- package/dist/daemon/api/server.js +1 -0
- package/dist/daemon/api/vendor-signin.d.ts +7 -0
- package/dist/daemon/api/vendor-signin.js +77 -0
- package/dist/daemon/api/viewer-presence.d.ts +3 -0
- package/dist/daemon/api/viewer-presence.js +1 -0
- package/dist/daemon/boot-migrations.d.ts +14 -0
- package/dist/daemon/boot-migrations.js +1 -0
- package/dist/daemon/broker-signals/bus.d.ts +30 -0
- package/dist/daemon/broker-signals/bus.js +10 -0
- package/dist/daemon/companion-retire.d.ts +4 -0
- package/dist/daemon/companion-retire.js +1 -0
- package/dist/daemon/control.d.ts +40 -0
- package/dist/daemon/control.js +1 -0
- package/dist/daemon/cron/armed-context.d.ts +25 -0
- package/dist/daemon/cron/armed-context.js +1 -0
- package/dist/daemon/cron/capture.d.ts +22 -0
- package/dist/daemon/cron/capture.js +2 -0
- package/dist/daemon/cron/disposition.d.ts +21 -0
- package/dist/daemon/cron/disposition.js +1 -0
- package/dist/daemon/cron/escalation.d.ts +12 -0
- package/dist/daemon/cron/escalation.js +3 -0
- package/dist/daemon/cron/held.d.ts +4 -0
- package/dist/daemon/cron/held.js +1 -0
- package/dist/daemon/cron/lease-recovery.d.ts +3 -0
- package/dist/daemon/cron/lease-recovery.js +1 -0
- package/dist/daemon/cron/live-runs.d.ts +11 -0
- package/dist/daemon/cron/live-runs.js +1 -0
- package/dist/daemon/cron/passes.d.ts +6 -0
- package/dist/daemon/cron/passes.js +1 -0
- package/dist/daemon/cron/settle.d.ts +28 -0
- package/dist/daemon/cron/settle.js +1 -0
- package/dist/daemon/cron/sinks.d.ts +19 -0
- package/dist/daemon/cron/sinks.js +2 -0
- package/dist/daemon/cron-run.d.ts +31 -0
- package/dist/daemon/cron-run.js +1 -0
- package/dist/daemon/crtrd-cli.d.ts +1 -0
- package/dist/daemon/crtrd-cli.js +1 -0
- package/dist/daemon/crtrd.d.ts +28 -0
- package/dist/daemon/crtrd.js +12 -0
- package/dist/daemon/delivery/run-delivery.d.ts +34 -0
- package/dist/daemon/delivery/run-delivery.js +1 -0
- package/dist/daemon/due-sources.d.ts +15 -0
- package/dist/daemon/due-sources.js +1 -0
- package/dist/daemon/due.d.ts +14 -0
- package/dist/daemon/due.js +11 -0
- package/dist/daemon/fleet.d.ts +79 -0
- package/dist/daemon/fleet.js +19 -0
- package/dist/daemon/http-dispatcher.d.ts +1 -0
- package/dist/daemon/http-dispatcher.js +1 -0
- package/dist/daemon/human/finish.d.ts +24 -0
- package/dist/daemon/human/finish.js +10 -0
- package/dist/daemon/human/settle.d.ts +44 -0
- package/dist/daemon/human/settle.js +1 -0
- package/dist/daemon/human/sweep.d.ts +21 -0
- package/dist/daemon/human/sweep.js +1 -0
- package/dist/daemon/joined-owner.d.ts +5 -0
- package/dist/daemon/joined-owner.js +1 -0
- package/dist/daemon/launcher-events.d.ts +2 -0
- package/dist/daemon/launcher-events.js +1 -0
- package/dist/daemon/manage.d.ts +176 -0
- package/dist/daemon/manage.js +2 -0
- package/dist/daemon/messaging/node-message.d.ts +27 -0
- package/dist/daemon/messaging/node-message.js +1 -0
- package/dist/daemon/park-activity.d.ts +9 -0
- package/dist/daemon/park-activity.js +1 -0
- package/dist/daemon/park-pending.d.ts +18 -0
- package/dist/daemon/park-pending.js +1 -0
- package/dist/daemon/pidfile.d.ts +8 -0
- package/dist/daemon/pidfile.js +1 -0
- package/dist/daemon/profile-delete.d.ts +7 -0
- package/dist/daemon/profile-delete.js +1 -0
- package/dist/daemon/reconcilers/action-lane.d.ts +8 -0
- package/dist/daemon/reconcilers/action-lane.js +1 -0
- package/dist/daemon/reconcilers/bash-deadline.d.ts +27 -0
- package/dist/daemon/reconcilers/bash-deadline.js +2 -0
- package/dist/daemon/reconcilers/broker-supervision.d.ts +88 -0
- package/dist/daemon/reconcilers/broker-supervision.js +4 -0
- package/dist/daemon/reconcilers/controller-death.d.ts +7 -0
- package/dist/daemon/reconcilers/controller-death.js +1 -0
- package/dist/daemon/reconcilers/cron-lane.d.ts +7 -0
- package/dist/daemon/reconcilers/cron-lane.js +1 -0
- package/dist/daemon/reconcilers/delivery-lane.d.ts +9 -0
- package/dist/daemon/reconcilers/delivery-lane.js +8 -0
- package/dist/daemon/reconcilers/fault-retry-backstop.d.ts +41 -0
- package/dist/daemon/reconcilers/fault-retry-backstop.js +1 -0
- package/dist/daemon/reconcilers/grove-instance-sweep.d.ts +36 -0
- package/dist/daemon/reconcilers/grove-instance-sweep.js +1 -0
- package/dist/daemon/reconcilers/live-obligation.d.ts +65 -0
- package/dist/daemon/reconcilers/live-obligation.js +1 -0
- package/dist/daemon/reconcilers/managed-worktree-sweep.d.ts +24 -0
- package/dist/daemon/reconcilers/managed-worktree-sweep.js +1 -0
- package/dist/daemon/reconcilers/node-deadline.d.ts +7 -0
- package/dist/daemon/reconcilers/node-deadline.js +1 -0
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.d.ts +48 -0
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +1 -0
- package/dist/daemon/reconcilers/node-lifecycle/respawn-policy.d.ts +30 -0
- package/dist/daemon/reconcilers/node-lifecycle/respawn-policy.js +1 -0
- package/dist/daemon/reconcilers/node-lifecycle/terminating.d.ts +5 -0
- package/dist/daemon/reconcilers/node-lifecycle/terminating.js +1 -0
- package/dist/daemon/reconcilers/node-lifecycle/tick.d.ts +20 -0
- package/dist/daemon/reconcilers/node-lifecycle/tick.js +1 -0
- package/dist/daemon/reconcilers/node-lifecycle/wants-execution.d.ts +8 -0
- package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -0
- package/dist/daemon/reconcilers/pending-review-submit.d.ts +7 -0
- package/dist/daemon/reconcilers/pending-review-submit.js +1 -0
- package/dist/daemon/reconcilers/storage-due-work.d.ts +32 -0
- package/dist/daemon/reconcilers/storage-due-work.js +1 -0
- package/dist/daemon/reconcilers/storage-maintenance.d.ts +69 -0
- package/dist/daemon/reconcilers/storage-maintenance.js +8 -0
- package/dist/daemon/reconcilers/structured-request-lane.d.ts +4 -0
- package/dist/daemon/reconcilers/structured-request-lane.js +1 -0
- package/dist/daemon/resume-detector.d.ts +12 -0
- package/dist/daemon/resume-detector.js +1 -0
- package/dist/daemon/review/comment-notify.d.ts +27 -0
- package/dist/daemon/review/comment-notify.js +2 -0
- package/dist/daemon/review/companion.d.ts +8 -0
- package/dist/daemon/review/companion.js +1 -0
- package/dist/daemon/review/deliver.d.ts +5 -0
- package/dist/daemon/review/deliver.js +3 -0
- package/dist/daemon/review/finish.d.ts +27 -0
- package/dist/daemon/review/finish.js +1 -0
- package/dist/daemon/review/sweep.d.ts +4 -0
- package/dist/daemon/review/sweep.js +1 -0
- package/dist/daemon/run-notices.d.ts +49 -0
- package/dist/daemon/run-notices.js +1 -0
- package/dist/daemon/runs/append-section.d.ts +6 -0
- package/dist/daemon/runs/append-section.js +2 -0
- package/dist/daemon/runs/observer.d.ts +14 -0
- package/dist/daemon/runs/observer.js +4 -0
- package/dist/daemon/startup-policy.d.ts +1 -0
- package/dist/daemon/startup-policy.js +1 -0
- package/dist/daemon/structured-requests/boot.d.ts +2 -0
- package/dist/daemon/structured-requests/boot.js +1 -0
- package/dist/daemon/structured-requests/effects.d.ts +4 -0
- package/dist/daemon/structured-requests/effects.js +1 -0
- package/dist/daemon/structured-requests/notifier.d.ts +2 -0
- package/dist/daemon/structured-requests/notifier.js +1 -0
- package/dist/daemon/structured-requests/sidecar.d.ts +3 -0
- package/dist/daemon/structured-requests/sidecar.js +1 -0
- package/dist/daemon/supervise-cadence.d.ts +1 -0
- package/dist/daemon/supervise-cadence.js +1 -0
- package/dist/hook-authoring.d.ts +130 -0
- package/dist/hook-authoring.js +5 -0
- package/dist/hook-process.d.ts +7 -0
- package/dist/hook-process.js +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +1 -0
- package/dist/launcher/bwrap.d.ts +13 -0
- package/dist/launcher/bwrap.js +2 -0
- package/dist/launcher/client.d.ts +4 -0
- package/dist/launcher/client.js +3 -0
- package/dist/launcher/limits/cgroup.d.ts +28 -0
- package/dist/launcher/limits/cgroup.js +2 -0
- package/dist/launcher/limits/log.d.ts +3 -0
- package/dist/launcher/limits/log.js +1 -0
- package/dist/launcher/limits/manager.d.ts +82 -0
- package/dist/launcher/limits/manager.js +1 -0
- package/dist/launcher/limits/policy.d.ts +98 -0
- package/dist/launcher/limits/policy.js +1 -0
- package/dist/launcher/limits/purge-worker.d.ts +8 -0
- package/dist/launcher/limits/purge-worker.js +2 -0
- package/dist/launcher/limits/quota.d.ts +48 -0
- package/dist/launcher/limits/quota.js +4 -0
- package/dist/launcher/limits/settings.d.ts +19 -0
- package/dist/launcher/limits/settings.js +2 -0
- package/dist/launcher/main.d.ts +1 -0
- package/dist/launcher/main.js +3 -0
- package/dist/launcher/netrule.d.ts +1 -0
- package/dist/launcher/netrule.js +1 -0
- package/dist/launcher/scope-directories.d.ts +4 -0
- package/dist/launcher/scope-directories.js +1 -0
- package/dist/launcher/seccomp.d.ts +1 -0
- package/dist/launcher/seccomp.js +1 -0
- package/dist/launcher/spec.d.ts +149 -0
- package/dist/launcher/spec.js +1 -0
- package/dist/launcher/users.d.ts +23 -0
- package/dist/launcher/users.js +7 -0
- package/dist/launcher/validate.d.ts +22 -0
- package/dist/launcher/validate.js +1 -0
- package/dist/migrations/004-canvas-documents/apply.d.ts +10 -0
- package/dist/migrations/004-canvas-documents/apply.js +1 -0
- package/dist/migrations/004-canvas-documents/fields.d.ts +24 -0
- package/dist/migrations/004-canvas-documents/fields.js +2 -0
- package/dist/migrations/004-canvas-documents/index.d.ts +16 -0
- package/dist/migrations/004-canvas-documents/index.js +2 -0
- package/dist/migrations/004-canvas-documents/legacy/discover.d.ts +16 -0
- package/dist/migrations/004-canvas-documents/legacy/discover.js +1 -0
- package/dist/migrations/004-canvas-documents/legacy/history.d.ts +5 -0
- package/dist/migrations/004-canvas-documents/legacy/history.js +2 -0
- package/dist/migrations/004-canvas-documents/legacy/nested.d.ts +7 -0
- package/dist/migrations/004-canvas-documents/legacy/nested.js +1 -0
- package/dist/migrations/004-canvas-documents/legacy/parse.d.ts +14 -0
- package/dist/migrations/004-canvas-documents/legacy/parse.js +1 -0
- package/dist/migrations/004-canvas-documents/legacy/types.d.ts +91 -0
- package/dist/migrations/004-canvas-documents/legacy/types.js +0 -0
- package/dist/migrations/004-canvas-documents/legacy-edges.d.ts +6 -0
- package/dist/migrations/004-canvas-documents/legacy-edges.js +18 -0
- package/dist/migrations/004-canvas-documents/plan.d.ts +102 -0
- package/dist/migrations/004-canvas-documents/plan.js +3 -0
- package/dist/migrations/004-canvas-documents/pointers.d.ts +23 -0
- package/dist/migrations/004-canvas-documents/pointers.js +4 -0
- package/dist/migrations/activation.d.ts +17 -0
- package/dist/migrations/activation.js +2 -0
- package/dist/native/linux/arm64/addon.node +0 -0
- package/dist/native/linux/x64/addon.node +0 -0
- package/dist/native/linux.d.ts +29 -0
- package/dist/native/linux.js +1 -0
- package/dist/pi-extensions/broker-local.d.ts +19 -0
- package/dist/pi-extensions/broker-local.js +2 -0
- package/dist/pi-extensions/canvas-bash-valve.d.ts +23 -0
- package/dist/pi-extensions/canvas-bash-valve.js +7 -0
- package/dist/pi-extensions/canvas-context-intro.d.ts +55 -0
- package/dist/pi-extensions/canvas-context-intro.js +2 -0
- package/dist/pi-extensions/canvas-doc-substrate.d.ts +51 -0
- package/dist/pi-extensions/canvas-doc-substrate.js +9 -0
- package/dist/pi-extensions/canvas-elapsed.d.ts +21 -0
- package/dist/pi-extensions/canvas-elapsed.js +2 -0
- package/dist/pi-extensions/canvas-goal-capture.d.ts +21 -0
- package/dist/pi-extensions/canvas-goal-capture.js +1 -0
- package/dist/pi-extensions/canvas-inbox-watcher.d.ts +26 -0
- package/dist/pi-extensions/canvas-inbox-watcher.js +2 -0
- package/dist/pi-extensions/canvas-passive-context.d.ts +38 -0
- package/dist/pi-extensions/canvas-passive-context.js +14 -0
- package/dist/pi-extensions/canvas-preview-result.d.ts +22 -0
- package/dist/pi-extensions/canvas-preview-result.js +4 -0
- package/dist/pi-extensions/canvas-prompt-scrub.d.ts +13 -0
- package/dist/pi-extensions/canvas-prompt-scrub.js +2 -0
- package/dist/pi-extensions/canvas-recap.d.ts +54 -0
- package/dist/pi-extensions/canvas-recap.js +11 -0
- package/dist/pi-extensions/canvas-review-boundary.d.ts +42 -0
- package/dist/pi-extensions/canvas-review-boundary.js +3 -0
- package/dist/pi-extensions/canvas-stamp.d.ts +14 -0
- package/dist/pi-extensions/canvas-stamp.js +2 -0
- package/dist/pi-extensions/canvas-stophook.d.ts +48 -0
- package/dist/pi-extensions/canvas-stophook.js +1 -0
- package/dist/pi-extensions/canvas-structured-output.d.ts +49 -0
- package/dist/pi-extensions/canvas-structured-output.js +19 -0
- package/dist/pi-extensions/canvas-tool-guide.d.ts +14 -0
- package/dist/pi-extensions/canvas-tool-guide.js +9 -0
- package/dist/pi-extensions/envelope-merge.d.ts +13 -0
- package/dist/pi-extensions/envelope-merge.js +8 -0
- package/dist/pi-extensions/system-prompt-entry.d.ts +15 -0
- package/dist/pi-extensions/system-prompt-entry.js +1 -0
- package/dist/prompts/review.d.ts +2 -0
- package/dist/prompts/review.js +110 -0
- package/dist/shared/crtr-version.d.ts +2 -0
- package/dist/shared/crtr-version.js +1 -0
- package/dist/shared/env.d.ts +116 -0
- package/dist/shared/env.js +2 -0
- package/dist/shared/generated-context.d.ts +83 -0
- package/dist/shared/generated-context.js +8 -0
- package/dist/shared/inbox-entry-body.d.ts +22 -0
- package/dist/shared/inbox-entry-body.js +10 -0
- package/dist/shared/inline-ref-grammar.d.ts +53 -0
- package/dist/shared/inline-ref-grammar.js +1 -0
- package/dist/shared/inline-ref-guidance.d.ts +8 -0
- package/dist/shared/inline-ref-guidance.js +2 -0
- package/dist/shared/predicates.d.ts +2 -0
- package/dist/shared/predicates.js +1 -0
- package/dist/shared/shell-quote.d.ts +3 -0
- package/dist/shared/shell-quote.js +1 -0
- package/dist/shared/strip-cd-prefix.d.ts +1 -0
- package/dist/shared/strip-cd-prefix.js +1 -0
- package/dist/shared/tool-groups.d.ts +26 -0
- package/dist/shared/tool-groups.js +1 -0
- package/dist/shared/working-activity.d.ts +9 -0
- package/dist/shared/working-activity.js +1 -0
- package/dist/suppress-experimental-warnings.d.ts +1 -0
- package/dist/suppress-experimental-warnings.js +1 -0
- package/dist/types.d.ts +562 -0
- package/dist/types.js +1 -0
- package/docs/cli/README.md +17 -0
- package/docs/cli/canvas-and-dashboard.md +56 -0
- package/docs/cli/documents-and-preferences.md +52 -0
- package/docs/cli/first-session.md +76 -0
- package/docs/cli/human-inbox.md +34 -0
- package/docs/cli/official-marketplace.md +75 -0
- package/docs/cli/the-viewer.md +80 -0
- package/docs/concepts/README.md +17 -0
- package/docs/concepts/documents.md +52 -0
- package/docs/concepts/lifecycle-and-wakes.md +26 -0
- package/docs/concepts/nodes-and-the-canvas.md +29 -0
- package/docs/concepts/profiles-kinds-and-modes.md +31 -0
- package/docs/concepts/scopes-and-trust.md +39 -0
- package/docs/concepts/why-a-daemon.md +29 -0
- package/docs/plugin/README.md +20 -0
- package/docs/plugin/bundles-and-memory.md +28 -0
- package/docs/plugin/commands.md +22 -0
- package/docs/plugin/deploying.md +34 -0
- package/docs/plugin/errors.md +39 -0
- package/docs/plugin/getting-started.md +23 -0
- package/docs/plugin/output.md +51 -0
- package/docs/plugin/parameters.md +29 -0
- package/docs/public-api.md +75 -0
- package/docs/release-local.md +8 -0
- package/docs/sdk/README.md +90 -0
- package/docs/sdk/bash.md +39 -0
- package/docs/sdk/client.md +297 -0
- package/docs/sdk/docker.md +68 -0
- package/docs/sdk/error-envelope.md +36 -0
- package/docs/sdk/errors.md +111 -0
- package/docs/sdk/files.md +49 -0
- package/docs/sdk/getting-started.md +224 -0
- package/docs/sdk/guides/README.md +19 -0
- package/docs/sdk/guides/apps-on-crouter-cloud.md +115 -0
- package/docs/sdk/guides/apps-with-many-users.md +59 -0
- package/docs/sdk/guides/event-driven-assistant.md +24 -0
- package/docs/sdk/guides/fan-out-pipeline.md +24 -0
- package/docs/sdk/guides/human-approval.md +24 -0
- package/docs/sdk/guides/typed-extraction.md +24 -0
- package/docs/sdk/memory.md +47 -0
- package/docs/sdk/nodes.md +194 -0
- package/docs/sdk/release-notes.md +207 -0
- package/docs/sdk/resources.md +99 -0
- package/docs/sdk/streaming.md +216 -0
- package/docs/sdk/testing.md +163 -0
- package/package.json +160 -4
- package/packages/crouter-identity/dist/index.d.ts +107 -0
- package/packages/crouter-identity/dist/index.js +226 -0
- package/packages/crouter-identity/package.json +33 -0
- package/runtime.lock.json +13864 -0
- package/scripts/build-native-linux.mjs +35 -0
- package/scripts/ensure-native-linux.mjs +72 -0
- package/scripts/install-runtime.mjs +614 -0
- package/scripts/lib/isolation-env.mjs +48 -0
- package/scripts/lib/pack-args.mjs +19 -0
- package/scripts/lib/runtime-deps-key.mjs +50 -0
- package/scripts/lib/update-target.mjs +78 -0
- package/scripts/pack-minify.mjs +114 -0
- package/scripts/patch-pi-tree-root-ordering.mjs +57 -0
- package/scripts/postinstall.mjs +55 -0
- package/scripts/runtime-lock.mjs +26 -0
- package/scripts/runtime-smoke.mjs +54 -0
- package/scripts/self-update.mjs +45 -0
- package/src/native/linux/addon.c +255 -0
|
@@ -0,0 +1,1409 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';
|
|
3
|
+
import {
|
|
4
|
+
createAssistantMessageEventStream,
|
|
5
|
+
type AssistantMessage,
|
|
6
|
+
type AssistantMessageEventStream,
|
|
7
|
+
type AuthEvent,
|
|
8
|
+
type AuthPrompt,
|
|
9
|
+
type TranscriptContext,
|
|
10
|
+
type FetchFunction,
|
|
11
|
+
type Model,
|
|
12
|
+
type OAuthAuth,
|
|
13
|
+
type SimpleStreamOptions,
|
|
14
|
+
} from '@earendil-works/pi-ai';
|
|
15
|
+
import { anthropicMessagesApi, openAICodexResponsesApi, openAIResponsesApi } from '@earendil-works/pi-ai/compat';
|
|
16
|
+
import {
|
|
17
|
+
ANTHROPIC_PROVIDER_ID,
|
|
18
|
+
OPENAI_CHATGPT_PROVIDER_ID,
|
|
19
|
+
OPENAI_CODEX_PROVIDER_ID,
|
|
20
|
+
INVALID_REFRESH_TOKEN_BACKOFF_MS,
|
|
21
|
+
openAIDeviceId,
|
|
22
|
+
coolingUntilFor,
|
|
23
|
+
formatCooldowns,
|
|
24
|
+
formatStatusLine,
|
|
25
|
+
getProviderLabel,
|
|
26
|
+
isManagedProvider,
|
|
27
|
+
isInvalidRefreshTokenError,
|
|
28
|
+
addSubscription,
|
|
29
|
+
enrichManagedLoginIdentity,
|
|
30
|
+
markSubscriptionAuthenticationFailed,
|
|
31
|
+
markSubscriptionRateLimited,
|
|
32
|
+
markSubscriptionSuccess,
|
|
33
|
+
retryAfterMsFromHeaders,
|
|
34
|
+
retryAfterMsFromError,
|
|
35
|
+
promoteSubscription,
|
|
36
|
+
readRotationConfig,
|
|
37
|
+
readSubscriptionPool,
|
|
38
|
+
refreshSubscriptionCredential,
|
|
39
|
+
removeManagedAccount,
|
|
40
|
+
resolveProviderCandidates,
|
|
41
|
+
upsertSubscriptionWithUniqueAccount,
|
|
42
|
+
type ManagedProviderId,
|
|
43
|
+
type SubscriptionCredential,
|
|
44
|
+
subscriptionNeedsSuccessWrite,
|
|
45
|
+
} from '../../../core/subscription-state.js';
|
|
46
|
+
import { classifyRateLimit, describeRateLimitScope, rateLimitHeaders, type RateLimitObservation } from '../../../core/rate-limit-scope.js';
|
|
47
|
+
import { readMergedLaunchConfig, type MergedLaunchConfig } from '../../../core/config.js';
|
|
48
|
+
import type { ProviderOptionsConfig } from '../../../types.js';
|
|
49
|
+
import { expandModelCandidates, modelRequestFromConfig, probeRouteAvailability } from '../../../core/model-routes.js';
|
|
50
|
+
import { envModelExact, envNodeId } from '../../../shared/env.js';
|
|
51
|
+
import { ManagedProviderCoolingError } from '../../../core/runtime/managed-provider-cooling.js';
|
|
52
|
+
import { recordBrokerTurn } from '../../../core/runtime/broker/daemon-ops.js';
|
|
53
|
+
import { recognizeProviderError, type ProviderErrorSignal } from '../../../core/provider-error-recognition.js';
|
|
54
|
+
import { normalizeProviderFailure, providerFailureDiagnostic, type NormalizedProviderFailure } from '../../../core/provider-failure.js';
|
|
55
|
+
|
|
56
|
+
// A response without Retry-After proves only that THIS attempt was throttled; it
|
|
57
|
+
// does not authorize crouter to invent a five-minute provider-wide outage. Keep
|
|
58
|
+
// a short turn-local probe backoff to avoid an immediate retry loop, then let a
|
|
59
|
+
// fresh turn prove whether the credential is usable again. Real
|
|
60
|
+
// server-provided Retry-After deadlines are still honored exactly.
|
|
61
|
+
const DEFAULT_RATE_LIMIT_BACKOFF_MS = 15 * 1000;
|
|
62
|
+
// Short in-place retry budget for a transient network/5xx blip on the same credential.
|
|
63
|
+
// Once this budget is exhausted, surface the error and rotate to another candidate.
|
|
64
|
+
const TRANSIENT_RETRY_BACKOFFS_MS = [250, 750];
|
|
65
|
+
// After the in-place transient retry budget is exhausted, rotate instead of failing: the
|
|
66
|
+
// credential itself is probably healthy (this is a provider-side blip like "overloaded"),
|
|
67
|
+
// so cool it down only briefly -- long enough to rotate to another credential / fallback
|
|
68
|
+
// provider, short enough that it comes back quickly if it was the only option.
|
|
69
|
+
const TRANSIENT_ROTATE_COOLDOWN_MS = 60 * 1000;
|
|
70
|
+
// A 401/403 before any content means the provider refused this credential (a lapsed
|
|
71
|
+
// plan, a revoked server-side key). That is not a transient blip, but it is not proof
|
|
72
|
+
// the account is gone either: cool the account for 30 minutes and rotate, rather than
|
|
73
|
+
// the 30-day invalid_grant backoff. Exact requests keep the auth error.
|
|
74
|
+
const AUTH_REJECTED_COOLDOWN_MS = 30 * 60 * 1000;
|
|
75
|
+
// A few short outer retries absorb a normal multi-broker collision; if the metadata file
|
|
76
|
+
// remains busy, the provider call still proceeds. Subscription bookkeeping must never turn a
|
|
77
|
+
// healthy model response into a fatal generation fault.
|
|
78
|
+
const SUBSCRIPTION_LOCK_RETRY_BACKOFFS_MS = [25, 75, 150];
|
|
79
|
+
|
|
80
|
+
// A declared non-managed provider is re-registered with the route driver at
|
|
81
|
+
// session start, after its owning extension has registered its real transport.
|
|
82
|
+
// Keep that composed transport here: calling the registry after our wrapper is
|
|
83
|
+
// installed would recurse back into the route driver.
|
|
84
|
+
type ProviderStream = (model: Model<any>, context: TranscriptContext, options?: SimpleStreamOptions) => AssistantMessageEventStream;
|
|
85
|
+
|
|
86
|
+
const { streamSimple: streamAnthropicMessages } = anthropicMessagesApi();
|
|
87
|
+
const { streamSimple: streamOpenAICodexResponses } = openAICodexResponsesApi();
|
|
88
|
+
const { streamSimple: streamOpenAIResponses } = openAIResponsesApi();
|
|
89
|
+
|
|
90
|
+
export interface ProviderRotationOptions {
|
|
91
|
+
modelIntent?: string;
|
|
92
|
+
nodeCwd?: string;
|
|
93
|
+
profileId?: string;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
type ProviderRotationState = {
|
|
97
|
+
runtimeContext?: ExtensionContext;
|
|
98
|
+
extensionAPI?: ExtensionAPI;
|
|
99
|
+
delegatedProviderStreams: Map<string, ProviderStream>;
|
|
100
|
+
options?: Readonly<ProviderRotationOptions>;
|
|
101
|
+
/** Per-provider behavior options from merged config, refreshed at session
|
|
102
|
+
* start and before every agent turn so a settings toggle reaches a broker
|
|
103
|
+
* that is already live. */
|
|
104
|
+
providerOptions?: Record<string, ProviderOptionsConfig>;
|
|
105
|
+
/** Consecutive route-queue passes that exhausted every route without a single
|
|
106
|
+
* HTTP response — the poisoned-process signature counted across turns. */
|
|
107
|
+
transportOnlyExhaustedPasses: number;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
function createProviderRotationState(options?: ProviderRotationOptions): ProviderRotationState {
|
|
111
|
+
return { delegatedProviderStreams: new Map(), transportOnlyExhaustedPasses: 0, ...(options === undefined ? {} : { options: { ...options } }) };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function configuredValue(state: ProviderRotationState, key: keyof ProviderRotationOptions, envName: string): string | undefined {
|
|
115
|
+
return state.options === undefined ? process.env[envName] : state.options[key];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function isExactModel(state: ProviderRotationState): boolean {
|
|
119
|
+
return state.options === undefined && envModelExact();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
type AttemptResult = {
|
|
123
|
+
result: "success" | "rate_limited" | "transient_exhausted" | "fatal";
|
|
124
|
+
retryAfterMs?: number;
|
|
125
|
+
attemptAt: number;
|
|
126
|
+
attempts?: number;
|
|
127
|
+
classification?: ProviderErrorClassification;
|
|
128
|
+
failure?: NormalizedProviderFailure;
|
|
129
|
+
failureMessage?: string;
|
|
130
|
+
/** The 429's rate-limit headers classified for the attempted model: which scope (account or model family) to cool. */
|
|
131
|
+
rateLimit?: RateLimitObservation;
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// A genuine rate limit (HTTP 429, or 503 with a real Retry-After header) must
|
|
135
|
+
// cool the credential down and rotate to the next one; a transient network/5xx blip
|
|
136
|
+
// (connection reset, socket errors, timeouts, plain 500/502/504, or 503 with NO
|
|
137
|
+
// retry-after) is not evidence the credential itself is bad -- it gets a short in-place
|
|
138
|
+
// retry on the same credential, never a cooldown. Everything else is fatal. Bare
|
|
139
|
+
// `usage`/`quota` substrings stay out of the message match: they are false-positive
|
|
140
|
+
// magnets (e.g. "usage" appears in normal assistant text), while the precise
|
|
141
|
+
// terminal usage-limit signals above still cool the credential down and rotate to the
|
|
142
|
+
// next one. A status 401/403 rotates with AUTH_REJECTED_COOLDOWN_MS unless the request
|
|
143
|
+
// is exact.
|
|
144
|
+
type ProviderErrorClassification = {
|
|
145
|
+
kind: "rate_limit" | "transient" | "fatal";
|
|
146
|
+
status?: number;
|
|
147
|
+
reason: string;
|
|
148
|
+
hadRetryAfterHeader: boolean;
|
|
149
|
+
/** Cooldown this classification imposes regardless of any Retry-After header. */
|
|
150
|
+
cooldownMs?: number;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
type ProviderClassificationPolicy = { rotateOnAuth: boolean };
|
|
154
|
+
|
|
155
|
+
function classifyProviderSignal(signal: ProviderErrorSignal, policy: ProviderClassificationPolicy): ProviderErrorClassification {
|
|
156
|
+
const hadRetryAfterHeader = signal.retryAfterMs !== undefined;
|
|
157
|
+
if (signal.kind === 'rate-limit' && signal.matchedOn === 'status') {
|
|
158
|
+
return { kind: 'rate_limit', status: signal.status, reason: 'http 429', hadRetryAfterHeader };
|
|
159
|
+
}
|
|
160
|
+
if (signal.kind === 'transient-http') {
|
|
161
|
+
if (signal.status === 503 && hadRetryAfterHeader) {
|
|
162
|
+
return { kind: 'rate_limit', status: signal.status, reason: 'http 503 with retry-after', hadRetryAfterHeader };
|
|
163
|
+
}
|
|
164
|
+
return { kind: 'transient', status: signal.status, reason: `http ${signal.status}`, hadRetryAfterHeader };
|
|
165
|
+
}
|
|
166
|
+
const textMatches = signal.textMatches ?? (signal.matchedOn === 'text' && signal.match ? [{ kind: signal.kind, match: signal.match }] : []);
|
|
167
|
+
if (policy.rotateOnAuth && signal.kind === 'auth' && signal.matchedOn === 'status' && !textMatches.some(({ kind }) => kind === 'rate-limit')) {
|
|
168
|
+
return { kind: 'rate_limit', status: signal.status, reason: `http ${signal.status}`, hadRetryAfterHeader, cooldownMs: AUTH_REJECTED_COOLDOWN_MS };
|
|
169
|
+
}
|
|
170
|
+
const transientMatch = textMatches.find(({ kind }) => kind === 'connection' || kind === 'socket' || kind === 'service-unavailable' || kind === 'overloaded');
|
|
171
|
+
if (transientMatch) {
|
|
172
|
+
return { kind: 'transient', status: signal.status, reason: transientMatch.match.toLowerCase(), hadRetryAfterHeader };
|
|
173
|
+
}
|
|
174
|
+
const rateLimitMatch = textMatches.find(({ kind }) => kind === 'rate-limit');
|
|
175
|
+
if (rateLimitMatch) {
|
|
176
|
+
return { kind: 'rate_limit', status: signal.status, reason: rateLimitMatch.match.toLowerCase(), hadRetryAfterHeader };
|
|
177
|
+
}
|
|
178
|
+
return { kind: 'fatal', status: signal.status, reason: 'unclassified', hadRetryAfterHeader };
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function classifyProviderFailure(failure: NormalizedProviderFailure, retryAfterMs: number | undefined, policy: ProviderClassificationPolicy): ProviderErrorClassification {
|
|
182
|
+
const nested = failure.causes ?? [];
|
|
183
|
+
const code = failure.code ?? nested.find((cause) => cause.code !== undefined)?.code;
|
|
184
|
+
const errno = failure.errno ?? nested.find((cause) => cause.errno !== undefined)?.errno;
|
|
185
|
+
const message = [failure.message, failure.body, ...nested.flatMap((cause) => [cause.message, cause.body])]
|
|
186
|
+
.filter((part): part is string => typeof part === 'string' && part.length > 0)
|
|
187
|
+
.join(' ');
|
|
188
|
+
return classifyProviderSignal(recognizeProviderError({
|
|
189
|
+
status: failure.status,
|
|
190
|
+
retryAfterMs,
|
|
191
|
+
code,
|
|
192
|
+
errno,
|
|
193
|
+
message,
|
|
194
|
+
}), policy);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** Test seam for the policy mapping over the shared recognition signal. */
|
|
198
|
+
export function __classifyProviderErrorForTest(
|
|
199
|
+
error: unknown,
|
|
200
|
+
observed: { status?: number; retryAfterMs?: number } = {},
|
|
201
|
+
policy: ProviderClassificationPolicy = { rotateOnAuth: false },
|
|
202
|
+
): ProviderErrorClassification {
|
|
203
|
+
return classifyProviderFailure(normalizeProviderFailure(error, { status: observed.status }), observed.retryAfterMs, policy);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function providerFailureAssistantMessage(model: Model<any>, failure: NormalizedProviderFailure): AssistantMessage {
|
|
207
|
+
const message = toAssistantError(model, failure.message);
|
|
208
|
+
message.diagnostics = [providerFailureDiagnostic(failure)];
|
|
209
|
+
return message;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
async function defaultSleep(ms: number): Promise<void> {
|
|
213
|
+
await new Promise<void>((resolve) => setTimeout(resolve, ms));
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Indirection so tests can inject deterministic waits without real timers.
|
|
217
|
+
let activeSleep: typeof defaultSleep = defaultSleep;
|
|
218
|
+
|
|
219
|
+
/** Test-only seam: override the sleep implementation used for in-place/wait-out retries. Pass undefined to restore the default. */
|
|
220
|
+
export function __setSleepForTest(fn: typeof defaultSleep | undefined): void {
|
|
221
|
+
activeSleep = fn ?? defaultSleep;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// After this many CONSECUTIVE route-queue passes in which every failure was
|
|
225
|
+
// transport-level (no HTTP status and no Retry-After header — the provider was
|
|
226
|
+
// never reached at all), the broker process itself is presumed poisoned: a
|
|
227
|
+
// corrupted large TLS upload can leave Node/undici's HTTP/2 session permanently
|
|
228
|
+
// destroyed, after which EVERY provider request from this process fails while
|
|
229
|
+
// curl and fresh processes on the same host succeed. There is no clean in-process
|
|
230
|
+
// heal (the dispatcher cannot be safely re-instantiated), so the recovery is a
|
|
231
|
+
// fresh process: self-terminate via SIGTERM and let the daemon's exit policy
|
|
232
|
+
// respawn this broker against the same session. A genuine full network outage
|
|
233
|
+
// trips this too, and a fresh process cannot heal that one — so the daemon's
|
|
234
|
+
// respawn path probes network reachability before it counts a relaunch, and an
|
|
235
|
+
// offline box parks the node until the network returns instead of spending its
|
|
236
|
+
// respawn budget (daemon/fleet.ts, `deferRespawnWhileOffline`).
|
|
237
|
+
export const POISONED_TRANSPORT_PASS_LIMIT = 2;
|
|
238
|
+
|
|
239
|
+
async function defaultTerminatePoisonedProcess(tried: string): Promise<boolean> {
|
|
240
|
+
// Only the broker process itself may self-terminate: runBroker stamps
|
|
241
|
+
// CRTR_BROKER_PID with its own pid at boot. Any other host (tests, tooling)
|
|
242
|
+
// keeps the ordinary terminal-error path.
|
|
243
|
+
if (process.env["CRTR_BROKER_PID"] !== String(process.pid)) return false;
|
|
244
|
+
const routes = tried.split(', ').filter((route) => route !== '');
|
|
245
|
+
const nodeId = envNodeId();
|
|
246
|
+
if (nodeId === undefined || routes.length === 0) {
|
|
247
|
+
throw new Error('poisoned broker is missing CRTR_NODE_ID or attempted routes');
|
|
248
|
+
}
|
|
249
|
+
await recordBrokerTurn(nodeId, {
|
|
250
|
+
event: 'exit-diagnostic',
|
|
251
|
+
exit_diagnostic: {
|
|
252
|
+
schema: 'crtr.execution-exit-diagnostic/v1',
|
|
253
|
+
transport_poison: { consecutive_passes: POISONED_TRANSPORT_PASS_LIMIT, routes },
|
|
254
|
+
},
|
|
255
|
+
});
|
|
256
|
+
logRotation(
|
|
257
|
+
`process transport poisoned: ${POISONED_TRANSPORT_PASS_LIMIT} consecutive route-queue passes failed with no HTTP response (tried ${tried}); exiting so the daemon respawns this broker fresh`,
|
|
258
|
+
);
|
|
259
|
+
process.kill(process.pid, "SIGTERM");
|
|
260
|
+
return true;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
let activeTerminatePoisonedProcess = defaultTerminatePoisonedProcess;
|
|
264
|
+
|
|
265
|
+
/** Test-only seam: override poisoned-process self-termination. Pass undefined to restore the default. */
|
|
266
|
+
export function __setTerminatePoisonedProcessForTest(fn: typeof defaultTerminatePoisonedProcess | undefined): void {
|
|
267
|
+
activeTerminatePoisonedProcess = fn ?? defaultTerminatePoisonedProcess;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function isSubscriptionLockContention(error: unknown): boolean {
|
|
271
|
+
const value = error as { code?: unknown; message?: unknown } | undefined;
|
|
272
|
+
return value?.code === "ELOCKED" || (typeof value?.message === "string" && /lock file is already being held/i.test(value.message));
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
async function recordSubscriptionMutation(description: string, mutate: () => Promise<unknown>): Promise<boolean> {
|
|
276
|
+
for (let attempt = 0; ; attempt++) {
|
|
277
|
+
try {
|
|
278
|
+
await mutate();
|
|
279
|
+
return true;
|
|
280
|
+
} catch (error) {
|
|
281
|
+
if (!isSubscriptionLockContention(error)) throw error;
|
|
282
|
+
const backoffMs = SUBSCRIPTION_LOCK_RETRY_BACKOFFS_MS[attempt];
|
|
283
|
+
if (backoffMs === undefined) {
|
|
284
|
+
logRotation(`subscription metadata lock remained busy while ${description}; continuing without failing the provider turn`);
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
await activeSleep(backoffMs);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/** Test-only seam for the bounded, non-fatal subscription bookkeeping path. */
|
|
293
|
+
export async function __recordSubscriptionMutationForTest(description: string, mutate: () => Promise<unknown>): Promise<boolean> {
|
|
294
|
+
return recordSubscriptionMutation(description, mutate);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// A user/host abort (ESC, a critical-tier interrupt, a torn-down window) is NOT a provider
|
|
298
|
+
// failure — it must never cool down a credential or rotate providers. The upstream pi-ai
|
|
299
|
+
// providers set `reason: "aborted"` / `stopReason: "aborted"` (and throw "Request was aborted")
|
|
300
|
+
// ONLY when the request's AbortSignal fired, so those markers alone are a reliable abort
|
|
301
|
+
// signal; we do NOT require the signal to be threaded back through our own options (it may not
|
|
302
|
+
// be), which is what made an ESC drain both provider pools.
|
|
303
|
+
function isUserAbortEvent(event: Parameters<AssistantMessageEventStream["push"]>[0], signal: AbortSignal | undefined): boolean {
|
|
304
|
+
if (signal?.aborted) return true;
|
|
305
|
+
if (event.type !== "error") return false;
|
|
306
|
+
return event.reason === "aborted" || event.error.stopReason === "aborted" || /request was aborted/i.test(event.error.errorMessage ?? "");
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
function isUserAbortError(error: unknown, signal: AbortSignal | undefined): boolean {
|
|
310
|
+
if (signal?.aborted) return true;
|
|
311
|
+
const value = error as { name?: unknown; errorMessage?: unknown; message?: unknown } | undefined;
|
|
312
|
+
const message = [value?.errorMessage, value?.message, error instanceof Error ? error.message : String(error ?? "")]
|
|
313
|
+
.filter((part): part is string => typeof part === "string" && part.length > 0)
|
|
314
|
+
.join(" ");
|
|
315
|
+
return (error instanceof Error && /abort/i.test(error.name)) || /request was aborted|operation was aborted|the user aborted/i.test(message);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
function setStatus(state: ProviderRotationState, text: string): void {
|
|
319
|
+
state.runtimeContext?.ui.setStatus("provider-rotation", text);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
function logRotation(message: string): void {
|
|
323
|
+
process.stderr.write(`[provider-rotation] ${message}\n`);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
function getCurrentModelRef(model?: Model<any>): { providerId: ManagedProviderId; modelId: string } | undefined {
|
|
327
|
+
return isManagedProvider(model?.provider) ? { providerId: model.provider, modelId: model.id } : undefined;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function toAssistantError(model: Model<any>, errorMessage: string): AssistantMessage {
|
|
331
|
+
return {
|
|
332
|
+
role: "assistant",
|
|
333
|
+
content: [],
|
|
334
|
+
api: model.api,
|
|
335
|
+
provider: model.provider,
|
|
336
|
+
model: model.id,
|
|
337
|
+
usage: {
|
|
338
|
+
input: 0,
|
|
339
|
+
output: 0,
|
|
340
|
+
cacheRead: 0,
|
|
341
|
+
cacheWrite: 0,
|
|
342
|
+
totalTokens: 0,
|
|
343
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
|
|
344
|
+
},
|
|
345
|
+
stopReason: "error",
|
|
346
|
+
errorMessage,
|
|
347
|
+
timestamp: Date.now(),
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// ChatGPT (`openai`) credentials also carry the per-login issued OAuth `clientId`, which its
|
|
352
|
+
// refresh requires and may rotate.
|
|
353
|
+
type RefreshedCredential = { refresh: string; access: string; expires: number; clientId?: string };
|
|
354
|
+
// Codex login carries the ChatGPT `accountId`; Anthropic identity is enriched from its OAuth
|
|
355
|
+
// profile after login. Optional so every provider and the test seam fit.
|
|
356
|
+
type LoginCredential = { refresh: string; access: string; expires: number; accountId?: string; clientId?: string };
|
|
357
|
+
|
|
358
|
+
function loginClientId(cred: { clientId?: unknown }): string | undefined {
|
|
359
|
+
return typeof cred.clientId === "string" && cred.clientId.trim() ? cred.clientId.trim() : undefined;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Extract an account identity supplied directly by the OAuth credential.
|
|
363
|
+
function loginAccountId(cred: { accountId?: unknown }): string | undefined {
|
|
364
|
+
return typeof cred.accountId === "string" && cred.accountId.trim() ? cred.accountId.trim() : undefined;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// Short, display-only rendering of a Codex account id for `/provider-sub list`, so distinct
|
|
368
|
+
// accounts are observable without dumping the full opaque id.
|
|
369
|
+
function shortAccountId(accountId: string): string {
|
|
370
|
+
return accountId.length > 12 ? `${accountId.slice(0, 8)}\u2026${accountId.slice(-4)}` : accountId;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// A credential that has been through refresh/reauth for this turn: `.access` is guaranteed
|
|
374
|
+
// populated. Every account stores its own value in the pool, so downstream stream-attempt code
|
|
375
|
+
// can rely on `.access` directly.
|
|
376
|
+
type ResolvedCredential = SubscriptionCredential & { access: string };
|
|
377
|
+
|
|
378
|
+
// The registered provider exposes its OAuth flow through `provider.auth.oauth`. Composed managed
|
|
379
|
+
// providers retain that flow, so the session registry supplies the Anthropic and Codex flows.
|
|
380
|
+
function oauthFlow(providerId: ManagedProviderId, ctx: ExtensionContext | undefined): OAuthAuth {
|
|
381
|
+
const oauth = ctx?.modelRegistry.getProvider(providerId)?.auth.oauth;
|
|
382
|
+
if (!oauth) throw new Error(`${getProviderLabel(providerId)} has no OAuth flow registered`);
|
|
383
|
+
return oauth;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// `refresh` is a pure token exchange that reads only `credential.refresh` and persists
|
|
387
|
+
// nothing; crouter records the rotated token in the selected pool row.
|
|
388
|
+
async function defaultRefreshForProvider(
|
|
389
|
+
state: ProviderRotationState,
|
|
390
|
+
providerId: ManagedProviderId,
|
|
391
|
+
refreshToken: string,
|
|
392
|
+
parentSignal?: AbortSignal,
|
|
393
|
+
clientId?: string,
|
|
394
|
+
): Promise<RefreshedCredential> {
|
|
395
|
+
const localController = parentSignal === undefined ? new AbortController() : undefined;
|
|
396
|
+
const signal = parentSignal ?? localController!.signal;
|
|
397
|
+
try {
|
|
398
|
+
const refreshed = await oauthFlow(providerId, state.runtimeContext).refresh({ type: "oauth", refresh: refreshToken, access: "", expires: 0, ...(clientId ? { clientId } : {}) }, signal);
|
|
399
|
+
const nextClientId = loginClientId(refreshed as { clientId?: unknown });
|
|
400
|
+
return { refresh: refreshed.refresh, access: refreshed.access, expires: refreshed.expires, ...(nextClientId ? { clientId: nextClientId } : {}) };
|
|
401
|
+
} finally {
|
|
402
|
+
localController?.abort();
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
type RefreshForProvider = (providerId: ManagedProviderId, refreshToken: string, signal?: AbortSignal, clientId?: string) => Promise<RefreshedCredential>;
|
|
407
|
+
|
|
408
|
+
// Indirection so tests can inject refresh failures without real network calls.
|
|
409
|
+
let activeRefreshForProvider: RefreshForProvider | undefined;
|
|
410
|
+
|
|
411
|
+
/** Test-only seam: override the per-provider refresh function. Pass undefined to restore the default. */
|
|
412
|
+
export function __setRefreshForProviderForTest(fn: RefreshForProvider | undefined): void {
|
|
413
|
+
activeRefreshForProvider = fn;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
function openBrowser(url: string): void {
|
|
417
|
+
const [cmd, args] =
|
|
418
|
+
process.platform === "darwin"
|
|
419
|
+
? ["open", [url]]
|
|
420
|
+
: process.platform === "win32"
|
|
421
|
+
? ["cmd", ["/c", "start", "", url]]
|
|
422
|
+
: ["xdg-open", [url]];
|
|
423
|
+
try {
|
|
424
|
+
const child = spawn(cmd, args, { stdio: "ignore", detached: true });
|
|
425
|
+
child.on("error", () => {
|
|
426
|
+
/* best effort -- the manual-code dialog's title carries the URL too */
|
|
427
|
+
});
|
|
428
|
+
child.unref();
|
|
429
|
+
} catch {
|
|
430
|
+
/* best effort */
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// Every account refreshes the same way: the pool holds its value, so an expired token is a
|
|
435
|
+
// token exchange serialized on the pool file's lock. A still-fresh access token takes the
|
|
436
|
+
// side-effect-free fast path and never joins the lock. We do NOT route through pi's public
|
|
437
|
+
// `getApiKey`, which wraps pi-ai's `getOAuthApiKey` and collapses a refresh failure into a
|
|
438
|
+
// generic message; calling `activeRefreshForProvider` directly keeps the real error intact so
|
|
439
|
+
// `isInvalidRefreshTokenError` can classify it (cooldown -> reauth -> cross-provider-fallback).
|
|
440
|
+
async function refreshCredentialIfNeeded(
|
|
441
|
+
state: ProviderRotationState,
|
|
442
|
+
providerId: ManagedProviderId,
|
|
443
|
+
credential: SubscriptionCredential,
|
|
444
|
+
signal?: AbortSignal,
|
|
445
|
+
): Promise<ResolvedCredential> {
|
|
446
|
+
if (!credential.refresh || !credential.access || credential.expires === undefined) {
|
|
447
|
+
throw new Error(`${getProviderLabel(providerId)} subscription "${credential.label}" is missing its credential value`);
|
|
448
|
+
}
|
|
449
|
+
if (credential.expires > Date.now()) return credential as ResolvedCredential;
|
|
450
|
+
const refreshed = await refreshSubscriptionCredential(providerId, credential.label, (token, clientId) =>
|
|
451
|
+
activeRefreshForProvider?.(providerId, token, signal, clientId) ?? defaultRefreshForProvider(state, providerId, token, signal, clientId),
|
|
452
|
+
);
|
|
453
|
+
return { ...credential, ...refreshed } as ResolvedCredential;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/** Test-only seam: exercises the real `refreshCredentialIfNeeded` (including its locked refresh
|
|
457
|
+
* transaction) without duplicating its logic. */
|
|
458
|
+
export async function __refreshCredentialIfNeededForTest(
|
|
459
|
+
providerId: ManagedProviderId,
|
|
460
|
+
credential: SubscriptionCredential,
|
|
461
|
+
signal?: AbortSignal,
|
|
462
|
+
): Promise<ResolvedCredential> {
|
|
463
|
+
return refreshCredentialIfNeeded(createProviderRotationState(), providerId, credential, signal);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
async function defaultLoginForProvider(providerId: ManagedProviderId, ctx: ExtensionContext): Promise<LoginCredential> {
|
|
467
|
+
return loginProvider(providerId, ctx);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
let activeLoginForProvider: typeof defaultLoginForProvider = defaultLoginForProvider;
|
|
471
|
+
|
|
472
|
+
/** Test-only seam: override the per-provider login function. Pass undefined to restore the default. */
|
|
473
|
+
export function __setLoginForProviderForTest(fn: typeof defaultLoginForProvider | undefined): void {
|
|
474
|
+
activeLoginForProvider = fn ?? defaultLoginForProvider;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
async function reauthenticateCredential(state: ProviderRotationState, providerId: ManagedProviderId, credential: SubscriptionCredential): Promise<ResolvedCredential | undefined> {
|
|
478
|
+
const ctx = state.runtimeContext;
|
|
479
|
+
if (!ctx?.hasUI) return undefined;
|
|
480
|
+
ctx.ui.notify(`${getProviderLabel(providerId)} subscription "${credential.label}" needs re-authentication. Opening OAuth login...`, "warning");
|
|
481
|
+
const authenticated = await activeLoginForProvider(providerId, ctx);
|
|
482
|
+
const identity = await enrichManagedLoginIdentity(providerId, authenticated);
|
|
483
|
+
// A failed Anthropic profile lookup leaves identity unknown. Do not carry the old row's identity
|
|
484
|
+
// onto newly issued tokens: it could describe a different account and bypass that account's
|
|
485
|
+
// duplicate check. Codex supplies its identity directly, so it can retain its existing claim
|
|
486
|
+
// only when that provider's login result omits one.
|
|
487
|
+
const reauthedAccountId =
|
|
488
|
+
identity.accountId ?? (providerId === ANTHROPIC_PROVIDER_ID ? undefined : loginAccountId(authenticated) ?? credential.accountId);
|
|
489
|
+
const { authFailure: _authFailure, clientId: _oldClientId, ...healthyCredential } = credential;
|
|
490
|
+
const reauthedClientId = loginClientId(authenticated);
|
|
491
|
+
const next: SubscriptionCredential = {
|
|
492
|
+
...healthyCredential,
|
|
493
|
+
refresh: authenticated.refresh,
|
|
494
|
+
access: authenticated.access,
|
|
495
|
+
expires: authenticated.expires,
|
|
496
|
+
...(reauthedAccountId ? { accountId: reauthedAccountId } : {}),
|
|
497
|
+
...(reauthedClientId ? { clientId: reauthedClientId } : {}),
|
|
498
|
+
rateLimitedUntil: 0,
|
|
499
|
+
lastAttemptAt: Date.now(),
|
|
500
|
+
lastRateLimitedAt: credential.lastRateLimitedAt,
|
|
501
|
+
};
|
|
502
|
+
// Identity-checked upsert: reauthenticating this explicit slot into an account already held by
|
|
503
|
+
// ANOTHER slot throws DuplicateSubscriptionError rather than creating a duplicate quota entry.
|
|
504
|
+
return ((await upsertSubscriptionWithUniqueAccount(providerId, next)).find((entry) => entry.label === next.label) ?? next) as ResolvedCredential;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
function defaultStreamForProvider(model: Model<any>, context: TranscriptContext, options: SimpleStreamOptions | undefined): AssistantMessageEventStream {
|
|
508
|
+
if (model.provider === ANTHROPIC_PROVIDER_ID) {
|
|
509
|
+
return streamAnthropicMessages(model as Model<"anthropic-messages">, context, options);
|
|
510
|
+
}
|
|
511
|
+
if (model.provider === OPENAI_CHATGPT_PROVIDER_ID) {
|
|
512
|
+
return streamOpenAIResponses(model as Model<"openai-responses">, context, options);
|
|
513
|
+
}
|
|
514
|
+
return streamOpenAICodexResponses(model as Model<"openai-codex-responses">, context, options);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
// Indirection so tests can inject a fake per-provider stream without real network calls.
|
|
518
|
+
let activeStreamForProvider: typeof defaultStreamForProvider = defaultStreamForProvider;
|
|
519
|
+
|
|
520
|
+
function streamForProvider(model: Model<any>, context: TranscriptContext, options: SimpleStreamOptions | undefined): AssistantMessageEventStream {
|
|
521
|
+
return activeStreamForProvider(model, context, options);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
const ANTHROPIC_SERVER_SIDE_FALLBACK_BETA = "server-side-fallback-2026-07-01";
|
|
525
|
+
const ANTHROPIC_SERVER_SIDE_FALLBACK_PRIMARY_MODELS = new Set(["claude-fable-5", "claude-opus-5"]);
|
|
526
|
+
|
|
527
|
+
function supportsAnthropicServerSideFallback(model: Model<any>): boolean {
|
|
528
|
+
return ANTHROPIC_SERVER_SIDE_FALLBACK_PRIMARY_MODELS.has(model.id);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
function includesAnthropicBetaToken(value: string): boolean {
|
|
532
|
+
return value.split(",").some((token) => token.trim() === ANTHROPIC_SERVER_SIDE_FALLBACK_BETA);
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
function appendAnthropicFallbackBeta(headers: HeadersInit | undefined): HeadersInit {
|
|
536
|
+
if (headers instanceof Headers) {
|
|
537
|
+
const next = new Headers(headers);
|
|
538
|
+
const current = next.get("anthropic-beta");
|
|
539
|
+
if (current === null || !includesAnthropicBetaToken(current)) {
|
|
540
|
+
next.set("anthropic-beta", current === null ? ANTHROPIC_SERVER_SIDE_FALLBACK_BETA : `${current},${ANTHROPIC_SERVER_SIDE_FALLBACK_BETA}`);
|
|
541
|
+
}
|
|
542
|
+
return next;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
if (Array.isArray(headers)) {
|
|
546
|
+
const next = headers.map(([name, value]) => [name, value] as [string, string]);
|
|
547
|
+
const index = next.findIndex(([name]) => name.toLowerCase() === "anthropic-beta");
|
|
548
|
+
if (index === -1) next.push(["anthropic-beta", ANTHROPIC_SERVER_SIDE_FALLBACK_BETA]);
|
|
549
|
+
else if (!includesAnthropicBetaToken(next[index][1])) next[index][1] = `${next[index][1]},${ANTHROPIC_SERVER_SIDE_FALLBACK_BETA}`;
|
|
550
|
+
return next;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
const next = { ...(headers ?? {}) } as Record<string, string>;
|
|
554
|
+
const headerName = Object.keys(next).find((name) => name.toLowerCase() === "anthropic-beta");
|
|
555
|
+
if (headerName === undefined) next["anthropic-beta"] = ANTHROPIC_SERVER_SIDE_FALLBACK_BETA;
|
|
556
|
+
else if (!includesAnthropicBetaToken(next[headerName])) next[headerName] = `${next[headerName]},${ANTHROPIC_SERVER_SIDE_FALLBACK_BETA}`;
|
|
557
|
+
return next;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
function withAnthropicFallbackBeta(fetch: FetchFunction): FetchFunction {
|
|
561
|
+
return (input, init) => {
|
|
562
|
+
const headers = init?.headers ?? (input instanceof Request ? input.headers : undefined);
|
|
563
|
+
return fetch(input, { ...init, headers: appendAnthropicFallbackBeta(headers) });
|
|
564
|
+
};
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
/** Test-only seam: override the per-provider stream factory. Pass undefined to restore the default. */
|
|
568
|
+
export function __setStreamForProviderForTest(fn: typeof defaultStreamForProvider | undefined): void {
|
|
569
|
+
activeStreamForProvider = fn ?? defaultStreamForProvider;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
/** Test-only seam: exercise `fallbackRejectionHint` for one rejection discriminant
|
|
573
|
+
* (with an optional resolved-but-rejected candidate) without staging a full turn. */
|
|
574
|
+
// Drives one credential, retrying transient (non-rate-limit) failures in place on the
|
|
575
|
+
// same credential and reporting a classified result for rotation logging.
|
|
576
|
+
// A genuine rate limit ends the attempt immediately (the caller cools the credential down
|
|
577
|
+
// and rotates); a transient blip gets a short in-place retry budget before giving up.
|
|
578
|
+
async function streamProviderAttempt(
|
|
579
|
+
state: ProviderRotationState,
|
|
580
|
+
providerId: string,
|
|
581
|
+
model: Model<any>,
|
|
582
|
+
context: TranscriptContext,
|
|
583
|
+
options: SimpleStreamOptions | undefined,
|
|
584
|
+
credential: ResolvedCredential | undefined,
|
|
585
|
+
outer: AssistantMessageEventStream,
|
|
586
|
+
): Promise<AttemptResult> {
|
|
587
|
+
const policy: ProviderClassificationPolicy = { rotateOnAuth: !isExactModel(state) };
|
|
588
|
+
for (let attempt = 1; ; attempt++) {
|
|
589
|
+
const attemptAt = Date.now();
|
|
590
|
+
let observedStatus: number | undefined;
|
|
591
|
+
let requestedRetryAfterMs: number | undefined;
|
|
592
|
+
let limitHeaders: Record<string, string> | undefined;
|
|
593
|
+
const useAnthropicServerSideFallback =
|
|
594
|
+
credential !== undefined
|
|
595
|
+
&& providerId === ANTHROPIC_PROVIDER_ID
|
|
596
|
+
&& supportsAnthropicServerSideFallback(model);
|
|
597
|
+
const streamOptions = {
|
|
598
|
+
...options,
|
|
599
|
+
...(credential ? { apiKey: credential.access } : {}),
|
|
600
|
+
...(useAnthropicServerSideFallback
|
|
601
|
+
? {
|
|
602
|
+
onPayload: async (payload: unknown, payloadModel: Model<any>) => {
|
|
603
|
+
const callerPayload = await options?.onPayload?.(payload, payloadModel);
|
|
604
|
+
return { ...((callerPayload === undefined ? payload : callerPayload) as Record<string, unknown>), fallbacks: "default" };
|
|
605
|
+
},
|
|
606
|
+
// `headers` would overwrite pi-ai's OAuth beta list. Compose at fetch time so the
|
|
607
|
+
// SDK's generated headers stay intact; replace this shim with pi-ai's `fallbacks`
|
|
608
|
+
// option when that upstream option ships.
|
|
609
|
+
fetch: withAnthropicFallbackBeta(options?.fetch ?? globalThis.fetch),
|
|
610
|
+
}
|
|
611
|
+
: {}),
|
|
612
|
+
// Codex fast mode: the ChatGPT backend serves the turn at its priority
|
|
613
|
+
// tier. The wire value is `priority` (`fast` is rejected 400), and the
|
|
614
|
+
// response always echoes `service_tier: "default"` regardless — only
|
|
615
|
+
// generation timing shows whether it took effect.
|
|
616
|
+
...(providerId === OPENAI_CODEX_PROVIDER_ID && state.providerOptions?.[OPENAI_CODEX_PROVIDER_ID]?.fastMode === true
|
|
617
|
+
? {
|
|
618
|
+
onPayload: async (payload: unknown, payloadModel: Model<any>) => {
|
|
619
|
+
const callerPayload = await options?.onPayload?.(payload, payloadModel);
|
|
620
|
+
return { ...((callerPayload === undefined ? payload : callerPayload) as Record<string, unknown>), service_tier: "priority" };
|
|
621
|
+
},
|
|
622
|
+
}
|
|
623
|
+
: {}),
|
|
624
|
+
onResponse: async (response: { status: number; headers: Record<string, string> }, responseModel: Model<any>) => {
|
|
625
|
+
observedStatus = response.status;
|
|
626
|
+
if (response.status === 429 || response.status === 503) {
|
|
627
|
+
requestedRetryAfterMs = retryAfterMsFromHeaders(response.headers);
|
|
628
|
+
limitHeaders = rateLimitHeaders(response.headers);
|
|
629
|
+
}
|
|
630
|
+
await options?.onResponse?.(response as any, responseModel);
|
|
631
|
+
},
|
|
632
|
+
};
|
|
633
|
+
const provider = state.runtimeContext?.modelRegistry.getProvider?.(model.provider);
|
|
634
|
+
const inner = isManagedProvider(providerId)
|
|
635
|
+
? streamForProvider(model, context, streamOptions)
|
|
636
|
+
: state.delegatedProviderStreams.get(providerId)?.(model, context, streamOptions)
|
|
637
|
+
?? provider?.streamSimple(model, context, streamOptions)
|
|
638
|
+
?? streamForProvider(model, context, streamOptions);
|
|
639
|
+
|
|
640
|
+
const bufferedEvents: Parameters<AssistantMessageEventStream["push"]>[0][] = [];
|
|
641
|
+
let sawContent = false;
|
|
642
|
+
let committed = false;
|
|
643
|
+
let classification: ProviderErrorClassification | undefined;
|
|
644
|
+
let failure: NormalizedProviderFailure | undefined;
|
|
645
|
+
let failureMessage: string | undefined;
|
|
646
|
+
|
|
647
|
+
// Events are buffered ONLY until this attempt commits to the provider -- i.e. until the
|
|
648
|
+
// first real content event (thinking/text/toolcall) arrives, after which rotating away is
|
|
649
|
+
// no longer possible. Before commit the buffer lets a clean pre-content rate-limit rotate
|
|
650
|
+
// to another credential with nothing yet shown. Once committed we flush and forward every
|
|
651
|
+
// subsequent event LIVE, so viewers stream token-by-token instead of receiving the whole
|
|
652
|
+
// message at once when the turn finally completes.
|
|
653
|
+
const emit = (event: Parameters<AssistantMessageEventStream["push"]>[0]): void => {
|
|
654
|
+
if (committed) outer.push(event);
|
|
655
|
+
else bufferedEvents.push(event);
|
|
656
|
+
};
|
|
657
|
+
const flush = (): void => {
|
|
658
|
+
for (const event of bufferedEvents) outer.push(event);
|
|
659
|
+
bufferedEvents.length = 0;
|
|
660
|
+
committed = true;
|
|
661
|
+
};
|
|
662
|
+
|
|
663
|
+
try {
|
|
664
|
+
for await (const event of inner) {
|
|
665
|
+
if (event.type === "error") {
|
|
666
|
+
if (isUserAbortEvent(event, options?.signal)) {
|
|
667
|
+
emit(event);
|
|
668
|
+
flush();
|
|
669
|
+
return { result: "fatal", attemptAt };
|
|
670
|
+
}
|
|
671
|
+
failure = normalizeProviderFailure(event.error, { status: observedStatus });
|
|
672
|
+
failureMessage = failure.message;
|
|
673
|
+
classification = classifyProviderFailure(failure, requestedRetryAfterMs, policy);
|
|
674
|
+
if (classification.kind === "fatal" || sawContent) {
|
|
675
|
+
emit({ ...event, error: providerFailureAssistantMessage(model, failure) });
|
|
676
|
+
flush();
|
|
677
|
+
return { result: "fatal", attemptAt, classification, failure };
|
|
678
|
+
}
|
|
679
|
+
break;
|
|
680
|
+
}
|
|
681
|
+
if (event.type !== "start" && event.type !== "done") sawContent = true;
|
|
682
|
+
emit(event);
|
|
683
|
+
// First content event: commit to this provider -- flush the buffer and switch to live
|
|
684
|
+
// forwarding so the rest of the turn streams incrementally.
|
|
685
|
+
if (sawContent && !committed) flush();
|
|
686
|
+
}
|
|
687
|
+
} catch (error) {
|
|
688
|
+
if (isUserAbortError(error, options?.signal)) {
|
|
689
|
+
emit({
|
|
690
|
+
type: "error",
|
|
691
|
+
reason: "aborted",
|
|
692
|
+
error: { ...toAssistantError(model, error instanceof Error ? error.message : String(error)), stopReason: "aborted" },
|
|
693
|
+
});
|
|
694
|
+
flush();
|
|
695
|
+
return { result: "fatal", attemptAt };
|
|
696
|
+
}
|
|
697
|
+
requestedRetryAfterMs ??= retryAfterMsFromError(error);
|
|
698
|
+
if (limitHeaders === undefined && error && typeof error === "object" && "headers" in error && error.headers && typeof error.headers === "object") {
|
|
699
|
+
const fromError = rateLimitHeaders(error.headers as Headers | Record<string, string>);
|
|
700
|
+
if (Object.keys(fromError).length) limitHeaders = fromError;
|
|
701
|
+
}
|
|
702
|
+
failure = normalizeProviderFailure(error, { status: observedStatus });
|
|
703
|
+
failureMessage = failure.message;
|
|
704
|
+
classification = classifyProviderFailure(failure, requestedRetryAfterMs, policy);
|
|
705
|
+
if (classification.kind === "fatal" || sawContent) {
|
|
706
|
+
emit({
|
|
707
|
+
type: "error",
|
|
708
|
+
reason: "error",
|
|
709
|
+
error: providerFailureAssistantMessage(model, failure),
|
|
710
|
+
});
|
|
711
|
+
flush();
|
|
712
|
+
return { result: "fatal", attemptAt, classification, failure };
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
if (!classification && requestedRetryAfterMs !== undefined && !sawContent) {
|
|
717
|
+
// Some providers signal a 429/503 purely via the response header without ever raising
|
|
718
|
+
// a stream "error" event; treat that the same as an explicit rate-limit classification.
|
|
719
|
+
classification = { kind: "rate_limit", status: observedStatus, reason: "retry-after header on success path", hadRetryAfterHeader: true };
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
if (!classification) {
|
|
723
|
+
flush();
|
|
724
|
+
return { result: "success", attemptAt };
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
if (classification.kind === "rate_limit") {
|
|
728
|
+
// Only a genuine 429 is classified for scope; a 401/403 or 503 cooldown stays account-wide.
|
|
729
|
+
const rateLimit = classification.status === 429 || (classification.status === undefined && classification.cooldownMs === undefined)
|
|
730
|
+
? classifyRateLimit(limitHeaders, model.id)
|
|
731
|
+
: undefined;
|
|
732
|
+
let retryAfterMs = classification.cooldownMs ?? requestedRetryAfterMs;
|
|
733
|
+
// No Retry-After but a rejected window's reset: wait for the window, not the default backoff.
|
|
734
|
+
if (retryAfterMs === undefined && rateLimit?.resetAt !== undefined) retryAfterMs = Math.max(0, rateLimit.resetAt - Date.now());
|
|
735
|
+
if (rateLimit && Object.keys(rateLimit.headers).length) {
|
|
736
|
+
logRotation(`${credential ? `${getProviderLabel(providerId as ManagedProviderId)} subscription "${credential.label}"` : providerId} 429 on ${model.id}: scope=${describeRateLimitScope(rateLimit.scope)} headers=${JSON.stringify(rateLimit.headers)}`);
|
|
737
|
+
}
|
|
738
|
+
return { result: "rate_limited", retryAfterMs, attemptAt, classification, failureMessage, ...(rateLimit ? { rateLimit } : {}) };
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
// Transient: retry the SAME credential/provider in place first -- no cooldown for the
|
|
742
|
+
// quick in-place budget.
|
|
743
|
+
const backoffMs = TRANSIENT_RETRY_BACKOFFS_MS[attempt - 1];
|
|
744
|
+
if (backoffMs === undefined) {
|
|
745
|
+
// In-place retry budget exhausted. Rather than hard-failing the turn, hand back a
|
|
746
|
+
// transient-exhausted result so the caller surfaces the error to the user AND rotates
|
|
747
|
+
// to another credential / fallback provider. Nothing is emitted into the stream here:
|
|
748
|
+
// the buffered (pre-content) events are discarded exactly like the rate-limit path, so
|
|
749
|
+
// the rotation target streams a clean turn.
|
|
750
|
+
return { result: "transient_exhausted", attemptAt, classification, attempts: attempt, failure, failureMessage };
|
|
751
|
+
}
|
|
752
|
+
logRotation(
|
|
753
|
+
`${credential ? `${getProviderLabel(providerId as ManagedProviderId)} subscription "${credential.label}"` : providerId} hit a transient error (${classification.reason}, status=${classification.status ?? "n/a"}); retrying same route in ${backoffMs}ms (attempt ${attempt + 1})`,
|
|
754
|
+
);
|
|
755
|
+
await activeSleep(backoffMs);
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
function emitTerminalError(stream: AssistantMessageEventStream, model: Model<any>, message: string, failure?: NormalizedProviderFailure): void {
|
|
760
|
+
stream.push({ type: "error", reason: "error", error: failure === undefined ? toAssistantError(model, message) : providerFailureAssistantMessage(model, failure) });
|
|
761
|
+
stream.end();
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
// Routes, rather than provider ids, own queue bookkeeping: a route may share a
|
|
765
|
+
// provider with another credential source while still having distinct ordering and
|
|
766
|
+
// turn-local cooling state.
|
|
767
|
+
type RouteCandidate = {
|
|
768
|
+
routeId: string;
|
|
769
|
+
credentialSource: string;
|
|
770
|
+
rank: number;
|
|
771
|
+
providerId: string;
|
|
772
|
+
model: Model<any>;
|
|
773
|
+
thinkingLevel: string | undefined;
|
|
774
|
+
};
|
|
775
|
+
|
|
776
|
+
function enqueueFreshRouteCandidates(
|
|
777
|
+
candidates: RouteCandidate[],
|
|
778
|
+
queuedRouteIds: Set<string>,
|
|
779
|
+
knownRoutes: Map<string, RouteCandidate>,
|
|
780
|
+
seenReadyLabels: Map<string, Set<string>>,
|
|
781
|
+
cooldownAttempts: Map<string, number>,
|
|
782
|
+
localCoolingDeadlines: Map<string, number>,
|
|
783
|
+
): void {
|
|
784
|
+
const now = Date.now();
|
|
785
|
+
for (const [routeId, candidate] of knownRoutes) {
|
|
786
|
+
if (queuedRouteIds.has(routeId) || (localCoolingDeadlines.get(routeId) ?? 0) > now || !isManagedProvider(candidate.providerId)) continue;
|
|
787
|
+
const seenLabels = seenReadyLabels.get(routeId) ?? new Set<string>();
|
|
788
|
+
const hasFreshCredential = readSubscriptionPool(candidate.providerId).some((credential) => {
|
|
789
|
+
if (credential.authFailure !== undefined || coolingUntilFor(credential, candidate.model.id) > now) return false;
|
|
790
|
+
const cooldownAttempt = cooldownAttempts.get(`${routeId}/${credential.label}`);
|
|
791
|
+
return !seenLabels.has(credential.label) || (cooldownAttempt !== undefined && credential.lastAttemptAt > cooldownAttempt);
|
|
792
|
+
});
|
|
793
|
+
if (hasFreshCredential) {
|
|
794
|
+
candidates.push(candidate);
|
|
795
|
+
queuedRouteIds.add(routeId);
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
async function switchToRoute(pi: ExtensionAPI, ctx: ExtensionContext, candidate: RouteCandidate): Promise<boolean> {
|
|
801
|
+
if (ctx.model?.provider !== candidate.providerId || ctx.model.id !== candidate.model.id) {
|
|
802
|
+
if (!await pi.setModel(candidate.model)) return false;
|
|
803
|
+
}
|
|
804
|
+
pi.setThinkingLevel((candidate.thinkingLevel ?? 'off') as any);
|
|
805
|
+
return ctx.model?.provider === candidate.providerId && ctx.model.id === candidate.model.id;
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
function logRouteQueueAdvance(from: RouteCandidate, to: RouteCandidate | undefined, result: AttemptResult): void {
|
|
809
|
+
logRotation(
|
|
810
|
+
`from=${from.providerId}/${from.model.id} from_route_id=${from.routeId} from_credential_source=${from.credentialSource} from_rank=${from.rank} to=${to ? `${to.providerId}/${to.model.id}` : "none"} to_route_id=${to?.routeId ?? "none"} to_credential_source=${to?.credentialSource ?? "none"} to_rank=${to?.rank ?? "none"} reason=${result.classification?.reason ?? result.result}; advancing route queue`,
|
|
811
|
+
);
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
// Drive the deterministic route queue from the live rank. Managed routes walk
|
|
815
|
+
// their pool rows; every other declared route is one configured credential.
|
|
816
|
+
async function runManagedProvider(
|
|
817
|
+
state: ProviderRotationState,
|
|
818
|
+
model: Model<any>,
|
|
819
|
+
context: TranscriptContext,
|
|
820
|
+
options: SimpleStreamOptions | undefined,
|
|
821
|
+
stream: AssistantMessageEventStream,
|
|
822
|
+
): Promise<void> {
|
|
823
|
+
const liveThinking = state.runtimeContext?.thinkingLevel === undefined || state.runtimeContext?.thinkingLevel === 'off'
|
|
824
|
+
? undefined
|
|
825
|
+
: state.runtimeContext.thinkingLevel;
|
|
826
|
+
const request = modelRequestFromConfig(
|
|
827
|
+
`${model.provider}/${model.id}${liveThinking ? `:${liveThinking}` : ''}`,
|
|
828
|
+
configuredValue(state, 'modelIntent', 'CRTR_MODEL_INTENT'),
|
|
829
|
+
isExactModel(state),
|
|
830
|
+
);
|
|
831
|
+
const expanded = request ? expandModelCandidates(
|
|
832
|
+
request,
|
|
833
|
+
configuredValue(state, 'nodeCwd', 'CRTR_NODE_CWD'),
|
|
834
|
+
configuredValue(state, 'profileId', 'CRTR_PROFILE_ID'),
|
|
835
|
+
) : [];
|
|
836
|
+
// The node's thinking level holds on its own model; a route to another
|
|
837
|
+
// provider or model takes that cell's thinking.
|
|
838
|
+
const onLiveModel = (candidate: { providerId: string; modelId: string }): boolean =>
|
|
839
|
+
candidate.providerId === model.provider && candidate.modelId === model.id;
|
|
840
|
+
const liveRank = (expanded.find((candidate) => onLiveModel(candidate) && candidate.thinkingLevel === liveThinking) ?? expanded.find(onLiveModel))?.rank ?? 0;
|
|
841
|
+
const routeCandidates: RouteCandidate[] = expanded.slice(liveRank)
|
|
842
|
+
.map((route) => {
|
|
843
|
+
const registry = state.runtimeContext?.modelRegistry;
|
|
844
|
+
const routeModel = registry?.find(route.providerId, route.modelId);
|
|
845
|
+
if (!registry || !routeModel) return undefined;
|
|
846
|
+
const availability = probeRouteAvailability(route, registry);
|
|
847
|
+
if (!availability.registered || (!isManagedProvider(route.providerId) && !availability.authenticated)) return undefined;
|
|
848
|
+
return { routeId: route.routeId, credentialSource: route.credentialSource, rank: route.rank, providerId: route.providerId, model: routeModel, thinkingLevel: onLiveModel(route) ? liveThinking : route.thinkingLevel };
|
|
849
|
+
})
|
|
850
|
+
.filter((candidate): candidate is RouteCandidate => candidate !== undefined)
|
|
851
|
+
.filter((candidate, index, all) => all.findIndex((other) => other.routeId === candidate.routeId && other.providerId === candidate.providerId && other.model.id === candidate.model.id && other.thinkingLevel === candidate.thinkingLevel) === index);
|
|
852
|
+
const isLiveRoute = (candidate: RouteCandidate): boolean =>
|
|
853
|
+
candidate.providerId === model.provider && candidate.model.id === model.id && candidate.thinkingLevel === liveThinking;
|
|
854
|
+
// A cooling or unauthenticated managed route contributes its diagnostic and may
|
|
855
|
+
// later re-enter when a credential becomes ready, but it is never selected now.
|
|
856
|
+
const candidates = routeCandidates.filter((candidate) => {
|
|
857
|
+
if (isLiveRoute(candidate) || !isManagedProvider(candidate.providerId)) return true;
|
|
858
|
+
const pool = readSubscriptionPool(candidate.providerId);
|
|
859
|
+
return pool.length === 0
|
|
860
|
+
? state.runtimeContext!.modelRegistry.hasConfiguredAuth(candidate.model)
|
|
861
|
+
: pool.some((entry) => entry.authFailure === undefined && coolingUntilFor(entry, candidate.model.id) <= Date.now());
|
|
862
|
+
});
|
|
863
|
+
if (!candidates.some(isLiveRoute)) {
|
|
864
|
+
candidates.unshift({ routeId: `live:${model.provider}/${model.id}`, credentialSource: 'live', rank: liveRank, providerId: model.provider, model, thinkingLevel: liveThinking });
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
const queuedRouteIds = new Set(candidates.map((candidate) => candidate.routeId));
|
|
868
|
+
const knownRoutes = new Map([...routeCandidates, ...candidates].map((candidate) => [candidate.routeId, candidate]));
|
|
869
|
+
const attemptedRoutes = new Set<string>();
|
|
870
|
+
const authFailures = new Set<string>();
|
|
871
|
+
const localCoolingDeadlines = new Map<string, number>();
|
|
872
|
+
const seenReadyLabels = new Map<string, Set<string>>();
|
|
873
|
+
const cooldownAttempts = new Map<string, number>();
|
|
874
|
+
let terminalModel = model;
|
|
875
|
+
let lastTransientFailure: AttemptResult | undefined;
|
|
876
|
+
// The last pre-content 401/403 that cooled a route; its text is the only
|
|
877
|
+
// record of why the routes ran out when they end in a cooling error.
|
|
878
|
+
let lastAuthRejection: AttemptResult | undefined;
|
|
879
|
+
// The last 429 whose response carried rate-limit headers: recorded on the
|
|
880
|
+
// cooling fault so an incident traces to the account or to one model family.
|
|
881
|
+
let lastRateLimit: { providerId: string; model: Model<any>; account?: string; observation: RateLimitObservation } | undefined;
|
|
882
|
+
// Any HTTP response observed this pass (a status, a Retry-After header, or a
|
|
883
|
+
// rate-limit classification) proves this process can still reach a provider,
|
|
884
|
+
// clearing the poisoned-transport suspicion.
|
|
885
|
+
let sawHttpEvidence = false;
|
|
886
|
+
|
|
887
|
+
for (let candidate = candidates.shift(); candidate !== undefined; candidate = candidates.shift()) {
|
|
888
|
+
const { routeId, providerId, model: candidateModel } = candidate;
|
|
889
|
+
queuedRouteIds.delete(routeId);
|
|
890
|
+
knownRoutes.set(routeId, candidate);
|
|
891
|
+
attemptedRoutes.add(routeId);
|
|
892
|
+
terminalModel = candidateModel;
|
|
893
|
+
|
|
894
|
+
if (!await switchToRoute(state.extensionAPI!, state.runtimeContext!, candidate)) {
|
|
895
|
+
emitTerminalError(stream, candidateModel, `Provider route ${routeId} is unavailable: failed to select ${providerId}/${candidateModel.id}`);
|
|
896
|
+
return;
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
const rawPool = isManagedProvider(providerId) ? readSubscriptionPool(providerId) : [];
|
|
900
|
+
if (!isManagedProvider(providerId) || rawPool.length === 0) {
|
|
901
|
+
const liveKey = isLiveRoute(candidate) ? options?.apiKey : undefined;
|
|
902
|
+
if (isManagedProvider(providerId) && !liveKey && !state.runtimeContext!.modelRegistry.hasConfiguredAuth(candidateModel)) continue;
|
|
903
|
+
const auth = isManagedProvider(providerId) && !liveKey
|
|
904
|
+
? await state.runtimeContext!.modelRegistry.getApiKeyAndHeaders(candidateModel)
|
|
905
|
+
: undefined;
|
|
906
|
+
if (isManagedProvider(providerId) && !liveKey && (!auth?.ok || !auth.apiKey)) continue;
|
|
907
|
+
const headers = { ...options?.headers };
|
|
908
|
+
for (const [name, value] of Object.entries(auth?.ok ? auth.headers ?? {} : {})) {
|
|
909
|
+
for (const existing of Object.keys(headers)) if (existing.toLowerCase() === name.toLowerCase()) delete headers[existing];
|
|
910
|
+
headers[name] = value;
|
|
911
|
+
}
|
|
912
|
+
const attemptOptions = auth?.ok ? { ...options, apiKey: auth.apiKey, headers } : options;
|
|
913
|
+
const result = await streamProviderAttempt(state, providerId, candidateModel, context, attemptOptions, undefined, stream);
|
|
914
|
+
if (result.result === 'success' || result.result === 'fatal') { state.transportOnlyExhaustedPasses = 0; stream.end(); return; }
|
|
915
|
+
if (result.result === 'rate_limited' || result.classification?.status !== undefined || result.classification?.hadRetryAfterHeader === true) sawHttpEvidence = true;
|
|
916
|
+
const cooldownMs = result.result === 'rate_limited' ? result.retryAfterMs ?? DEFAULT_RATE_LIMIT_BACKOFF_MS : TRANSIENT_ROTATE_COOLDOWN_MS;
|
|
917
|
+
if (result.result === 'transient_exhausted') lastTransientFailure = result;
|
|
918
|
+
if (result.result === 'rate_limited' && (result.classification?.status === 401 || result.classification?.status === 403)) lastAuthRejection = result;
|
|
919
|
+
if (result.rateLimit && Object.keys(result.rateLimit.headers).length) lastRateLimit = { providerId, model: candidateModel, observation: result.rateLimit };
|
|
920
|
+
localCoolingDeadlines.set(routeId, Math.max(localCoolingDeadlines.get(routeId) ?? 0, Date.now() + cooldownMs));
|
|
921
|
+
logRouteQueueAdvance(candidate, candidates[0], result);
|
|
922
|
+
continue;
|
|
923
|
+
}
|
|
924
|
+
for (const entry of rawPool) if (entry.authFailure === 'invalid_grant') authFailures.add(`${providerId}/${entry.label}`);
|
|
925
|
+
const available = rawPool.filter((entry) => entry.authFailure === undefined && coolingUntilFor(entry, candidateModel.id) <= Date.now());
|
|
926
|
+
const seenLabels = seenReadyLabels.get(routeId) ?? new Set<string>();
|
|
927
|
+
for (const credential of available) seenLabels.add(credential.label);
|
|
928
|
+
seenReadyLabels.set(routeId, seenLabels);
|
|
929
|
+
|
|
930
|
+
let advanceResult: AttemptResult | undefined;
|
|
931
|
+
for (const credential of available) {
|
|
932
|
+
let freshCredential: ResolvedCredential;
|
|
933
|
+
try {
|
|
934
|
+
freshCredential = await refreshCredentialIfNeeded(state, providerId, credential, options?.signal);
|
|
935
|
+
} catch (error) {
|
|
936
|
+
if (!isInvalidRefreshTokenError(error)) throw error;
|
|
937
|
+
let reauthenticated: ResolvedCredential | undefined;
|
|
938
|
+
try { reauthenticated = await reauthenticateCredential(state, providerId, credential); } catch (loginError) {
|
|
939
|
+
state.runtimeContext?.ui.notify(`${getProviderLabel(providerId)} re-authentication failed: ${loginError instanceof Error ? loginError.message : String(loginError)}`, 'error');
|
|
940
|
+
}
|
|
941
|
+
if (!reauthenticated) {
|
|
942
|
+
const attemptAt = Date.now();
|
|
943
|
+
await recordSubscriptionMutation(`recording ${getProviderLabel(providerId)} authentication failure`, () => markSubscriptionAuthenticationFailed(providerId, credential.label, credential, INVALID_REFRESH_TOKEN_BACKOFF_MS, attemptAt));
|
|
944
|
+
authFailures.add(`${providerId}/${credential.label}`);
|
|
945
|
+
continue;
|
|
946
|
+
}
|
|
947
|
+
freshCredential = reauthenticated;
|
|
948
|
+
}
|
|
949
|
+
const result = await streamProviderAttempt(state, providerId, candidateModel, context, options, freshCredential, stream);
|
|
950
|
+
if (result.result === 'success') {
|
|
951
|
+
state.transportOnlyExhaustedPasses = 0;
|
|
952
|
+
if (subscriptionNeedsSuccessWrite(freshCredential, candidateModel.id)) await recordSubscriptionMutation(`recording ${getProviderLabel(providerId)} success`, () => markSubscriptionSuccess(providerId, freshCredential.label, result.attemptAt, candidateModel.id));
|
|
953
|
+
stream.end();
|
|
954
|
+
return;
|
|
955
|
+
}
|
|
956
|
+
if (result.result === 'fatal') { state.transportOnlyExhaustedPasses = 0; stream.end(); return; }
|
|
957
|
+
if (result.result === 'rate_limited' || result.classification?.status !== undefined || result.classification?.hadRetryAfterHeader === true) sawHttpEvidence = true;
|
|
958
|
+
const cooldownMs = result.result === 'rate_limited' ? result.retryAfterMs ?? DEFAULT_RATE_LIMIT_BACKOFF_MS : TRANSIENT_ROTATE_COOLDOWN_MS;
|
|
959
|
+
if (result.result === 'transient_exhausted') lastTransientFailure = result;
|
|
960
|
+
if (result.result === 'rate_limited' && (result.classification?.status === 401 || result.classification?.status === 403)) lastAuthRejection = result;
|
|
961
|
+
if (result.rateLimit && Object.keys(result.rateLimit.headers).length) lastRateLimit = { providerId, model: candidateModel, account: freshCredential.label, observation: result.rateLimit };
|
|
962
|
+
if (result.result === 'rate_limited' && result.retryAfterMs !== undefined) {
|
|
963
|
+
const persisted = await recordSubscriptionMutation(`recording ${getProviderLabel(providerId)} server cooldown`, () => markSubscriptionRateLimited(providerId, freshCredential.label, cooldownMs, result.attemptAt, Date.now(), result.rateLimit?.scope ?? { kind: 'account' }));
|
|
964
|
+
if (persisted) cooldownAttempts.set(`${routeId}/${freshCredential.label}`, result.attemptAt);
|
|
965
|
+
else localCoolingDeadlines.set(routeId, Math.max(localCoolingDeadlines.get(routeId) ?? 0, Date.now() + cooldownMs));
|
|
966
|
+
} else {
|
|
967
|
+
localCoolingDeadlines.set(routeId, Math.max(localCoolingDeadlines.get(routeId) ?? 0, Date.now() + cooldownMs));
|
|
968
|
+
}
|
|
969
|
+
advanceResult = result;
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
enqueueFreshRouteCandidates(candidates, queuedRouteIds, knownRoutes, seenReadyLabels, cooldownAttempts, localCoolingDeadlines);
|
|
973
|
+
if (advanceResult !== undefined) logRouteQueueAdvance(candidate, candidates[0], advanceResult);
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
const coolingDeadline = earliestCoolingDeadline([...knownRoutes.values()], localCoolingDeadlines);
|
|
977
|
+
const tried = [...attemptedRoutes].join(', ');
|
|
978
|
+
if (lastTransientFailure !== undefined) {
|
|
979
|
+
state.transportOnlyExhaustedPasses = sawHttpEvidence ? 0 : state.transportOnlyExhaustedPasses + 1;
|
|
980
|
+
if (state.transportOnlyExhaustedPasses >= POISONED_TRANSPORT_PASS_LIMIT && await activeTerminatePoisonedProcess(tried)) {
|
|
981
|
+
// The stream is deliberately left OPEN: the SIGTERM handler sees a live
|
|
982
|
+
// turn, so it either certifies a clean abort (→ the daemon respawns and
|
|
983
|
+
// resumes with a continuation prompt) or marks the turn dirty (→ the
|
|
984
|
+
// respawn re-cycles the turn). Ending the stream first could settle the
|
|
985
|
+
// turn idle before the signal lands, leaving the respawned node parked
|
|
986
|
+
// with a terminal error and nothing to re-drive it.
|
|
987
|
+
return;
|
|
988
|
+
}
|
|
989
|
+
const detail = lastTransientFailure.failureMessage ?? lastTransientFailure.classification?.reason ?? 'unknown connection failure';
|
|
990
|
+
emitTerminalError(stream, terminalModel, `Provider routes failed after transient retries: ${detail} (tried ${tried})`, lastTransientFailure.failure);
|
|
991
|
+
return;
|
|
992
|
+
}
|
|
993
|
+
state.transportOnlyExhaustedPasses = 0;
|
|
994
|
+
if (coolingDeadline !== undefined) {
|
|
995
|
+
const cooling = `cooling down ~${Math.ceil((coolingDeadline - Date.now()) / 1000)}s`;
|
|
996
|
+
const message = lastAuthRejection === undefined
|
|
997
|
+
? `All provider routes are rate limited (${cooling}; tried ${tried})`
|
|
998
|
+
: `All provider routes are rate limited or rejected (${cooling}; last rejection ${lastAuthRejection.classification!.reason}: ${lastAuthRejection.failureMessage ?? 'no error message'}; tried ${tried})`;
|
|
999
|
+
emitCoolingError(stream, terminalModel, new ManagedProviderCoolingError(message, coolingDeadline), lastRateLimit);
|
|
1000
|
+
return;
|
|
1001
|
+
}
|
|
1002
|
+
const authFailure = [...authFailures][0];
|
|
1003
|
+
if (authFailure !== undefined) {
|
|
1004
|
+
emitTerminalError(stream, terminalModel, `Provider authentication failed (invalid_grant) for ${authFailure}; re-authenticate the credential and retry (tried ${tried})`);
|
|
1005
|
+
return;
|
|
1006
|
+
}
|
|
1007
|
+
emitTerminalError(stream, terminalModel, `All provider routes exhausted (tried ${tried})`);
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
// The earliest strictly-future deadline only when every attempted route is cooling.
|
|
1011
|
+
function earliestCoolingDeadline(
|
|
1012
|
+
attempted: Iterable<RouteCandidate>,
|
|
1013
|
+
localCoolingDeadlines: Map<string, number>,
|
|
1014
|
+
): number | undefined {
|
|
1015
|
+
const now = Date.now();
|
|
1016
|
+
let earliest: number | undefined;
|
|
1017
|
+
let sawRoute = false;
|
|
1018
|
+
for (const route of attempted) {
|
|
1019
|
+
const localUntil = localCoolingDeadlines.get(route.routeId) ?? 0;
|
|
1020
|
+
if (localUntil > now) { sawRoute = true; earliest = earliest === undefined ? localUntil : Math.min(earliest, localUntil); continue; }
|
|
1021
|
+
if (!isManagedProvider(route.providerId)) return undefined;
|
|
1022
|
+
const pool = readSubscriptionPool(route.providerId).filter((entry) => entry.authFailure === undefined);
|
|
1023
|
+
// Routes with no usable credential were never runnable this turn, so they do
|
|
1024
|
+
// not defeat the cooling outcome of another route. An auth-failed-only pool
|
|
1025
|
+
// is likewise unauthenticated; a valid cooling row still contributes its
|
|
1026
|
+
// deadline even when a sibling row carries invalid_grant.
|
|
1027
|
+
if (pool.length === 0) continue;
|
|
1028
|
+
sawRoute = true;
|
|
1029
|
+
if (pool.some((entry) => coolingUntilFor(entry, route.model.id) <= now)) return undefined;
|
|
1030
|
+
const routeEarliest = Math.min(...pool.map((entry) => coolingUntilFor(entry, route.model.id)));
|
|
1031
|
+
earliest = earliest === undefined ? routeEarliest : Math.min(earliest, routeEarliest);
|
|
1032
|
+
}
|
|
1033
|
+
return sawRoute ? earliest : undefined;
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
// Emit the typed cooling terminal error, attaching its diagnostic (the earliest
|
|
1037
|
+
// deadline) to the assistant error message so the deadline survives verbatim into
|
|
1038
|
+
// agent_end.messages for the stophook to read.
|
|
1039
|
+
function emitCoolingError(
|
|
1040
|
+
stream: AssistantMessageEventStream,
|
|
1041
|
+
model: Model<any>,
|
|
1042
|
+
error: ManagedProviderCoolingError,
|
|
1043
|
+
rateLimit?: { providerId: string; model: Model<any>; account?: string; observation: RateLimitObservation },
|
|
1044
|
+
): void {
|
|
1045
|
+
const message = toAssistantError(model, error.message);
|
|
1046
|
+
message.diagnostics = [
|
|
1047
|
+
error.toDiagnostic(),
|
|
1048
|
+
...(rateLimit === undefined ? [] : [providerFailureDiagnostic({
|
|
1049
|
+
status: 429,
|
|
1050
|
+
ratelimit: {
|
|
1051
|
+
scope: describeRateLimitScope(rateLimit.observation.scope),
|
|
1052
|
+
// The rate-limited route may be a fallback, not the model the error is stamped with.
|
|
1053
|
+
model: `${rateLimit.providerId}/${rateLimit.model.id}`,
|
|
1054
|
+
...(rateLimit.observation.claim !== undefined ? { claim: rateLimit.observation.claim } : {}),
|
|
1055
|
+
...(rateLimit.account !== undefined ? { account: rateLimit.account } : {}),
|
|
1056
|
+
headers: rateLimit.observation.headers,
|
|
1057
|
+
},
|
|
1058
|
+
})]),
|
|
1059
|
+
];
|
|
1060
|
+
stream.push({ type: "error", reason: "error", error: message });
|
|
1061
|
+
stream.end();
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
function streamManagedProvider(state: ProviderRotationState, model: Model<any>, context: TranscriptContext, options?: SimpleStreamOptions): AssistantMessageEventStream {
|
|
1065
|
+
const stream = createAssistantMessageEventStream();
|
|
1066
|
+
|
|
1067
|
+
runManagedProvider(state, model, context, options, stream).catch((error) => {
|
|
1068
|
+
stream.push({
|
|
1069
|
+
type: "error",
|
|
1070
|
+
reason: "error",
|
|
1071
|
+
error: toAssistantError(model, error instanceof Error ? error.message : String(error)),
|
|
1072
|
+
});
|
|
1073
|
+
stream.end();
|
|
1074
|
+
});
|
|
1075
|
+
|
|
1076
|
+
return stream;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
function parseCommand(args: string): string[] {
|
|
1080
|
+
return args
|
|
1081
|
+
.trim()
|
|
1082
|
+
.split(/\s+/)
|
|
1083
|
+
.map((part) => part.trim())
|
|
1084
|
+
.filter(Boolean);
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
function parseProvider(value: string | undefined): ManagedProviderId | undefined {
|
|
1088
|
+
return isManagedProvider(value) ? value : undefined;
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
/** Merged config for the NODE's scope (its own cwd/profile), not this
|
|
1092
|
+
* process's ambient one. */
|
|
1093
|
+
function readTargetLaunchConfig(state: ProviderRotationState, ctx: ExtensionContext): MergedLaunchConfig {
|
|
1094
|
+
return readMergedLaunchConfig(ctx.cwd, configuredValue(state, 'profileId', 'CRTR_PROFILE_ID') || null);
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
function installDeclaredRouteProviders(state: ProviderRotationState, pi: ExtensionAPI, ctx: ExtensionContext, config: MergedLaunchConfig): void {
|
|
1098
|
+
const providerIds = new Set(Object.values({ ...(config.modelRoutes ?? {}), ...(config.legacyModelRoutes ?? {}) }).map((route) => route.providerId));
|
|
1099
|
+
for (const providerId of providerIds) {
|
|
1100
|
+
if (isManagedProvider(providerId) || state.delegatedProviderStreams.has(providerId)) continue;
|
|
1101
|
+
const provider = ctx.modelRegistry.getProvider?.(providerId);
|
|
1102
|
+
const model = ctx.modelRegistry.getAll?.().find((entry) => entry.provider === providerId);
|
|
1103
|
+
if (!provider || !model) continue;
|
|
1104
|
+
state.delegatedProviderStreams.set(providerId, provider.streamSimple.bind(provider));
|
|
1105
|
+
// `api` is required by pi whenever a registration supplies streamSimple.
|
|
1106
|
+
// Re-registration merges this wrapper over the existing declaration, so the
|
|
1107
|
+
// provider's models, auth, and captured composed transport remain intact.
|
|
1108
|
+
pi.registerProvider(providerId, { api: model.api, streamSimple: (model, context, options) => streamManagedProvider(state, model, context, options) });
|
|
1109
|
+
}
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
function updateRotationStatus(state: ProviderRotationState, ctx: ExtensionContext): void {
|
|
1113
|
+
const current = getCurrentModelRef(ctx.model);
|
|
1114
|
+
if (current && isManagedProvider(current.providerId)) setStatus(state, formatStatusLine(current.providerId, Date.now(), current.modelId));
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
/** Restore only when the deterministic route rank improves; no shared-home
|
|
1118
|
+
* preferred-model state is needed or consulted. */
|
|
1119
|
+
async function restoreHigherRankIfAvailable(state: ProviderRotationState, pi: ExtensionAPI, ctx: ExtensionContext): Promise<boolean> {
|
|
1120
|
+
if (!readRotationConfig().revertWhenAvailable) return false;
|
|
1121
|
+
const liveThinking = ctx.thinkingLevel === undefined || ctx.thinkingLevel === 'off' ? undefined : ctx.thinkingLevel;
|
|
1122
|
+
const request = modelRequestFromConfig(
|
|
1123
|
+
`${ctx.model?.provider ?? ''}/${ctx.model?.id ?? ''}${liveThinking ? `:${liveThinking}` : ''}`,
|
|
1124
|
+
configuredValue(state, 'modelIntent', 'CRTR_MODEL_INTENT'),
|
|
1125
|
+
isExactModel(state),
|
|
1126
|
+
);
|
|
1127
|
+
if (!request || !ctx.model) return false;
|
|
1128
|
+
const candidates = expandModelCandidates(
|
|
1129
|
+
request,
|
|
1130
|
+
configuredValue(state, 'nodeCwd', 'CRTR_NODE_CWD'),
|
|
1131
|
+
configuredValue(state, 'profileId', 'CRTR_PROFILE_ID'),
|
|
1132
|
+
);
|
|
1133
|
+
const onLiveModel = (candidate: { providerId: string; modelId: string }): boolean =>
|
|
1134
|
+
candidate.providerId === ctx.model?.provider && candidate.modelId === ctx.model?.id;
|
|
1135
|
+
const liveRank = (candidates.find((candidate) => onLiveModel(candidate) && candidate.thinkingLevel === liveThinking) ?? candidates.find(onLiveModel))?.rank;
|
|
1136
|
+
if (liveRank === undefined) return false;
|
|
1137
|
+
const preferred = candidates.find((candidate) => candidate.rank < liveRank && resolveProviderCandidates([{
|
|
1138
|
+
...candidate,
|
|
1139
|
+
...probeRouteAvailability(candidate, ctx.modelRegistry),
|
|
1140
|
+
automaticFallback: true,
|
|
1141
|
+
}]).candidates.length > 0);
|
|
1142
|
+
if (!preferred) return false;
|
|
1143
|
+
const model = ctx.modelRegistry.find(preferred.providerId, preferred.modelId);
|
|
1144
|
+
if (!model || !await pi.setModel(model)) return false;
|
|
1145
|
+
pi.setThinkingLevel((preferred.thinkingLevel ?? 'off') as any);
|
|
1146
|
+
return true;
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
// Manual-code input is a human-in-the-loop OAuth round-trip (open link, log in on
|
|
1150
|
+
// whatever device, copy the localhost redirect URL back) that routinely exceeds
|
|
1151
|
+
// DEFAULT_DIALOG_TIMEOUT_MS -- give it a human-scale bound instead of the ordinary
|
|
1152
|
+
// confirm/select default.
|
|
1153
|
+
const OAUTH_MANUAL_INPUT_TIMEOUT_MS = 600_000;
|
|
1154
|
+
|
|
1155
|
+
/**
|
|
1156
|
+
* pi-ai races the manual-code-paste dialog against its loopback callback server. When the
|
|
1157
|
+
* callback supplies a code, the manual-input promise can remain pending, so `run` receives:
|
|
1158
|
+
* - `readCode`, a `ctx.ui.input` wrapper with an AbortSignal. Aborting it removes the pending
|
|
1159
|
+
* broker entry and emits an `extension_ui_dismiss` frame for exactly that dialog.
|
|
1160
|
+
* - `dismissManual`, which aborts the signal at the post-code `onProgress` boundary before
|
|
1161
|
+
* the token exchange completes. `onProgress` is emitted only after a code is available, so
|
|
1162
|
+
* dismissing then cannot close a dialog the user still needs; `finally` covers paths without
|
|
1163
|
+
* progress, and repeated AbortController calls are inert.
|
|
1164
|
+
*
|
|
1165
|
+
* `undefined` from `readCode` means cancellation or timeout. It throws so OAuth ends directly
|
|
1166
|
+
* instead of opening a second paste-only dialog.
|
|
1167
|
+
*/
|
|
1168
|
+
export async function loginWithManualInputCleanup<T>(
|
|
1169
|
+
ctx: ExtensionContext,
|
|
1170
|
+
run: (
|
|
1171
|
+
readCode: (title: string, placeholder: string) => Promise<string>,
|
|
1172
|
+
dismissManual: () => void,
|
|
1173
|
+
) => Promise<T>,
|
|
1174
|
+
): Promise<T> {
|
|
1175
|
+
const controller = new AbortController();
|
|
1176
|
+
const readCode = async (title: string, placeholder: string): Promise<string> => {
|
|
1177
|
+
const result = await ctx.ui.input(title, placeholder, { timeout: OAUTH_MANUAL_INPUT_TIMEOUT_MS, signal: controller.signal });
|
|
1178
|
+
if (result === undefined) throw new Error("OAuth login cancelled");
|
|
1179
|
+
return result;
|
|
1180
|
+
};
|
|
1181
|
+
try {
|
|
1182
|
+
return await run(readCode, () => controller.abort());
|
|
1183
|
+
} finally {
|
|
1184
|
+
controller.abort();
|
|
1185
|
+
}
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
// The manual-code dialog carries the authorize URL in its title (rendered as a tappable link
|
|
1189
|
+
// on web), so a headless remote box where `openBrowser` opens nothing still has a real path
|
|
1190
|
+
// through login. pi's own `manual_code` message is URL-less, hence these per-provider titles.
|
|
1191
|
+
const MANUAL_CODE_DIALOG: Record<ManagedProviderId, { title: (url: string | undefined) => string; placeholder: string }> = {
|
|
1192
|
+
[ANTHROPIC_PROVIDER_ID]: {
|
|
1193
|
+
title: (url) => `Open this URL to authenticate Claude:\n${url}\n\nPaste the redirect URL or code`,
|
|
1194
|
+
placeholder: "http://localhost:53692/callback?...",
|
|
1195
|
+
},
|
|
1196
|
+
[OPENAI_CODEX_PROVIDER_ID]: {
|
|
1197
|
+
title: (url) => `Open this URL to authenticate OpenAI Codex:\n${url}\n\nPaste the redirect URL or code`,
|
|
1198
|
+
placeholder: "http://localhost:1455/auth/callback?...",
|
|
1199
|
+
},
|
|
1200
|
+
[OPENAI_CHATGPT_PROVIDER_ID]: {
|
|
1201
|
+
title: (url) => `Open this URL to sign in with ChatGPT:\n${url}\n\nPaste the final redirect URL`,
|
|
1202
|
+
placeholder: "http://127.0.0.1:1455/auth/callback?...",
|
|
1203
|
+
},
|
|
1204
|
+
};
|
|
1205
|
+
|
|
1206
|
+
// This extension adapts the provider OAuth interaction onto `ctx.ui`. The attach viewer and
|
|
1207
|
+
// `crtr sys setup` use LoginDialogComponent with `core/auth-interaction.ts`; the broker uses
|
|
1208
|
+
// the dialog primitives below.
|
|
1209
|
+
async function loginProvider(providerId: ManagedProviderId, ctx: ExtensionContext): Promise<LoginCredential> {
|
|
1210
|
+
const oauth = oauthFlow(providerId, ctx);
|
|
1211
|
+
const manual = MANUAL_CODE_DIALOG[providerId];
|
|
1212
|
+
const controller = new AbortController();
|
|
1213
|
+
let authorizeUrl: string | undefined;
|
|
1214
|
+
// ChatGPT sign-in identifies this install to OpenAI by a stable device UUID.
|
|
1215
|
+
const loginOptions = providerId === OPENAI_CHATGPT_PROVIDER_ID ? { getDeviceId: openAIDeviceId } : undefined;
|
|
1216
|
+
return loginWithManualInputCleanup(ctx, (readCode, dismissManual) =>
|
|
1217
|
+
oauth.login({
|
|
1218
|
+
signal: controller.signal,
|
|
1219
|
+
notify: (event: AuthEvent): void => {
|
|
1220
|
+
switch (event.type) {
|
|
1221
|
+
case "auth_url":
|
|
1222
|
+
authorizeUrl = event.url;
|
|
1223
|
+
openBrowser(event.url);
|
|
1224
|
+
if (event.instructions) ctx.ui.notify(event.instructions, "info");
|
|
1225
|
+
break;
|
|
1226
|
+
case "device_code":
|
|
1227
|
+
openBrowser(event.verificationUri);
|
|
1228
|
+
ctx.ui.notify(`Enter code ${event.userCode} at ${event.verificationUri}`, "info");
|
|
1229
|
+
break;
|
|
1230
|
+
case "progress":
|
|
1231
|
+
// Progress follows receipt of an OAuth code, so dismiss the now-unneeded manual
|
|
1232
|
+
// dialog before token exchange. The browser path may emit no progress; `finally`
|
|
1233
|
+
// closes that dialog when the OAuth attempt settles.
|
|
1234
|
+
dismissManual();
|
|
1235
|
+
ctx.ui.notify(event.message, "info");
|
|
1236
|
+
break;
|
|
1237
|
+
case "info":
|
|
1238
|
+
ctx.ui.notify(event.message, "info");
|
|
1239
|
+
break;
|
|
1240
|
+
}
|
|
1241
|
+
},
|
|
1242
|
+
prompt: async (prompt: AuthPrompt): Promise<string> => {
|
|
1243
|
+
if (prompt.type === "manual_code") return readCode(manual.title(authorizeUrl), manual.placeholder);
|
|
1244
|
+
if (prompt.type === "select") {
|
|
1245
|
+
// Codex now opens its login with a browser-vs-device-code choice.
|
|
1246
|
+
const labels = prompt.options.map((option) => option.label);
|
|
1247
|
+
const chosen = await ctx.ui.select(prompt.message, labels);
|
|
1248
|
+
const selected = chosen === undefined ? undefined : prompt.options[labels.indexOf(chosen)];
|
|
1249
|
+
if (!selected) throw new Error("OAuth login cancelled");
|
|
1250
|
+
return selected.id;
|
|
1251
|
+
}
|
|
1252
|
+
return (await ctx.ui.input(prompt.message, prompt.placeholder ?? "")) ?? "";
|
|
1253
|
+
},
|
|
1254
|
+
}, loginOptions),
|
|
1255
|
+
).finally(() => controller.abort());
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1258
|
+
export function createProviderRotationExtension(options?: ProviderRotationOptions): (pi: ExtensionAPI) => Promise<void> {
|
|
1259
|
+
const state = createProviderRotationState(options);
|
|
1260
|
+
|
|
1261
|
+
return async (pi: ExtensionAPI): Promise<void> => {
|
|
1262
|
+
state.extensionAPI = pi;
|
|
1263
|
+
|
|
1264
|
+
pi.registerProvider(ANTHROPIC_PROVIDER_ID, {
|
|
1265
|
+
api: "anthropic-messages",
|
|
1266
|
+
streamSimple: (model, context, streamOptions) => streamManagedProvider(state, model, context, streamOptions),
|
|
1267
|
+
});
|
|
1268
|
+
|
|
1269
|
+
pi.registerProvider(OPENAI_CODEX_PROVIDER_ID, {
|
|
1270
|
+
api: "openai-codex-responses",
|
|
1271
|
+
streamSimple: (model, context, streamOptions) => streamManagedProvider(state, model, context, streamOptions),
|
|
1272
|
+
});
|
|
1273
|
+
|
|
1274
|
+
// pi's built-in `openai` provider (Responses API). Its pool holds ChatGPT sign-ins; with an
|
|
1275
|
+
// empty pool the route falls back to the provider's own auth (OPENAI_API_KEY / auth.json).
|
|
1276
|
+
pi.registerProvider(OPENAI_CHATGPT_PROVIDER_ID, {
|
|
1277
|
+
api: "openai-responses",
|
|
1278
|
+
streamSimple: (model, context, streamOptions) => streamManagedProvider(state, model, context, streamOptions),
|
|
1279
|
+
});
|
|
1280
|
+
|
|
1281
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
1282
|
+
state.runtimeContext = ctx;
|
|
1283
|
+
const config = readTargetLaunchConfig(state, ctx);
|
|
1284
|
+
state.providerOptions = config.providerOptions;
|
|
1285
|
+
installDeclaredRouteProviders(state, pi, ctx, config);
|
|
1286
|
+
updateRotationStatus(state, ctx);
|
|
1287
|
+
});
|
|
1288
|
+
|
|
1289
|
+
pi.on("before_agent_start", async (_event, ctx) => {
|
|
1290
|
+
state.runtimeContext = ctx;
|
|
1291
|
+
// Re-read per turn: this is what makes a provider-options toggle apply to
|
|
1292
|
+
// a broker that is already running, on its next turn.
|
|
1293
|
+
state.providerOptions = readTargetLaunchConfig(state, ctx).providerOptions;
|
|
1294
|
+
const restored = await restoreHigherRankIfAvailable(state, pi, ctx);
|
|
1295
|
+
if (restored && ctx.model && isManagedProvider(ctx.model.provider)) {
|
|
1296
|
+
logRotation(`restored higher-ranked route ${ctx.model.provider}/${ctx.model.id}`);
|
|
1297
|
+
setStatus(state, formatStatusLine(ctx.model.provider, Date.now(), ctx.model.id));
|
|
1298
|
+
}
|
|
1299
|
+
});
|
|
1300
|
+
|
|
1301
|
+
pi.on("model_select", async (_event, ctx) => {
|
|
1302
|
+
state.runtimeContext = ctx;
|
|
1303
|
+
updateRotationStatus(state, ctx);
|
|
1304
|
+
});
|
|
1305
|
+
|
|
1306
|
+
pi.registerCommand("provider-sub", {
|
|
1307
|
+
description: "Manage subscription credential pools for provider rotation",
|
|
1308
|
+
handler: async (args, ctx) => {
|
|
1309
|
+
const [providerArg, verb, ...rest] = parseCommand(args);
|
|
1310
|
+
const providerId = parseProvider(providerArg);
|
|
1311
|
+
if (!providerId) {
|
|
1312
|
+
ctx.ui.notify("Usage: /provider-sub <anthropic|openai-codex|openai> <list|add|select|rm>", "error");
|
|
1313
|
+
return;
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1316
|
+
const action = verb === "rm" ? "remove" : verb || "list";
|
|
1317
|
+
|
|
1318
|
+
if (action === "status" || action === "list") {
|
|
1319
|
+
const pool = readSubscriptionPool(providerId);
|
|
1320
|
+
const lines = [formatStatusLine(providerId, Date.now(), ctx.model?.provider === providerId ? ctx.model.id : undefined), ""];
|
|
1321
|
+
for (const [index, entry] of pool.entries()) {
|
|
1322
|
+
const cooling = formatCooldowns(entry);
|
|
1323
|
+
const cooldown = cooling ? ` ${cooling}` : "";
|
|
1324
|
+
const account = entry.accountId ? ` account=${shortAccountId(entry.accountId)}` : "";
|
|
1325
|
+
lines.push(`${index + 1}. ${entry.label}${account}${cooldown}`);
|
|
1326
|
+
}
|
|
1327
|
+
ctx.ui.notify(lines.join("\n"), "info");
|
|
1328
|
+
return;
|
|
1329
|
+
}
|
|
1330
|
+
|
|
1331
|
+
if (action === "add") {
|
|
1332
|
+
if (!ctx.hasUI) {
|
|
1333
|
+
ctx.ui.notify(`${getProviderLabel(providerId)} login requires an interactive UI.`, "error");
|
|
1334
|
+
return;
|
|
1335
|
+
}
|
|
1336
|
+
const pool = readSubscriptionPool(providerId);
|
|
1337
|
+
const label = (rest.join(" ") || (await ctx.ui.input(`${getProviderLabel(providerId)} subscription label`, "")) || "").trim();
|
|
1338
|
+
if (!label) return;
|
|
1339
|
+
if (pool.some((entry) => entry.label.toLowerCase() === label.toLowerCase())) {
|
|
1340
|
+
ctx.ui.notify(`${getProviderLabel(providerId)} subscription already exists: ${label}`, "error");
|
|
1341
|
+
return;
|
|
1342
|
+
}
|
|
1343
|
+
try {
|
|
1344
|
+
const cred = await activeLoginForProvider(providerId, ctx);
|
|
1345
|
+
const identity = await enrichManagedLoginIdentity(providerId, cred);
|
|
1346
|
+
// Explicit add always creates a new label, so a matching real account is rejected by
|
|
1347
|
+
// the locked uniqueness gate rather than creating a second quota slot.
|
|
1348
|
+
await addSubscription(providerId, {
|
|
1349
|
+
label,
|
|
1350
|
+
refresh: cred.refresh,
|
|
1351
|
+
access: cred.access,
|
|
1352
|
+
expires: cred.expires,
|
|
1353
|
+
...(identity.accountId ? { accountId: identity.accountId } : {}),
|
|
1354
|
+
...(loginClientId(cred) ? { clientId: loginClientId(cred)! } : {}),
|
|
1355
|
+
rateLimitedUntil: 0,
|
|
1356
|
+
lastAttemptAt: 0,
|
|
1357
|
+
lastRateLimitedAt: 0,
|
|
1358
|
+
});
|
|
1359
|
+
logRotation(`added ${getProviderLabel(providerId)} subscription "${label}"`);
|
|
1360
|
+
ctx.ui.notify(`Added ${getProviderLabel(providerId)} subscription: ${label}`, "info");
|
|
1361
|
+
updateRotationStatus(state, ctx);
|
|
1362
|
+
} catch (error) {
|
|
1363
|
+
ctx.ui.notify(error instanceof Error ? error.message : String(error), "error");
|
|
1364
|
+
}
|
|
1365
|
+
return;
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1368
|
+
if (action === "select") {
|
|
1369
|
+
const ref = rest.join(" ");
|
|
1370
|
+
if (!ref) {
|
|
1371
|
+
ctx.ui.notify(`Usage: /provider-sub ${providerId} select <label|index>`, "error");
|
|
1372
|
+
return;
|
|
1373
|
+
}
|
|
1374
|
+
try {
|
|
1375
|
+
await promoteSubscription(providerId, ref);
|
|
1376
|
+
logRotation(`selected ${getProviderLabel(providerId)} subscription "${ref}"`);
|
|
1377
|
+
ctx.ui.notify(`Preferred ${getProviderLabel(providerId)} subscription: ${ref}`, "info");
|
|
1378
|
+
updateRotationStatus(state, ctx);
|
|
1379
|
+
} catch (error) {
|
|
1380
|
+
ctx.ui.notify(error instanceof Error ? error.message : String(error), "error");
|
|
1381
|
+
}
|
|
1382
|
+
return;
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
if (action === "remove") {
|
|
1386
|
+
const ref = rest.join(" ");
|
|
1387
|
+
if (!ref) {
|
|
1388
|
+
ctx.ui.notify(`Usage: /provider-sub ${providerId} rm <label|index>`, "error");
|
|
1389
|
+
return;
|
|
1390
|
+
}
|
|
1391
|
+
try {
|
|
1392
|
+
await removeManagedAccount(providerId, ref);
|
|
1393
|
+
logRotation(`removed ${getProviderLabel(providerId)} subscription "${ref}"`);
|
|
1394
|
+
ctx.ui.notify(`Removed ${getProviderLabel(providerId)} subscription: ${ref}`, "info");
|
|
1395
|
+
updateRotationStatus(state, ctx);
|
|
1396
|
+
} catch (error) {
|
|
1397
|
+
ctx.ui.notify(error instanceof Error ? error.message : String(error), "error");
|
|
1398
|
+
}
|
|
1399
|
+
return;
|
|
1400
|
+
}
|
|
1401
|
+
|
|
1402
|
+
ctx.ui.notify(`Unknown /provider-sub verb: ${verb}`, "error");
|
|
1403
|
+
},
|
|
1404
|
+
});
|
|
1405
|
+
};
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
const defaultProviderRotationExtension = createProviderRotationExtension();
|
|
1409
|
+
export default defaultProviderRotationExtension;
|