omegon-pi 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +3 -0
- package/.omegon/profile.json +7 -0
- package/AGENTS.md +16 -0
- package/ARCHIVE_NOTE.md +28 -0
- package/LICENSE +15 -0
- package/README.md +296 -0
- package/bin/omegon-pi.mjs +244 -0
- package/bin/pi.mjs +9 -0
- package/extensions/00-secrets/index.ts +1239 -0
- package/extensions/00-splash/index.ts +604 -0
- package/extensions/00-splash/logo.ts +246 -0
- package/extensions/01-auth/auth.ts +476 -0
- package/extensions/01-auth/index.ts +289 -0
- package/extensions/auto-compact.ts +42 -0
- package/extensions/bootstrap/deps.ts +451 -0
- package/extensions/bootstrap/index.ts +1123 -0
- package/extensions/chronos/chronos.ts +324 -0
- package/extensions/chronos/index.ts +127 -0
- package/extensions/cleave/assessment.ts +768 -0
- package/extensions/cleave/bridge.ts +31 -0
- package/extensions/cleave/conflicts.ts +250 -0
- package/extensions/cleave/dispatcher.ts +1367 -0
- package/extensions/cleave/guardrails.ts +426 -0
- package/extensions/cleave/index.ts +3114 -0
- package/extensions/cleave/lifecycle-emitter.ts +20 -0
- package/extensions/cleave/native-dispatch.ts +218 -0
- package/extensions/cleave/openspec.ts +811 -0
- package/extensions/cleave/planner.ts +260 -0
- package/extensions/cleave/review.ts +580 -0
- package/extensions/cleave/rpc-child.ts +269 -0
- package/extensions/cleave/skills.ts +355 -0
- package/extensions/cleave/subprocess-tracker.ts +205 -0
- package/extensions/cleave/types.ts +315 -0
- package/extensions/cleave/workspace.ts +865 -0
- package/extensions/cleave/worktree.ts +243 -0
- package/extensions/core-renderers.ts +193 -0
- package/extensions/dashboard/context-gauge.ts +58 -0
- package/extensions/dashboard/file-watch.ts +14 -0
- package/extensions/dashboard/footer.ts +1375 -0
- package/extensions/dashboard/git.ts +193 -0
- package/extensions/dashboard/index.ts +481 -0
- package/extensions/dashboard/memory-audit.ts +34 -0
- package/extensions/dashboard/overlay-data.ts +705 -0
- package/extensions/dashboard/overlay.ts +365 -0
- package/extensions/dashboard/render-utils.ts +54 -0
- package/extensions/dashboard/types.ts +206 -0
- package/extensions/dashboard/uri-helper.ts +45 -0
- package/extensions/defaults.ts +274 -0
- package/extensions/design-tree/dashboard-state.ts +161 -0
- package/extensions/design-tree/design-card.ts +362 -0
- package/extensions/design-tree/index.ts +2181 -0
- package/extensions/design-tree/lifecycle-emitter.ts +41 -0
- package/extensions/design-tree/tree.ts +1720 -0
- package/extensions/design-tree/types.ts +165 -0
- package/extensions/effort/index.ts +532 -0
- package/extensions/effort/tiers.ts +146 -0
- package/extensions/effort/types.ts +105 -0
- package/extensions/igor/client.ts +167 -0
- package/extensions/igor/context.ts +61 -0
- package/extensions/igor/index.ts +259 -0
- package/extensions/igor/intents.ts +78 -0
- package/extensions/lib/debug.ts +69 -0
- package/extensions/lib/git-state.ts +227 -0
- package/extensions/lib/local-models.ts +157 -0
- package/extensions/lib/model-preferences.ts +51 -0
- package/extensions/lib/model-routing.ts +992 -0
- package/extensions/lib/omegon-subprocess.ts +152 -0
- package/extensions/lib/operator-fallback.ts +205 -0
- package/extensions/lib/operator-profile.ts +360 -0
- package/extensions/lib/provider-env.ts +163 -0
- package/extensions/lib/sci-ui.ts +421 -0
- package/extensions/lib/shared-state.ts +174 -0
- package/extensions/lib/slash-command-bridge.ts +262 -0
- package/extensions/lib/splash-state.ts +25 -0
- package/extensions/lib/typebox-helpers.ts +16 -0
- package/extensions/lib/types.d.ts +9 -0
- package/extensions/local-inference/index.ts +727 -0
- package/extensions/mcp-bridge/README.md +220 -0
- package/extensions/mcp-bridge/index.ts +956 -0
- package/extensions/mcp-bridge/lib.ts +365 -0
- package/extensions/mcp-bridge/mcp.json +3 -0
- package/extensions/mcp-bridge/package.json +11 -0
- package/extensions/model-budget.ts +752 -0
- package/extensions/offline-driver.ts +410 -0
- package/extensions/openspec/archive-gate.ts +164 -0
- package/extensions/openspec/branch-cleanup.ts +64 -0
- package/extensions/openspec/dashboard-state.ts +50 -0
- package/extensions/openspec/index.ts +1942 -0
- package/extensions/openspec/lifecycle-emitter.ts +65 -0
- package/extensions/openspec/lifecycle-files.ts +120 -0
- package/extensions/openspec/lifecycle.ts +50 -0
- package/extensions/openspec/reconcile.ts +187 -0
- package/extensions/openspec/spec.ts +1392 -0
- package/extensions/openspec/types.ts +98 -0
- package/extensions/project-memory/DESIGN-global-mind.md +198 -0
- package/extensions/project-memory/README.md +204 -0
- package/extensions/project-memory/api-types.ts +382 -0
- package/extensions/project-memory/compaction-policy.ts +29 -0
- package/extensions/project-memory/core.ts +164 -0
- package/extensions/project-memory/embeddings.ts +230 -0
- package/extensions/project-memory/extraction-v2.ts +636 -0
- package/extensions/project-memory/factstore.ts +2317 -0
- package/extensions/project-memory/index.ts +3517 -0
- package/extensions/project-memory/injection-metrics.ts +123 -0
- package/extensions/project-memory/jsonl-io.ts +36 -0
- package/extensions/project-memory/lifecycle.ts +340 -0
- package/extensions/project-memory/llm-direct.ts +260 -0
- package/extensions/project-memory/migration.ts +293 -0
- package/extensions/project-memory/package.json +9 -0
- package/extensions/project-memory/sci-renderers.ts +7 -0
- package/extensions/project-memory/template.ts +103 -0
- package/extensions/project-memory/triggers.ts +52 -0
- package/extensions/project-memory/types.ts +102 -0
- package/extensions/render/composition/fonts/Inter-Bold.ttf +0 -0
- package/extensions/render/composition/fonts/Inter-Regular.ttf +0 -0
- package/extensions/render/composition/fonts/Tomorrow-Bold.ttf +0 -0
- package/extensions/render/composition/fonts/Tomorrow-Regular.ttf +0 -0
- package/extensions/render/composition/package.json +22 -0
- package/extensions/render/composition/render.mjs +246 -0
- package/extensions/render/composition/test-comp.tsx +87 -0
- package/extensions/render/composition/types.ts +24 -0
- package/extensions/render/excalidraw/UPSTREAM.md +81 -0
- package/extensions/render/excalidraw/elements.ts +764 -0
- package/extensions/render/excalidraw/index.ts +66 -0
- package/extensions/render/excalidraw/types.ts +223 -0
- package/extensions/render/excalidraw-renderer/pyproject.toml +8 -0
- package/extensions/render/excalidraw-renderer/render_excalidraw.py +182 -0
- package/extensions/render/excalidraw-renderer/render_template.html +59 -0
- package/extensions/render/index.ts +830 -0
- package/extensions/render/native-diagrams/index.ts +57 -0
- package/extensions/render/native-diagrams/motifs.ts +542 -0
- package/extensions/render/native-diagrams/raster.ts +8 -0
- package/extensions/render/native-diagrams/scene.ts +75 -0
- package/extensions/render/native-diagrams/spec.ts +204 -0
- package/extensions/render/native-diagrams/svg.ts +116 -0
- package/extensions/sermon-widget.ts +144 -0
- package/extensions/sermon.ts +154 -0
- package/extensions/session-log.ts +174 -0
- package/extensions/spinner-verbs.ts +312 -0
- package/extensions/style.ts +281 -0
- package/extensions/terminal-title.ts +191 -0
- package/extensions/tool-profile/index.ts +296 -0
- package/extensions/tool-profile/profiles.ts +290 -0
- package/extensions/vault/index.ts +185 -0
- package/extensions/version-check.ts +94 -0
- package/extensions/view/index.ts +859 -0
- package/extensions/view/uri-resolver.ts +148 -0
- package/extensions/web-search/index.ts +185 -0
- package/extensions/web-search/providers.ts +121 -0
- package/extensions/web-ui/index.ts +110 -0
- package/extensions/web-ui/server.ts +265 -0
- package/extensions/web-ui/state.ts +462 -0
- package/extensions/web-ui/static/index.html +145 -0
- package/extensions/web-ui/types.ts +284 -0
- package/graphics/g140.png +0 -0
- package/graphics/icon.jpg +0 -0
- package/graphics/icon.svg +562 -0
- package/graphics/path1-4.jpg +0 -0
- package/node_modules/@mariozechner/clipboard/.yarnrc.yml +1 -0
- package/node_modules/@mariozechner/clipboard/Cargo.toml +26 -0
- package/node_modules/@mariozechner/clipboard/README.md +58 -0
- package/node_modules/@mariozechner/clipboard/build.rs +5 -0
- package/node_modules/@mariozechner/clipboard/exp.ts +12 -0
- package/node_modules/@mariozechner/clipboard/index.d.ts +23 -0
- package/node_modules/@mariozechner/clipboard/index.js +317 -0
- package/node_modules/@mariozechner/clipboard/package.json +56 -0
- package/node_modules/@mariozechner/clipboard/src/lib.rs +191 -0
- package/node_modules/@mariozechner/clipboard-darwin-arm64/README.md +3 -0
- package/node_modules/@mariozechner/clipboard-darwin-arm64/clipboard.darwin-arm64.node +0 -0
- package/node_modules/@mariozechner/clipboard-darwin-arm64/package.json +22 -0
- package/node_modules/@mariozechner/clipboard-darwin-universal/README.md +3 -0
- package/node_modules/@mariozechner/clipboard-darwin-universal/clipboard.darwin-universal.node +0 -0
- package/node_modules/@mariozechner/clipboard-darwin-universal/package.json +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/compiler/compiler.d.ts +55 -0
- package/node_modules/@sinclair/typebox/build/cjs/compiler/compiler.js +670 -0
- package/node_modules/@sinclair/typebox/build/cjs/compiler/index.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/compiler/index.js +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/errors/errors.d.ts +91 -0
- package/node_modules/@sinclair/typebox/build/cjs/errors/errors.js +599 -0
- package/node_modules/@sinclair/typebox/build/cjs/errors/function.d.ts +21 -0
- package/node_modules/@sinclair/typebox/build/cjs/errors/function.js +153 -0
- package/node_modules/@sinclair/typebox/build/cjs/errors/index.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/errors/index.js +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/index.d.ts +71 -0
- package/node_modules/@sinclair/typebox/build/cjs/index.js +97 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/index.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/index.js +39 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/runtime/guard.d.ts +23 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/runtime/guard.js +86 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/runtime/index.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/runtime/index.js +45 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/runtime/module.d.ts +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/runtime/module.js +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/runtime/parse.d.ts +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/runtime/parse.js +160 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/runtime/token.d.ts +8 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/runtime/token.js +230 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/runtime/types.d.ts +98 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/runtime/types.js +71 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/static/index.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/static/index.js +43 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/static/parse.d.ts +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/static/parse.js +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/static/token.d.ts +108 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/static/token.js +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/static/types.d.ts +69 -0
- package/node_modules/@sinclair/typebox/build/cjs/parser/static/types.js +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/syntax/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/syntax/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/syntax/mapping.d.ts +167 -0
- package/node_modules/@sinclair/typebox/build/cjs/syntax/mapping.js +491 -0
- package/node_modules/@sinclair/typebox/build/cjs/syntax/parser.d.ts +162 -0
- package/node_modules/@sinclair/typebox/build/cjs/syntax/parser.js +191 -0
- package/node_modules/@sinclair/typebox/build/cjs/syntax/syntax.d.ts +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/syntax/syntax.js +54 -0
- package/node_modules/@sinclair/typebox/build/cjs/system/index.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/system/index.js +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/system/policy.d.ts +29 -0
- package/node_modules/@sinclair/typebox/build/cjs/system/policy.js +58 -0
- package/node_modules/@sinclair/typebox/build/cjs/system/system.d.ts +16 -0
- package/node_modules/@sinclair/typebox/build/cjs/system/system.js +43 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/any/any.d.ts +8 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/any/any.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/any/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/any/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/argument/argument.d.ts +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/argument/argument.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/argument/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/argument/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/array/array.d.ts +28 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/array/array.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/array/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/array/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/async-iterator/async-iterator.d.ts +11 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/async-iterator/async-iterator.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/async-iterator/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/async-iterator/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/awaited/awaited.d.ts +14 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/awaited/awaited.js +41 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/awaited/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/awaited/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/bigint/bigint.d.ts +16 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/bigint/bigint.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/bigint/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/bigint/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/boolean/boolean.d.ts +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/boolean/boolean.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/boolean/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/boolean/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/clone/index.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/clone/index.js +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/clone/type.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/clone/type.js +14 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/clone/value.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/clone/value.js +73 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/composite/composite.d.ts +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/composite/composite.js +46 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/composite/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/composite/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/computed/computed.d.ts +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/computed/computed.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/computed/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/computed/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/const/const.d.ts +27 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/const/const.js +58 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/const/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/const/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/constructor/constructor.d.ts +23 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/constructor/constructor.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/constructor/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/constructor/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/constructor-parameters/constructor-parameters.d.ts +7 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/constructor-parameters/constructor-parameters.js +44 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/constructor-parameters/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/constructor-parameters/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/create/immutable.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/create/immutable.js +70 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/create/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/create/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/create/type.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/create/type.js +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/date/date.d.ts +21 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/date/date.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/date/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/date/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/discard/discard.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/discard/discard.js +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/discard/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/discard/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/enum/enum.d.ts +14 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/enum/enum.js +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/enum/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/enum/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/error/error.d.ts +4 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/error/error.js +11 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/error/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/error/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/exclude/exclude-from-mapped-result.d.ts +11 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/exclude/exclude-from-mapped-result.js +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/exclude/exclude-from-template-literal.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/exclude/exclude-from-template-literal.js +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/exclude/exclude.d.ts +21 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/exclude/exclude.js +29 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/exclude/index.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/exclude/index.js +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extends/extends-check.d.ts +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extends/extends-check.js +641 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extends/extends-from-mapped-key.d.ts +14 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extends/extends-from-mapped-key.js +29 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extends/extends-from-mapped-result.d.ts +11 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extends/extends-from-mapped-result.js +23 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extends/extends-undefined.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extends/extends-undefined.js +24 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extends/extends.d.ts +16 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extends/extends.js +27 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extends/index.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extends/index.js +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extract/extract-from-mapped-result.d.ts +11 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extract/extract-from-mapped-result.js +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extract/extract-from-template-literal.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extract/extract-from-template-literal.js +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extract/extract.d.ts +21 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extract/extract.js +29 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extract/index.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/extract/index.js +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/function/function.d.ts +23 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/function/function.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/function/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/function/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/guard/index.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/guard/index.js +40 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/guard/kind.d.ts +147 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/guard/kind.js +320 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/guard/type.d.ts +152 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/guard/type.js +597 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/guard/value.d.ts +34 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/guard/value.js +89 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/helpers/helpers.d.ts +42 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/helpers/helpers.js +8 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/helpers/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/helpers/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/index.d.ts +71 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/index.js +88 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/indexed/index.d.ts +4 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/indexed/index.js +21 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/indexed/indexed-from-mapped-key.d.ts +13 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/indexed/indexed-from-mapped-key.js +26 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/indexed/indexed-from-mapped-result.d.ts +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/indexed/indexed-from-mapped-result.js +24 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/indexed/indexed-property-keys.d.ts +14 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/indexed/indexed-property-keys.js +36 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/indexed/indexed.d.ts +52 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/indexed/indexed.js +98 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/instance-type/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/instance-type/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/instance-type/instance-type.d.ts +6 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/instance-type/instance-type.js +44 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/instantiate/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/instantiate/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/instantiate/instantiate.d.ts +50 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/instantiate/instantiate.js +153 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/integer/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/integer/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/integer/integer.d.ts +16 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/integer/integer.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intersect/index.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intersect/index.js +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intersect/intersect-create.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intersect/intersect-create.js +23 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intersect/intersect-evaluated.d.ts +13 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intersect/intersect-evaluated.js +42 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intersect/intersect-type.d.ts +15 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intersect/intersect-type.js +4 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intersect/intersect.d.ts +6 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intersect/intersect.js +21 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/capitalize.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/capitalize.js +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/index.d.ts +6 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/index.js +23 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/intrinsic-from-mapped-key.d.ts +14 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/intrinsic-from-mapped-key.js +30 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/intrinsic.d.ts +16 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/intrinsic.js +68 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/lowercase.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/lowercase.js +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/uncapitalize.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/uncapitalize.js +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/uppercase.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/intrinsic/uppercase.js +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/iterator/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/iterator/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/iterator/iterator.d.ts +11 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/iterator/iterator.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/keyof/index.d.ts +4 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/keyof/index.js +21 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/keyof/keyof-from-mapped-result.d.ts +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/keyof/keyof-from-mapped-result.js +23 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/keyof/keyof-property-entries.d.ts +7 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/keyof/keyof-property-entries.js +16 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/keyof/keyof-property-keys.d.ts +24 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/keyof/keyof-property-keys.js +78 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/keyof/keyof.d.ts +21 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/keyof/keyof.js +40 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/literal/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/literal/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/literal/literal.d.ts +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/literal/literal.js +14 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/mapped/index.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/mapped/index.js +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/mapped/mapped-key.d.ts +8 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/mapped/mapped-key.js +13 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/mapped/mapped-result.d.ts +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/mapped/mapped-result.js +13 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/mapped/mapped.d.ts +47 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/mapped/mapped.js +107 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/module/compute.d.ts +59 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/module/compute.js +205 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/module/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/module/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/module/infer.d.ts +49 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/module/infer.js +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/module/module.d.ts +27 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/module/module.js +38 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/never/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/never/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/never/never.d.ts +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/never/never.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/not/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/not/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/not/not.d.ts +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/not/not.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/null/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/null/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/null/null.d.ts +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/null/null.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/number/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/number/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/number/number.d.ts +16 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/number/number.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/object/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/object/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/object/object.d.ts +51 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/object/object.js +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/omit/index.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/omit/index.js +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/omit/omit-from-mapped-key.d.ts +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/omit/omit-from-mapped-key.js +26 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/omit/omit-from-mapped-result.d.ts +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/omit/omit-from-mapped-result.js +23 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/omit/omit.d.ts +36 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/omit/omit.js +75 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/optional/index.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/optional/index.js +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/optional/optional-from-mapped-result.d.ts +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/optional/optional-from-mapped-result.js +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/optional/optional.d.ts +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/optional/optional.js +26 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/parameters/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/parameters/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/parameters/parameters.d.ts +7 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/parameters/parameters.js +44 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/partial/index.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/partial/index.js +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/partial/partial-from-mapped-result.d.ts +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/partial/partial-from-mapped-result.js +23 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/partial/partial.d.ts +35 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/partial/partial.js +111 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/patterns/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/patterns/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/patterns/patterns.d.ts +8 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/patterns/patterns.js +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/pick/index.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/pick/index.js +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/pick/pick-from-mapped-key.d.ts +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/pick/pick-from-mapped-key.js +28 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/pick/pick-from-mapped-result.d.ts +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/pick/pick-from-mapped-result.js +23 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/pick/pick.d.ts +36 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/pick/pick.js +70 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/promise/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/promise/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/promise/promise.d.ts +11 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/promise/promise.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/readonly/index.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/readonly/index.js +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/readonly/readonly-from-mapped-result.d.ts +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/readonly/readonly-from-mapped-result.js +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/readonly/readonly.d.ts +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/readonly/readonly.js +26 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/readonly-optional/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/readonly-optional/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/readonly-optional/readonly-optional.d.ts +6 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/readonly-optional/readonly-optional.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/record/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/record/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/record/record.d.ts +71 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/record/record.js +123 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/recursive/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/recursive/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/recursive/recursive.d.ts +16 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/recursive/recursive.js +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/ref/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/ref/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/ref/ref.d.ts +41 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/ref/ref.js +14 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/regexp/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/regexp/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/regexp/regexp.d.ts +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/regexp/regexp.js +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/registry/format.d.ts +13 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/registry/format.js +35 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/registry/index.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/registry/index.js +39 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/registry/type.d.ts +13 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/registry/type.js +35 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/required/index.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/required/index.js +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/required/required-from-mapped-result.d.ts +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/required/required-from-mapped-result.js +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/required/required.d.ts +35 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/required/required.js +110 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/rest/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/rest/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/rest/rest.d.ts +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/rest/rest.js +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/return-type/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/return-type/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/return-type/return-type.d.ts +6 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/return-type/return-type.js +44 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/schema/anyschema.d.ts +33 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/schema/anyschema.js +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/schema/index.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/schema/index.js +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/schema/schema.d.ts +29 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/schema/schema.js +4 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/sets/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/sets/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/sets/set.d.ts +28 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/sets/set.js +59 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/static/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/static/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/static/static.d.ts +39 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/static/static.js +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/string/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/string/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/string/string.d.ts +25 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/string/string.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/symbol/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/symbol/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/symbol/symbol.d.ts +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/symbol/symbol.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/symbols/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/symbols/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/symbols/symbols.d.ts +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/symbols/symbols.js +14 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/finite.d.ts +19 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/finite.js +56 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/generate.d.ts +21 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/generate.js +60 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/index.d.ts +7 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/index.js +24 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/parse.d.ts +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/parse.js +174 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/pattern.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/pattern.js +39 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/syntax.d.ts +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/syntax.js +59 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/template-literal.d.ts +30 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/template-literal.js +17 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/union.d.ts +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/template-literal/union.js +13 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/transform/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/transform/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/transform/transform.d.ts +30 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/transform/transform.js +47 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/tuple/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/tuple/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/tuple/tuple.d.ts +16 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/tuple/tuple.js +13 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/type/index.d.ts +6 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/type/index.js +51 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/type/javascript.d.ts +64 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/type/javascript.js +104 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/type/json.d.ts +208 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/type/json.js +226 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/type/type.d.ts +59 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/type/type.js +129 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/uint8array/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/uint8array/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/uint8array/uint8array.d.ts +13 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/uint8array/uint8array.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/undefined/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/undefined/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/undefined/undefined.d.ts +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/undefined/undefined.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/union/index.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/union/index.js +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/union/union-create.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/union/union-create.js +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/union/union-evaluated.d.ts +13 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/union/union-evaluated.js +40 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/union/union-type.d.ts +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/union/union-type.js +4 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/union/union.d.ts +6 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/union/union.js +14 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/unknown/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/unknown/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/unknown/unknown.d.ts +8 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/unknown/unknown.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/unsafe/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/unsafe/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/unsafe/unsafe.d.ts +11 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/unsafe/unsafe.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/void/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/void/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/void/void.d.ts +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/type/void/void.js +10 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/assert/assert.d.ts +15 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/assert/assert.js +55 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/assert/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/assert/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/cast/cast.d.ts +11 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/cast/cast.js +241 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/cast/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/cast/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/check/check.d.ts +11 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/check/check.js +476 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/check/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/check/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/clean/clean.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/clean/clean.js +149 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/clean/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/clean/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/clone/clone.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/clone/clone.js +60 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/clone/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/clone/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/convert/convert.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/convert/convert.js +264 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/convert/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/convert/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/create/create.d.ts +11 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/create/create.js +474 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/create/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/create/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/decode/decode.d.ts +6 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/decode/decode.js +14 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/decode/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/decode/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/default/default.d.ts +5 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/default/default.js +176 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/default/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/default/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/delta/delta.d.ts +32 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/delta/delta.js +178 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/delta/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/delta/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/deref/deref.d.ts +12 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/deref/deref.js +36 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/deref/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/deref/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/encode/encode.d.ts +6 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/encode/encode.js +15 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/encode/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/encode/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/equal/equal.d.ts +2 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/equal/equal.js +50 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/equal/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/equal/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/guard/guard.d.ts +74 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/guard/guard.js +195 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/guard/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/guard/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/hash/hash.d.ts +7 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/hash/hash.js +152 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/hash/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/hash/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/index.d.ts +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/index.js +53 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/mutate/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/mutate/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/mutate/mutate.d.ts +9 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/mutate/mutate.js +104 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/parse/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/parse/index.js +18 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/parse/parse.d.ts +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/parse/parse.js +87 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/pointer/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/pointer/index.js +38 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/pointer/pointer.d.ts +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/pointer/pointer.js +126 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/transform/decode.d.ts +22 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/transform/decode.js +214 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/transform/encode.d.ts +23 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/transform/encode.js +225 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/transform/has.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/transform/has.js +133 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/transform/index.d.ts +3 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/transform/index.js +20 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/value/index.d.ts +1 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/value/index.js +38 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/value/value.d.ts +16 -0
- package/node_modules/@sinclair/typebox/build/cjs/value/value/value.js +39 -0
- package/node_modules/@sinclair/typebox/build/esm/compiler/compiler.d.mts +55 -0
- package/node_modules/@sinclair/typebox/build/esm/compiler/compiler.mjs +663 -0
- package/node_modules/@sinclair/typebox/build/esm/compiler/index.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/compiler/index.mjs +2 -0
- package/node_modules/@sinclair/typebox/build/esm/errors/errors.d.mts +91 -0
- package/node_modules/@sinclair/typebox/build/esm/errors/errors.mjs +592 -0
- package/node_modules/@sinclair/typebox/build/esm/errors/function.d.mts +21 -0
- package/node_modules/@sinclair/typebox/build/esm/errors/function.mjs +147 -0
- package/node_modules/@sinclair/typebox/build/esm/errors/index.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/errors/index.mjs +2 -0
- package/node_modules/@sinclair/typebox/build/esm/index.d.mts +71 -0
- package/node_modules/@sinclair/typebox/build/esm/index.mjs +80 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/index.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/index.mjs +2 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/runtime/guard.d.mts +23 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/runtime/guard.mjs +72 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/runtime/index.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/runtime/index.mjs +5 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/runtime/module.d.mts +9 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/runtime/module.mjs +17 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/runtime/parse.d.mts +9 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/runtime/parse.mjs +123 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/runtime/token.d.mts +8 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/runtime/token.mjs +223 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/runtime/types.d.mts +98 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/runtime/types.mjs +55 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/static/index.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/static/index.mjs +3 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/static/parse.d.mts +20 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/static/parse.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/static/token.d.mts +108 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/static/token.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/static/types.d.mts +69 -0
- package/node_modules/@sinclair/typebox/build/esm/parser/static/types.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/syntax/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/syntax/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/syntax/mapping.d.mts +167 -0
- package/node_modules/@sinclair/typebox/build/esm/syntax/mapping.mjs +386 -0
- package/node_modules/@sinclair/typebox/build/esm/syntax/parser.d.mts +162 -0
- package/node_modules/@sinclair/typebox/build/esm/syntax/parser.mjs +78 -0
- package/node_modules/@sinclair/typebox/build/esm/syntax/syntax.d.mts +12 -0
- package/node_modules/@sinclair/typebox/build/esm/syntax/syntax.mjs +16 -0
- package/node_modules/@sinclair/typebox/build/esm/system/index.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/system/index.mjs +2 -0
- package/node_modules/@sinclair/typebox/build/esm/system/policy.d.mts +29 -0
- package/node_modules/@sinclair/typebox/build/esm/system/policy.mjs +54 -0
- package/node_modules/@sinclair/typebox/build/esm/system/system.d.mts +16 -0
- package/node_modules/@sinclair/typebox/build/esm/system/system.mjs +37 -0
- package/node_modules/@sinclair/typebox/build/esm/type/any/any.d.mts +8 -0
- package/node_modules/@sinclair/typebox/build/esm/type/any/any.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/any/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/any/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/argument/argument.d.mts +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/argument/argument.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/argument/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/argument/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/array/array.d.mts +28 -0
- package/node_modules/@sinclair/typebox/build/esm/type/array/array.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/array/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/array/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.d.mts +11 -0
- package/node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/async-iterator/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/async-iterator/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.d.mts +14 -0
- package/node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.mjs +37 -0
- package/node_modules/@sinclair/typebox/build/esm/type/awaited/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/awaited/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.d.mts +16 -0
- package/node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/bigint/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/bigint/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.d.mts +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/boolean/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/boolean/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/clone/index.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/clone/index.mjs +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/clone/type.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/clone/type.mjs +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/clone/value.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/clone/value.mjs +36 -0
- package/node_modules/@sinclair/typebox/build/esm/type/composite/composite.d.mts +18 -0
- package/node_modules/@sinclair/typebox/build/esm/type/composite/composite.mjs +42 -0
- package/node_modules/@sinclair/typebox/build/esm/type/composite/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/composite/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/computed/computed.d.mts +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/computed/computed.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/computed/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/computed/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/const/const.d.mts +27 -0
- package/node_modules/@sinclair/typebox/build/esm/type/const/const.mjs +54 -0
- package/node_modules/@sinclair/typebox/build/esm/type/const/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/const/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.d.mts +23 -0
- package/node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/constructor/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/constructor/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.d.mts +7 -0
- package/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.mjs +7 -0
- package/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/create/immutable.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/create/immutable.mjs +33 -0
- package/node_modules/@sinclair/typebox/build/esm/type/create/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/create/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/create/type.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/create/type.mjs +15 -0
- package/node_modules/@sinclair/typebox/build/esm/type/date/date.d.mts +21 -0
- package/node_modules/@sinclair/typebox/build/esm/type/date/date.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/date/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/date/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/discard/discard.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/discard/discard.mjs +8 -0
- package/node_modules/@sinclair/typebox/build/esm/type/discard/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/discard/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/enum/enum.d.mts +14 -0
- package/node_modules/@sinclair/typebox/build/esm/type/enum/enum.mjs +18 -0
- package/node_modules/@sinclair/typebox/build/esm/type/enum/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/enum/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/error/error.d.mts +4 -0
- package/node_modules/@sinclair/typebox/build/esm/type/error/error.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/error/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/error/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.d.mts +11 -0
- package/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.mjs +18 -0
- package/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.mjs +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.d.mts +21 -0
- package/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.mjs +25 -0
- package/node_modules/@sinclair/typebox/build/esm/type/exclude/index.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/exclude/index.mjs +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.d.mts +10 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.mjs +635 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.d.mts +14 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.mjs +25 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.d.mts +11 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.mjs +19 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extends/extends-undefined.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extends/extends-undefined.mjs +20 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extends/extends.d.mts +16 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extends/extends.mjs +23 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extends/index.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extends/index.mjs +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.d.mts +11 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.mjs +18 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.mjs +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extract/extract.d.mts +21 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extract/extract.mjs +25 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extract/index.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/extract/index.mjs +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/function/function.d.mts +23 -0
- package/node_modules/@sinclair/typebox/build/esm/type/function/function.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/function/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/function/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/guard/index.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/guard/index.mjs +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/guard/kind.d.mts +147 -0
- package/node_modules/@sinclair/typebox/build/esm/type/guard/kind.mjs +235 -0
- package/node_modules/@sinclair/typebox/build/esm/type/guard/type.d.mts +152 -0
- package/node_modules/@sinclair/typebox/build/esm/type/guard/type.mjs +509 -0
- package/node_modules/@sinclair/typebox/build/esm/type/guard/value.d.mts +34 -0
- package/node_modules/@sinclair/typebox/build/esm/type/guard/value.mjs +70 -0
- package/node_modules/@sinclair/typebox/build/esm/type/helpers/helpers.d.mts +42 -0
- package/node_modules/@sinclair/typebox/build/esm/type/helpers/helpers.mjs +4 -0
- package/node_modules/@sinclair/typebox/build/esm/type/helpers/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/helpers/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/index.d.mts +71 -0
- package/node_modules/@sinclair/typebox/build/esm/type/index.mjs +71 -0
- package/node_modules/@sinclair/typebox/build/esm/type/indexed/index.d.mts +4 -0
- package/node_modules/@sinclair/typebox/build/esm/type/indexed/index.mjs +4 -0
- package/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.d.mts +13 -0
- package/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.mjs +22 -0
- package/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.d.mts +12 -0
- package/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.mjs +20 -0
- package/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.d.mts +14 -0
- package/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.mjs +32 -0
- package/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.d.mts +52 -0
- package/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.mjs +91 -0
- package/node_modules/@sinclair/typebox/build/esm/type/instance-type/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/instance-type/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.d.mts +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.mjs +7 -0
- package/node_modules/@sinclair/typebox/build/esm/type/instantiate/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/instantiate/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.d.mts +50 -0
- package/node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.mjs +115 -0
- package/node_modules/@sinclair/typebox/build/esm/type/integer/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/integer/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/integer/integer.d.mts +16 -0
- package/node_modules/@sinclair/typebox/build/esm/type/integer/integer.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intersect/index.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intersect/index.mjs +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-create.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-create.mjs +19 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.d.mts +13 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.mjs +38 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-type.d.mts +15 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-type.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.d.mts +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.mjs +17 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.mjs +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/index.d.mts +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/index.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.d.mts +14 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.mjs +26 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.d.mts +16 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.mjs +64 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.mjs +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.mjs +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.mjs +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/iterator/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/iterator/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.d.mts +11 -0
- package/node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/keyof/index.d.mts +4 -0
- package/node_modules/@sinclair/typebox/build/esm/type/keyof/index.mjs +4 -0
- package/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.d.mts +12 -0
- package/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.mjs +19 -0
- package/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-entries.d.mts +7 -0
- package/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-entries.mjs +12 -0
- package/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.d.mts +24 -0
- package/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.mjs +73 -0
- package/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.d.mts +21 -0
- package/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.mjs +35 -0
- package/node_modules/@sinclair/typebox/build/esm/type/literal/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/literal/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/literal/literal.d.mts +10 -0
- package/node_modules/@sinclair/typebox/build/esm/type/literal/literal.mjs +10 -0
- package/node_modules/@sinclair/typebox/build/esm/type/mapped/index.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/mapped/index.mjs +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-key.d.mts +8 -0
- package/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-key.mjs +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.d.mts +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.mjs +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.d.mts +47 -0
- package/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.mjs +102 -0
- package/node_modules/@sinclair/typebox/build/esm/type/module/compute.d.mts +59 -0
- package/node_modules/@sinclair/typebox/build/esm/type/module/compute.mjs +166 -0
- package/node_modules/@sinclair/typebox/build/esm/type/module/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/module/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/module/infer.d.mts +49 -0
- package/node_modules/@sinclair/typebox/build/esm/type/module/infer.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/module/module.d.mts +27 -0
- package/node_modules/@sinclair/typebox/build/esm/type/module/module.mjs +32 -0
- package/node_modules/@sinclair/typebox/build/esm/type/never/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/never/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/never/never.d.mts +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/never/never.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/not/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/not/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/not/not.d.mts +10 -0
- package/node_modules/@sinclair/typebox/build/esm/type/not/not.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/null/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/null/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/null/null.d.mts +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/null/null.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/number/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/number/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/number/number.d.mts +16 -0
- package/node_modules/@sinclair/typebox/build/esm/type/number/number.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/object/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/object/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/object/object.d.mts +51 -0
- package/node_modules/@sinclair/typebox/build/esm/type/object/object.mjs +18 -0
- package/node_modules/@sinclair/typebox/build/esm/type/omit/index.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/omit/index.mjs +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.d.mts +12 -0
- package/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.mjs +22 -0
- package/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.d.mts +12 -0
- package/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.mjs +19 -0
- package/node_modules/@sinclair/typebox/build/esm/type/omit/omit.d.mts +36 -0
- package/node_modules/@sinclair/typebox/build/esm/type/omit/omit.mjs +71 -0
- package/node_modules/@sinclair/typebox/build/esm/type/optional/index.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/optional/index.mjs +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.d.mts +10 -0
- package/node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.mjs +18 -0
- package/node_modules/@sinclair/typebox/build/esm/type/optional/optional.d.mts +20 -0
- package/node_modules/@sinclair/typebox/build/esm/type/optional/optional.mjs +22 -0
- package/node_modules/@sinclair/typebox/build/esm/type/parameters/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/parameters/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.d.mts +7 -0
- package/node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.mjs +7 -0
- package/node_modules/@sinclair/typebox/build/esm/type/partial/index.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/partial/index.mjs +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.d.mts +12 -0
- package/node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.mjs +19 -0
- package/node_modules/@sinclair/typebox/build/esm/type/partial/partial.d.mts +35 -0
- package/node_modules/@sinclair/typebox/build/esm/type/partial/partial.mjs +74 -0
- package/node_modules/@sinclair/typebox/build/esm/type/patterns/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/patterns/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.d.mts +8 -0
- package/node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.mjs +8 -0
- package/node_modules/@sinclair/typebox/build/esm/type/pick/index.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/pick/index.mjs +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.d.mts +12 -0
- package/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.mjs +24 -0
- package/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.d.mts +12 -0
- package/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.mjs +19 -0
- package/node_modules/@sinclair/typebox/build/esm/type/pick/pick.d.mts +36 -0
- package/node_modules/@sinclair/typebox/build/esm/type/pick/pick.mjs +66 -0
- package/node_modules/@sinclair/typebox/build/esm/type/promise/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/promise/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/promise/promise.d.mts +11 -0
- package/node_modules/@sinclair/typebox/build/esm/type/promise/promise.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/readonly/index.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/readonly/index.mjs +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.d.mts +10 -0
- package/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.mjs +18 -0
- package/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.d.mts +20 -0
- package/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.mjs +22 -0
- package/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.d.mts +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/record/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/record/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/record/record.d.mts +71 -0
- package/node_modules/@sinclair/typebox/build/esm/type/record/record.mjs +116 -0
- package/node_modules/@sinclair/typebox/build/esm/type/recursive/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/recursive/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.d.mts +16 -0
- package/node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.mjs +15 -0
- package/node_modules/@sinclair/typebox/build/esm/type/ref/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/ref/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/ref/ref.d.mts +41 -0
- package/node_modules/@sinclair/typebox/build/esm/type/ref/ref.mjs +10 -0
- package/node_modules/@sinclair/typebox/build/esm/type/regexp/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/regexp/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.d.mts +20 -0
- package/node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.mjs +8 -0
- package/node_modules/@sinclair/typebox/build/esm/type/registry/format.d.mts +13 -0
- package/node_modules/@sinclair/typebox/build/esm/type/registry/format.mjs +26 -0
- package/node_modules/@sinclair/typebox/build/esm/type/registry/index.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/registry/index.mjs +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/registry/type.d.mts +13 -0
- package/node_modules/@sinclair/typebox/build/esm/type/registry/type.mjs +26 -0
- package/node_modules/@sinclair/typebox/build/esm/type/required/index.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/required/index.mjs +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.d.mts +12 -0
- package/node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.mjs +18 -0
- package/node_modules/@sinclair/typebox/build/esm/type/required/required.d.mts +35 -0
- package/node_modules/@sinclair/typebox/build/esm/type/required/required.mjs +73 -0
- package/node_modules/@sinclair/typebox/build/esm/type/rest/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/rest/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/rest/rest.d.mts +10 -0
- package/node_modules/@sinclair/typebox/build/esm/type/rest/rest.mjs +15 -0
- package/node_modules/@sinclair/typebox/build/esm/type/return-type/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/return-type/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.d.mts +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.mjs +7 -0
- package/node_modules/@sinclair/typebox/build/esm/type/schema/anyschema.d.mts +33 -0
- package/node_modules/@sinclair/typebox/build/esm/type/schema/anyschema.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/schema/index.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/schema/index.mjs +2 -0
- package/node_modules/@sinclair/typebox/build/esm/type/schema/schema.d.mts +29 -0
- package/node_modules/@sinclair/typebox/build/esm/type/schema/schema.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/sets/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/sets/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/sets/set.d.mts +28 -0
- package/node_modules/@sinclair/typebox/build/esm/type/sets/set.mjs +48 -0
- package/node_modules/@sinclair/typebox/build/esm/type/static/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/static/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/static/static.d.mts +39 -0
- package/node_modules/@sinclair/typebox/build/esm/type/static/static.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/string/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/string/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/string/string.d.mts +25 -0
- package/node_modules/@sinclair/typebox/build/esm/type/string/string.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/symbol/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/symbol/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.d.mts +10 -0
- package/node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/symbols/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/symbols/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.d.mts +10 -0
- package/node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs +10 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.d.mts +19 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.mjs +49 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.d.mts +21 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.mjs +53 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/index.d.mts +7 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/index.mjs +7 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.d.mts +20 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.mjs +167 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.mjs +33 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.d.mts +20 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.mjs +55 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.d.mts +30 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.mjs +13 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/union.d.mts +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/template-literal/union.mjs +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/transform/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/transform/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/transform/transform.d.mts +30 -0
- package/node_modules/@sinclair/typebox/build/esm/type/transform/transform.mjs +40 -0
- package/node_modules/@sinclair/typebox/build/esm/type/tuple/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/tuple/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.d.mts +16 -0
- package/node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.mjs +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/type/index.d.mts +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/type/index.mjs +13 -0
- package/node_modules/@sinclair/typebox/build/esm/type/type/javascript.d.mts +64 -0
- package/node_modules/@sinclair/typebox/build/esm/type/type/javascript.mjs +99 -0
- package/node_modules/@sinclair/typebox/build/esm/type/type/json.d.mts +208 -0
- package/node_modules/@sinclair/typebox/build/esm/type/type/json.mjs +221 -0
- package/node_modules/@sinclair/typebox/build/esm/type/type/type.d.mts +59 -0
- package/node_modules/@sinclair/typebox/build/esm/type/type/type.mjs +62 -0
- package/node_modules/@sinclair/typebox/build/esm/type/uint8array/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/uint8array/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.d.mts +13 -0
- package/node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/undefined/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/undefined/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.d.mts +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/union/index.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/union/index.mjs +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/union/union-create.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/type/union/union-create.mjs +5 -0
- package/node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.d.mts +13 -0
- package/node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.mjs +36 -0
- package/node_modules/@sinclair/typebox/build/esm/type/union/union-type.d.mts +12 -0
- package/node_modules/@sinclair/typebox/build/esm/type/union/union-type.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/union/union.d.mts +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/union/union.mjs +10 -0
- package/node_modules/@sinclair/typebox/build/esm/type/unknown/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/unknown/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.d.mts +8 -0
- package/node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/unsafe/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/unsafe/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.d.mts +11 -0
- package/node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/type/void/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/void/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/type/void/void.d.mts +9 -0
- package/node_modules/@sinclair/typebox/build/esm/type/void/void.mjs +6 -0
- package/node_modules/@sinclair/typebox/build/esm/value/assert/assert.d.mts +15 -0
- package/node_modules/@sinclair/typebox/build/esm/value/assert/assert.mjs +49 -0
- package/node_modules/@sinclair/typebox/build/esm/value/assert/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/assert/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/cast/cast.d.mts +11 -0
- package/node_modules/@sinclair/typebox/build/esm/value/cast/cast.mjs +235 -0
- package/node_modules/@sinclair/typebox/build/esm/value/cast/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/cast/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/check/check.d.mts +11 -0
- package/node_modules/@sinclair/typebox/build/esm/value/check/check.mjs +470 -0
- package/node_modules/@sinclair/typebox/build/esm/value/check/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/check/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/clean/clean.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/value/clean/clean.mjs +145 -0
- package/node_modules/@sinclair/typebox/build/esm/value/clean/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/clean/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/clone/clone.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/value/clone/clone.mjs +56 -0
- package/node_modules/@sinclair/typebox/build/esm/value/clone/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/clone/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/convert/convert.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/value/convert/convert.mjs +260 -0
- package/node_modules/@sinclair/typebox/build/esm/value/convert/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/convert/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/create/create.d.mts +11 -0
- package/node_modules/@sinclair/typebox/build/esm/value/create/create.mjs +468 -0
- package/node_modules/@sinclair/typebox/build/esm/value/create/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/create/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/decode/decode.d.mts +6 -0
- package/node_modules/@sinclair/typebox/build/esm/value/decode/decode.mjs +10 -0
- package/node_modules/@sinclair/typebox/build/esm/value/decode/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/decode/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/default/default.d.mts +5 -0
- package/node_modules/@sinclair/typebox/build/esm/value/default/default.mjs +172 -0
- package/node_modules/@sinclair/typebox/build/esm/value/default/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/default/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/delta/delta.d.mts +32 -0
- package/node_modules/@sinclair/typebox/build/esm/value/delta/delta.mjs +171 -0
- package/node_modules/@sinclair/typebox/build/esm/value/delta/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/delta/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/deref/deref.d.mts +12 -0
- package/node_modules/@sinclair/typebox/build/esm/value/deref/deref.mjs +29 -0
- package/node_modules/@sinclair/typebox/build/esm/value/deref/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/deref/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/encode/encode.d.mts +6 -0
- package/node_modules/@sinclair/typebox/build/esm/value/encode/encode.mjs +11 -0
- package/node_modules/@sinclair/typebox/build/esm/value/encode/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/encode/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/equal/equal.d.mts +2 -0
- package/node_modules/@sinclair/typebox/build/esm/value/equal/equal.mjs +46 -0
- package/node_modules/@sinclair/typebox/build/esm/value/equal/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/equal/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/guard/guard.d.mts +74 -0
- package/node_modules/@sinclair/typebox/build/esm/value/guard/guard.mjs +158 -0
- package/node_modules/@sinclair/typebox/build/esm/value/guard/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/guard/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/hash/hash.d.mts +7 -0
- package/node_modules/@sinclair/typebox/build/esm/value/hash/hash.mjs +146 -0
- package/node_modules/@sinclair/typebox/build/esm/value/hash/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/hash/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/index.d.mts +20 -0
- package/node_modules/@sinclair/typebox/build/esm/value/index.mjs +32 -0
- package/node_modules/@sinclair/typebox/build/esm/value/mutate/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/mutate/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/mutate/mutate.d.mts +9 -0
- package/node_modules/@sinclair/typebox/build/esm/value/mutate/mutate.mjs +98 -0
- package/node_modules/@sinclair/typebox/build/esm/value/parse/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/parse/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/parse/parse.d.mts +22 -0
- package/node_modules/@sinclair/typebox/build/esm/value/parse/parse.mjs +81 -0
- package/node_modules/@sinclair/typebox/build/esm/value/pointer/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/pointer/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/pointer/pointer.d.mts +22 -0
- package/node_modules/@sinclair/typebox/build/esm/value/pointer/pointer.mjs +115 -0
- package/node_modules/@sinclair/typebox/build/esm/value/transform/decode.d.mts +22 -0
- package/node_modules/@sinclair/typebox/build/esm/value/transform/decode.mjs +207 -0
- package/node_modules/@sinclair/typebox/build/esm/value/transform/encode.d.mts +23 -0
- package/node_modules/@sinclair/typebox/build/esm/value/transform/encode.mjs +218 -0
- package/node_modules/@sinclair/typebox/build/esm/value/transform/has.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/value/transform/has.mjs +129 -0
- package/node_modules/@sinclair/typebox/build/esm/value/transform/index.d.mts +3 -0
- package/node_modules/@sinclair/typebox/build/esm/value/transform/index.mjs +3 -0
- package/node_modules/@sinclair/typebox/build/esm/value/value/index.d.mts +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/value/index.mjs +1 -0
- package/node_modules/@sinclair/typebox/build/esm/value/value/value.d.mts +16 -0
- package/node_modules/@sinclair/typebox/build/esm/value/value/value.mjs +16 -0
- package/node_modules/@sinclair/typebox/compiler/package.json +4 -0
- package/node_modules/@sinclair/typebox/errors/package.json +4 -0
- package/node_modules/@sinclair/typebox/license +25 -0
- package/node_modules/@sinclair/typebox/package.json +116 -0
- package/node_modules/@sinclair/typebox/parser/package.json +4 -0
- package/node_modules/@sinclair/typebox/readme.md +1865 -0
- package/node_modules/@sinclair/typebox/syntax/package.json +4 -0
- package/node_modules/@sinclair/typebox/system/package.json +4 -0
- package/node_modules/@sinclair/typebox/type/package.json +4 -0
- package/node_modules/@sinclair/typebox/value/package.json +4 -0
- package/node_modules/@styrene-lab/pi-agent-core/README.md +446 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/agent-loop.d.ts +24 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/agent-loop.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/agent-loop.js +447 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/agent-loop.js.map +1 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/agent.d.ts +171 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/agent.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/agent.js +417 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/agent.js.map +1 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/index.d.ts +5 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/index.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/index.js +9 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/index.js.map +1 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/proxy.d.ts +85 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/proxy.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/proxy.js +268 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/proxy.js.map +1 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/types.d.ts +286 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/types.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/types.js +2 -0
- package/node_modules/@styrene-lab/pi-agent-core/dist/types.js.map +1 -0
- package/node_modules/@styrene-lab/pi-agent-core/package.json +44 -0
- package/node_modules/@styrene-lab/pi-ai/README.md +1201 -0
- package/node_modules/@styrene-lab/pi-ai/bedrock-provider.d.ts +1 -0
- package/node_modules/@styrene-lab/pi-ai/bedrock-provider.js +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/api-registry.d.ts +20 -0
- package/node_modules/@styrene-lab/pi-ai/dist/api-registry.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/api-registry.js +44 -0
- package/node_modules/@styrene-lab/pi-ai/dist/api-registry.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/bedrock-provider.d.ts +5 -0
- package/node_modules/@styrene-lab/pi-ai/dist/bedrock-provider.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/bedrock-provider.js +6 -0
- package/node_modules/@styrene-lab/pi-ai/dist/bedrock-provider.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/cli.d.ts +3 -0
- package/node_modules/@styrene-lab/pi-ai/dist/cli.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/cli.js +116 -0
- package/node_modules/@styrene-lab/pi-ai/dist/cli.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/env-api-keys.d.ts +9 -0
- package/node_modules/@styrene-lab/pi-ai/dist/env-api-keys.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/env-api-keys.js +110 -0
- package/node_modules/@styrene-lab/pi-ai/dist/env-api-keys.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/index.d.ts +23 -0
- package/node_modules/@styrene-lab/pi-ai/dist/index.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/index.js +21 -0
- package/node_modules/@styrene-lab/pi-ai/dist/index.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/models.d.ts +24 -0
- package/node_modules/@styrene-lab/pi-ai/dist/models.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/models.generated.d.ts +14058 -0
- package/node_modules/@styrene-lab/pi-ai/dist/models.generated.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/models.generated.js +13846 -0
- package/node_modules/@styrene-lab/pi-ai/dist/models.generated.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/models.js +55 -0
- package/node_modules/@styrene-lab/pi-ai/dist/models.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/oauth.d.ts +2 -0
- package/node_modules/@styrene-lab/pi-ai/dist/oauth.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/oauth.js +2 -0
- package/node_modules/@styrene-lab/pi-ai/dist/oauth.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/amazon-bedrock.d.ts +15 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/amazon-bedrock.js +610 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/amazon-bedrock.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/anthropic.d.ts +33 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/anthropic.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/anthropic.js +753 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/anthropic.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/azure-openai-responses.d.ts +15 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/azure-openai-responses.js +187 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/azure-openai-responses.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/github-copilot-headers.d.ts +8 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/github-copilot-headers.js +29 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/github-copilot-headers.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google-gemini-cli.d.ts +74 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google-gemini-cli.js +757 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google-gemini-cli.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google-shared.d.ts +65 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google-shared.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google-shared.js +300 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google-shared.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google-vertex.d.ts +15 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google-vertex.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google-vertex.js +392 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google-vertex.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google.d.ts +13 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google.js +355 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/google.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/mistral.d.ts +22 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/mistral.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/mistral.js +498 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/mistral.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-codex-responses.d.ts +9 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-codex-responses.js +741 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-codex-responses.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-completions.d.ts +15 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-completions.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-completions.js +710 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-completions.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-responses-shared.d.ts +17 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-responses-shared.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-responses-shared.js +447 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-responses-shared.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-responses.d.ts +13 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-responses.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-responses.js +201 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/openai-responses.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/register-builtins.d.ts +11 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/register-builtins.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/register-builtins.js +138 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/register-builtins.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/simple-options.d.ts +8 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/simple-options.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/simple-options.js +35 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/simple-options.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/transform-messages.d.ts +8 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/transform-messages.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/transform-messages.js +155 -0
- package/node_modules/@styrene-lab/pi-ai/dist/providers/transform-messages.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/stream.d.ts +8 -0
- package/node_modules/@styrene-lab/pi-ai/dist/stream.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/stream.js +27 -0
- package/node_modules/@styrene-lab/pi-ai/dist/stream.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/types.d.ts +293 -0
- package/node_modules/@styrene-lab/pi-ai/dist/types.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/types.js +2 -0
- package/node_modules/@styrene-lab/pi-ai/dist/types.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/event-stream.d.ts +21 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/event-stream.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/event-stream.js +81 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/event-stream.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/hash.d.ts +3 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/hash.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/hash.js +14 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/hash.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/json-parse.d.ts +9 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/json-parse.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/json-parse.js +29 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/json-parse.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/anthropic.d.ts +25 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/anthropic.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/anthropic.js +343 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/anthropic.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/fetch-utils.d.ts +22 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/fetch-utils.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/fetch-utils.js +42 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/fetch-utils.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/github-copilot.d.ts +30 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/github-copilot.js +292 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/google-antigravity.d.ts +26 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/google-antigravity.js +374 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts +26 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/google-gemini-cli.js +479 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/index.d.ts +61 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/index.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/index.js +131 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/index.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/openai-codex.d.ts +35 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/openai-codex.js +382 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/pkce.d.ts +13 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/pkce.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/pkce.js +31 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/pkce.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/types.d.ts +47 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/types.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/types.js +2 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/oauth/types.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/overflow.d.ts +52 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/overflow.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/overflow.js +117 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/overflow.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/sanitize-unicode.d.ts +22 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/sanitize-unicode.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/sanitize-unicode.js +26 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/sanitize-unicode.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/typebox-helpers.d.ts +17 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/typebox-helpers.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/typebox-helpers.js +21 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/typebox-helpers.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/validation.d.ts +18 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/validation.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/validation.js +72 -0
- package/node_modules/@styrene-lab/pi-ai/dist/utils/validation.js.map +1 -0
- package/node_modules/@styrene-lab/pi-ai/package.json +80 -0
- package/node_modules/@styrene-lab/pi-coding-agent/CHANGELOG.md +3105 -0
- package/node_modules/@styrene-lab/pi-coding-agent/README.md +583 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/args.d.ts +48 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/args.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/args.js +300 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/args.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/config-selector.d.ts +14 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/config-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/config-selector.js +31 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/config-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/file-processor.d.ts +15 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/file-processor.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/file-processor.js +79 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/file-processor.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/list-models.d.ts +9 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/list-models.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/list-models.js +92 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/list-models.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/session-picker.d.ts +9 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/session-picker.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/session-picker.js +34 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli/session-picker.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli.d.ts +3 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli.js +16 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/cli.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/config.d.ts +68 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/config.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/config.js +203 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/config.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/agent-session.d.ts +591 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/agent-session.js +2542 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/agent-session.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/auth-storage.d.ts +130 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/auth-storage.js +419 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/auth-storage.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/bash-executor.d.ts +47 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/bash-executor.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/bash-executor.js +212 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/bash-executor.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts +86 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/branch-summarization.js +242 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/compaction.d.ts +121 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/compaction.js +610 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/index.d.ts +7 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/index.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/index.js +7 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/index.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/utils.d.ts +38 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/utils.js +153 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/compaction/utils.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/defaults.d.ts +3 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/defaults.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/defaults.js +2 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/defaults.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/diagnostics.d.ts +15 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/diagnostics.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/diagnostics.js +2 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/diagnostics.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/event-bus.d.ts +9 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/event-bus.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/event-bus.js +25 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/event-bus.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/exec.d.ts +29 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/exec.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/exec.js +71 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/exec.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/ansi-to-html.js +249 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/index.d.ts +37 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/index.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/index.js +223 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/index.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/template.css +971 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/template.html +54 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/template.js +1583 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/tool-renderer.d.ts +38 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/tool-renderer.js +70 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/tool-renderer.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/export-html/vendor/marked.min.js +6 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/index.d.ts +11 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/index.js +9 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/index.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/loader.d.ts +25 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/loader.js +430 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/loader.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/runner.d.ts +152 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/runner.js +688 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/runner.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/types.d.ts +1048 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/types.js +35 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/types.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/wrapper.d.ts +20 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/wrapper.js +28 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/extensions/wrapper.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/footer-data-provider.d.ts +32 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/footer-data-provider.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/footer-data-provider.js +134 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/footer-data-provider.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/index.d.ts +9 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/index.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/index.js +9 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/index.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/keybindings.d.ts +55 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/keybindings.js +153 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/keybindings.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/messages.d.ts +77 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/messages.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/messages.js +123 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/messages.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/model-registry.d.ts +113 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/model-registry.js +554 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/model-registry.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/model-resolver.d.ts +104 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/model-resolver.js +462 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/model-resolver.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/package-manager.d.ts +155 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/package-manager.js +1480 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/package-manager.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/prompt-templates.d.ts +50 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/prompt-templates.js +251 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/prompt-templates.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/resolve-config-value.d.ts +17 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/resolve-config-value.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/resolve-config-value.js +94 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/resolve-config-value.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/resource-loader.d.ts +184 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/resource-loader.js +670 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/resource-loader.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/sdk.d.ts +90 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/sdk.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/sdk.js +242 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/sdk.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/session-manager.d.ts +324 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/session-manager.js +1098 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/session-manager.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/settings-manager.d.ts +235 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/settings-manager.js +699 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/settings-manager.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/skills.d.ts +59 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/skills.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/skills.js +385 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/skills.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/slash-commands.d.ts +15 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/slash-commands.js +22 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/slash-commands.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/system-prompt.d.ts +28 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/system-prompt.js +150 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/system-prompt.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/timings.d.ts +7 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/timings.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/timings.js +25 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/timings.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/bash.d.ts +59 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/bash.js +249 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/bash.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/edit-diff.d.ts +63 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/edit-diff.js +243 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/edit-diff.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/edit.d.ts +39 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/edit.js +146 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/edit.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/find.d.ts +39 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/find.js +209 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/find.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/grep.d.ts +45 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/grep.js +239 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/grep.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/index.d.ts +73 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/index.js +61 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/index.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/ls.d.ts +40 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/ls.js +118 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/ls.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/path-utils.d.ts +8 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/path-utils.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/path-utils.js +81 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/path-utils.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/read.d.ts +39 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/read.js +166 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/read.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/truncate.d.ts +70 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/truncate.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/truncate.js +205 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/truncate.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/write.d.ts +29 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/write.js +78 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/core/tools/write.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/index.d.ts +27 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/index.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/index.js +42 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/index.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/main.d.ts +8 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/main.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/main.js +700 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/main.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/migrations.d.ts +33 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/migrations.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/migrations.js +261 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/migrations.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/index.d.ts +9 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/index.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/index.js +8 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/index.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/armin.d.ts +34 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/armin.js +333 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/armin.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts +16 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +96 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +35 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +162 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/bordered-loader.js +51 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js +44 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js +45 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/config-selector.d.ts +71 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/config-selector.js +479 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/custom-editor.js +70 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/custom-message.js +79 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/daxnuts.js +140 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/daxnuts.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/diff.d.ts +12 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/diff.js +133 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js +21 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/extension-editor.d.ts +20 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/extension-editor.js +111 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/extension-input.js +61 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts +24 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/extension-selector.js +78 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/footer.d.ts +26 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/footer.js +198 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/index.d.ts +32 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/index.js +33 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/index.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.d.ts +41 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.js +61 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts +42 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +145 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +47 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/model-selector.js +271 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js +97 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js +275 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/session-selector.js +851 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +58 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +301 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/show-images-selector.js +39 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +47 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/theme-selector.js +50 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/thinking-selector.js +51 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +89 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +976 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts +87 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/tree-selector.js +1040 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js +113 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +9 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/user-message.js +27 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +317 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/interactive-mode.js +3832 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/theme/dark.json +85 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/theme/light.json +84 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +78 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/theme/theme.js +957 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/print-mode.d.ts +28 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/print-mode.js +101 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/print-mode.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/jsonl.d.ts +17 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/jsonl.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/jsonl.js +49 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/jsonl.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +217 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/rpc-client.js +401 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/rpc-mode.js +509 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +409 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/rpc-types.js +8 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/changelog.d.ts +21 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/changelog.js +87 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/changelog.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/clipboard-image.d.ts +11 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/clipboard-image.js +286 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/clipboard-native.d.ts +8 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/clipboard-native.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/clipboard-native.js +20 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/clipboard-native.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/clipboard.d.ts +2 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/clipboard.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/clipboard.js +68 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/clipboard.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/exif-orientation.d.ts +5 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/exif-orientation.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/exif-orientation.js +158 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/exif-orientation.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/frontmatter.d.ts +8 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/frontmatter.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/frontmatter.js +26 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/frontmatter.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/git.d.ts +26 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/git.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/git.js +163 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/git.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/image-convert.d.ts +9 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/image-convert.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/image-convert.js +39 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/image-convert.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/image-resize.d.ts +36 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/image-resize.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/image-resize.js +186 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/image-resize.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/mime.d.ts +2 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/mime.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/mime.js +26 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/mime.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/photon.d.ts +21 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/photon.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/photon.js +121 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/photon.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/shell.d.ts +26 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/shell.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/shell.js +186 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/shell.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/sleep.d.ts +5 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/sleep.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/sleep.js +17 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/sleep.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/tools-manager.d.ts +3 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/tools-manager.js +252 -0
- package/node_modules/@styrene-lab/pi-coding-agent/dist/utils/tools-manager.js.map +1 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/compaction.md +392 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/custom-provider.md +596 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/development.md +69 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/extensions.md +2034 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/images/doom-extension.png +0 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/images/exy.png +0 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/images/interactive-mode.png +0 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/images/tree-view.png +0 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/json.md +79 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/keybindings.md +182 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/models.md +309 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/packages.md +218 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/prompt-templates.md +67 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/providers.md +188 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/rpc.md +1354 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/sdk.md +968 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/session.md +412 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/settings.md +234 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/shell-aliases.md +13 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/skills.md +231 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/terminal-setup.md +95 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/termux.md +127 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/themes.md +295 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/tmux.md +61 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/tree.md +228 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/tui.md +887 -0
- package/node_modules/@styrene-lab/pi-coding-agent/docs/windows.md +17 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/README.md +25 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/README.md +205 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/antigravity-image-gen.ts +416 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/bash-spawn-hook.ts +30 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/bookmark.ts +50 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/built-in-tool-renderer.ts +246 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/claude-rules.ts +86 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/commands.ts +72 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/confirm-destructive.ts +59 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/custom-compaction.ts +114 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/custom-footer.ts +64 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/custom-header.ts +73 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/custom-provider-anthropic/index.ts +604 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/dirty-repo-guard.ts +56 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/doom-overlay/README.md +46 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/doom-overlay/doom-component.ts +132 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/doom-overlay/doom-keys.ts +104 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/doom-overlay/index.ts +74 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/doom-overlay/wad-finder.ts +51 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/dynamic-resources/index.ts +15 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/dynamic-tools.ts +74 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/event-bus.ts +43 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/file-trigger.ts +41 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/git-checkpoint.ts +53 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/handoff.ts +150 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/hello.ts +25 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/inline-bash.ts +94 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/input-transform.ts +43 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/interactive-shell.ts +196 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/mac-system-theme.ts +47 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/message-renderer.ts +59 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/minimal-mode.ts +426 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/modal-editor.ts +85 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/model-status.ts +31 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/notify.ts +55 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/overlay-qa-tests.ts +1348 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/overlay-test.ts +150 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/permission-gate.ts +34 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/pirate.ts +47 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/plan-mode/README.md +65 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/plan-mode/index.ts +340 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/plan-mode/utils.ts +168 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/preset.ts +397 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/protected-paths.ts +30 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/provider-payload.ts +14 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/qna.ts +119 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/question.ts +264 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/questionnaire.ts +427 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/rainbow-editor.ts +88 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/reload-runtime.ts +37 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/rpc-demo.ts +124 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/sandbox/index.ts +317 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/sandbox/package-lock.json +92 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/sandbox/package.json +19 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/send-user-message.ts +97 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/session-name.ts +27 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/shutdown-command.ts +63 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/snake.ts +343 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/space-invaders.ts +560 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/ssh.ts +220 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/status-line.ts +40 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/subagent/README.md +172 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/subagent/agents/planner.md +37 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/subagent/agents/scout.md +50 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/subagent/agents/worker.md +24 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/subagent/agents.ts +126 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/subagent/index.ts +964 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/subagent/prompts/implement.md +10 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/summarize.ts +195 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/system-prompt-header.ts +17 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/timed-confirm.ts +70 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/titlebar-spinner.ts +58 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/todo.ts +299 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/tool-override.ts +142 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/tools.ts +146 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/trigger-compact.ts +40 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/truncated-tool.ts +192 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/widget-placement.ts +17 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/with-deps/index.ts +32 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/with-deps/package-lock.json +31 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/extensions/with-deps/package.json +22 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/rpc-extension-ui.ts +632 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/01-minimal.ts +22 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/02-custom-model.ts +49 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/03-custom-prompt.ts +55 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/04-skills.ts +46 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/05-tools.ts +56 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/06-extensions.ts +88 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/07-context-files.ts +40 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/08-prompt-templates.ts +47 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/09-api-keys-and-oauth.ts +48 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/10-settings.ts +51 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/11-sessions.ts +48 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/12-full-control.ts +82 -0
- package/node_modules/@styrene-lab/pi-coding-agent/examples/sdk/README.md +144 -0
- package/node_modules/@styrene-lab/pi-coding-agent/package.json +99 -0
- package/node_modules/@styrene-lab/pi-tui/README.md +767 -0
- package/node_modules/@styrene-lab/pi-tui/dist/autocomplete.d.ts +50 -0
- package/node_modules/@styrene-lab/pi-tui/dist/autocomplete.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/autocomplete.js +635 -0
- package/node_modules/@styrene-lab/pi-tui/dist/autocomplete.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/box.d.ts +30 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/box.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/box.js +122 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/box.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/cancellable-loader.d.ts +22 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/cancellable-loader.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/cancellable-loader.js +35 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/cancellable-loader.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/editor.d.ts +233 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/editor.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/editor.js +1844 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/editor.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/image.d.ts +28 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/image.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/image.js +69 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/image.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/input.d.ts +39 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/input.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/input.js +464 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/input.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/loader.d.ts +21 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/loader.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/loader.js +49 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/loader.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/markdown.d.ts +95 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/markdown.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/markdown.js +655 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/markdown.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/select-list.d.ts +50 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/select-list.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/select-list.js +159 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/select-list.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/settings-list.d.ts +50 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/settings-list.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/settings-list.js +185 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/settings-list.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/spacer.d.ts +12 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/spacer.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/spacer.js +23 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/spacer.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/text.d.ts +26 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/text.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/text.js +107 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/text.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/truncated-text.d.ts +13 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/truncated-text.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/truncated-text.js +51 -0
- package/node_modules/@styrene-lab/pi-tui/dist/components/truncated-text.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/editor-component.d.ts +39 -0
- package/node_modules/@styrene-lab/pi-tui/dist/editor-component.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/editor-component.js +2 -0
- package/node_modules/@styrene-lab/pi-tui/dist/editor-component.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/fuzzy.d.ts +16 -0
- package/node_modules/@styrene-lab/pi-tui/dist/fuzzy.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/fuzzy.js +107 -0
- package/node_modules/@styrene-lab/pi-tui/dist/fuzzy.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/index.d.ts +23 -0
- package/node_modules/@styrene-lab/pi-tui/dist/index.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/index.js +32 -0
- package/node_modules/@styrene-lab/pi-tui/dist/index.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/keybindings.d.ts +39 -0
- package/node_modules/@styrene-lab/pi-tui/dist/keybindings.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/keybindings.js +117 -0
- package/node_modules/@styrene-lab/pi-tui/dist/keybindings.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/keys.d.ts +172 -0
- package/node_modules/@styrene-lab/pi-tui/dist/keys.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/keys.js +1097 -0
- package/node_modules/@styrene-lab/pi-tui/dist/keys.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/kill-ring.d.ts +28 -0
- package/node_modules/@styrene-lab/pi-tui/dist/kill-ring.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/kill-ring.js +44 -0
- package/node_modules/@styrene-lab/pi-tui/dist/kill-ring.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/stdin-buffer.d.ts +62 -0
- package/node_modules/@styrene-lab/pi-tui/dist/stdin-buffer.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/stdin-buffer.js +337 -0
- package/node_modules/@styrene-lab/pi-tui/dist/stdin-buffer.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/terminal-image.d.ts +68 -0
- package/node_modules/@styrene-lab/pi-tui/dist/terminal-image.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/terminal-image.js +288 -0
- package/node_modules/@styrene-lab/pi-tui/dist/terminal-image.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/terminal.d.ts +85 -0
- package/node_modules/@styrene-lab/pi-tui/dist/terminal.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/terminal.js +309 -0
- package/node_modules/@styrene-lab/pi-tui/dist/terminal.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/tui.d.ts +220 -0
- package/node_modules/@styrene-lab/pi-tui/dist/tui.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/tui.js +977 -0
- package/node_modules/@styrene-lab/pi-tui/dist/tui.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/undo-stack.d.ts +17 -0
- package/node_modules/@styrene-lab/pi-tui/dist/undo-stack.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/undo-stack.js +25 -0
- package/node_modules/@styrene-lab/pi-tui/dist/undo-stack.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/utils.d.ts +78 -0
- package/node_modules/@styrene-lab/pi-tui/dist/utils.d.ts.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/dist/utils.js +815 -0
- package/node_modules/@styrene-lab/pi-tui/dist/utils.js.map +1 -0
- package/node_modules/@styrene-lab/pi-tui/package.json +52 -0
- package/node_modules/ajv/.runkit_example.js +23 -0
- package/node_modules/ajv/LICENSE +22 -0
- package/node_modules/ajv/README.md +207 -0
- package/node_modules/ajv/dist/2019.d.ts +19 -0
- package/node_modules/ajv/dist/2019.js +61 -0
- package/node_modules/ajv/dist/2019.js.map +1 -0
- package/node_modules/ajv/dist/2020.d.ts +19 -0
- package/node_modules/ajv/dist/2020.js +55 -0
- package/node_modules/ajv/dist/2020.js.map +1 -0
- package/node_modules/ajv/dist/ajv.d.ts +18 -0
- package/node_modules/ajv/dist/ajv.js +50 -0
- package/node_modules/ajv/dist/ajv.js.map +1 -0
- package/node_modules/ajv/dist/compile/codegen/code.d.ts +40 -0
- package/node_modules/ajv/dist/compile/codegen/code.js +156 -0
- package/node_modules/ajv/dist/compile/codegen/code.js.map +1 -0
- package/node_modules/ajv/dist/compile/codegen/index.d.ts +79 -0
- package/node_modules/ajv/dist/compile/codegen/index.js +697 -0
- package/node_modules/ajv/dist/compile/codegen/index.js.map +1 -0
- package/node_modules/ajv/dist/compile/codegen/scope.d.ts +79 -0
- package/node_modules/ajv/dist/compile/codegen/scope.js +143 -0
- package/node_modules/ajv/dist/compile/codegen/scope.js.map +1 -0
- package/node_modules/ajv/dist/compile/errors.d.ts +13 -0
- package/node_modules/ajv/dist/compile/errors.js +123 -0
- package/node_modules/ajv/dist/compile/errors.js.map +1 -0
- package/node_modules/ajv/dist/compile/index.d.ts +80 -0
- package/node_modules/ajv/dist/compile/index.js +242 -0
- package/node_modules/ajv/dist/compile/index.js.map +1 -0
- package/node_modules/ajv/dist/compile/jtd/parse.d.ts +4 -0
- package/node_modules/ajv/dist/compile/jtd/parse.js +350 -0
- package/node_modules/ajv/dist/compile/jtd/parse.js.map +1 -0
- package/node_modules/ajv/dist/compile/jtd/serialize.d.ts +4 -0
- package/node_modules/ajv/dist/compile/jtd/serialize.js +236 -0
- package/node_modules/ajv/dist/compile/jtd/serialize.js.map +1 -0
- package/node_modules/ajv/dist/compile/jtd/types.d.ts +6 -0
- package/node_modules/ajv/dist/compile/jtd/types.js +14 -0
- package/node_modules/ajv/dist/compile/jtd/types.js.map +1 -0
- package/node_modules/ajv/dist/compile/names.d.ts +20 -0
- package/node_modules/ajv/dist/compile/names.js +28 -0
- package/node_modules/ajv/dist/compile/names.js.map +1 -0
- package/node_modules/ajv/dist/compile/ref_error.d.ts +6 -0
- package/node_modules/ajv/dist/compile/ref_error.js +12 -0
- package/node_modules/ajv/dist/compile/ref_error.js.map +1 -0
- package/node_modules/ajv/dist/compile/resolve.d.ts +12 -0
- package/node_modules/ajv/dist/compile/resolve.js +155 -0
- package/node_modules/ajv/dist/compile/resolve.js.map +1 -0
- package/node_modules/ajv/dist/compile/rules.d.ts +28 -0
- package/node_modules/ajv/dist/compile/rules.js +26 -0
- package/node_modules/ajv/dist/compile/rules.js.map +1 -0
- package/node_modules/ajv/dist/compile/util.d.ts +40 -0
- package/node_modules/ajv/dist/compile/util.js +178 -0
- package/node_modules/ajv/dist/compile/util.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/applicability.d.ts +6 -0
- package/node_modules/ajv/dist/compile/validate/applicability.js +19 -0
- package/node_modules/ajv/dist/compile/validate/applicability.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/boolSchema.d.ts +4 -0
- package/node_modules/ajv/dist/compile/validate/boolSchema.js +50 -0
- package/node_modules/ajv/dist/compile/validate/boolSchema.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/dataType.d.ts +17 -0
- package/node_modules/ajv/dist/compile/validate/dataType.js +203 -0
- package/node_modules/ajv/dist/compile/validate/dataType.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/defaults.d.ts +2 -0
- package/node_modules/ajv/dist/compile/validate/defaults.js +35 -0
- package/node_modules/ajv/dist/compile/validate/defaults.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/index.d.ts +42 -0
- package/node_modules/ajv/dist/compile/validate/index.js +520 -0
- package/node_modules/ajv/dist/compile/validate/index.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/keyword.d.ts +8 -0
- package/node_modules/ajv/dist/compile/validate/keyword.js +124 -0
- package/node_modules/ajv/dist/compile/validate/keyword.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/subschema.d.ts +47 -0
- package/node_modules/ajv/dist/compile/validate/subschema.js +81 -0
- package/node_modules/ajv/dist/compile/validate/subschema.js.map +1 -0
- package/node_modules/ajv/dist/core.d.ts +174 -0
- package/node_modules/ajv/dist/core.js +618 -0
- package/node_modules/ajv/dist/core.js.map +1 -0
- package/node_modules/ajv/dist/jtd.d.ts +47 -0
- package/node_modules/ajv/dist/jtd.js +72 -0
- package/node_modules/ajv/dist/jtd.js.map +1 -0
- package/node_modules/ajv/dist/refs/data.json +13 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/index.d.ts +2 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/index.js +28 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/index.js.map +1 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/applicator.json +53 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/content.json +17 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/core.json +57 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/format.json +14 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/meta-data.json +37 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/validation.json +90 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/schema.json +39 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/index.d.ts +2 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/index.js +30 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/index.js.map +1 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.json +48 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.json +17 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.json +51 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.json +14 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.json +37 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.json +15 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.json +90 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/schema.json +55 -0
- package/node_modules/ajv/dist/refs/json-schema-draft-06.json +137 -0
- package/node_modules/ajv/dist/refs/json-schema-draft-07.json +151 -0
- package/node_modules/ajv/dist/refs/json-schema-secure.json +88 -0
- package/node_modules/ajv/dist/refs/jtd-schema.d.ts +3 -0
- package/node_modules/ajv/dist/refs/jtd-schema.js +118 -0
- package/node_modules/ajv/dist/refs/jtd-schema.js.map +1 -0
- package/node_modules/ajv/dist/runtime/equal.d.ts +6 -0
- package/node_modules/ajv/dist/runtime/equal.js +7 -0
- package/node_modules/ajv/dist/runtime/equal.js.map +1 -0
- package/node_modules/ajv/dist/runtime/parseJson.d.ts +18 -0
- package/node_modules/ajv/dist/runtime/parseJson.js +185 -0
- package/node_modules/ajv/dist/runtime/parseJson.js.map +1 -0
- package/node_modules/ajv/dist/runtime/quote.d.ts +5 -0
- package/node_modules/ajv/dist/runtime/quote.js +30 -0
- package/node_modules/ajv/dist/runtime/quote.js.map +1 -0
- package/node_modules/ajv/dist/runtime/re2.d.ts +6 -0
- package/node_modules/ajv/dist/runtime/re2.js +6 -0
- package/node_modules/ajv/dist/runtime/re2.js.map +1 -0
- package/node_modules/ajv/dist/runtime/timestamp.d.ts +5 -0
- package/node_modules/ajv/dist/runtime/timestamp.js +42 -0
- package/node_modules/ajv/dist/runtime/timestamp.js.map +1 -0
- package/node_modules/ajv/dist/runtime/ucs2length.d.ts +5 -0
- package/node_modules/ajv/dist/runtime/ucs2length.js +24 -0
- package/node_modules/ajv/dist/runtime/ucs2length.js.map +1 -0
- package/node_modules/ajv/dist/runtime/uri.d.ts +6 -0
- package/node_modules/ajv/dist/runtime/uri.js +6 -0
- package/node_modules/ajv/dist/runtime/uri.js.map +1 -0
- package/node_modules/ajv/dist/runtime/validation_error.d.ts +7 -0
- package/node_modules/ajv/dist/runtime/validation_error.js +11 -0
- package/node_modules/ajv/dist/runtime/validation_error.js.map +1 -0
- package/node_modules/ajv/dist/standalone/index.d.ts +6 -0
- package/node_modules/ajv/dist/standalone/index.js +90 -0
- package/node_modules/ajv/dist/standalone/index.js.map +1 -0
- package/node_modules/ajv/dist/standalone/instance.d.ts +12 -0
- package/node_modules/ajv/dist/standalone/instance.js +35 -0
- package/node_modules/ajv/dist/standalone/instance.js.map +1 -0
- package/node_modules/ajv/dist/types/index.d.ts +183 -0
- package/node_modules/ajv/dist/types/index.js +3 -0
- package/node_modules/ajv/dist/types/index.js.map +1 -0
- package/node_modules/ajv/dist/types/json-schema.d.ts +125 -0
- package/node_modules/ajv/dist/types/json-schema.js +3 -0
- package/node_modules/ajv/dist/types/json-schema.js.map +1 -0
- package/node_modules/ajv/dist/types/jtd-schema.d.ts +174 -0
- package/node_modules/ajv/dist/types/jtd-schema.js +3 -0
- package/node_modules/ajv/dist/types/jtd-schema.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +49 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +106 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/allOf.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/allOf.js +23 -0
- package/node_modules/ajv/dist/vocabularies/applicator/allOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/anyOf.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +12 -0
- package/node_modules/ajv/dist/vocabularies/applicator/anyOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/contains.d.ts +7 -0
- package/node_modules/ajv/dist/vocabularies/applicator/contains.js +95 -0
- package/node_modules/ajv/dist/vocabularies/applicator/contains.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts +21 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +85 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependencies.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js +11 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/if.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/if.js +66 -0
- package/node_modules/ajv/dist/vocabularies/applicator/if.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/index.d.ts +13 -0
- package/node_modules/ajv/dist/vocabularies/applicator/index.js +44 -0
- package/node_modules/ajv/dist/vocabularies/applicator/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items.js +52 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items2020.js +30 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items2020.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/not.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/applicator/not.js +26 -0
- package/node_modules/ajv/dist/vocabularies/applicator/not.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/oneOf.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +60 -0
- package/node_modules/ajv/dist/vocabularies/applicator/oneOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +75 -0
- package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +12 -0
- package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/properties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/properties.js +54 -0
- package/node_modules/ajv/dist/vocabularies/applicator/properties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +38 -0
- package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/thenElse.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +13 -0
- package/node_modules/ajv/dist/vocabularies/applicator/thenElse.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/code.d.ts +17 -0
- package/node_modules/ajv/dist/vocabularies/code.js +131 -0
- package/node_modules/ajv/dist/vocabularies/code.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/core/id.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/core/id.js +10 -0
- package/node_modules/ajv/dist/vocabularies/core/id.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/core/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/core/index.js +16 -0
- package/node_modules/ajv/dist/vocabularies/core/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/core/ref.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/core/ref.js +122 -0
- package/node_modules/ajv/dist/vocabularies/core/ref.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/index.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/index.js +104 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/types.d.ts +10 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/types.js +9 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/types.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/draft2020.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/draft2020.js +23 -0
- package/node_modules/ajv/dist/vocabularies/draft2020.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/draft7.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/draft7.js +17 -0
- package/node_modules/ajv/dist/vocabularies/draft7.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js +30 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js +51 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/index.js +9 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js +16 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js +10 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/errors.d.ts +9 -0
- package/node_modules/ajv/dist/vocabularies/errors.js +3 -0
- package/node_modules/ajv/dist/vocabularies/errors.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/format/format.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/format/format.js +92 -0
- package/node_modules/ajv/dist/vocabularies/format/format.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/format/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/format/index.js +6 -0
- package/node_modules/ajv/dist/vocabularies/format/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/discriminator.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/jtd/discriminator.js +71 -0
- package/node_modules/ajv/dist/vocabularies/jtd/discriminator.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/elements.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/jtd/elements.js +24 -0
- package/node_modules/ajv/dist/vocabularies/jtd/elements.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/enum.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/jtd/enum.js +43 -0
- package/node_modules/ajv/dist/vocabularies/jtd/enum.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/error.d.ts +9 -0
- package/node_modules/ajv/dist/vocabularies/jtd/error.js +20 -0
- package/node_modules/ajv/dist/vocabularies/jtd/error.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/index.d.ts +10 -0
- package/node_modules/ajv/dist/vocabularies/jtd/index.js +29 -0
- package/node_modules/ajv/dist/vocabularies/jtd/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/metadata.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/jtd/metadata.js +25 -0
- package/node_modules/ajv/dist/vocabularies/jtd/metadata.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/nullable.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/jtd/nullable.js +22 -0
- package/node_modules/ajv/dist/vocabularies/jtd/nullable.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.js +15 -0
- package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/properties.d.ts +22 -0
- package/node_modules/ajv/dist/vocabularies/jtd/properties.js +149 -0
- package/node_modules/ajv/dist/vocabularies/jtd/properties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/ref.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/jtd/ref.js +67 -0
- package/node_modules/ajv/dist/vocabularies/jtd/ref.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/type.d.ts +10 -0
- package/node_modules/ajv/dist/vocabularies/jtd/type.js +69 -0
- package/node_modules/ajv/dist/vocabularies/jtd/type.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/union.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/jtd/union.js +12 -0
- package/node_modules/ajv/dist/vocabularies/jtd/union.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/values.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/jtd/values.js +51 -0
- package/node_modules/ajv/dist/vocabularies/jtd/values.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/metadata.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/metadata.js +18 -0
- package/node_modules/ajv/dist/vocabularies/metadata.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/next.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/next.js +8 -0
- package/node_modules/ajv/dist/vocabularies/next.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/index.js +7 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js +40 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js +65 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/const.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/validation/const.js +25 -0
- package/node_modules/ajv/dist/vocabularies/validation/const.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js +12 -0
- package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/enum.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/enum.js +48 -0
- package/node_modules/ajv/dist/vocabularies/validation/enum.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/index.d.ts +16 -0
- package/node_modules/ajv/dist/vocabularies/validation/index.js +33 -0
- package/node_modules/ajv/dist/vocabularies/validation/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitContains.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitContains.js +15 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitContains.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitItems.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitItems.js +24 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitLength.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitLength.js +27 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitLength.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitNumber.d.ts +11 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +27 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitNumber.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitProperties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +24 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/multipleOf.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +26 -0
- package/node_modules/ajv/dist/vocabularies/validation/multipleOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/pattern.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/pattern.js +33 -0
- package/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/required.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/required.js +79 -0
- package/node_modules/ajv/dist/vocabularies/validation/required.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.d.ts +9 -0
- package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +64 -0
- package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js.map +1 -0
- package/node_modules/ajv/lib/2019.ts +81 -0
- package/node_modules/ajv/lib/2020.ts +75 -0
- package/node_modules/ajv/lib/ajv.ts +70 -0
- package/node_modules/ajv/lib/compile/codegen/code.ts +169 -0
- package/node_modules/ajv/lib/compile/codegen/index.ts +852 -0
- package/node_modules/ajv/lib/compile/codegen/scope.ts +215 -0
- package/node_modules/ajv/lib/compile/errors.ts +184 -0
- package/node_modules/ajv/lib/compile/index.ts +324 -0
- package/node_modules/ajv/lib/compile/jtd/parse.ts +411 -0
- package/node_modules/ajv/lib/compile/jtd/serialize.ts +277 -0
- package/node_modules/ajv/lib/compile/jtd/types.ts +16 -0
- package/node_modules/ajv/lib/compile/names.ts +27 -0
- package/node_modules/ajv/lib/compile/ref_error.ts +13 -0
- package/node_modules/ajv/lib/compile/resolve.ts +149 -0
- package/node_modules/ajv/lib/compile/rules.ts +50 -0
- package/node_modules/ajv/lib/compile/util.ts +213 -0
- package/node_modules/ajv/lib/compile/validate/applicability.ts +22 -0
- package/node_modules/ajv/lib/compile/validate/boolSchema.ts +47 -0
- package/node_modules/ajv/lib/compile/validate/dataType.ts +230 -0
- package/node_modules/ajv/lib/compile/validate/defaults.ts +32 -0
- package/node_modules/ajv/lib/compile/validate/index.ts +582 -0
- package/node_modules/ajv/lib/compile/validate/keyword.ts +171 -0
- package/node_modules/ajv/lib/compile/validate/subschema.ts +135 -0
- package/node_modules/ajv/lib/core.ts +892 -0
- package/node_modules/ajv/lib/jtd.ts +132 -0
- package/node_modules/ajv/lib/refs/data.json +13 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/index.ts +28 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/applicator.json +53 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/content.json +17 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/core.json +57 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/format.json +14 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/meta-data.json +37 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/validation.json +90 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/schema.json +39 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/index.ts +30 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/applicator.json +48 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/content.json +17 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/core.json +51 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/format-annotation.json +14 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/meta-data.json +37 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/unevaluated.json +15 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/validation.json +90 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/schema.json +55 -0
- package/node_modules/ajv/lib/refs/json-schema-draft-06.json +137 -0
- package/node_modules/ajv/lib/refs/json-schema-draft-07.json +151 -0
- package/node_modules/ajv/lib/refs/json-schema-secure.json +88 -0
- package/node_modules/ajv/lib/refs/jtd-schema.ts +130 -0
- package/node_modules/ajv/lib/runtime/equal.ts +7 -0
- package/node_modules/ajv/lib/runtime/parseJson.ts +177 -0
- package/node_modules/ajv/lib/runtime/quote.ts +31 -0
- package/node_modules/ajv/lib/runtime/re2.ts +6 -0
- package/node_modules/ajv/lib/runtime/timestamp.ts +46 -0
- package/node_modules/ajv/lib/runtime/ucs2length.ts +20 -0
- package/node_modules/ajv/lib/runtime/uri.ts +6 -0
- package/node_modules/ajv/lib/runtime/validation_error.ts +13 -0
- package/node_modules/ajv/lib/standalone/index.ts +100 -0
- package/node_modules/ajv/lib/standalone/instance.ts +36 -0
- package/node_modules/ajv/lib/types/index.ts +244 -0
- package/node_modules/ajv/lib/types/json-schema.ts +187 -0
- package/node_modules/ajv/lib/types/jtd-schema.ts +273 -0
- package/node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts +56 -0
- package/node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts +118 -0
- package/node_modules/ajv/lib/vocabularies/applicator/allOf.ts +22 -0
- package/node_modules/ajv/lib/vocabularies/applicator/anyOf.ts +14 -0
- package/node_modules/ajv/lib/vocabularies/applicator/contains.ts +109 -0
- package/node_modules/ajv/lib/vocabularies/applicator/dependencies.ts +112 -0
- package/node_modules/ajv/lib/vocabularies/applicator/dependentSchemas.ts +11 -0
- package/node_modules/ajv/lib/vocabularies/applicator/if.ts +80 -0
- package/node_modules/ajv/lib/vocabularies/applicator/index.ts +53 -0
- package/node_modules/ajv/lib/vocabularies/applicator/items.ts +59 -0
- package/node_modules/ajv/lib/vocabularies/applicator/items2020.ts +36 -0
- package/node_modules/ajv/lib/vocabularies/applicator/not.ts +38 -0
- package/node_modules/ajv/lib/vocabularies/applicator/oneOf.ts +82 -0
- package/node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts +91 -0
- package/node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts +12 -0
- package/node_modules/ajv/lib/vocabularies/applicator/properties.ts +57 -0
- package/node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts +50 -0
- package/node_modules/ajv/lib/vocabularies/applicator/thenElse.ts +13 -0
- package/node_modules/ajv/lib/vocabularies/code.ts +168 -0
- package/node_modules/ajv/lib/vocabularies/core/id.ts +10 -0
- package/node_modules/ajv/lib/vocabularies/core/index.ts +16 -0
- package/node_modules/ajv/lib/vocabularies/core/ref.ts +129 -0
- package/node_modules/ajv/lib/vocabularies/discriminator/index.ts +113 -0
- package/node_modules/ajv/lib/vocabularies/discriminator/types.ts +12 -0
- package/node_modules/ajv/lib/vocabularies/draft2020.ts +23 -0
- package/node_modules/ajv/lib/vocabularies/draft7.ts +17 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/dynamicAnchor.ts +31 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/dynamicRef.ts +51 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/index.ts +9 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/recursiveAnchor.ts +14 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/recursiveRef.ts +10 -0
- package/node_modules/ajv/lib/vocabularies/errors.ts +18 -0
- package/node_modules/ajv/lib/vocabularies/format/format.ts +120 -0
- package/node_modules/ajv/lib/vocabularies/format/index.ts +6 -0
- package/node_modules/ajv/lib/vocabularies/jtd/discriminator.ts +89 -0
- package/node_modules/ajv/lib/vocabularies/jtd/elements.ts +32 -0
- package/node_modules/ajv/lib/vocabularies/jtd/enum.ts +45 -0
- package/node_modules/ajv/lib/vocabularies/jtd/error.ts +23 -0
- package/node_modules/ajv/lib/vocabularies/jtd/index.ts +37 -0
- package/node_modules/ajv/lib/vocabularies/jtd/metadata.ts +24 -0
- package/node_modules/ajv/lib/vocabularies/jtd/nullable.ts +21 -0
- package/node_modules/ajv/lib/vocabularies/jtd/optionalProperties.ts +15 -0
- package/node_modules/ajv/lib/vocabularies/jtd/properties.ts +184 -0
- package/node_modules/ajv/lib/vocabularies/jtd/ref.ts +76 -0
- package/node_modules/ajv/lib/vocabularies/jtd/type.ts +75 -0
- package/node_modules/ajv/lib/vocabularies/jtd/union.ts +12 -0
- package/node_modules/ajv/lib/vocabularies/jtd/values.ts +58 -0
- package/node_modules/ajv/lib/vocabularies/metadata.ts +17 -0
- package/node_modules/ajv/lib/vocabularies/next.ts +8 -0
- package/node_modules/ajv/lib/vocabularies/unevaluated/index.ts +7 -0
- package/node_modules/ajv/lib/vocabularies/unevaluated/unevaluatedItems.ts +47 -0
- package/node_modules/ajv/lib/vocabularies/unevaluated/unevaluatedProperties.ts +85 -0
- package/node_modules/ajv/lib/vocabularies/validation/const.ts +28 -0
- package/node_modules/ajv/lib/vocabularies/validation/dependentRequired.ts +23 -0
- package/node_modules/ajv/lib/vocabularies/validation/enum.ts +54 -0
- package/node_modules/ajv/lib/vocabularies/validation/index.ts +49 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitContains.ts +16 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitItems.ts +26 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitLength.ts +30 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitNumber.ts +42 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitProperties.ts +26 -0
- package/node_modules/ajv/lib/vocabularies/validation/multipleOf.ts +34 -0
- package/node_modules/ajv/lib/vocabularies/validation/pattern.ts +39 -0
- package/node_modules/ajv/lib/vocabularies/validation/required.ts +98 -0
- package/node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts +79 -0
- package/node_modules/ajv/package.json +127 -0
- package/node_modules/ajv-formats/LICENSE +21 -0
- package/node_modules/ajv-formats/README.md +125 -0
- package/node_modules/ajv-formats/dist/formats.d.ts +9 -0
- package/node_modules/ajv-formats/dist/formats.js +208 -0
- package/node_modules/ajv-formats/dist/formats.js.map +1 -0
- package/node_modules/ajv-formats/dist/index.d.ts +15 -0
- package/node_modules/ajv-formats/dist/index.js +37 -0
- package/node_modules/ajv-formats/dist/index.js.map +1 -0
- package/node_modules/ajv-formats/dist/limit.d.ts +10 -0
- package/node_modules/ajv-formats/dist/limit.js +69 -0
- package/node_modules/ajv-formats/dist/limit.js.map +1 -0
- package/node_modules/ajv-formats/package.json +74 -0
- package/node_modules/ajv-formats/src/formats.ts +269 -0
- package/node_modules/ajv-formats/src/index.ts +62 -0
- package/node_modules/ajv-formats/src/limit.ts +99 -0
- package/node_modules/fast-deep-equal/LICENSE +21 -0
- package/node_modules/fast-deep-equal/README.md +96 -0
- package/node_modules/fast-deep-equal/es6/index.d.ts +2 -0
- package/node_modules/fast-deep-equal/es6/index.js +72 -0
- package/node_modules/fast-deep-equal/es6/react.d.ts +2 -0
- package/node_modules/fast-deep-equal/es6/react.js +79 -0
- package/node_modules/fast-deep-equal/index.d.ts +4 -0
- package/node_modules/fast-deep-equal/index.js +46 -0
- package/node_modules/fast-deep-equal/package.json +61 -0
- package/node_modules/fast-deep-equal/react.d.ts +2 -0
- package/node_modules/fast-deep-equal/react.js +53 -0
- package/node_modules/fast-uri/.gitattributes +2 -0
- package/node_modules/fast-uri/.github/.stale.yml +21 -0
- package/node_modules/fast-uri/.github/dependabot.yml +13 -0
- package/node_modules/fast-uri/.github/tests_checker.yml +8 -0
- package/node_modules/fast-uri/.github/workflows/ci.yml +101 -0
- package/node_modules/fast-uri/.github/workflows/package-manager-ci.yml +24 -0
- package/node_modules/fast-uri/LICENSE +32 -0
- package/node_modules/fast-uri/README.md +143 -0
- package/node_modules/fast-uri/benchmark/benchmark.mjs +159 -0
- package/node_modules/fast-uri/benchmark/equal.mjs +51 -0
- package/node_modules/fast-uri/benchmark/non-simple-domain.mjs +22 -0
- package/node_modules/fast-uri/benchmark/package.json +17 -0
- package/node_modules/fast-uri/benchmark/string-array-to-hex-stripped.mjs +24 -0
- package/node_modules/fast-uri/benchmark/ws-is-secure.mjs +65 -0
- package/node_modules/fast-uri/eslint.config.js +6 -0
- package/node_modules/fast-uri/index.js +340 -0
- package/node_modules/fast-uri/lib/schemes.js +267 -0
- package/node_modules/fast-uri/lib/utils.js +336 -0
- package/node_modules/fast-uri/package.json +69 -0
- package/node_modules/fast-uri/test/ajv.test.js +43 -0
- package/node_modules/fast-uri/test/equal.test.js +108 -0
- package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +501 -0
- package/node_modules/fast-uri/test/fixtures/uri-js-serialize.json +120 -0
- package/node_modules/fast-uri/test/parse.test.js +318 -0
- package/node_modules/fast-uri/test/resolve.test.js +78 -0
- package/node_modules/fast-uri/test/rfc-3986.test.js +90 -0
- package/node_modules/fast-uri/test/serialize.test.js +151 -0
- package/node_modules/fast-uri/test/uri-js-compatibility.test.js +33 -0
- package/node_modules/fast-uri/test/uri-js.test.js +912 -0
- package/node_modules/fast-uri/test/util.test.js +38 -0
- package/node_modules/fast-uri/tsconfig.json +9 -0
- package/node_modules/fast-uri/types/index.d.ts +60 -0
- package/node_modules/fast-uri/types/index.test-d.ts +17 -0
- package/node_modules/json-schema-traverse/.eslintrc.yml +27 -0
- package/node_modules/json-schema-traverse/.github/FUNDING.yml +2 -0
- package/node_modules/json-schema-traverse/.github/workflows/build.yml +28 -0
- package/node_modules/json-schema-traverse/.github/workflows/publish.yml +27 -0
- package/node_modules/json-schema-traverse/LICENSE +21 -0
- package/node_modules/json-schema-traverse/README.md +95 -0
- package/node_modules/json-schema-traverse/index.d.ts +40 -0
- package/node_modules/json-schema-traverse/index.js +93 -0
- package/node_modules/json-schema-traverse/package.json +43 -0
- package/node_modules/json-schema-traverse/spec/.eslintrc.yml +6 -0
- package/node_modules/json-schema-traverse/spec/fixtures/schema.js +125 -0
- package/node_modules/json-schema-traverse/spec/index.spec.js +171 -0
- package/node_modules/mime-db/HISTORY.md +541 -0
- package/node_modules/mime-db/LICENSE +23 -0
- package/node_modules/mime-db/README.md +109 -0
- package/node_modules/mime-db/db.json +9342 -0
- package/node_modules/mime-db/index.js +12 -0
- package/node_modules/mime-db/package.json +56 -0
- package/node_modules/mime-types/HISTORY.md +428 -0
- package/node_modules/mime-types/LICENSE +23 -0
- package/node_modules/mime-types/README.md +126 -0
- package/node_modules/mime-types/index.js +211 -0
- package/node_modules/mime-types/mimeScore.js +57 -0
- package/node_modules/mime-types/package.json +49 -0
- package/node_modules/require-from-string/index.js +34 -0
- package/node_modules/require-from-string/license +21 -0
- package/node_modules/require-from-string/package.json +28 -0
- package/node_modules/require-from-string/readme.md +56 -0
- package/node_modules/zod-to-json-schema/.github/CR_logotype-full-color.png +0 -0
- package/node_modules/zod-to-json-schema/.github/FUNDING.yml +1 -0
- package/node_modules/zod-to-json-schema/.prettierrc.json +1 -0
- package/node_modules/zod-to-json-schema/LICENSE +15 -0
- package/node_modules/zod-to-json-schema/README.md +390 -0
- package/node_modules/zod-to-json-schema/changelog.md +82 -0
- package/node_modules/zod-to-json-schema/contributing.md +9 -0
- package/node_modules/zod-to-json-schema/createIndex.ts +32 -0
- package/node_modules/zod-to-json-schema/dist/cjs/Options.js +51 -0
- package/node_modules/zod-to-json-schema/dist/cjs/Refs.js +26 -0
- package/node_modules/zod-to-json-schema/dist/cjs/errorMessages.js +19 -0
- package/node_modules/zod-to-json-schema/dist/cjs/getRelativePath.js +12 -0
- package/node_modules/zod-to-json-schema/dist/cjs/index.js +56 -0
- package/node_modules/zod-to-json-schema/dist/cjs/package.json +1 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parseDef.js +66 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parseTypes.js +2 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/any.js +21 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/array.js +30 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/bigint.js +53 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/boolean.js +9 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/branded.js +8 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/catch.js +8 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/date.js +50 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/default.js +11 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/effects.js +11 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/enum.js +10 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/intersection.js +56 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/literal.js +25 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/map.js +30 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/nativeEnum.js +20 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/never.js +15 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/null.js +14 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/nullable.js +37 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/number.js +56 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/object.js +76 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/optional.js +25 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/pipeline.js +24 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/promise.js +8 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/readonly.js +8 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/record.js +65 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/set.js +24 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/string.js +356 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/tuple.js +36 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/undefined.js +10 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/union.js +84 -0
- package/node_modules/zod-to-json-schema/dist/cjs/parsers/unknown.js +8 -0
- package/node_modules/zod-to-json-schema/dist/cjs/selectParser.js +109 -0
- package/node_modules/zod-to-json-schema/dist/cjs/zodToJsonSchema.js +90 -0
- package/node_modules/zod-to-json-schema/dist/esm/Options.js +46 -0
- package/node_modules/zod-to-json-schema/dist/esm/Refs.js +22 -0
- package/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +14 -0
- package/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +8 -0
- package/node_modules/zod-to-json-schema/dist/esm/index.js +40 -0
- package/node_modules/zod-to-json-schema/dist/esm/package.json +1 -0
- package/node_modules/zod-to-json-schema/dist/esm/parseDef.js +62 -0
- package/node_modules/zod-to-json-schema/dist/esm/parseTypes.js +1 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +17 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +26 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +49 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +5 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +4 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +4 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +46 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +7 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +7 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +6 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +52 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +21 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +26 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +16 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +11 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +10 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +33 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +52 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +72 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +21 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +20 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +4 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +4 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +61 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +20 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +352 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +32 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +6 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +80 -0
- package/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +4 -0
- package/node_modules/zod-to-json-schema/dist/esm/selectParser.js +105 -0
- package/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +87 -0
- package/node_modules/zod-to-json-schema/dist/types/Options.d.ts +37 -0
- package/node_modules/zod-to-json-schema/dist/types/Refs.d.ts +17 -0
- package/node_modules/zod-to-json-schema/dist/types/errorMessages.d.ts +15 -0
- package/node_modules/zod-to-json-schema/dist/types/getRelativePath.d.ts +1 -0
- package/node_modules/zod-to-json-schema/dist/types/index.d.ts +40 -0
- package/node_modules/zod-to-json-schema/dist/types/parseDef.d.ts +4 -0
- package/node_modules/zod-to-json-schema/dist/types/parseTypes.d.ts +34 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/any.d.ts +5 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/array.d.ts +12 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/bigint.d.ts +14 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/boolean.d.ts +4 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/branded.d.ts +3 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/catch.d.ts +3 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/date.d.ts +15 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/default.d.ts +6 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/effects.d.ts +4 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/enum.d.ts +6 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/intersection.d.ts +8 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/literal.d.ts +9 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/map.d.ts +15 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/nativeEnum.d.ts +6 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/never.d.ts +6 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/null.d.ts +5 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/nullable.d.ts +10 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/number.d.ts +13 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/object.d.ts +10 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/optional.d.ts +4 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/pipeline.d.ts +5 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/promise.d.ts +4 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/readonly.d.ts +3 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/record.d.ts +13 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/set.d.ts +13 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/string.d.ts +73 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/tuple.d.ts +13 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/undefined.d.ts +6 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/union.d.ts +23 -0
- package/node_modules/zod-to-json-schema/dist/types/parsers/unknown.d.ts +4 -0
- package/node_modules/zod-to-json-schema/dist/types/selectParser.d.ts +5 -0
- package/node_modules/zod-to-json-schema/dist/types/zodToJsonSchema.d.ts +10 -0
- package/node_modules/zod-to-json-schema/package.json +78 -0
- package/node_modules/zod-to-json-schema/postcjs.ts +3 -0
- package/node_modules/zod-to-json-schema/postesm.ts +3 -0
- package/npm/platform-packages/darwin-arm64/README.md +8 -0
- package/npm/platform-packages/darwin-arm64/package.json +26 -0
- package/npm/platform-packages/darwin-x64/README.md +8 -0
- package/npm/platform-packages/darwin-x64/package.json +20 -0
- package/npm/platform-packages/linux-arm64/README.md +8 -0
- package/npm/platform-packages/linux-arm64/package.json +20 -0
- package/npm/platform-packages/linux-x64/README.md +8 -0
- package/npm/platform-packages/linux-x64/package.json +20 -0
- package/package.json +105 -0
- package/prompts/init.md +75 -0
- package/prompts/new-repo.md +54 -0
- package/prompts/oci-login.md +56 -0
- package/prompts/status.md +50 -0
- package/scripts/build-platform-packages.sh +80 -0
- package/scripts/check-provider-drift.sh +82 -0
- package/scripts/check-vendor-dist.mjs +54 -0
- package/scripts/check-vendor-dist.test.mjs +129 -0
- package/scripts/extract-provider-contracts.sh +133 -0
- package/scripts/preinstall.sh +60 -0
- package/scripts/publish-pi-mono.sh +76 -0
- package/skills/cleave/SKILL.md +284 -0
- package/skills/git/SKILL.md +217 -0
- package/skills/git/_reference/ci-validation.md +204 -0
- package/skills/oci/SKILL.md +338 -0
- package/skills/openspec/SKILL.md +346 -0
- package/skills/pi-extensions/SKILL.md +191 -0
- package/skills/pi-tui/SKILL.md +517 -0
- package/skills/python/SKILL.md +189 -0
- package/skills/rust/SKILL.md +268 -0
- package/skills/security/SKILL.md +206 -0
- package/skills/style/SKILL.md +264 -0
- package/skills/typescript/SKILL.md +225 -0
- package/skills/vault/SKILL.md +102 -0
- package/themes/alpharius-legacy.json +85 -0
- package/themes/alpharius.conf +59 -0
- package/themes/alpharius.json +89 -0
package/node_modules/@styrene-lab/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAoB,YAAY,EAAmC,MAAM,oBAAoB,CAAC;AAoC1G,OAAO,EAAE,KAAK,YAAY,EAA2C,MAAM,6BAA6B,CAAC;AA0CzG,wBAAgB,cAAc,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAaxF;AA6CD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,eAAe;IA4G1B,OAAO,CAAC,OAAO;IA3GhB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,wBAAwB,CAAY;IAC5C,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,oBAAoB,CAA2C;IACvE,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgB;IAEtD,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,iBAAiB,CAAiC;IAG1D,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,cAAc,CAA+B;IAGrD,OAAO,CAAC,kBAAkB,CAAoD;IAC9E,OAAO,CAAC,gBAAgB,CAA2C;IAGnE,OAAO,CAAC,YAAY,CAA6C;IAGjE,OAAO,CAAC,kBAAkB,CAAS;IAGnC,OAAO,CAAC,iBAAiB,CAAS;IAGlC,OAAO,CAAC,aAAa,CAA6B;IAGlD,OAAO,CAAC,WAAW,CAAC,CAAa;IAGjC,OAAO,CAAC,UAAU,CAAS;IAG3B,OAAO,CAAC,aAAa,CAAiD;IAGtE,OAAO,CAAC,qBAAqB,CAAgC;IAG7D,OAAO,CAAC,oBAAoB,CAAiC;IAC7D,OAAO,CAAC,2BAA2B,CAAC,CAAa;IAGjD,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,kBAAkB,CAAC,CAAa;IAGxC,OAAO,CAAC,wBAAwB,CAAiC;IAGjE,OAAO,CAAC,iBAAiB,CAAS;IAGlC,OAAO,CAAC,iBAAiB,CAAqD;IAC9E,OAAO,CAAC,cAAc,CAAkD;IACxE,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,mCAAmC,CAAyB;IAGpE,OAAO,CAAC,qBAAqB,CAAuD;IACpF,OAAO,CAAC,qBAAqB,CAAuD;IACpF,OAAO,CAAC,oBAAoB,CAAa;IACzC,OAAO,CAAC,oBAAoB,CAAa;IAGzC,OAAO,CAAC,YAAY,CAA6D;IAGjF,OAAO,CAAC,eAAe,CAAY;IAGnC,OAAO,CAAC,aAAa,CAAoC;IAGzD,OAAO,CAAC,YAAY,CAA6D;IAGjF,OAAO,KAAK,KAAK,GAEhB;IACD,OAAO,KAAK,cAAc,GAEzB;IACD,OAAO,KAAK,eAAe,GAE1B;IAED,YACC,OAAO,EAAE,YAAY,EACb,OAAO,GAAE,sBAA2B,EAgC5C;IAED,OAAO,CAAC,iBAAiB;IA6EnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA6H1B;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;OAGG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAgEzB;YAKa,kBAAkB;YAsBlB,sBAAsB;IA4CpC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA+B9B,OAAO,CAAC,4BAA4B;IAWpC,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,gBAAgB;IAkCxB,OAAO,CAAC,iBAAiB;IA8BzB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAmBpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyDzB,OAAO,CAAC,mBAAmB;YAyIb,cAAc;IAkG5B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IA+BnC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmD/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0C1B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAM;IAE9C;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,iCAAiC;IAWzC,OAAO,CAAC,oCAAoC;IAO5C;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAyDhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwC7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;YAYf,oBAAoB;IASlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAkEhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;YAWb,mBAAmB;IA8EjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,gBAAgB;YAkEV,yBAAyB;IA0BvC,OAAO,CAAC,wBAAwB;IAsKhC,OAAO,CAAC,gBAAgB;YAMV,WAAW;IAgSzB,+CAA+C;IAC/C,OAAO,CAAC,kBAAkB;IAS1B;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,gBAAgB;IAyFxB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IA8D5B,qBAAqB,IAAI,IAAI,CAe5B;IAEK,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAOpC;IAED,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IAKnB;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAS;YAEjB,QAAQ;YA2BR,sBAAsB;IAKpC,OAAO,CAAC,WAAW;YAoBL,cAAc;IA+B5B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,kBAAkB;YAWZ,UAAU;IAkBxB,OAAO,CAAC,yBAAyB;IAIjC,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,6BAA6B;IAkBrC,OAAO,CAAC,kBAAkB;IAoD1B,WAAW,IAAI,IAAI,CAGlB;IAED,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAIpC;IAED,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAIxC;IAED,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAoBnD;IAED;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,4BAA4B;IAmBpC,OAAO,CAAC,6BAA6B;IAqBrC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,kBAAkB;YAWZ,oBAAoB;IA6ElC,6DAA6D;IAC7D,OAAO,CAAC,0BAA0B;IAYlC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,oBAAoB;YAsId,kBAAkB;YAuBlB,mBAAmB;YA2BnB,kBAAkB;YAclB,4BAA4B;IAM1C,OAAO,CAAC,iBAAiB;YA+BX,kBAAkB;IAsHhC,OAAO,CAAC,uBAAuB;IAmC/B,OAAO,CAAC,gBAAgB;IAgIxB,OAAO,CAAC,mBAAmB;YAmCb,mBAAmB;YAwBnB,iBAAiB;YA+CjB,eAAe;YA6Ff,mBAAmB;YAuEnB,mBAAmB;YAYnB,kBAAkB;IA8FhC,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,oBAAoB;IAqC5B,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,oBAAoB;YA+Gd,kBAAkB;IAyBhC,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,qBAAqB;YAMf,iBAAiB;YAyFjB,oBAAoB;YAYpB,iBAAiB;IAwD/B,IAAI,IAAI,IAAI,CAeX;CACD","sourcesContent":["/**\n * Interactive mode for the coding agent.\n * Handles TUI rendering and user interaction, delegating business logic to AgentSession.\n */\n\nimport * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentMessage } from \"@styrene-lab/pi-agent-core\";\nimport type { AssistantMessage, ImageContent, Message, Model, OAuthProviderId } from \"@styrene-lab/pi-ai\";\nimport type {\n\tAutocompleteItem,\n\tEditorAction,\n\tEditorComponent,\n\tEditorTheme,\n\tKeyId,\n\tMarkdownTheme,\n\tOverlayHandle,\n\tOverlayOptions,\n\tSlashCommand,\n} from \"@styrene-lab/pi-tui\";\nimport {\n\tCombinedAutocompleteProvider,\n\ttype Component,\n\tContainer,\n\tfuzzyFilter,\n\tLoader,\n\tMarkdown,\n\tmatchesKey,\n\tProcessTerminal,\n\tSpacer,\n\tText,\n\tTruncatedText,\n\tTUI,\n\tvisibleWidth,\n} from \"@styrene-lab/pi-tui\";\nimport { spawn, spawnSync } from \"child_process\";\nimport {\n\tAPP_NAME,\n\tgetAuthPath,\n\tgetDebugLogPath,\n\tgetShareViewerUrl,\n\tgetUpdateInstruction,\n\tVERSION,\n} from \"../../config.js\";\nimport { type AgentSession, type AgentSessionEvent, parseSkillBlock } from \"../../core/agent-session.js\";\nimport type { CompactionResult } from \"../../core/compaction/index.js\";\nimport type {\n\tExtensionContext,\n\tExtensionRunner,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n} from \"../../core/extensions/index.js\";\nimport { FooterDataProvider, type ReadonlyFooterDataProvider } from \"../../core/footer-data-provider.js\";\nimport { type AppAction, KeybindingsManager } from \"../../core/keybindings.js\";\nimport { createCompactionSummaryMessage } from \"../../core/messages.js\";\nimport { resolveModelScope } from \"../../core/model-resolver.js\";\nimport type { ResourceDiagnostic } from \"../../core/resource-loader.js\";\nimport { type SessionContext, SessionManager } from \"../../core/session-manager.js\";\nimport { BUILTIN_SLASH_COMMANDS } from \"../../core/slash-commands.js\";\nimport type { TruncationResult } from \"../../core/tools/truncate.js\";\nimport { getChangelogPath, getNewEntries, parseChangelog } from \"../../utils/changelog.js\";\nimport { copyToClipboard } from \"../../utils/clipboard.js\";\nimport { extensionForImageMimeType, readClipboardImage } from \"../../utils/clipboard-image.js\";\nimport { clipboardModuleName } from \"../../utils/clipboard-native.js\";\nimport { ensureTool } from \"../../utils/tools-manager.js\";\nimport { ArminComponent } from \"./components/armin.js\";\nimport { AssistantMessageComponent } from \"./components/assistant-message.js\";\nimport { BashExecutionComponent } from \"./components/bash-execution.js\";\nimport { BorderedLoader } from \"./components/bordered-loader.js\";\nimport { BranchSummaryMessageComponent } from \"./components/branch-summary-message.js\";\nimport { CompactionSummaryMessageComponent } from \"./components/compaction-summary-message.js\";\nimport { CustomEditor } from \"./components/custom-editor.js\";\nimport { CustomMessageComponent } from \"./components/custom-message.js\";\nimport { DaxnutsComponent } from \"./components/daxnuts.js\";\nimport { DynamicBorder } from \"./components/dynamic-border.js\";\nimport { ExtensionEditorComponent } from \"./components/extension-editor.js\";\nimport { ExtensionInputComponent } from \"./components/extension-input.js\";\nimport { ExtensionSelectorComponent } from \"./components/extension-selector.js\";\n\nfunction parseVersionParts(version: string): number[] {\n\tconst matches = version.match(/\\d+/g);\n\tif (!matches) return [];\n\treturn matches.map((part) => Number.parseInt(part, 10));\n}\n\nexport function isVersionNewer(candidateVersion: string, currentVersion: string): boolean {\n\tconst candidate = parseVersionParts(candidateVersion);\n\tconst current = parseVersionParts(currentVersion);\n\tconst length = Math.max(candidate.length, current.length);\n\n\tfor (let i = 0; i < length; i += 1) {\n\t\tconst candidatePart = candidate[i] ?? 0;\n\t\tconst currentPart = current[i] ?? 0;\n\t\tif (candidatePart > currentPart) return true;\n\t\tif (candidatePart < currentPart) return false;\n\t}\n\n\treturn false;\n}\n\nimport { FooterComponent } from \"./components/footer.js\";\nimport { appKey, appKeyHint, editorKey, keyHint, rawKeyHint } from \"./components/keybinding-hints.js\";\nimport { LoginDialogComponent } from \"./components/login-dialog.js\";\nimport { ModelSelectorComponent } from \"./components/model-selector.js\";\nimport { OAuthSelectorComponent } from \"./components/oauth-selector.js\";\nimport { ScopedModelsSelectorComponent } from \"./components/scoped-models-selector.js\";\nimport { SessionSelectorComponent } from \"./components/session-selector.js\";\nimport { SettingsSelectorComponent } from \"./components/settings-selector.js\";\nimport { SkillInvocationMessageComponent } from \"./components/skill-invocation-message.js\";\nimport { ToolExecutionComponent } from \"./components/tool-execution.js\";\nimport { TreeSelectorComponent } from \"./components/tree-selector.js\";\nimport { UserMessageComponent } from \"./components/user-message.js\";\nimport { UserMessageSelectorComponent } from \"./components/user-message-selector.js\";\nimport {\n\tgetAvailableThemes,\n\tgetAvailableThemesWithPaths,\n\tgetEditorTheme,\n\tgetMarkdownTheme,\n\tgetThemeByName,\n\tinitTheme,\n\tonThemeChange,\n\tsetRegisteredThemes,\n\tsetTheme,\n\tsetThemeInstance,\n\tTheme,\n\ttype ThemeColor,\n\ttheme,\n} from \"./theme/theme.js\";\n\n/** Interface for components that can be expanded/collapsed */\ninterface Expandable {\n\tsetExpanded(expanded: boolean): void;\n}\n\nfunction isExpandable(obj: unknown): obj is Expandable {\n\treturn typeof obj === \"object\" && obj !== null && \"setExpanded\" in obj && typeof obj.setExpanded === \"function\";\n}\n\ntype CompactionQueuedMessage = {\n\ttext: string;\n\tmode: \"steer\" | \"followUp\";\n};\n\n/**\n * Options for InteractiveMode initialization.\n */\nexport interface InteractiveModeOptions {\n\t/** Providers that were migrated to auth.json (shows warning) */\n\tmigratedProviders?: string[];\n\t/** Warning message if session model couldn't be restored */\n\tmodelFallbackMessage?: string;\n\t/** Initial message to send on startup (can include @file content) */\n\tinitialMessage?: string;\n\t/** Images to attach to the initial message */\n\tinitialImages?: ImageContent[];\n\t/** Additional messages to send after the initial message */\n\tinitialMessages?: string[];\n\t/** Force verbose startup (overrides quietStartup setting) */\n\tverbose?: boolean;\n}\n\nexport class InteractiveMode {\n\tprivate session: AgentSession;\n\tprivate ui: TUI;\n\tprivate chatContainer: Container;\n\tprivate pendingMessagesContainer: Container;\n\tprivate statusContainer: Container;\n\tprivate defaultEditor: CustomEditor;\n\tprivate editor: EditorComponent;\n\tprivate autocompleteProvider: CombinedAutocompleteProvider | undefined;\n\tprivate fdPath: string | undefined;\n\tprivate editorContainer: Container;\n\tprivate footer: FooterComponent;\n\tprivate footerDataProvider: FooterDataProvider;\n\tprivate keybindings: KeybindingsManager;\n\tprivate version: string;\n\tprivate isInitialized = false;\n\tprivate onInputCallback?: (text: string) => void;\n\tprivate loadingAnimation: Loader | undefined = undefined;\n\tprivate pendingWorkingMessage: string | undefined = undefined;\n\tprivate readonly defaultWorkingMessage = \"Working...\";\n\n\tprivate lastSigintTime = 0;\n\tprivate lastEscapeTime = 0;\n\tprivate changelogMarkdown: string | undefined = undefined;\n\n\t// Status line tracking (for mutating immediately-sequential status updates)\n\tprivate lastStatusSpacer: Spacer | undefined = undefined;\n\tprivate lastStatusText: Text | undefined = undefined;\n\n\t// Streaming message tracking\n\tprivate streamingComponent: AssistantMessageComponent | undefined = undefined;\n\tprivate streamingMessage: AssistantMessage | undefined = undefined;\n\n\t// Tool execution tracking: toolCallId -> component\n\tprivate pendingTools = new Map<string, ToolExecutionComponent>();\n\n\t// Tool output expansion state\n\tprivate toolOutputExpanded = false;\n\n\t// Thinking block visibility state\n\tprivate hideThinkingBlock = false;\n\n\t// Skill commands: command name -> skill file path\n\tprivate skillCommands = new Map<string, string>();\n\n\t// Agent subscription unsubscribe function\n\tprivate unsubscribe?: () => void;\n\n\t// Track if editor is in bash mode (text starts with !)\n\tprivate isBashMode = false;\n\n\t// Track current bash execution component\n\tprivate bashComponent: BashExecutionComponent | undefined = undefined;\n\n\t// Track pending bash components (shown in pending area, moved to chat on submit)\n\tprivate pendingBashComponents: BashExecutionComponent[] = [];\n\n\t// Auto-compaction state\n\tprivate autoCompactionLoader: Loader | undefined = undefined;\n\tprivate autoCompactionEscapeHandler?: () => void;\n\n\t// Auto-retry state\n\tprivate retryLoader: Loader | undefined = undefined;\n\tprivate retryEscapeHandler?: () => void;\n\n\t// Messages queued while compaction is running\n\tprivate compactionQueuedMessages: CompactionQueuedMessage[] = [];\n\n\t// Shutdown state\n\tprivate shutdownRequested = false;\n\n\t// Extension UI state\n\tprivate extensionSelector: ExtensionSelectorComponent | undefined = undefined;\n\tprivate extensionInput: ExtensionInputComponent | undefined = undefined;\n\tprivate extensionEditor: ExtensionEditorComponent | undefined = undefined;\n\tprivate extensionTerminalInputUnsubscribers = new Set<() => void>();\n\n\t// Extension widgets (components rendered above/below the editor)\n\tprivate extensionWidgetsAbove = new Map<string, Component & { dispose?(): void }>();\n\tprivate extensionWidgetsBelow = new Map<string, Component & { dispose?(): void }>();\n\tprivate widgetContainerAbove!: Container;\n\tprivate widgetContainerBelow!: Container;\n\n\t// Custom footer from extension (undefined = use built-in footer)\n\tprivate customFooter: (Component & { dispose?(): void }) | undefined = undefined;\n\n\t// Header container that holds the built-in or custom header\n\tprivate headerContainer: Container;\n\n\t// Built-in header (logo + keybinding hints + changelog)\n\tprivate builtInHeader: Component | undefined = undefined;\n\n\t// Custom header from extension (undefined = use built-in header)\n\tprivate customHeader: (Component & { dispose?(): void }) | undefined = undefined;\n\n\t// Convenience accessors\n\tprivate get agent() {\n\t\treturn this.session.agent;\n\t}\n\tprivate get sessionManager() {\n\t\treturn this.session.sessionManager;\n\t}\n\tprivate get settingsManager() {\n\t\treturn this.session.settingsManager;\n\t}\n\n\tconstructor(\n\t\tsession: AgentSession,\n\t\tprivate options: InteractiveModeOptions = {},\n\t) {\n\t\tthis.session = session;\n\t\tthis.version = VERSION;\n\t\tthis.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());\n\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\tthis.headerContainer = new Container();\n\t\tthis.chatContainer = new Container();\n\t\tthis.pendingMessagesContainer = new Container();\n\t\tthis.statusContainer = new Container();\n\t\tthis.widgetContainerAbove = new Container();\n\t\tthis.widgetContainerBelow = new Container();\n\t\tthis.keybindings = KeybindingsManager.create();\n\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\tthis.defaultEditor = new CustomEditor(this.ui, getEditorTheme(), this.keybindings, {\n\t\t\tpaddingX: editorPaddingX,\n\t\t\tautocompleteMaxVisible,\n\t\t});\n\t\tthis.editor = this.defaultEditor;\n\t\tthis.editorContainer = new Container();\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.footerDataProvider = new FooterDataProvider();\n\t\tthis.footer = new FooterComponent(session, this.footerDataProvider);\n\t\tthis.footer.setAutoCompactEnabled(session.autoCompactionEnabled);\n\n\t\t// Load hide thinking block setting\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\n\t\t// Register themes from resource loader and initialize\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\tinitTheme(this.settingsManager.getTheme(), true);\n\t}\n\n\tprivate setupAutocomplete(fdPath: string | undefined): void {\n\t\t// Define commands for autocomplete\n\t\tconst slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.map((command) => ({\n\t\t\tname: command.name,\n\t\t\tdescription: command.description,\n\t\t}));\n\n\t\tconst modelCommand = slashCommands.find((command) => command.name === \"model\");\n\t\tif (modelCommand) {\n\t\t\tmodelCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\t// Get available models (scoped or from registry)\n\t\t\t\tconst models =\n\t\t\t\t\tthis.session.scopedModels.length > 0\n\t\t\t\t\t\t? this.session.scopedModels.map((s) => s.model)\n\t\t\t\t\t\t: this.session.modelRegistry.getAvailable();\n\n\t\t\t\tif (models.length === 0) return null;\n\n\t\t\t\t// Create items with provider/id format\n\t\t\t\tconst items = models.map((m) => ({\n\t\t\t\t\tid: m.id,\n\t\t\t\t\tprovider: m.provider,\n\t\t\t\t\tlabel: `${m.provider}/${m.id}`,\n\t\t\t\t}));\n\n\t\t\t\t// Fuzzy filter by model ID + provider (allows \"opus anthropic\" to match)\n\t\t\t\tconst filtered = fuzzyFilter(items, prefix, (item) => `${item.id} ${item.provider}`);\n\n\t\t\t\tif (filtered.length === 0) return null;\n\n\t\t\t\treturn filtered.map((item) => ({\n\t\t\t\t\tvalue: item.label,\n\t\t\t\t\tlabel: item.id,\n\t\t\t\t\tdescription: item.provider,\n\t\t\t\t}));\n\t\t\t};\n\t\t}\n\n\t\t// Convert prompt templates to SlashCommand format for autocomplete\n\t\tconst templateCommands: SlashCommand[] = this.session.promptTemplates.map((cmd) => ({\n\t\t\tname: cmd.name,\n\t\t\tdescription: cmd.description,\n\t\t}));\n\n\t\t// Convert extension commands to SlashCommand format\n\t\tconst builtinCommandNames = new Set(slashCommands.map((c) => c.name));\n\t\tconst extensionCommands: SlashCommand[] = (\n\t\t\tthis.session.extensionRunner?.getRegisteredCommands(builtinCommandNames) ?? []\n\t\t).map((cmd) => ({\n\t\t\tname: cmd.name,\n\t\t\tdescription: cmd.description ?? \"(extension command)\",\n\t\t\tgetArgumentCompletions: cmd.getArgumentCompletions,\n\t\t}));\n\n\t\t// Build skill commands from session.skills (if enabled)\n\t\tthis.skillCommands.clear();\n\t\tconst skillCommandList: SlashCommand[] = [];\n\t\tif (this.settingsManager.getEnableSkillCommands()) {\n\t\t\tfor (const skill of this.session.resourceLoader.getSkills().skills) {\n\t\t\t\tconst commandName = `skill:${skill.name}`;\n\t\t\t\tthis.skillCommands.set(commandName, skill.filePath);\n\t\t\t\tskillCommandList.push({ name: commandName, description: skill.description });\n\t\t\t}\n\t\t}\n\n\t\t// Setup autocomplete\n\t\tthis.autocompleteProvider = new CombinedAutocompleteProvider(\n\t\t\t[...slashCommands, ...templateCommands, ...extensionCommands, ...skillCommandList],\n\t\t\tprocess.cwd(),\n\t\t\tfdPath,\n\t\t);\n\t\tthis.defaultEditor.setAutocompleteProvider(this.autocompleteProvider);\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.setAutocompleteProvider?.(this.autocompleteProvider);\n\t\t}\n\t}\n\n\tasync init(): Promise<void> {\n\t\tif (this.isInitialized) return;\n\n\t\t// Load changelog (only show new entries, skip for resumed sessions)\n\t\tthis.changelogMarkdown = this.getChangelogForDisplay();\n\n\t\t// Ensure fd and rg are available (downloads if missing, adds to PATH via getBinDir)\n\t\t// Both are needed: fd for autocomplete, rg for grep tool and bash commands\n\t\tconst [fdPath] = await Promise.all([ensureTool(\"fd\"), ensureTool(\"rg\")]);\n\t\tthis.fdPath = fdPath;\n\n\t\t// Add header container as first child\n\t\tthis.ui.addChild(this.headerContainer);\n\n\t\t// Add header with keybindings from config (unless silenced)\n\t\tif (this.options.verbose || !this.settingsManager.getQuietStartup()) {\n\t\t\tconst logo = theme.bold(theme.fg(\"accent\", APP_NAME)) + theme.fg(\"dim\", ` v${this.version}`);\n\n\t\t\t// Build startup instructions using keybinding hint helpers\n\t\t\tconst kb = this.keybindings;\n\t\t\tconst hint = (action: AppAction, desc: string) => appKeyHint(kb, action, desc);\n\n\t\t\tconst instructions = [\n\t\t\t\thint(\"interrupt\", \"to interrupt\"),\n\t\t\t\thint(\"clear\", \"to clear\"),\n\t\t\t\trawKeyHint(`${appKey(kb, \"clear\")} twice`, \"to exit\"),\n\t\t\t\thint(\"exit\", \"to exit (empty)\"),\n\t\t\t\thint(\"suspend\", \"to suspend\"),\n\t\t\t\tkeyHint(\"deleteToLineEnd\", \"to delete to end\"),\n\t\t\t\thint(\"cycleThinkingLevel\", \"to cycle thinking level\"),\n\t\t\t\trawKeyHint(`${appKey(kb, \"cycleModelForward\")}/${appKey(kb, \"cycleModelBackward\")}`, \"to cycle models\"),\n\t\t\t\thint(\"selectModel\", \"to select model\"),\n\t\t\t\thint(\"expandTools\", \"to expand tools\"),\n\t\t\t\thint(\"toggleThinking\", \"to expand thinking\"),\n\t\t\t\thint(\"externalEditor\", \"for external editor\"),\n\t\t\t\trawKeyHint(\"/\", \"for commands\"),\n\t\t\t\trawKeyHint(\"!\", \"to run bash\"),\n\t\t\t\trawKeyHint(\"!!\", \"to run bash (no context)\"),\n\t\t\t\thint(\"followUp\", \"to queue follow-up\"),\n\t\t\t\thint(\"dequeue\", \"to edit all queued messages\"),\n\t\t\t\thint(\"pasteImage\", \"to paste image\"),\n\t\t\t\trawKeyHint(\"drop files\", \"to attach\"),\n\t\t\t].join(\"\\n\");\n\t\t\tthis.builtInHeader = new Text(`${logo}\\n${instructions}`, 1, 0);\n\n\t\t\t// Setup UI layout\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\n\t\t\t// Add changelog if provided\n\t\t\tif (this.changelogMarkdown) {\n\t\t\t\tthis.headerContainer.addChild(new DynamicBorder());\n\t\t\t\tif (this.settingsManager.getCollapseChangelog()) {\n\t\t\t\t\tconst versionMatch = this.changelogMarkdown.match(/##\\s+\\[?(\\d+\\.\\d+\\.\\d+)\\]?/);\n\t\t\t\t\tconst latestVersion = versionMatch ? versionMatch[1] : this.version;\n\t\t\t\t\tconst condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\n\t\t\t\t\tthis.headerContainer.addChild(new Text(condensedText, 1, 0));\n\t\t\t\t} else {\n\t\t\t\t\tthis.headerContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0));\n\t\t\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\t\t\tthis.headerContainer.addChild(\n\t\t\t\t\t\tnew Markdown(this.changelogMarkdown.trim(), 1, 0, this.getMarkdownThemeWithSettings()),\n\t\t\t\t\t);\n\t\t\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\t\t}\n\t\t\t\tthis.headerContainer.addChild(new DynamicBorder());\n\t\t\t}\n\t\t} else {\n\t\t\t// Minimal header when silenced\n\t\t\tthis.builtInHeader = new Text(\"\", 0, 0);\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t\tif (this.changelogMarkdown) {\n\t\t\t\t// Still show changelog notification even in silent mode\n\t\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\t\tconst versionMatch = this.changelogMarkdown.match(/##\\s+\\[?(\\d+\\.\\d+\\.\\d+)\\]?/);\n\t\t\t\tconst latestVersion = versionMatch ? versionMatch[1] : this.version;\n\t\t\t\tconst condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\n\t\t\t\tthis.headerContainer.addChild(new Text(condensedText, 1, 0));\n\t\t\t}\n\t\t}\n\n\t\tthis.ui.addChild(this.chatContainer);\n\t\tthis.ui.addChild(this.pendingMessagesContainer);\n\t\tthis.ui.addChild(this.statusContainer);\n\t\tthis.renderWidgets(); // Initialize with default spacer\n\t\tthis.ui.addChild(this.widgetContainerAbove);\n\t\tthis.ui.addChild(this.editorContainer);\n\t\tthis.ui.addChild(this.widgetContainerBelow);\n\t\tthis.ui.addChild(this.footer);\n\t\tthis.ui.setFocus(this.editor);\n\n\t\tthis.setupKeyHandlers();\n\t\tthis.setupEditorSubmitHandler();\n\n\t\t// Start the UI before initializing extensions so session_start handlers can use interactive dialogs\n\t\tthis.ui.start();\n\t\tthis.isInitialized = true;\n\n\t\t// Initialize extensions first so resources are shown before messages\n\t\tawait this.initExtensions();\n\n\t\t// Render initial messages AFTER showing loaded resources\n\t\tthis.renderInitialMessages();\n\n\t\t// Set terminal title\n\t\tthis.updateTerminalTitle();\n\n\t\t// Subscribe to agent events\n\t\tthis.subscribeToAgent();\n\n\t\t// Set up theme file watcher\n\t\tonThemeChange(() => {\n\t\t\tthis.ui.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tthis.ui.requestRender();\n\t\t});\n\n\t\t// Set up git branch watcher (uses provider instead of footer)\n\t\tthis.footerDataProvider.onBranchChange(() => {\n\t\t\tthis.ui.requestRender();\n\t\t});\n\n\t\t// Initialize available provider count for footer display\n\t\tawait this.updateAvailableProviderCount();\n\t}\n\n\t/**\n\t * Update terminal title with session name and cwd.\n\t */\n\tprivate updateTerminalTitle(): void {\n\t\tconst cwdBasename = path.basename(process.cwd());\n\t\tconst sessionName = this.sessionManager.getSessionName();\n\t\tif (sessionName) {\n\t\t\tthis.ui.terminal.setTitle(`π - ${sessionName} - ${cwdBasename}`);\n\t\t} else {\n\t\t\tthis.ui.terminal.setTitle(`π - ${cwdBasename}`);\n\t\t}\n\t}\n\n\t/**\n\t * Run the interactive mode. This is the main entry point.\n\t * Initializes the UI, shows warnings, processes initial messages, and starts the interactive loop.\n\t */\n\tasync run(): Promise<void> {\n\t\tawait this.init();\n\n\t\t// Start version check asynchronously\n\t\tthis.checkForNewVersion().then((newVersion) => {\n\t\t\tif (newVersion) {\n\t\t\t\tthis.showNewVersionNotification(newVersion);\n\t\t\t}\n\t\t});\n\n\t\t// Check tmux keyboard setup asynchronously\n\t\tthis.checkTmuxKeyboardSetup().then((warning) => {\n\t\t\tif (warning) {\n\t\t\t\tthis.showWarning(warning);\n\t\t\t}\n\t\t});\n\n\t\t// Show startup warnings\n\t\tconst { migratedProviders, modelFallbackMessage, initialMessage, initialImages, initialMessages } = this.options;\n\n\t\tif (migratedProviders && migratedProviders.length > 0) {\n\t\t\tthis.showWarning(`Migrated credentials to auth.json: ${migratedProviders.join(\", \")}`);\n\t\t}\n\n\t\tconst modelsJsonError = this.session.modelRegistry.getError();\n\t\tif (modelsJsonError) {\n\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\n\t\t}\n\n\t\tif (modelFallbackMessage) {\n\t\t\tthis.showWarning(modelFallbackMessage);\n\t\t}\n\n\t\t// Process initial messages\n\t\tif (initialMessage) {\n\t\t\ttry {\n\t\t\t\tawait this.session.prompt(initialMessage, { images: initialImages });\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t}\n\n\t\tif (initialMessages) {\n\t\t\tfor (const message of initialMessages) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.session.prompt(message);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\t\tthis.showError(errorMessage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Main interactive loop\n\t\twhile (true) {\n\t\t\tconst userInput = await this.getUserInput();\n\t\t\ttry {\n\t\t\t\tawait this.session.prompt(userInput);\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Check npm registry for a newer version.\n\t */\n\tprivate async checkForNewVersion(): Promise<string | undefined> {\n\t\tif (process.env.PI_SKIP_VERSION_CHECK || process.env.PI_OFFLINE) return undefined;\n\n\t\ttry {\n\t\t\tconst response = await fetch(\"https://registry.npmjs.org/@styrene-lab/pi-coding-agent/latest\", {\n\t\t\t\tsignal: AbortSignal.timeout(10000),\n\t\t\t});\n\t\t\tif (!response.ok) return undefined;\n\n\t\t\tconst data = (await response.json()) as { version?: string };\n\t\t\tconst latestVersion = data.version;\n\n\t\t\tif (latestVersion && isVersionNewer(latestVersion, this.version)) {\n\t\t\t\treturn latestVersion;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate async checkTmuxKeyboardSetup(): Promise<string | undefined> {\n\t\tif (!process.env.TMUX) return undefined;\n\n\t\tconst runTmuxShow = (option: string): Promise<string | undefined> => {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tconst proc = spawn(\"tmux\", [\"show\", \"-gv\", option], {\n\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\t\t\t});\n\t\t\t\tlet stdout = \"\";\n\t\t\t\tconst timer = setTimeout(() => {\n\t\t\t\t\tproc.kill();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t}, 2000);\n\n\t\t\t\tproc.stdout?.on(\"data\", (data) => {\n\t\t\t\t\tstdout += data.toString();\n\t\t\t\t});\n\t\t\t\tproc.on(\"error\", () => {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t});\n\t\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\tresolve(code === 0 ? stdout.trim() : undefined);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst [extendedKeys, extendedKeysFormat] = await Promise.all([\n\t\t\trunTmuxShow(\"extended-keys\"),\n\t\t\trunTmuxShow(\"extended-keys-format\"),\n\t\t]);\n\n\t\tif (extendedKeys !== \"on\" && extendedKeys !== \"always\") {\n\t\t\treturn \"tmux extended-keys is off. Modified Enter keys may not work. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.\";\n\t\t}\n\n\t\tif (extendedKeysFormat === \"xterm\") {\n\t\t\treturn \"tmux extended-keys-format is xterm. Pi works best with csi-u. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.\";\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Get changelog entries to display on startup.\n\t * Only shows new entries since last seen version, skips for resumed sessions.\n\t */\n\tprivate getChangelogForDisplay(): string | undefined {\n\t\t// When running under Omegon, suppress the upstream changelog entirely.\n\t\t// Omegon provides its own version and changelog experience.\n\t\tif (process.env.PI_SKIP_VERSION_CHECK) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Skip changelog for resumed/continued sessions (already have messages)\n\t\tif (this.session.state.messages.length > 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lastVersion = this.settingsManager.getLastChangelogVersion();\n\t\tconst changelogPath = getChangelogPath();\n\t\tconst entries = parseChangelog(changelogPath);\n\n\t\tif (!lastVersion) {\n\t\t\t// Fresh install - just record the version, don't show changelog\n\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\n\t\t\treturn undefined;\n\t\t} else {\n\t\t\tconst newEntries = getNewEntries(entries, lastVersion);\n\t\t\tif (newEntries.length > 0) {\n\t\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\n\t\t\t\treturn newEntries.map((e) => e.content).join(\"\\n\\n\");\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate getMarkdownThemeWithSettings(): MarkdownTheme {\n\t\treturn {\n\t\t\t...getMarkdownTheme(),\n\t\t\tcodeBlockIndent: this.settingsManager.getCodeBlockIndent(),\n\t\t};\n\t}\n\n\t// =========================================================================\n\t// Extension System\n\t// =========================================================================\n\n\tprivate formatDisplayPath(p: string): string {\n\t\tconst home = os.homedir();\n\t\tlet result = p;\n\n\t\t// Replace home directory with ~\n\t\tif (result.startsWith(home)) {\n\t\t\tresult = `~${result.slice(home.length)}`;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get a short path relative to the package root for display.\n\t */\n\tprivate getShortPath(fullPath: string, source: string): string {\n\t\t// For npm packages, show path relative to node_modules/pkg/\n\t\tconst npmMatch = fullPath.match(/node_modules\\/(@?[^/]+(?:\\/[^/]+)?)\\/(.*)/);\n\t\tif (npmMatch && source.startsWith(\"npm:\")) {\n\t\t\treturn npmMatch[2];\n\t\t}\n\n\t\t// For git packages, show path relative to repo root\n\t\tconst gitMatch = fullPath.match(/git\\/[^/]+\\/[^/]+\\/(.*)/);\n\t\tif (gitMatch && source.startsWith(\"git:\")) {\n\t\t\treturn gitMatch[1];\n\t\t}\n\n\t\t// For local/auto, just use formatDisplayPath\n\t\treturn this.formatDisplayPath(fullPath);\n\t}\n\n\tprivate getDisplaySourceInfo(\n\t\tsource: string,\n\t\tscope: string,\n\t): { label: string; scopeLabel?: string; color: \"accent\" | \"muted\" } {\n\t\tif (source === \"local\") {\n\t\t\tif (scope === \"user\") {\n\t\t\t\treturn { label: \"user\", color: \"muted\" };\n\t\t\t}\n\t\t\tif (scope === \"project\") {\n\t\t\t\treturn { label: \"project\", color: \"muted\" };\n\t\t\t}\n\t\t\tif (scope === \"temporary\") {\n\t\t\t\treturn { label: \"path\", scopeLabel: \"temp\", color: \"muted\" };\n\t\t\t}\n\t\t\treturn { label: \"path\", color: \"muted\" };\n\t\t}\n\n\t\tif (source === \"cli\") {\n\t\t\treturn { label: \"path\", scopeLabel: scope === \"temporary\" ? \"temp\" : undefined, color: \"muted\" };\n\t\t}\n\n\t\tconst scopeLabel =\n\t\t\tscope === \"user\" ? \"user\" : scope === \"project\" ? \"project\" : scope === \"temporary\" ? \"temp\" : undefined;\n\t\treturn { label: source, scopeLabel, color: \"accent\" };\n\t}\n\n\tprivate getScopeGroup(source: string, scope: string): \"user\" | \"project\" | \"path\" {\n\t\tif (source === \"cli\" || scope === \"temporary\") return \"path\";\n\t\tif (scope === \"user\") return \"user\";\n\t\tif (scope === \"project\") return \"project\";\n\t\treturn \"path\";\n\t}\n\n\tprivate isPackageSource(source: string): boolean {\n\t\treturn source.startsWith(\"npm:\") || source.startsWith(\"git:\");\n\t}\n\n\tprivate buildScopeGroups(\n\t\tpaths: string[],\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\n\t): Array<{ scope: \"user\" | \"project\" | \"path\"; paths: string[]; packages: Map<string, string[]> }> {\n\t\tconst groups: Record<\n\t\t\t\"user\" | \"project\" | \"path\",\n\t\t\t{ scope: \"user\" | \"project\" | \"path\"; paths: string[]; packages: Map<string, string[]> }\n\t\t> = {\n\t\t\tuser: { scope: \"user\", paths: [], packages: new Map() },\n\t\t\tproject: { scope: \"project\", paths: [], packages: new Map() },\n\t\t\tpath: { scope: \"path\", paths: [], packages: new Map() },\n\t\t};\n\n\t\tfor (const p of paths) {\n\t\t\tconst meta = this.findMetadata(p, metadata);\n\t\t\tconst source = meta?.source ?? \"local\";\n\t\t\tconst scope = meta?.scope ?? \"project\";\n\t\t\tconst groupKey = this.getScopeGroup(source, scope);\n\t\t\tconst group = groups[groupKey];\n\n\t\t\tif (this.isPackageSource(source)) {\n\t\t\t\tconst list = group.packages.get(source) ?? [];\n\t\t\t\tlist.push(p);\n\t\t\t\tgroup.packages.set(source, list);\n\t\t\t} else {\n\t\t\t\tgroup.paths.push(p);\n\t\t\t}\n\t\t}\n\n\t\treturn [groups.project, groups.user, groups.path].filter(\n\t\t\t(group) => group.paths.length > 0 || group.packages.size > 0,\n\t\t);\n\t}\n\n\tprivate formatScopeGroups(\n\t\tgroups: Array<{ scope: \"user\" | \"project\" | \"path\"; paths: string[]; packages: Map<string, string[]> }>,\n\t\toptions: {\n\t\t\tformatPath: (p: string) => string;\n\t\t\tformatPackagePath: (p: string, source: string) => string;\n\t\t},\n\t): string {\n\t\tconst lines: string[] = [];\n\n\t\tfor (const group of groups) {\n\t\t\tlines.push(` ${theme.fg(\"accent\", group.scope)}`);\n\n\t\t\tconst sortedPaths = [...group.paths].sort((a, b) => a.localeCompare(b));\n\t\t\tfor (const p of sortedPaths) {\n\t\t\t\tlines.push(theme.fg(\"dim\", ` ${options.formatPath(p)}`));\n\t\t\t}\n\n\t\t\tconst sortedPackages = Array.from(group.packages.entries()).sort(([a], [b]) => a.localeCompare(b));\n\t\t\tfor (const [source, paths] of sortedPackages) {\n\t\t\t\tlines.push(` ${theme.fg(\"mdLink\", source)}`);\n\t\t\t\tconst sortedPackagePaths = [...paths].sort((a, b) => a.localeCompare(b));\n\t\t\t\tfor (const p of sortedPackagePaths) {\n\t\t\t\t\tlines.push(theme.fg(\"dim\", ` ${options.formatPackagePath(p, source)}`));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\t/**\n\t * Find metadata for a path, checking parent directories if exact match fails.\n\t * Package manager stores metadata for directories, but we display file paths.\n\t */\n\tprivate findMetadata(\n\t\tp: string,\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\n\t): { source: string; scope: string; origin: string } | undefined {\n\t\t// Try exact match first\n\t\tconst exact = metadata.get(p);\n\t\tif (exact) return exact;\n\n\t\t// Try parent directories (package manager stores directory paths)\n\t\tlet current = p;\n\t\twhile (current.includes(\"/\")) {\n\t\t\tcurrent = current.substring(0, current.lastIndexOf(\"/\"));\n\t\t\tconst parent = metadata.get(current);\n\t\t\tif (parent) return parent;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Format a path with its source/scope info from metadata.\n\t */\n\tprivate formatPathWithSource(\n\t\tp: string,\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\n\t): string {\n\t\tconst meta = this.findMetadata(p, metadata);\n\t\tif (meta) {\n\t\t\tconst shortPath = this.getShortPath(p, meta.source);\n\t\t\tconst { label, scopeLabel } = this.getDisplaySourceInfo(meta.source, meta.scope);\n\t\t\tconst labelText = scopeLabel ? `${label} (${scopeLabel})` : label;\n\t\t\treturn `${labelText} ${shortPath}`;\n\t\t}\n\t\treturn this.formatDisplayPath(p);\n\t}\n\n\t/**\n\t * Format resource diagnostics with nice collision display using metadata.\n\t */\n\tprivate formatDiagnostics(\n\t\tdiagnostics: readonly ResourceDiagnostic[],\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\n\t): string {\n\t\tconst lines: string[] = [];\n\n\t\t// Group collision diagnostics by name\n\t\tconst collisions = new Map<string, ResourceDiagnostic[]>();\n\t\tconst otherDiagnostics: ResourceDiagnostic[] = [];\n\n\t\tfor (const d of diagnostics) {\n\t\t\tif (d.type === \"collision\" && d.collision) {\n\t\t\t\tconst list = collisions.get(d.collision.name) ?? [];\n\t\t\t\tlist.push(d);\n\t\t\t\tcollisions.set(d.collision.name, list);\n\t\t\t} else {\n\t\t\t\totherDiagnostics.push(d);\n\t\t\t}\n\t\t}\n\n\t\t// Format collision diagnostics grouped by name\n\t\tfor (const [name, collisionList] of collisions) {\n\t\t\tconst first = collisionList[0]?.collision;\n\t\t\tif (!first) continue;\n\t\t\tlines.push(theme.fg(\"warning\", ` \"${name}\" collision:`));\n\t\t\t// Show winner\n\t\t\tlines.push(\n\t\t\t\ttheme.fg(\"dim\", ` ${theme.fg(\"success\", \"✓\")} ${this.formatPathWithSource(first.winnerPath, metadata)}`),\n\t\t\t);\n\t\t\t// Show all losers\n\t\t\tfor (const d of collisionList) {\n\t\t\t\tif (d.collision) {\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\"dim\",\n\t\t\t\t\t\t\t` ${theme.fg(\"warning\", \"✗\")} ${this.formatPathWithSource(d.collision.loserPath, metadata)} (skipped)`,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Format other diagnostics (skill name collisions, parse errors, etc.)\n\t\tfor (const d of otherDiagnostics) {\n\t\t\tif (d.path) {\n\t\t\t\t// Use metadata-aware formatting for paths\n\t\t\t\tconst sourceInfo = this.formatPathWithSource(d.path, metadata);\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${sourceInfo}`));\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${d.message}`));\n\t\t\t} else {\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${d.message}`));\n\t\t\t}\n\t\t}\n\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate showLoadedResources(options?: {\n\t\textensionPaths?: string[];\n\t\tforce?: boolean;\n\t\tshowDiagnosticsWhenQuiet?: boolean;\n\t}): void {\n\t\tconst showListing = options?.force || this.options.verbose || !this.settingsManager.getQuietStartup();\n\t\tconst showDiagnostics = showListing || options?.showDiagnosticsWhenQuiet === true;\n\t\tif (!showListing && !showDiagnostics) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst metadata = this.session.resourceLoader.getPathMetadata();\n\t\tconst sectionHeader = (name: string, color: ThemeColor = \"mdHeading\") => theme.fg(color, `[${name}]`);\n\n\t\tconst skillsResult = this.session.resourceLoader.getSkills();\n\t\tconst promptsResult = this.session.resourceLoader.getPrompts();\n\t\tconst themesResult = this.session.resourceLoader.getThemes();\n\n\t\tif (showListing) {\n\t\t\tconst contextFiles = this.session.resourceLoader.getAgentsFiles().agentsFiles;\n\t\t\tif (contextFiles.length > 0) {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst contextList = contextFiles\n\t\t\t\t\t.map((f) => theme.fg(\"dim\", ` ${this.formatDisplayPath(f.path)}`))\n\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tthis.chatContainer.addChild(new Text(`${sectionHeader(\"Context\")}\\n${contextList}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst skills = skillsResult.skills;\n\t\t\tif (skills.length > 0) {\n\t\t\t\tconst skillPaths = skills.map((s) => s.filePath);\n\t\t\t\tconst groups = this.buildScopeGroups(skillPaths, metadata);\n\t\t\t\tconst skillList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (p) => this.formatDisplayPath(p),\n\t\t\t\t\tformatPackagePath: (p, source) => this.getShortPath(p, source),\n\t\t\t\t});\n\t\t\t\tthis.chatContainer.addChild(new Text(`${sectionHeader(\"Skills\")}\\n${skillList}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst templates = this.session.promptTemplates;\n\t\t\tif (templates.length > 0) {\n\t\t\t\tconst templatePaths = templates.map((t) => t.filePath);\n\t\t\t\tconst groups = this.buildScopeGroups(templatePaths, metadata);\n\t\t\t\tconst templateByPath = new Map(templates.map((t) => [t.filePath, t]));\n\t\t\t\tconst templateList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (p) => {\n\t\t\t\t\t\tconst template = templateByPath.get(p);\n\t\t\t\t\t\treturn template ? `/${template.name}` : this.formatDisplayPath(p);\n\t\t\t\t\t},\n\t\t\t\t\tformatPackagePath: (p) => {\n\t\t\t\t\t\tconst template = templateByPath.get(p);\n\t\t\t\t\t\treturn template ? `/${template.name}` : this.formatDisplayPath(p);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tthis.chatContainer.addChild(new Text(`${sectionHeader(\"Prompts\")}\\n${templateList}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst extensionPaths = options?.extensionPaths ?? [];\n\t\t\tif (extensionPaths.length > 0) {\n\t\t\t\tconst groups = this.buildScopeGroups(extensionPaths, metadata);\n\t\t\t\tconst extList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (p) => this.formatDisplayPath(p),\n\t\t\t\t\tformatPackagePath: (p, source) => this.getShortPath(p, source),\n\t\t\t\t});\n\t\t\t\tthis.chatContainer.addChild(new Text(`${sectionHeader(\"Extensions\", \"mdHeading\")}\\n${extList}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\t// Show loaded themes (excluding built-in)\n\t\t\tconst loadedThemes = themesResult.themes;\n\t\t\tconst customThemes = loadedThemes.filter((t) => t.sourcePath);\n\t\t\tif (customThemes.length > 0) {\n\t\t\t\tconst themePaths = customThemes.map((t) => t.sourcePath!);\n\t\t\t\tconst groups = this.buildScopeGroups(themePaths, metadata);\n\t\t\t\tconst themeList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (p) => this.formatDisplayPath(p),\n\t\t\t\t\tformatPackagePath: (p, source) => this.getShortPath(p, source),\n\t\t\t\t});\n\t\t\t\tthis.chatContainer.addChild(new Text(`${sectionHeader(\"Themes\")}\\n${themeList}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t}\n\n\t\tif (showDiagnostics) {\n\t\t\tconst skillDiagnostics = skillsResult.diagnostics;\n\t\t\tif (skillDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(skillDiagnostics, metadata);\n\t\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Skill conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst promptDiagnostics = promptsResult.diagnostics;\n\t\t\tif (promptDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(promptDiagnostics, metadata);\n\t\t\t\tthis.chatContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", \"[Prompt conflicts]\")}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst extensionDiagnostics: ResourceDiagnostic[] = [];\n\t\t\tconst extensionErrors = this.session.resourceLoader.getExtensions().errors;\n\t\t\tif (extensionErrors.length > 0) {\n\t\t\t\tfor (const error of extensionErrors) {\n\t\t\t\t\textensionDiagnostics.push({ type: \"error\", message: error.error, path: error.path });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst commandDiagnostics = this.session.extensionRunner?.getCommandDiagnostics() ?? [];\n\t\t\textensionDiagnostics.push(...commandDiagnostics);\n\n\t\t\tconst shortcutDiagnostics = this.session.extensionRunner?.getShortcutDiagnostics() ?? [];\n\t\t\textensionDiagnostics.push(...shortcutDiagnostics);\n\n\t\t\tif (extensionDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(extensionDiagnostics, metadata);\n\t\t\t\tthis.chatContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", \"[Extension issues]\")}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst themeDiagnostics = themesResult.diagnostics;\n\t\t\tif (themeDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(themeDiagnostics, metadata);\n\t\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Theme conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the extension system with TUI-based UI context.\n\t */\n\tprivate async initExtensions(): Promise<void> {\n\t\tconst uiContext = this.createExtensionUIContext();\n\t\tawait this.session.bindExtensions({\n\t\t\tuiContext,\n\t\t\tcommandContextActions: {\n\t\t\t\twaitForIdle: () => this.session.agent.waitForIdle(),\n\t\t\t\tnewSession: async (options) => {\n\t\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tthis.statusContainer.clear();\n\n\t\t\t\t\t// Delegate to AgentSession (handles setup + agent state sync)\n\t\t\t\t\tconst success = await this.session.newSession(options);\n\t\t\t\t\tif (!success) {\n\t\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clear UI state\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.pendingMessagesContainer.clear();\n\t\t\t\t\tthis.compactionQueuedMessages = [];\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t\tthis.pendingTools.clear();\n\n\t\t\t\t\t// Render any messages added via setup, or show empty session\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tthis.ui.requestRender();\n\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\tfork: async (entryId) => {\n\t\t\t\t\tconst result = await this.session.fork(entryId);\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tthis.editor.setText(result.selectedText);\n\t\t\t\t\tthis.showStatus(\"Forked to new session\");\n\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\tconst result = await this.session.navigateTree(targetId, {\n\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t});\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t\t\t}\n\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\n\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\tswitchSession: async (sessionPath) => {\n\t\t\t\t\tawait this.handleResumeSession(sessionPath);\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\treload: async () => {\n\t\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\t},\n\t\t\t},\n\t\t\tshutdownHandler: () => {\n\t\t\t\tthis.shutdownRequested = true;\n\t\t\t\tif (!this.session.isStreaming) {\n\t\t\t\t\tvoid this.shutdown();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tthis.showExtensionError(error.extensionPath, error.error, error.stack);\n\t\t\t},\n\t\t});\n\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\tthis.setupAutocomplete(this.fdPath);\n\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tif (!extensionRunner) {\n\t\t\tthis.showLoadedResources({ extensionPaths: [], force: false });\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setupExtensionShortcuts(extensionRunner);\n\t\tthis.showLoadedResources({ extensionPaths: extensionRunner.getExtensionPaths(), force: false });\n\t}\n\n\t/**\n\t * Get a registered tool definition by name (for custom rendering).\n\t */\n\tprivate getRegisteredToolDefinition(toolName: string) {\n\t\tconst tools = this.session.extensionRunner?.getAllRegisteredTools() ?? [];\n\t\tconst registeredTool = tools.find((t) => t.definition.name === toolName);\n\t\tconst definition = registeredTool?.definition;\n\n\t\t// Check for standalone tool renderers (e.g. for built-in tools)\n\t\tconst standaloneRenderers = this.session.extensionRunner?.getToolRenderers(toolName);\n\t\tif (standaloneRenderers) {\n\t\t\tif (definition) {\n\t\t\t\t// Merge standalone renderers into the existing definition (standalone wins)\n\t\t\t\treturn {\n\t\t\t\t\t...definition,\n\t\t\t\t\trenderCall: standaloneRenderers.renderCall ?? definition.renderCall,\n\t\t\t\t\trenderResult: standaloneRenderers.renderResult ?? definition.renderResult,\n\t\t\t\t};\n\t\t\t}\n\t\t\t// No tool definition at all — create a minimal one with just renderers\n\t\t\treturn {\n\t\t\t\tname: toolName,\n\t\t\t\tlabel: toolName,\n\t\t\t\tdescription: \"\",\n\t\t\t\tparameters: {} as any,\n\t\t\t\texecute: (() => {}) as any,\n\t\t\t\trenderCall: standaloneRenderers.renderCall,\n\t\t\t\trenderResult: standaloneRenderers.renderResult,\n\t\t\t};\n\t\t}\n\n\t\treturn definition;\n\t}\n\n\t/**\n\t * Set up keyboard shortcuts registered by extensions.\n\t */\n\tprivate setupExtensionShortcuts(extensionRunner: ExtensionRunner): void {\n\t\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\n\t\tif (shortcuts.size === 0) return;\n\n\t\t// Create a context for shortcut handlers\n\t\tconst createContext = (): ExtensionContext => ({\n\t\t\tui: this.createExtensionUIContext(),\n\t\t\thasUI: true,\n\t\t\tcwd: process.cwd(),\n\t\t\tsessionManager: this.sessionManager,\n\t\t\tmodelRegistry: this.session.modelRegistry,\n\t\t\tmodel: this.session.model,\n\t\t\tisIdle: () => !this.session.isStreaming,\n\t\t\tabort: () => this.session.abort(),\n\t\t\thasPendingMessages: () => this.session.pendingMessageCount > 0,\n\t\t\tshutdown: () => {\n\t\t\t\tthis.shutdownRequested = true;\n\t\t\t},\n\t\t\tgetContextUsage: () => this.session.getContextUsage(),\n\t\t\tcompact: (options) => {\n\t\t\t\tvoid (async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.executeCompaction(options?.customInstructions, false);\n\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\toptions?.onComplete?.(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\toptions?.onError?.(err);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t},\n\t\t\tgetSystemPrompt: () => this.session.systemPrompt,\n\t\t});\n\n\t\t// Set up the extension shortcut handler on the default editor\n\t\tthis.defaultEditor.onExtensionShortcut = (data: string) => {\n\t\t\tfor (const [shortcutStr, shortcut] of shortcuts) {\n\t\t\t\t// Cast to KeyId - extension shortcuts use the same format\n\t\t\t\tif (matchesKey(data, shortcutStr as KeyId)) {\n\t\t\t\t\t// Run handler async, don't block input\n\t\t\t\t\tPromise.resolve(shortcut.handler(createContext())).catch((err) => {\n\t\t\t\t\t\tthis.showError(`Shortcut handler error: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n\n\t/**\n\t * Set extension status text in the footer.\n\t */\n\tprivate setExtensionStatus(key: string, text: string | undefined): void {\n\t\tthis.footerDataProvider.setExtensionStatus(key, text);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Set an extension widget (string array or custom component).\n\t */\n\tprivate setExtensionWidget(\n\t\tkey: string,\n\t\tcontent: string[] | ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined,\n\t\toptions?: ExtensionWidgetOptions,\n\t): void {\n\t\tconst placement = options?.placement ?? \"aboveEditor\";\n\t\tconst removeExisting = (map: Map<string, Component & { dispose?(): void }>) => {\n\t\t\tconst existing = map.get(key);\n\t\t\tif (existing?.dispose) existing.dispose();\n\t\t\tmap.delete(key);\n\t\t};\n\n\t\tremoveExisting(this.extensionWidgetsAbove);\n\t\tremoveExisting(this.extensionWidgetsBelow);\n\n\t\tif (content === undefined) {\n\t\t\tthis.renderWidgets();\n\t\t\treturn;\n\t\t}\n\n\t\tlet component: Component & { dispose?(): void };\n\n\t\tif (Array.isArray(content)) {\n\t\t\t// Wrap string array in a Container with Text components\n\t\t\tconst container = new Container();\n\t\t\tfor (const line of content.slice(0, InteractiveMode.MAX_WIDGET_LINES)) {\n\t\t\t\tcontainer.addChild(new Text(line, 1, 0));\n\t\t\t}\n\t\t\tif (content.length > InteractiveMode.MAX_WIDGET_LINES) {\n\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"... (widget truncated)\"), 1, 0));\n\t\t\t}\n\t\t\tcomponent = container;\n\t\t} else {\n\t\t\t// Factory function - create component\n\t\t\tcomponent = content(this.ui, theme);\n\t\t}\n\n\t\tconst targetMap = placement === \"belowEditor\" ? this.extensionWidgetsBelow : this.extensionWidgetsAbove;\n\t\ttargetMap.set(key, component);\n\t\tthis.renderWidgets();\n\t}\n\n\tprivate clearExtensionWidgets(): void {\n\t\tfor (const widget of this.extensionWidgetsAbove.values()) {\n\t\t\twidget.dispose?.();\n\t\t}\n\t\tfor (const widget of this.extensionWidgetsBelow.values()) {\n\t\t\twidget.dispose?.();\n\t\t}\n\t\tthis.extensionWidgetsAbove.clear();\n\t\tthis.extensionWidgetsBelow.clear();\n\t\tthis.renderWidgets();\n\t}\n\n\tprivate resetExtensionUI(): void {\n\t\tif (this.extensionSelector) {\n\t\t\tthis.hideExtensionSelector();\n\t\t}\n\t\tif (this.extensionInput) {\n\t\t\tthis.hideExtensionInput();\n\t\t}\n\t\tif (this.extensionEditor) {\n\t\t\tthis.hideExtensionEditor();\n\t\t}\n\t\tthis.ui.hideOverlay();\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.setExtensionFooter(undefined);\n\t\tthis.setExtensionHeader(undefined);\n\t\tthis.clearExtensionWidgets();\n\t\tthis.footerDataProvider.clearExtensionStatuses();\n\t\tthis.footer.invalidate();\n\t\tthis.setCustomEditorComponent(undefined);\n\t\tthis.defaultEditor.onExtensionShortcut = undefined;\n\t\tthis.updateTerminalTitle();\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.setMessage(\n\t\t\t\t`${this.defaultWorkingMessage} (${appKey(this.keybindings, \"interrupt\")} to interrupt)`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Maximum total widget lines to prevent viewport overflow\n\tprivate static readonly MAX_WIDGET_LINES = 10;\n\n\t/**\n\t * Render all extension widgets to the widget container.\n\t */\n\tprivate renderWidgets(): void {\n\t\tif (!this.widgetContainerAbove || !this.widgetContainerBelow) return;\n\t\tthis.renderWidgetContainer(this.widgetContainerAbove, this.extensionWidgetsAbove, true, true);\n\t\tthis.renderWidgetContainer(this.widgetContainerBelow, this.extensionWidgetsBelow, false, false);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate renderWidgetContainer(\n\t\tcontainer: Container,\n\t\twidgets: Map<string, Component & { dispose?(): void }>,\n\t\tspacerWhenEmpty: boolean,\n\t\tleadingSpacer: boolean,\n\t): void {\n\t\tcontainer.clear();\n\n\t\tif (widgets.size === 0) {\n\t\t\tif (spacerWhenEmpty) {\n\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (leadingSpacer) {\n\t\t\tcontainer.addChild(new Spacer(1));\n\t\t}\n\t\tfor (const component of widgets.values()) {\n\t\t\tcontainer.addChild(component);\n\t\t}\n\t}\n\n\t/**\n\t * Set a custom footer component, or restore the built-in footer.\n\t */\n\tprivate setExtensionFooter(\n\t\tfactory:\n\t\t\t| ((tui: TUI, thm: Theme, footerData: ReadonlyFooterDataProvider) => Component & { dispose?(): void })\n\t\t\t| undefined,\n\t): void {\n\t\t// Dispose existing custom footer\n\t\tif (this.customFooter?.dispose) {\n\t\t\tthis.customFooter.dispose();\n\t\t}\n\n\t\t// Remove current footer from UI\n\t\tif (this.customFooter) {\n\t\t\tthis.ui.removeChild(this.customFooter);\n\t\t} else {\n\t\t\tthis.ui.removeChild(this.footer);\n\t\t}\n\n\t\tif (factory) {\n\t\t\t// Create and add custom footer, passing the data provider\n\t\t\tthis.customFooter = factory(this.ui, theme, this.footerDataProvider);\n\t\t\tthis.ui.addChild(this.customFooter);\n\t\t} else {\n\t\t\t// Restore built-in footer\n\t\t\tthis.customFooter = undefined;\n\t\t\tthis.ui.addChild(this.footer);\n\t\t}\n\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Set a custom header component, or restore the built-in header.\n\t */\n\tprivate setExtensionHeader(factory: ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined): void {\n\t\t// Header may not be initialized yet if called during early initialization\n\t\tif (!this.builtInHeader) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Dispose existing custom header\n\t\tif (this.customHeader?.dispose) {\n\t\t\tthis.customHeader.dispose();\n\t\t}\n\n\t\t// Find the index of the current header in the header container\n\t\tconst currentHeader = this.customHeader || this.builtInHeader;\n\t\tconst index = this.headerContainer.children.indexOf(currentHeader);\n\n\t\tif (factory) {\n\t\t\t// Create and add custom header\n\t\t\tthis.customHeader = factory(this.ui, theme);\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.headerContainer.children[index] = this.customHeader;\n\t\t\t} else {\n\t\t\t\t// If not found (e.g. builtInHeader was never added), add at the top\n\t\t\t\tthis.headerContainer.children.unshift(this.customHeader);\n\t\t\t}\n\t\t} else {\n\t\t\t// Restore built-in header\n\t\t\tthis.customHeader = undefined;\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.headerContainer.children[index] = this.builtInHeader;\n\t\t\t}\n\t\t}\n\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate addExtensionTerminalInputListener(\n\t\thandler: (data: string) => { consume?: boolean; data?: string } | undefined,\n\t): () => void {\n\t\tconst unsubscribe = this.ui.addInputListener(handler);\n\t\tthis.extensionTerminalInputUnsubscribers.add(unsubscribe);\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tthis.extensionTerminalInputUnsubscribers.delete(unsubscribe);\n\t\t};\n\t}\n\n\tprivate clearExtensionTerminalInputListeners(): void {\n\t\tfor (const unsubscribe of this.extensionTerminalInputUnsubscribers) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tthis.extensionTerminalInputUnsubscribers.clear();\n\t}\n\n\t/**\n\t * Create the ExtensionUIContext for extensions.\n\t */\n\tprivate createExtensionUIContext(): ExtensionUIContext {\n\t\treturn {\n\t\t\tselect: (title, options, opts) => this.showExtensionSelector(title, options, opts),\n\t\t\tconfirm: (title, message, opts) => this.showExtensionConfirm(title, message, opts),\n\t\t\tinput: (title, placeholder, opts) => this.showExtensionInput(title, placeholder, opts),\n\t\t\tnotify: (message, type) => this.showExtensionNotify(message, type),\n\t\t\tonTerminalInput: (handler) => this.addExtensionTerminalInputListener(handler),\n\t\t\tsetStatus: (key, text) => this.setExtensionStatus(key, text),\n\t\t\tsetWorkingMessage: (message) => {\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tif (message) {\n\t\t\t\t\t\tthis.loadingAnimation.setMessage(message);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.loadingAnimation.setMessage(\n\t\t\t\t\t\t\t`${this.defaultWorkingMessage} (${appKey(this.keybindings, \"interrupt\")} to interrupt)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Queue message for when loadingAnimation is created (handles agent_start race)\n\t\t\t\t\tthis.pendingWorkingMessage = message;\n\t\t\t\t}\n\t\t\t},\n\t\t\tsetWidget: (key, content, options) => this.setExtensionWidget(key, content, options),\n\t\t\tsetFooter: (factory) => this.setExtensionFooter(factory),\n\t\t\tsetHeader: (factory) => this.setExtensionHeader(factory),\n\t\t\tsetTitle: (title) => this.ui.terminal.setTitle(title),\n\t\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\n\t\t\tpasteToEditor: (text) => this.editor.handleInput(`\\x1b[200~${text}\\x1b[201~`),\n\t\t\tsetEditorText: (text) => this.editor.setText(text),\n\t\t\tgetEditorText: () => this.editor.getExpandedText?.() ?? this.editor.getText(),\n\t\t\teditor: (title, prefill) => this.showExtensionEditor(title, prefill),\n\t\t\tsetEditorComponent: (factory) => this.setCustomEditorComponent(factory),\n\t\t\tget theme() {\n\t\t\t\treturn theme;\n\t\t\t},\n\t\t\tgetAllThemes: () => getAvailableThemesWithPaths(),\n\t\t\tgetTheme: (name) => getThemeByName(name),\n\t\t\tsetTheme: (themeOrName) => {\n\t\t\t\tif (themeOrName instanceof Theme) {\n\t\t\t\t\tsetThemeInstance(themeOrName);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\treturn { success: true };\n\t\t\t\t}\n\t\t\t\tconst result = setTheme(themeOrName, true);\n\t\t\t\tif (result.success) {\n\t\t\t\t\tif (this.settingsManager.getTheme() !== themeOrName) {\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeOrName);\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tgetToolsExpanded: () => this.toolOutputExpanded,\n\t\t\tsetToolsExpanded: (expanded) => this.setToolsExpanded(expanded),\n\t\t};\n\t}\n\n\t/**\n\t * Show a selector for extensions.\n\t */\n\tprivate showExtensionSelector(\n\t\ttitle: string,\n\t\toptions: string[],\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tif (opts?.signal?.aborted) {\n\t\t\t\tresolve(undefined);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tthis.hideExtensionSelector();\n\t\t\t\tresolve(undefined);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tthis.extensionSelector = new ExtensionSelectorComponent(\n\t\t\t\ttitle,\n\t\t\t\toptions,\n\t\t\t\t(option) => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionSelector();\n\t\t\t\t\tresolve(option);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionSelector();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t\t{ tui: this.ui, timeout: opts?.timeout },\n\t\t\t);\n\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.extensionSelector);\n\t\t\tthis.ui.setFocus(this.extensionSelector);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension selector.\n\t */\n\tprivate hideExtensionSelector(): void {\n\t\tthis.extensionSelector?.dispose();\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.extensionSelector = undefined;\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a confirmation dialog for extensions.\n\t */\n\tprivate async showExtensionConfirm(\n\t\ttitle: string,\n\t\tmessage: string,\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<boolean> {\n\t\tconst result = await this.showExtensionSelector(`${title}\\n${message}`, [\"Yes\", \"No\"], opts);\n\t\treturn result === \"Yes\";\n\t}\n\n\t/**\n\t * Show a text input for extensions.\n\t */\n\tprivate showExtensionInput(\n\t\ttitle: string,\n\t\tplaceholder?: string,\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tif (opts?.signal?.aborted) {\n\t\t\t\tresolve(undefined);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tthis.hideExtensionInput();\n\t\t\t\tresolve(undefined);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tthis.extensionInput = new ExtensionInputComponent(\n\t\t\t\ttitle,\n\t\t\t\tplaceholder,\n\t\t\t\t(value) => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionInput();\n\t\t\t\t\tresolve(value);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionInput();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t\t{ tui: this.ui, timeout: opts?.timeout },\n\t\t\t);\n\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.extensionInput);\n\t\t\tthis.ui.setFocus(this.extensionInput);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension input.\n\t */\n\tprivate hideExtensionInput(): void {\n\t\tthis.extensionInput?.dispose();\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.extensionInput = undefined;\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a multi-line editor for extensions (with Ctrl+G support).\n\t */\n\tprivate showExtensionEditor(title: string, prefill?: string): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.extensionEditor = new ExtensionEditorComponent(\n\t\t\t\tthis.ui,\n\t\t\t\tthis.keybindings,\n\t\t\t\ttitle,\n\t\t\t\tprefill,\n\t\t\t\t(value) => {\n\t\t\t\t\tthis.hideExtensionEditor();\n\t\t\t\t\tresolve(value);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tthis.hideExtensionEditor();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.extensionEditor);\n\t\t\tthis.ui.setFocus(this.extensionEditor);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension editor.\n\t */\n\tprivate hideExtensionEditor(): void {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.extensionEditor = undefined;\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Set a custom editor component from an extension.\n\t * Pass undefined to restore the default editor.\n\t */\n\tprivate setCustomEditorComponent(\n\t\tfactory: ((tui: TUI, theme: EditorTheme, keybindings: KeybindingsManager) => EditorComponent) | undefined,\n\t): void {\n\t\t// Save text from current editor before switching\n\t\tconst currentText = this.editor.getText();\n\n\t\tthis.editorContainer.clear();\n\n\t\tif (factory) {\n\t\t\t// Create the custom editor with tui, theme, and keybindings\n\t\t\tconst newEditor = factory(this.ui, getEditorTheme(), this.keybindings);\n\n\t\t\t// Wire up callbacks from the default editor\n\t\t\tnewEditor.onSubmit = this.defaultEditor.onSubmit;\n\t\t\tnewEditor.onChange = this.defaultEditor.onChange;\n\n\t\t\t// Copy text from previous editor\n\t\t\tnewEditor.setText(currentText);\n\n\t\t\t// Copy appearance settings if supported\n\t\t\tif (newEditor.borderColor !== undefined) {\n\t\t\t\tnewEditor.borderColor = this.defaultEditor.borderColor;\n\t\t\t}\n\t\t\tif (newEditor.setPaddingX !== undefined) {\n\t\t\t\tnewEditor.setPaddingX(this.defaultEditor.getPaddingX());\n\t\t\t}\n\n\t\t\t// Set autocomplete if supported\n\t\t\tif (newEditor.setAutocompleteProvider && this.autocompleteProvider) {\n\t\t\t\tnewEditor.setAutocompleteProvider(this.autocompleteProvider);\n\t\t\t}\n\n\t\t\t// If extending CustomEditor, copy app-level handlers\n\t\t\t// Use duck typing since instanceof fails across jiti module boundaries\n\t\t\tconst customEditor = newEditor as unknown as Record<string, unknown>;\n\t\t\tif (\"actionHandlers\" in customEditor && customEditor.actionHandlers instanceof Map) {\n\t\t\t\tif (!customEditor.onEscape) {\n\t\t\t\t\tcustomEditor.onEscape = () => this.defaultEditor.onEscape?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onCtrlD) {\n\t\t\t\t\tcustomEditor.onCtrlD = () => this.defaultEditor.onCtrlD?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onPasteImage) {\n\t\t\t\t\tcustomEditor.onPasteImage = () => this.defaultEditor.onPasteImage?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onExtensionShortcut) {\n\t\t\t\t\tcustomEditor.onExtensionShortcut = (data: string) => this.defaultEditor.onExtensionShortcut?.(data);\n\t\t\t\t}\n\t\t\t\t// Copy action handlers (clear, suspend, model switching, etc.)\n\t\t\t\tfor (const [action, handler] of this.defaultEditor.actionHandlers) {\n\t\t\t\t\t(customEditor.actionHandlers as Map<string, () => void>).set(action, handler);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.editor = newEditor;\n\t\t} else {\n\t\t\t// Restore default editor with text from custom editor\n\t\t\tthis.defaultEditor.setText(currentText);\n\t\t\tthis.editor = this.defaultEditor;\n\t\t}\n\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.ui.setFocus(this.editor as Component);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a notification for extensions.\n\t */\n\tprivate showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\tif (type === \"error\") {\n\t\t\tthis.showError(message);\n\t\t} else if (type === \"warning\") {\n\t\t\tthis.showWarning(message);\n\t\t} else {\n\t\t\tthis.showStatus(message);\n\t\t}\n\t}\n\n\t/** Show a custom component with keyboard focus. Overlay mode renders on top of existing content. */\n\tprivate async showExtensionCustom<T>(\n\t\tfactory: (\n\t\t\ttui: TUI,\n\t\t\ttheme: Theme,\n\t\t\tkeybindings: KeybindingsManager,\n\t\t\tdone: (result: T) => void,\n\t\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\n\t\toptions?: {\n\t\t\toverlay?: boolean;\n\t\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\t\t\tonHandle?: (handle: OverlayHandle) => void;\n\t\t},\n\t): Promise<T> {\n\t\tconst savedText = this.editor.getText();\n\t\tconst isOverlay = options?.overlay ?? false;\n\n\t\tconst restoreEditor = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.editor.setText(savedText);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet component: Component & { dispose?(): void };\n\t\t\tlet closed = false;\n\n\t\t\tconst close = (result: T) => {\n\t\t\t\tif (closed) return;\n\t\t\t\tclosed = true;\n\t\t\t\tif (isOverlay) this.ui.hideOverlay();\n\t\t\t\telse restoreEditor();\n\t\t\t\t// Note: both branches above already call requestRender\n\t\t\t\tresolve(result);\n\t\t\t\ttry {\n\t\t\t\t\tcomponent?.dispose?.();\n\t\t\t\t} catch {\n\t\t\t\t\t/* ignore dispose errors */\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tPromise.resolve(factory(this.ui, theme, this.keybindings, close))\n\t\t\t\t.then((c) => {\n\t\t\t\t\tif (closed) return;\n\t\t\t\t\tcomponent = c;\n\t\t\t\t\tif (isOverlay) {\n\t\t\t\t\t\t// Resolve overlay options - can be static or dynamic function\n\t\t\t\t\t\tconst resolveOptions = (): OverlayOptions | undefined => {\n\t\t\t\t\t\t\tif (options?.overlayOptions) {\n\t\t\t\t\t\t\t\tconst opts =\n\t\t\t\t\t\t\t\t\ttypeof options.overlayOptions === \"function\"\n\t\t\t\t\t\t\t\t\t\t? options.overlayOptions()\n\t\t\t\t\t\t\t\t\t\t: options.overlayOptions;\n\t\t\t\t\t\t\t\treturn opts;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Fallback: use component's width property if available\n\t\t\t\t\t\t\tconst w = (component as { width?: number }).width;\n\t\t\t\t\t\t\treturn w ? { width: w } : undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst handle = this.ui.showOverlay(component, resolveOptions());\n\t\t\t\t\t\t// Expose handle to caller for visibility control\n\t\t\t\t\t\toptions?.onHandle?.(handle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.editorContainer.clear();\n\t\t\t\t\t\tthis.editorContainer.addChild(component);\n\t\t\t\t\t\tthis.ui.setFocus(component);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tif (closed) return;\n\t\t\t\t\tif (!isOverlay) restoreEditor();\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Show an extension error in the UI.\n\t */\n\tprivate showExtensionError(extensionPath: string, error: string, stack?: string): void {\n\t\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\n\t\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\n\t\tthis.chatContainer.addChild(errorText);\n\t\tif (stack) {\n\t\t\t// Show stack trace in dim color, indented\n\t\t\tconst stackLines = stack\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.slice(1) // Skip first line (duplicates error message)\n\t\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\n\t\t\t\t.join(\"\\n\");\n\t\t\tif (stackLines) {\n\t\t\t\tthis.chatContainer.addChild(new Text(stackLines, 1, 0));\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\t// =========================================================================\n\t// Key Handlers\n\t// =========================================================================\n\n\tprivate setupKeyHandlers(): void {\n\t\t// Set up handlers on defaultEditor - they use this.editor for text access\n\t\t// so they work correctly regardless of which editor is active\n\t\tthis.defaultEditor.onEscape = () => {\n\t\t\tif (this.loadingAnimation) {\n\t\t\t\tthis.restoreQueuedMessagesToEditor({ abort: true });\n\t\t\t} else if (this.session.isBashRunning) {\n\t\t\t\tthis.session.abortBash();\n\t\t\t} else if (this.isBashMode) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.isBashMode = false;\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t} else if (!this.editor.getText().trim()) {\n\t\t\t\t// Double-escape with empty editor triggers /tree, /fork, or nothing based on setting\n\t\t\t\tconst action = this.settingsManager.getDoubleEscapeAction();\n\t\t\t\tif (action !== \"none\") {\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tif (now - this.lastEscapeTime < 500) {\n\t\t\t\t\t\tif (action === \"tree\") {\n\t\t\t\t\t\t\tthis.showTreeSelector();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.showUserMessageSelector();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.lastEscapeTime = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.lastEscapeTime = now;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Register app action handlers\n\t\tthis.defaultEditor.onAction(\"clear\", () => this.handleCtrlC());\n\t\tthis.defaultEditor.onCtrlD = () => this.handleCtrlD();\n\t\tthis.defaultEditor.onAction(\"suspend\", () => this.handleCtrlZ());\n\t\tthis.defaultEditor.onAction(\"cycleThinkingLevel\", () => this.cycleThinkingLevel());\n\t\tthis.defaultEditor.onAction(\"cycleModelForward\", () => this.cycleModel(\"forward\"));\n\t\tthis.defaultEditor.onAction(\"cycleModelBackward\", () => this.cycleModel(\"backward\"));\n\n\t\t// Global debug handler on TUI (works regardless of focus)\n\t\tthis.ui.onDebug = () => this.handleDebugCommand();\n\t\tthis.defaultEditor.onAction(\"selectModel\", () => this.showModelSelector());\n\t\tthis.defaultEditor.onAction(\"expandTools\", () => this.toggleToolOutputExpansion());\n\t\tthis.defaultEditor.onAction(\"toggleThinking\", () => this.toggleThinkingBlockVisibility());\n\t\tthis.defaultEditor.onAction(\"externalEditor\", () => this.openExternalEditor());\n\t\tthis.defaultEditor.onAction(\"followUp\", () => this.handleFollowUp());\n\t\tthis.defaultEditor.onAction(\"dequeue\", () => this.handleDequeue());\n\t\tthis.defaultEditor.onAction(\"newSession\", () => this.handleClearCommand());\n\t\tthis.defaultEditor.onAction(\"tree\", () => this.showTreeSelector());\n\t\tthis.defaultEditor.onAction(\"fork\", () => this.showUserMessageSelector());\n\t\tthis.defaultEditor.onAction(\"resume\", () => this.showSessionSelector());\n\n\t\tthis.defaultEditor.onChange = (text: string) => {\n\t\t\tconst wasBashMode = this.isBashMode;\n\t\t\tthis.isBashMode = text.trimStart().startsWith(\"!\");\n\t\t\tif (wasBashMode !== this.isBashMode) {\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t}\n\t\t};\n\n\t\t// Handle clipboard image paste (triggered on Ctrl+V)\n\t\tthis.defaultEditor.onPasteImage = () => {\n\t\t\tthis.handleClipboardImagePaste();\n\t\t};\n\t}\n\n\tprivate async handleClipboardImagePaste(): Promise<void> {\n\t\ttry {\n\t\t\tconst image = await readClipboardImage();\n\t\t\tif (!image) {\n\t\t\t\tconst moduleNote = clipboardModuleName ? ` (${clipboardModuleName})` : \"\";\n\t\t\t\tthis.showStatus(`No clipboard image available${moduleNote}`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write to temp file\n\t\t\tconst tmpDir = os.tmpdir();\n\t\t\tconst ext = extensionForImageMimeType(image.mimeType) ?? \"png\";\n\t\t\tconst fileName = `pi-clipboard-${crypto.randomUUID()}.${ext}`;\n\t\t\tconst filePath = path.join(tmpDir, fileName);\n\t\t\tfs.writeFileSync(filePath, Buffer.from(image.bytes));\n\n\t\t\t// Insert file path directly\n\t\t\tthis.editor.insertTextAtCursor?.(filePath);\n\t\t\tthis.showStatus(`Pasted clipboard image → ${path.basename(filePath)}`);\n\t\t\tthis.ui.requestRender();\n\t\t} catch (error) {\n\t\t\tconst detail = error instanceof Error ? error.message : String(error);\n\t\t\tthis.showWarning(`Clipboard image paste failed${detail ? `: ${detail}` : \"\"}`);\n\t\t}\n\t}\n\n\tprivate setupEditorSubmitHandler(): void {\n\t\tthis.defaultEditor.onSubmit = async (text: string) => {\n\t\t\ttext = text.trim();\n\t\t\tif (!text) return;\n\n\t\t\t// Handle commands\n\t\t\tif (text === \"/settings\") {\n\t\t\t\tthis.showSettingsSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/scoped-models\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.showModelsSelector();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/model\" || text.startsWith(\"/model \")) {\n\t\t\t\tconst searchTerm = text.startsWith(\"/model \") ? text.slice(7).trim() : undefined;\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleModelCommand(searchTerm);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text.startsWith(\"/export\")) {\n\t\t\t\tawait this.handleExportCommand(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/share\") {\n\t\t\t\tawait this.handleShareCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/copy\") {\n\t\t\t\tthis.handleCopyCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/name\" || text.startsWith(\"/name \")) {\n\t\t\t\tthis.handleNameCommand(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/session\") {\n\t\t\t\tthis.handleSessionCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/changelog\") {\n\t\t\t\tthis.handleChangelogCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/hotkeys\") {\n\t\t\t\tthis.handleHotkeysCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/fork\") {\n\t\t\t\tthis.showUserMessageSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/tree\") {\n\t\t\t\tthis.showTreeSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/login\") {\n\t\t\t\tthis.showOAuthSelector(\"login\");\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/logout\") {\n\t\t\t\tthis.showOAuthSelector(\"logout\");\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/new\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleClearCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/compact\" || text.startsWith(\"/compact \")) {\n\t\t\t\tconst customInstructions = text.startsWith(\"/compact \") ? text.slice(9).trim() : undefined;\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleCompactCommand(customInstructions);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/reload\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/debug\") {\n\t\t\t\tthis.handleDebugCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/arminsayshi\") {\n\t\t\t\tthis.handleArminSaysHi();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/resume\") {\n\t\t\t\tthis.showSessionSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/quit\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.shutdown();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle bash command (! for normal, !! for excluded from context)\n\t\t\tif (text.startsWith(\"!\")) {\n\t\t\t\tconst isExcluded = text.startsWith(\"!!\");\n\t\t\t\tconst command = isExcluded ? text.slice(2).trim() : text.slice(1).trim();\n\t\t\t\tif (command) {\n\t\t\t\t\tif (this.session.isBashRunning) {\n\t\t\t\t\t\tthis.showWarning(\"A bash command is already running. Press Esc to cancel it first.\");\n\t\t\t\t\t\tthis.editor.setText(text);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\t\tawait this.handleBashCommand(command, isExcluded);\n\t\t\t\t\tthis.isBashMode = false;\n\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Queue input during compaction (extension commands execute immediately)\n\t\t\tif (this.session.isCompacting) {\n\t\t\t\tif (this.isExtensionCommand(text)) {\n\t\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\t\tawait this.session.prompt(text);\n\t\t\t\t} else {\n\t\t\t\t\tthis.queueCompactionMessage(text, \"steer\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If streaming, use prompt() with steer behavior\n\t\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text, { streamingBehavior: \"steer\" });\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Normal message submission\n\t\t\t// First, move any pending bash components to chat\n\t\t\tthis.flushPendingBashComponents();\n\n\t\t\tif (this.onInputCallback) {\n\t\t\t\tthis.onInputCallback(text);\n\t\t\t}\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t};\n\t}\n\n\tprivate subscribeToAgent(): void {\n\t\tthis.unsubscribe = this.session.subscribe(async (event) => {\n\t\t\tawait this.handleEvent(event);\n\t\t});\n\t}\n\n\tprivate async handleEvent(event: AgentSessionEvent): Promise<void> {\n\t\tif (!this.isInitialized) {\n\t\t\tawait this.init();\n\t\t}\n\n\t\tthis.footer.invalidate();\n\n\t\tswitch (event.type) {\n\t\t\tcase \"agent_start\":\n\t\t\t\t// Restore main escape handler if retry handler is still active\n\t\t\t\t// (retry success event fires later, but we need main handler now)\n\t\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.retryLoader) {\n\t\t\t\t\tthis.retryLoader.stop();\n\t\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t}\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tthis.loadingAnimation = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\tthis.defaultWorkingMessage,\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t\t\t// Apply any pending working message queued before loader existed\n\t\t\t\tif (this.pendingWorkingMessage !== undefined) {\n\t\t\t\t\tif (this.pendingWorkingMessage) {\n\t\t\t\t\t\tthis.loadingAnimation.setMessage(this.pendingWorkingMessage);\n\t\t\t\t\t}\n\t\t\t\t\tthis.pendingWorkingMessage = undefined;\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_start\":\n\t\t\t\tif (event.message.role === \"custom\") {\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.message.role === \"user\") {\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingComponent = new AssistantMessageComponent(\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tthis.hideThinkingBlock,\n\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t);\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_update\":\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\n\t\t\t\t\tfor (const content of this.streamingMessage.content) {\n\t\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\t\tif (!this.pendingTools.has(content.id)) {\n\t\t\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst component = this.pendingTools.get(content.id);\n\t\t\t\t\t\t\t\tif (component) {\n\t\t\t\t\t\t\t\t\tcomponent.updateArgs(content.arguments);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_end\":\n\t\t\t\tif (event.message.role === \"user\") break;\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tlet errorMessage: string | undefined;\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\") {\n\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\tretryAttempt > 0\n\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\t\t\tthis.streamingMessage.errorMessage = errorMessage;\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\" || this.streamingMessage.stopReason === \"error\") {\n\t\t\t\t\t\tif (!errorMessage) {\n\t\t\t\t\t\t\terrorMessage = this.streamingMessage.errorMessage || \"Error\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\t\tcomponent.updateResult({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: errorMessage }],\n\t\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.pendingTools.clear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Args are now complete - trigger diff computation for edit tools\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\t\tcomponent.setArgsComplete();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"tool_execution_start\": {\n\t\t\t\tif (!this.pendingTools.has(event.toolCallId)) {\n\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\tevent.toolName,\n\t\t\t\t\t\tevent.args,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tthis.getRegisteredToolDefinition(event.toolName),\n\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t);\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\tthis.pendingTools.set(event.toolCallId, component);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool_execution_update\": {\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult({ ...event.partialResult, isError: false }, true);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool_execution_end\": {\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult({ ...event.result, isError: event.isError });\n\t\t\t\t\tthis.pendingTools.delete(event.toolCallId);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"agent_end\":\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\tif (this.streamingComponent) {\n\t\t\t\t\tthis.chatContainer.removeChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t}\n\t\t\t\tthis.pendingTools.clear();\n\n\t\t\t\tawait this.checkShutdownRequested();\n\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"auto_compaction_start\": {\n\t\t\t\t// Keep editor active; submissions are queued during compaction.\n\t\t\t\t// Set up escape to abort auto-compaction\n\t\t\t\tthis.autoCompactionEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\tthis.session.abortCompaction();\n\t\t\t\t};\n\t\t\t\t// Show compacting indicator with reason\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tconst reasonText = event.reason === \"overflow\" ? \"Context overflow detected, \" : \"\";\n\t\t\t\tthis.autoCompactionLoader = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t`${reasonText}Auto-compacting... (${appKey(this.keybindings, \"interrupt\")} to cancel)`,\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.autoCompactionLoader);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_compaction_end\": {\n\t\t\t\t// Restore escape handler\n\t\t\t\tif (this.autoCompactionEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.autoCompactionEscapeHandler;\n\t\t\t\t\tthis.autoCompactionEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\t// Stop loader\n\t\t\t\tif (this.autoCompactionLoader) {\n\t\t\t\t\tthis.autoCompactionLoader.stop();\n\t\t\t\t\tthis.autoCompactionLoader = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\t// Handle result\n\t\t\t\tif (event.aborted) {\n\t\t\t\t\tthis.showStatus(\"Auto-compaction cancelled\");\n\t\t\t\t} else if (event.result) {\n\t\t\t\t\t// Rebuild chat to show compacted state\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.rebuildChatFromMessages();\n\t\t\t\t\t// Add compaction component at bottom so user sees it without scrolling\n\t\t\t\t\tthis.addMessageToChat({\n\t\t\t\t\t\trole: \"compactionSummary\",\n\t\t\t\t\t\ttokensBefore: event.result.tokensBefore,\n\t\t\t\t\t\tsummary: event.result.summary,\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t});\n\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t} else if (event.errorMessage) {\n\t\t\t\t\t// Compaction failed (e.g., quota exceeded, API error)\n\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", event.errorMessage), 1, 0));\n\t\t\t\t}\n\t\t\t\tvoid this.flushCompactionQueue({ willRetry: event.willRetry });\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_retry_start\": {\n\t\t\t\t// Set up escape to abort retry\n\t\t\t\tthis.retryEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\tthis.session.abortRetry();\n\t\t\t\t};\n\t\t\t\t// Show retry indicator\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tconst delaySeconds = Math.round(event.delayMs / 1000);\n\t\t\t\tthis.retryLoader = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"warning\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t`Retrying (${event.attempt}/${event.maxAttempts}) in ${delaySeconds}s... (${appKey(this.keybindings, \"interrupt\")} to cancel)`,\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.retryLoader);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_retry_end\": {\n\t\t\t\t// Restore escape handler\n\t\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\t// Stop loader\n\t\t\t\tif (this.retryLoader) {\n\t\t\t\t\tthis.retryLoader.stop();\n\t\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\t// Show error only on final failure (success shows normal response)\n\t\t\t\tif (!event.success) {\n\t\t\t\t\tthis.showError(`Retry failed after ${event.attempt} attempts: ${event.finalError || \"Unknown error\"}`);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Extract text content from a user message */\n\tprivate getUserMessageText(message: Message): string {\n\t\tif (message.role !== \"user\") return \"\";\n\t\tconst textBlocks =\n\t\t\ttypeof message.content === \"string\"\n\t\t\t\t? [{ type: \"text\", text: message.content }]\n\t\t\t\t: message.content.filter((c: { type: string }) => c.type === \"text\");\n\t\treturn textBlocks.map((c) => (c as { text: string }).text).join(\"\");\n\t}\n\n\t/**\n\t * Show a status message in the chat.\n\t *\n\t * If multiple status messages are emitted back-to-back (without anything else being added to the chat),\n\t * we update the previous status line instead of appending new ones to avoid log spam.\n\t */\n\tprivate showStatus(message: string): void {\n\t\tconst children = this.chatContainer.children;\n\t\tconst last = children.length > 0 ? children[children.length - 1] : undefined;\n\t\tconst secondLast = children.length > 1 ? children[children.length - 2] : undefined;\n\n\t\tif (last && secondLast && last === this.lastStatusText && secondLast === this.lastStatusSpacer) {\n\t\t\tthis.lastStatusText.setText(theme.fg(\"dim\", message));\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tconst spacer = new Spacer(1);\n\t\tconst text = new Text(theme.fg(\"dim\", message), 1, 0);\n\t\tthis.chatContainer.addChild(spacer);\n\t\tthis.chatContainer.addChild(text);\n\t\tthis.lastStatusSpacer = spacer;\n\t\tthis.lastStatusText = text;\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate addMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void {\n\t\tswitch (message.role) {\n\t\t\tcase \"bashExecution\": {\n\t\t\t\tconst component = new BashExecutionComponent(message.command, this.ui, message.excludeFromContext);\n\t\t\t\tif (message.output) {\n\t\t\t\t\tcomponent.appendOutput(message.output);\n\t\t\t\t}\n\t\t\t\tcomponent.setComplete(\n\t\t\t\t\tmessage.exitCode,\n\t\t\t\t\tmessage.cancelled,\n\t\t\t\t\tmessage.truncated ? ({ truncated: true } as TruncationResult) : undefined,\n\t\t\t\t\tmessage.fullOutputPath,\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"custom\": {\n\t\t\t\tif (message.display) {\n\t\t\t\t\tconst renderer = this.session.extensionRunner?.getMessageRenderer(message.customType);\n\t\t\t\t\tconst component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings());\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"compactionSummary\": {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst component = new CompactionSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branchSummary\": {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst component = new BranchSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"user\": {\n\t\t\t\tconst textContent = this.getUserMessageText(message);\n\t\t\t\tif (textContent) {\n\t\t\t\t\tconst skillBlock = parseSkillBlock(textContent);\n\t\t\t\t\tif (skillBlock) {\n\t\t\t\t\t\t// Render skill block (collapsible)\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t\tconst component = new SkillInvocationMessageComponent(\n\t\t\t\t\t\t\tskillBlock,\n\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t// Render user message separately if present\n\t\t\t\t\t\tif (skillBlock.userMessage) {\n\t\t\t\t\t\t\tconst userComponent = new UserMessageComponent(\n\t\t\t\t\t\t\t\tskillBlock.userMessage,\n\t\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings());\n\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.populateHistory) {\n\t\t\t\t\t\tthis.editor.addToHistory?.(textContent);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"assistant\": {\n\t\t\t\tconst assistantComponent = new AssistantMessageComponent(\n\t\t\t\t\tmessage,\n\t\t\t\t\tthis.hideThinkingBlock,\n\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(assistantComponent);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolResult\": {\n\t\t\t\t// Tool results are rendered inline with tool calls, handled separately\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst _exhaustive: never = message;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Render session context to chat. Used for initial load and rebuild after compaction.\n\t * @param sessionContext Session context to render\n\t * @param options.updateFooter Update footer state\n\t * @param options.populateHistory Add user messages to editor history\n\t */\n\tprivate renderSessionContext(\n\t\tsessionContext: SessionContext,\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\tthis.pendingTools.clear();\n\n\t\tif (options.updateFooter) {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t}\n\n\t\tfor (const message of sessionContext.messages) {\n\t\t\t// Assistant messages need special handling for tool calls\n\t\t\tif (message.role === \"assistant\") {\n\t\t\t\tthis.addMessageToChat(message);\n\t\t\t\t// Render tool call components\n\t\t\t\tfor (const content of message.content) {\n\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t{ showImages: this.settingsManager.getShowImages() },\n\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\n\t\t\t\t\t\tif (message.stopReason === \"aborted\" || message.stopReason === \"error\") {\n\t\t\t\t\t\t\tlet errorMessage: string;\n\t\t\t\t\t\t\tif (message.stopReason === \"aborted\") {\n\t\t\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\t\t\tretryAttempt > 0\n\t\t\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\terrorMessage = message.errorMessage || \"Error\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcomponent.updateResult({ content: [{ type: \"text\", text: errorMessage }], isError: true });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (message.role === \"toolResult\") {\n\t\t\t\t// Match tool results to pending tool components\n\t\t\t\tconst component = this.pendingTools.get(message.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult(message);\n\t\t\t\t\tthis.pendingTools.delete(message.toolCallId);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// All other messages use standard rendering\n\t\t\t\tthis.addMessageToChat(message, options);\n\t\t\t}\n\t\t}\n\n\t\tthis.pendingTools.clear();\n\t\tthis.ui.requestRender();\n\t}\n\n\trenderInitialMessages(): void {\n\t\t// Get aligned messages and entries from session context\n\t\tconst context = this.sessionManager.buildSessionContext();\n\t\tthis.renderSessionContext(context, {\n\t\t\tupdateFooter: true,\n\t\t\tpopulateHistory: true,\n\t\t});\n\n\t\t// Show compaction info if session was compacted\n\t\tconst allEntries = this.sessionManager.getEntries();\n\t\tconst compactionCount = allEntries.filter((e) => e.type === \"compaction\").length;\n\t\tif (compactionCount > 0) {\n\t\t\tconst times = compactionCount === 1 ? \"1 time\" : `${compactionCount} times`;\n\t\t\tthis.showStatus(`Session compacted ${times}`);\n\t\t}\n\t}\n\n\tasync getUserInput(): Promise<string> {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.onInputCallback = (text: string) => {\n\t\t\t\tthis.onInputCallback = undefined;\n\t\t\t\tresolve(text);\n\t\t\t};\n\t\t});\n\t}\n\n\tprivate rebuildChatFromMessages(): void {\n\t\tthis.chatContainer.clear();\n\t\tconst context = this.sessionManager.buildSessionContext();\n\t\tthis.renderSessionContext(context);\n\t}\n\n\t// =========================================================================\n\t// Key handlers\n\t// =========================================================================\n\n\tprivate handleCtrlC(): void {\n\t\tconst now = Date.now();\n\t\tif (now - this.lastSigintTime < 500) {\n\t\t\tvoid this.shutdown();\n\t\t} else {\n\t\t\tthis.clearEditor();\n\t\t\tthis.lastSigintTime = now;\n\t\t}\n\t}\n\n\tprivate handleCtrlD(): void {\n\t\t// Only called when editor is empty (enforced by CustomEditor)\n\t\tvoid this.shutdown();\n\t}\n\n\t/**\n\t * Gracefully shutdown the agent.\n\t * Emits shutdown event to extensions, then exits.\n\t */\n\tprivate isShuttingDown = false;\n\n\tprivate async shutdown(): Promise<void> {\n\t\tif (this.isShuttingDown) return;\n\t\tthis.isShuttingDown = true;\n\n\t\t// Emit shutdown event to extensions\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tif (extensionRunner?.hasHandlers(\"session_shutdown\")) {\n\t\t\tawait extensionRunner.emit({\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t});\n\t\t}\n\n\t\t// Wait for any pending renders to complete\n\t\t// requestRender() uses process.nextTick(), so we wait one tick\n\t\tawait new Promise((resolve) => process.nextTick(resolve));\n\n\t\t// Drain any in-flight Kitty key release events before stopping.\n\t\t// This prevents escape sequences from leaking to the parent shell over slow SSH.\n\t\tawait this.ui.terminal.drainInput(1000);\n\n\t\tthis.stop();\n\t\tprocess.exit(0);\n\t}\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t */\n\tprivate async checkShutdownRequested(): Promise<void> {\n\t\tif (!this.shutdownRequested) return;\n\t\tawait this.shutdown();\n\t}\n\n\tprivate handleCtrlZ(): void {\n\t\t// Ignore SIGINT while suspended so Ctrl+C in the terminal does not\n\t\t// kill the backgrounded process. The handler is removed on resume.\n\t\tconst ignoreSigint = () => {};\n\t\tprocess.on(\"SIGINT\", ignoreSigint);\n\n\t\t// Set up handler to restore TUI when resumed\n\t\tprocess.once(\"SIGCONT\", () => {\n\t\t\tprocess.removeListener(\"SIGINT\", ignoreSigint);\n\t\t\tthis.ui.start();\n\t\t\tthis.ui.requestRender(true);\n\t\t});\n\n\t\t// Stop the TUI (restore terminal to normal mode)\n\t\tthis.ui.stop();\n\n\t\t// Send SIGTSTP to process group (pid=0 means all processes in group)\n\t\tprocess.kill(0, \"SIGTSTP\");\n\t}\n\n\tprivate async handleFollowUp(): Promise<void> {\n\t\tconst text = (this.editor.getExpandedText?.() ?? this.editor.getText()).trim();\n\t\tif (!text) return;\n\n\t\t// Queue input during compaction (extension commands execute immediately)\n\t\tif (this.session.isCompacting) {\n\t\t\tif (this.isExtensionCommand(text)) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text);\n\t\t\t} else {\n\t\t\t\tthis.queueCompactionMessage(text, \"followUp\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Alt+Enter queues a follow-up message (waits until agent finishes)\n\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t\tthis.editor.setText(\"\");\n\t\t\tawait this.session.prompt(text, { streamingBehavior: \"followUp\" });\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t\t// If not streaming, Alt+Enter acts like regular Enter (trigger onSubmit)\n\t\telse if (this.editor.onSubmit) {\n\t\t\tthis.editor.onSubmit(text);\n\t\t}\n\t}\n\n\tprivate handleDequeue(): void {\n\t\tconst restored = this.restoreQueuedMessagesToEditor();\n\t\tif (restored === 0) {\n\t\t\tthis.showStatus(\"No queued messages to restore\");\n\t\t} else {\n\t\t\tthis.showStatus(`Restored ${restored} queued message${restored > 1 ? \"s\" : \"\"} to editor`);\n\t\t}\n\t}\n\n\tprivate updateEditorBorderColor(): void {\n\t\tif (this.isBashMode) {\n\t\t\tthis.editor.borderColor = theme.getBashModeBorderColor();\n\t\t} else {\n\t\t\tconst level = this.session.thinkingLevel || \"off\";\n\t\t\tthis.editor.borderColor = theme.getThinkingBorderColor(level);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate cycleThinkingLevel(): void {\n\t\tconst newLevel = this.session.cycleThinkingLevel();\n\t\tif (newLevel === undefined) {\n\t\t\tthis.showStatus(\"Current model does not support thinking\");\n\t\t} else {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tthis.showStatus(`Thinking level: ${newLevel}`);\n\t\t}\n\t}\n\n\tprivate async cycleModel(direction: \"forward\" | \"backward\"): Promise<void> {\n\t\ttry {\n\t\t\tconst result = await this.session.cycleModel(direction);\n\t\t\tif (result === undefined) {\n\t\t\t\tconst msg = this.session.scopedModels.length > 0 ? \"Only one model in scope\" : \"Only one model available\";\n\t\t\t\tthis.showStatus(msg);\n\t\t\t} else {\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tconst thinkingStr =\n\t\t\t\t\tresult.model.reasoning && result.thinkingLevel !== \"off\" ? ` (thinking: ${result.thinkingLevel})` : \"\";\n\t\t\t\tthis.showStatus(`Switched to ${result.model.name || result.model.id}${thinkingStr}`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate toggleToolOutputExpansion(): void {\n\t\tthis.setToolsExpanded(!this.toolOutputExpanded);\n\t}\n\n\tprivate setToolsExpanded(expanded: boolean): void {\n\t\tthis.toolOutputExpanded = expanded;\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (isExpandable(child)) {\n\t\t\t\tchild.setExpanded(expanded);\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate toggleThinkingBlockVisibility(): void {\n\t\tthis.hideThinkingBlock = !this.hideThinkingBlock;\n\t\tthis.settingsManager.setHideThinkingBlock(this.hideThinkingBlock);\n\n\t\t// Rebuild chat from session messages\n\t\tthis.chatContainer.clear();\n\t\tthis.rebuildChatFromMessages();\n\n\t\t// If streaming, re-add the streaming component with updated visibility and re-render\n\t\tif (this.streamingComponent && this.streamingMessage) {\n\t\t\tthis.streamingComponent.setHideThinkingBlock(this.hideThinkingBlock);\n\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t}\n\n\t\tthis.showStatus(`Thinking blocks: ${this.hideThinkingBlock ? \"hidden\" : \"visible\"}`);\n\t}\n\n\tprivate openExternalEditor(): void {\n\t\t// Determine editor (respect $VISUAL, then $EDITOR)\n\t\tconst editorCmd = process.env.VISUAL || process.env.EDITOR;\n\t\tif (!editorCmd) {\n\t\t\tthis.showWarning(\"No editor configured. Set $VISUAL or $EDITOR environment variable.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentText = this.editor.getExpandedText?.() ?? this.editor.getText();\n\t\tconst tmpFile = path.join(os.tmpdir(), `pi-editor-${Date.now()}.pi.md`);\n\n\t\ttry {\n\t\t\t// Write current content to temp file\n\t\t\tfs.writeFileSync(tmpFile, currentText, \"utf-8\");\n\n\t\t\t// Stop TUI to release terminal\n\t\t\tthis.ui.stop();\n\n\t\t\t// Split by space to support editor arguments (e.g., \"code --wait\")\n\t\t\tconst [editor, ...editorArgs] = editorCmd.split(\" \");\n\n\t\t\t// Spawn editor synchronously with inherited stdio for interactive editing\n\t\t\tconst result = spawnSync(editor, [...editorArgs, tmpFile], {\n\t\t\t\tstdio: \"inherit\",\n\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t});\n\n\t\t\t// On successful exit (status 0), replace editor content\n\t\t\tif (result.status === 0) {\n\t\t\t\tconst newContent = fs.readFileSync(tmpFile, \"utf-8\").replace(/\\n$/, \"\");\n\t\t\t\tthis.editor.setText(newContent);\n\t\t\t}\n\t\t\t// On non-zero exit, keep original text (no action needed)\n\t\t} finally {\n\t\t\t// Clean up temp file\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpFile);\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\n\t\t\t// Restart TUI\n\t\t\tthis.ui.start();\n\t\t\t// Force full re-render since external editor uses alternate screen\n\t\t\tthis.ui.requestRender(true);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// UI helpers\n\t// =========================================================================\n\n\tclearEditor(): void {\n\t\tthis.editor.setText(\"\");\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowError(errorMessage: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", `Error: ${errorMessage}`), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowWarning(warningMessage: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"warning\", `Warning: ${warningMessage}`), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowNewVersionNotification(newVersion: string): void {\n\t\tconst action = theme.fg(\"accent\", getUpdateInstruction(\"@styrene-lab/pi-coding-agent\"));\n\t\tconst updateInstruction = theme.fg(\"muted\", `New version ${newVersion} is available. `) + action;\n\t\tconst changelogUrl = theme.fg(\n\t\t\t\"accent\",\n\t\t\t\"https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/CHANGELOG.md\",\n\t\t);\n\t\tconst changelogLine = theme.fg(\"muted\", \"Changelog: \") + changelogUrl;\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\t`${theme.bold(theme.fg(\"warning\", \"Update Available\"))}\\n${updateInstruction}\\n${changelogLine}`,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Get all queued messages (read-only).\n\t * Combines session queue and compaction queue.\n\t */\n\tprivate getAllQueuedMessages(): { steering: string[]; followUp: string[] } {\n\t\treturn {\n\t\t\tsteering: [\n\t\t\t\t...this.session.getSteeringMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"steer\").map((msg) => msg.text),\n\t\t\t],\n\t\t\tfollowUp: [\n\t\t\t\t...this.session.getFollowUpMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"followUp\").map((msg) => msg.text),\n\t\t\t],\n\t\t};\n\t}\n\n\t/**\n\t * Clear all queued messages and return their contents.\n\t * Clears both session queue and compaction queue.\n\t */\n\tprivate clearAllQueues(): { steering: string[]; followUp: string[] } {\n\t\tconst { steering, followUp } = this.session.clearQueue();\n\t\tconst compactionSteering = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"steer\")\n\t\t\t.map((msg) => msg.text);\n\t\tconst compactionFollowUp = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"followUp\")\n\t\t\t.map((msg) => msg.text);\n\t\tthis.compactionQueuedMessages = [];\n\t\treturn {\n\t\t\tsteering: [...steering, ...compactionSteering],\n\t\t\tfollowUp: [...followUp, ...compactionFollowUp],\n\t\t};\n\t}\n\n\tprivate updatePendingMessagesDisplay(): void {\n\t\tthis.pendingMessagesContainer.clear();\n\t\tconst { steering: steeringMessages, followUp: followUpMessages } = this.getAllQueuedMessages();\n\t\tif (steeringMessages.length > 0 || followUpMessages.length > 0) {\n\t\t\tthis.pendingMessagesContainer.addChild(new Spacer(1));\n\t\t\tfor (const message of steeringMessages) {\n\t\t\t\tconst text = theme.fg(\"dim\", `Steering: ${message}`);\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\tfor (const message of followUpMessages) {\n\t\t\t\tconst text = theme.fg(\"dim\", `Follow-up: ${message}`);\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\tconst dequeueHint = this.getAppKeyDisplay(\"dequeue\");\n\t\t\tconst hintText = theme.fg(\"dim\", `↳ ${dequeueHint} to edit all queued messages`);\n\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(hintText, 1, 0));\n\t\t}\n\t}\n\n\tprivate restoreQueuedMessagesToEditor(options?: { abort?: boolean; currentText?: string }): number {\n\t\tconst { steering, followUp } = this.clearAllQueues();\n\t\tconst allQueued = [...steering, ...followUp];\n\t\tif (allQueued.length === 0) {\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tif (options?.abort) {\n\t\t\t\tthis.agent.abort();\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t\tconst queuedText = allQueued.join(\"\\n\\n\");\n\t\tconst currentText = options?.currentText ?? this.editor.getText();\n\t\tconst combinedText = [queuedText, currentText].filter((t) => t.trim()).join(\"\\n\\n\");\n\t\tthis.editor.setText(combinedText);\n\t\tthis.updatePendingMessagesDisplay();\n\t\tif (options?.abort) {\n\t\t\tthis.agent.abort();\n\t\t}\n\t\treturn allQueued.length;\n\t}\n\n\tprivate queueCompactionMessage(text: string, mode: \"steer\" | \"followUp\"): void {\n\t\tthis.compactionQueuedMessages.push({ text, mode });\n\t\tthis.editor.addToHistory?.(text);\n\t\tthis.editor.setText(\"\");\n\t\tthis.updatePendingMessagesDisplay();\n\t\tthis.showStatus(\"Queued message for after compaction\");\n\t}\n\n\tprivate isExtensionCommand(text: string): boolean {\n\t\tif (!text.startsWith(\"/\")) return false;\n\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tif (!extensionRunner) return false;\n\n\t\tconst spaceIndex = text.indexOf(\" \");\n\t\tconst commandName = spaceIndex === -1 ? text.slice(1) : text.slice(1, spaceIndex);\n\t\treturn !!extensionRunner.getCommand(commandName);\n\t}\n\n\tprivate async flushCompactionQueue(options?: { willRetry?: boolean }): Promise<void> {\n\t\tif (this.compactionQueuedMessages.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst queuedMessages = [...this.compactionQueuedMessages];\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.updatePendingMessagesDisplay();\n\n\t\tconst restoreQueue = (error: unknown) => {\n\t\t\tthis.session.clearQueue();\n\t\t\tthis.compactionQueuedMessages = queuedMessages;\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.showError(\n\t\t\t\t`Failed to send queued message${queuedMessages.length > 1 ? \"s\" : \"\"}: ${\n\t\t\t\t\terror instanceof Error ? error.message : String(error)\n\t\t\t\t}`,\n\t\t\t);\n\t\t};\n\n\t\ttry {\n\t\t\tif (options?.willRetry) {\n\t\t\t\t// When retry is pending, queue messages for the retry turn\n\t\t\t\tfor (const message of queuedMessages) {\n\t\t\t\t\tif (this.isExtensionCommand(message.text)) {\n\t\t\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t\t\t} else if (message.mode === \"followUp\") {\n\t\t\t\t\t\tawait this.session.followUp(message.text);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait this.session.steer(message.text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Find first non-extension-command message to use as prompt\n\t\t\tconst firstPromptIndex = queuedMessages.findIndex((message) => !this.isExtensionCommand(message.text));\n\t\t\tif (firstPromptIndex === -1) {\n\t\t\t\t// All extension commands - execute them all\n\t\t\t\tfor (const message of queuedMessages) {\n\t\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Execute any extension commands before the first prompt\n\t\t\tconst preCommands = queuedMessages.slice(0, firstPromptIndex);\n\t\t\tconst firstPrompt = queuedMessages[firstPromptIndex];\n\t\t\tconst rest = queuedMessages.slice(firstPromptIndex + 1);\n\n\t\t\tfor (const message of preCommands) {\n\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t}\n\n\t\t\t// Send first prompt (starts streaming)\n\t\t\tconst promptPromise = this.session.prompt(firstPrompt.text).catch((error) => {\n\t\t\t\trestoreQueue(error);\n\t\t\t});\n\n\t\t\t// Queue remaining messages\n\t\t\tfor (const message of rest) {\n\t\t\t\tif (this.isExtensionCommand(message.text)) {\n\t\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t\t} else if (message.mode === \"followUp\") {\n\t\t\t\t\tawait this.session.followUp(message.text);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.session.steer(message.text);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tvoid promptPromise;\n\t\t} catch (error) {\n\t\t\trestoreQueue(error);\n\t\t}\n\t}\n\n\t/** Move pending bash components from pending area to chat */\n\tprivate flushPendingBashComponents(): void {\n\t\tfor (const component of this.pendingBashComponents) {\n\t\t\tthis.pendingMessagesContainer.removeChild(component);\n\t\t\tthis.chatContainer.addChild(component);\n\t\t}\n\t\tthis.pendingBashComponents = [];\n\t}\n\n\t// =========================================================================\n\t// Selectors\n\t// =========================================================================\n\n\t/**\n\t * Shows a selector component in place of the editor.\n\t * @param create Factory that receives a `done` callback and returns the component and focus target\n\t */\n\tprivate showSelector(create: (done: () => void) => { component: Component; focus: Component }): void {\n\t\tconst done = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t};\n\t\tconst { component, focus } = create(done);\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(component);\n\t\tthis.ui.setFocus(focus);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate showSettingsSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new SettingsSelectorComponent(\n\t\t\t\t{\n\t\t\t\t\tautoCompact: this.session.autoCompactionEnabled,\n\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\tautoResizeImages: this.settingsManager.getImageAutoResize(),\n\t\t\t\t\tblockImages: this.settingsManager.getBlockImages(),\n\t\t\t\t\tenableSkillCommands: this.settingsManager.getEnableSkillCommands(),\n\t\t\t\t\tsteeringMode: this.session.steeringMode,\n\t\t\t\t\tfollowUpMode: this.session.followUpMode,\n\t\t\t\t\ttransport: this.settingsManager.getTransport(),\n\t\t\t\t\tthinkingLevel: this.session.thinkingLevel,\n\t\t\t\t\tavailableThinkingLevels: this.session.getAvailableThinkingLevels(),\n\t\t\t\t\tcurrentTheme: this.settingsManager.getTheme() || \"dark\",\n\t\t\t\t\tavailableThemes: getAvailableThemes(),\n\t\t\t\t\thideThinkingBlock: this.hideThinkingBlock,\n\t\t\t\t\tcollapseChangelog: this.settingsManager.getCollapseChangelog(),\n\t\t\t\t\tdoubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\n\t\t\t\t\ttreeFilterMode: this.settingsManager.getTreeFilterMode(),\n\t\t\t\t\tshowHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n\t\t\t\t\teditorPaddingX: this.settingsManager.getEditorPaddingX(),\n\t\t\t\t\tautocompleteMaxVisible: this.settingsManager.getAutocompleteMaxVisible(),\n\t\t\t\t\tquietStartup: this.settingsManager.getQuietStartup(),\n\t\t\t\t\tclearOnShrink: this.settingsManager.getClearOnShrink(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonAutoCompactChange: (enabled) => {\n\t\t\t\t\t\tthis.session.setAutoCompactionEnabled(enabled);\n\t\t\t\t\t\tthis.footer.setAutoCompactEnabled(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonShowImagesChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowImages(enabled);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof ToolExecutionComponent) {\n\t\t\t\t\t\t\t\tchild.setShowImages(enabled);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonAutoResizeImagesChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setImageAutoResize(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonBlockImagesChange: (blocked) => {\n\t\t\t\t\t\tthis.settingsManager.setBlockImages(blocked);\n\t\t\t\t\t},\n\t\t\t\t\tonEnableSkillCommandsChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setEnableSkillCommands(enabled);\n\t\t\t\t\t\tthis.setupAutocomplete(this.fdPath);\n\t\t\t\t\t},\n\t\t\t\t\tonSteeringModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setSteeringMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonFollowUpModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setFollowUpMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonTransportChange: (transport) => {\n\t\t\t\t\t\tthis.settingsManager.setTransport(transport);\n\t\t\t\t\t\tthis.session.agent.setTransport(transport);\n\t\t\t\t\t},\n\t\t\t\t\tonThinkingLevelChange: (level) => {\n\t\t\t\t\t\tthis.session.setThinkingLevel(level);\n\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t},\n\t\t\t\t\tonThemeChange: (themeName) => {\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeName);\n\t\t\t\t\t\tthis.ui.invalidate();\n\t\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${result.error}\\nFell back to dark theme.`);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonThemePreview: (themeName) => {\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\t\tif (result.success) {\n\t\t\t\t\t\t\tthis.ui.invalidate();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonHideThinkingBlockChange: (hidden) => {\n\t\t\t\t\t\tthis.hideThinkingBlock = hidden;\n\t\t\t\t\t\tthis.settingsManager.setHideThinkingBlock(hidden);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\t\t\t\t\tchild.setHideThinkingBlock(hidden);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t\tthis.rebuildChatFromMessages();\n\t\t\t\t\t},\n\t\t\t\t\tonCollapseChangelogChange: (collapsed) => {\n\t\t\t\t\t\tthis.settingsManager.setCollapseChangelog(collapsed);\n\t\t\t\t\t},\n\t\t\t\t\tonQuietStartupChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setQuietStartup(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonDoubleEscapeActionChange: (action) => {\n\t\t\t\t\t\tthis.settingsManager.setDoubleEscapeAction(action);\n\t\t\t\t\t},\n\t\t\t\t\tonTreeFilterModeChange: (mode) => {\n\t\t\t\t\t\tthis.settingsManager.setTreeFilterMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonShowHardwareCursorChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowHardwareCursor(enabled);\n\t\t\t\t\t\tthis.ui.setShowHardwareCursor(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonEditorPaddingXChange: (padding) => {\n\t\t\t\t\t\tthis.settingsManager.setEditorPaddingX(padding);\n\t\t\t\t\t\tthis.defaultEditor.setPaddingX(padding);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setPaddingX !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setPaddingX(padding);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonAutocompleteMaxVisibleChange: (maxVisible) => {\n\t\t\t\t\t\tthis.settingsManager.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setAutocompleteMaxVisible !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonClearOnShrinkChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setClearOnShrink(enabled);\n\t\t\t\t\t\tthis.ui.setClearOnShrink(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getSettingsList() };\n\t\t});\n\t}\n\n\tprivate async handleModelCommand(searchTerm?: string): Promise<void> {\n\t\tif (!searchTerm) {\n\t\t\tthis.showModelSelector();\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = await this.findExactModelMatch(searchTerm);\n\t\tif (model) {\n\t\t\ttry {\n\t\t\t\tawait this.session.setModel(model);\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tthis.showStatus(`Model: ${model.id}`);\n\t\t\t\tthis.checkDaxnutsEasterEgg(model);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showModelSelector(searchTerm);\n\t}\n\n\tprivate async findExactModelMatch(searchTerm: string): Promise<Model<any> | undefined> {\n\t\tconst term = searchTerm.trim();\n\t\tif (!term) return undefined;\n\n\t\tlet targetProvider: string | undefined;\n\t\tlet targetModelId = \"\";\n\n\t\tif (term.includes(\"/\")) {\n\t\t\tconst parts = term.split(\"/\", 2);\n\t\t\ttargetProvider = parts[0]?.trim().toLowerCase();\n\t\t\ttargetModelId = parts[1]?.trim().toLowerCase() ?? \"\";\n\t\t} else {\n\t\t\ttargetModelId = term.toLowerCase();\n\t\t}\n\n\t\tif (!targetModelId) return undefined;\n\n\t\tconst models = await this.getModelCandidates();\n\t\tconst exactMatches = models.filter((item) => {\n\t\t\tconst idMatch = item.id.toLowerCase() === targetModelId;\n\t\t\tconst providerMatch = !targetProvider || item.provider.toLowerCase() === targetProvider;\n\t\t\treturn idMatch && providerMatch;\n\t\t});\n\n\t\treturn exactMatches.length === 1 ? exactMatches[0] : undefined;\n\t}\n\n\tprivate async getModelCandidates(): Promise<Model<any>[]> {\n\t\tif (this.session.scopedModels.length > 0) {\n\t\t\treturn this.session.scopedModels.map((scoped) => scoped.model);\n\t\t}\n\n\t\tthis.session.modelRegistry.refresh();\n\t\ttry {\n\t\t\treturn await this.session.modelRegistry.getAvailable();\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t/** Update the footer's available provider count from current model candidates */\n\tprivate async updateAvailableProviderCount(): Promise<void> {\n\t\tconst models = await this.getModelCandidates();\n\t\tconst uniqueProviders = new Set(models.map((m) => m.provider));\n\t\tthis.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);\n\t}\n\n\tprivate showModelSelector(initialSearchInput?: string): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new ModelSelectorComponent(\n\t\t\t\tthis.ui,\n\t\t\t\tthis.session.model,\n\t\t\t\tthis.settingsManager,\n\t\t\t\tthis.session.modelRegistry,\n\t\t\t\tthis.session.scopedModels,\n\t\t\t\tasync (model) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.session.setModel(model);\n\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(`Model: ${model.id}`);\n\t\t\t\t\t\tthis.checkDaxnutsEasterEgg(model);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSearchInput,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async showModelsSelector(): Promise<void> {\n\t\t// Get all available models\n\t\tthis.session.modelRegistry.refresh();\n\t\tconst allModels = this.session.modelRegistry.getAvailable();\n\n\t\tif (allModels.length === 0) {\n\t\t\tthis.showStatus(\"No models available\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if session has scoped models (from previous session-only changes or CLI --models)\n\t\tconst sessionScopedModels = this.session.scopedModels;\n\t\tconst hasSessionScope = sessionScopedModels.length > 0;\n\n\t\t// Build enabled model IDs from session state or settings\n\t\tconst enabledModelIds = new Set<string>();\n\t\tlet hasFilter = false;\n\n\t\tif (hasSessionScope) {\n\t\t\t// Use current session's scoped models\n\t\t\tfor (const sm of sessionScopedModels) {\n\t\t\t\tenabledModelIds.add(`${sm.model.provider}/${sm.model.id}`);\n\t\t\t}\n\t\t\thasFilter = true;\n\t\t} else {\n\t\t\t// Fall back to settings\n\t\t\tconst patterns = this.settingsManager.getEnabledModels();\n\t\t\tif (patterns !== undefined && patterns.length > 0) {\n\t\t\t\thasFilter = true;\n\t\t\t\tconst scopedModels = await resolveModelScope(patterns, this.session.modelRegistry);\n\t\t\t\tfor (const sm of scopedModels) {\n\t\t\t\t\tenabledModelIds.add(`${sm.model.provider}/${sm.model.id}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Track current enabled state (session-only until persisted)\n\t\tconst currentEnabledIds = new Set(enabledModelIds);\n\t\tlet currentHasFilter = hasFilter;\n\n\t\t// Helper to update session's scoped models (session-only, no persist)\n\t\tconst updateSessionModels = async (enabledIds: Set<string>) => {\n\t\t\tif (enabledIds.size > 0 && enabledIds.size < allModels.length) {\n\t\t\t\tconst newScopedModels = await resolveModelScope(Array.from(enabledIds), this.session.modelRegistry);\n\t\t\t\tthis.session.setScopedModels(\n\t\t\t\t\tnewScopedModels.map((sm) => ({\n\t\t\t\t\t\tmodel: sm.model,\n\t\t\t\t\t\tthinkingLevel: sm.thinkingLevel,\n\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// All enabled or none enabled = no filter\n\t\t\t\tthis.session.setScopedModels([]);\n\t\t\t}\n\t\t\tawait this.updateAvailableProviderCount();\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new ScopedModelsSelectorComponent(\n\t\t\t\t{\n\t\t\t\t\tallModels,\n\t\t\t\t\tenabledModelIds: currentEnabledIds,\n\t\t\t\t\thasEnabledModelsFilter: currentHasFilter,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonModelToggle: async (modelId, enabled) => {\n\t\t\t\t\t\tif (enabled) {\n\t\t\t\t\t\t\tcurrentEnabledIds.add(modelId);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentEnabledIds.delete(modelId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentHasFilter = true;\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonEnableAll: async (allModelIds) => {\n\t\t\t\t\t\tcurrentEnabledIds.clear();\n\t\t\t\t\t\tfor (const id of allModelIds) {\n\t\t\t\t\t\t\tcurrentEnabledIds.add(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentHasFilter = false;\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonClearAll: async () => {\n\t\t\t\t\t\tcurrentEnabledIds.clear();\n\t\t\t\t\t\tcurrentHasFilter = true;\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonToggleProvider: async (_provider, modelIds, enabled) => {\n\t\t\t\t\t\tfor (const id of modelIds) {\n\t\t\t\t\t\t\tif (enabled) {\n\t\t\t\t\t\t\t\tcurrentEnabledIds.add(id);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcurrentEnabledIds.delete(id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentHasFilter = true;\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonPersist: (enabledIds) => {\n\t\t\t\t\t\t// Persist to settings\n\t\t\t\t\t\tconst newPatterns =\n\t\t\t\t\t\t\tenabledIds.length === allModels.length\n\t\t\t\t\t\t\t\t? undefined // All enabled = clear filter\n\t\t\t\t\t\t\t\t: enabledIds;\n\t\t\t\t\t\tthis.settingsManager.setEnabledModels(newPatterns);\n\t\t\t\t\t\tthis.showStatus(\"Model selection saved to settings\");\n\t\t\t\t\t},\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate showUserMessageSelector(): void {\n\t\tconst userMessages = this.session.getUserMessagesForForking();\n\n\t\tif (userMessages.length === 0) {\n\t\t\tthis.showStatus(\"No messages to fork from\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new UserMessageSelectorComponent(\n\t\t\t\tuserMessages.map((m) => ({ id: m.entryId, text: m.text })),\n\t\t\t\tasync (entryId) => {\n\t\t\t\t\tconst result = await this.session.fork(entryId);\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\t// Extension cancelled the fork\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tthis.editor.setText(result.selectedText);\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.showStatus(\"Branched to new session\");\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getMessageList() };\n\t\t});\n\t}\n\n\tprivate showTreeSelector(initialSelectedId?: string): void {\n\t\tconst tree = this.sessionManager.getTree();\n\t\tconst realLeafId = this.sessionManager.getLeafId();\n\t\tconst initialFilterMode = this.settingsManager.getTreeFilterMode();\n\n\t\tif (tree.length === 0) {\n\t\t\tthis.showStatus(\"No entries in session\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new TreeSelectorComponent(\n\t\t\t\ttree,\n\t\t\t\trealLeafId,\n\t\t\t\tthis.ui.terminal.rows,\n\t\t\t\tasync (entryId) => {\n\t\t\t\t\t// Selecting the current leaf is a no-op (already there)\n\t\t\t\t\tif (entryId === realLeafId) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(\"Already at this point\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ask about summarization\n\t\t\t\t\tdone(); // Close selector first\n\n\t\t\t\t\t// Loop until user makes a complete choice or cancels to tree\n\t\t\t\t\tlet wantsSummary = false;\n\t\t\t\t\tlet customInstructions: string | undefined;\n\n\t\t\t\t\t// Check if we should skip the prompt (user preference to always default to no summary)\n\t\t\t\t\tif (!this.settingsManager.getBranchSummarySkipPrompt()) {\n\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\tconst summaryChoice = await this.showExtensionSelector(\"Summarize branch?\", [\n\t\t\t\t\t\t\t\t\"No summary\",\n\t\t\t\t\t\t\t\t\"Summarize\",\n\t\t\t\t\t\t\t\t\"Summarize with custom prompt\",\n\t\t\t\t\t\t\t]);\n\n\t\t\t\t\t\t\tif (summaryChoice === undefined) {\n\t\t\t\t\t\t\t\t// User pressed escape - re-show tree selector with same selection\n\t\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\twantsSummary = summaryChoice !== \"No summary\";\n\n\t\t\t\t\t\t\tif (summaryChoice === \"Summarize with custom prompt\") {\n\t\t\t\t\t\t\t\tcustomInstructions = await this.showExtensionEditor(\"Custom summarization instructions\");\n\t\t\t\t\t\t\t\tif (customInstructions === undefined) {\n\t\t\t\t\t\t\t\t\t// User cancelled - loop back to summary selector\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// User made a complete choice\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up escape handler and loader if summarizing\n\t\t\t\t\tlet summaryLoader: Loader | undefined;\n\t\t\t\t\tconst originalOnEscape = this.defaultEditor.onEscape;\n\n\t\t\t\t\tif (wantsSummary) {\n\t\t\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\t\t\tthis.session.abortBranchSummary();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t\tsummaryLoader = new Loader(\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t\t\t`Summarizing branch... (${appKey(this.keybindings, \"interrupt\")} to cancel)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.statusContainer.addChild(summaryLoader);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.session.navigateTree(entryId, {\n\t\t\t\t\t\t\tsummarize: wantsSummary,\n\t\t\t\t\t\t\tcustomInstructions,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (result.aborted) {\n\t\t\t\t\t\t\t// Summarization aborted - re-show tree selector with same selection\n\t\t\t\t\t\t\tthis.showStatus(\"Branch summarization cancelled\");\n\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\t\tthis.showStatus(\"Navigation cancelled\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update UI\n\t\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif (summaryLoader) {\n\t\t\t\t\t\t\tsummaryLoader.stop();\n\t\t\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.defaultEditor.onEscape = originalOnEscape;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\t(entryId, label) => {\n\t\t\t\t\tthis.sessionManager.appendLabelChange(entryId, label);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSelectedId,\n\t\t\t\tinitialFilterMode,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate showSessionSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new SessionSelectorComponent(\n\t\t\t\t(onProgress) =>\n\t\t\t\t\tSessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress),\n\t\t\t\tSessionManager.listAll,\n\t\t\t\tasync (sessionPath) => {\n\t\t\t\t\tdone();\n\t\t\t\t\tawait this.handleResumeSession(sessionPath);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tvoid this.shutdown();\n\t\t\t\t},\n\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t{\n\t\t\t\t\trenameSession: async (sessionFilePath: string, nextName: string | undefined) => {\n\t\t\t\t\t\tconst next = (nextName ?? \"\").trim();\n\t\t\t\t\t\tif (!next) return;\n\t\t\t\t\t\tconst mgr = SessionManager.open(sessionFilePath);\n\t\t\t\t\t\tmgr.appendSessionInfo(next);\n\t\t\t\t\t},\n\t\t\t\t\tshowRenameHint: true,\n\t\t\t\t\tkeybindings: this.keybindings,\n\t\t\t\t},\n\n\t\t\t\tthis.sessionManager.getSessionFile(),\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async handleResumeSession(sessionPath: string): Promise<void> {\n\t\t// Stop loading animation\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\n\t\t// Clear UI state\n\t\tthis.pendingMessagesContainer.clear();\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.streamingComponent = undefined;\n\t\tthis.streamingMessage = undefined;\n\t\tthis.pendingTools.clear();\n\n\t\t// Switch session via AgentSession (emits extension session events)\n\t\tawait this.session.switchSession(sessionPath);\n\n\t\t// Clear and re-render the chat\n\t\tthis.chatContainer.clear();\n\t\tthis.renderInitialMessages();\n\t\tthis.showStatus(\"Resumed session\");\n\t}\n\n\tprivate async showOAuthSelector(mode: \"login\" | \"logout\"): Promise<void> {\n\t\tif (mode === \"logout\") {\n\t\t\tconst providers = this.session.modelRegistry.authStorage.list();\n\t\t\tconst loggedInProviders = providers.filter(\n\t\t\t\t(p) => this.session.modelRegistry.authStorage.get(p)?.type === \"oauth\",\n\t\t\t);\n\t\t\tif (loggedInProviders.length === 0) {\n\t\t\t\tthis.showStatus(\"No OAuth providers logged in. Use /login first.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new OAuthSelectorComponent(\n\t\t\t\tmode,\n\t\t\t\tthis.session.modelRegistry.authStorage,\n\t\t\t\tasync (providerId: string) => {\n\t\t\t\t\tdone();\n\n\t\t\t\t\tif (mode === \"login\") {\n\t\t\t\t\t\tawait this.showLoginDialog(providerId);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Logout flow\n\t\t\t\t\t\tconst providerInfo = this.session.modelRegistry.authStorage\n\t\t\t\t\t\t\t.getOAuthProviders()\n\t\t\t\t\t\t\t.find((p) => p.id === providerId);\n\t\t\t\t\t\tconst providerName = providerInfo?.name || providerId;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tthis.session.modelRegistry.authStorage.logout(providerId);\n\t\t\t\t\t\t\tthis.session.modelRegistry.refresh();\n\t\t\t\t\t\t\tawait this.updateAvailableProviderCount();\n\t\t\t\t\t\t\tthis.showStatus(`Logged out of ${providerName}`);\n\t\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\t\tthis.showError(`Logout failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async showLoginDialog(providerId: string): Promise<void> {\n\t\tconst providerInfo = this.session.modelRegistry.authStorage.getOAuthProviders().find((p) => p.id === providerId);\n\t\tconst providerName = providerInfo?.name || providerId;\n\n\t\t// Providers that use callback servers (can paste redirect URL)\n\t\tconst usesCallbackServer = providerInfo?.usesCallbackServer ?? false;\n\n\t\t// Create login dialog component\n\t\tconst dialog = new LoginDialogComponent(this.ui, providerId, (_success, _message) => {\n\t\t\t// Completion handled below\n\t\t});\n\n\t\t// Show dialog in editor container\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(dialog);\n\t\tthis.ui.setFocus(dialog);\n\t\tthis.ui.requestRender();\n\n\t\t// Promise for manual code input (racing with callback server)\n\t\tlet manualCodeResolve: ((code: string) => void) | undefined;\n\t\tlet manualCodeReject: ((err: Error) => void) | undefined;\n\t\tconst manualCodePromise = new Promise<string>((resolve, reject) => {\n\t\t\tmanualCodeResolve = resolve;\n\t\t\tmanualCodeReject = reject;\n\t\t});\n\n\t\t// Restore editor helper\n\t\tconst restoreEditor = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.session.modelRegistry.authStorage.login(providerId as OAuthProviderId, {\n\t\t\t\tonAuth: (info: { url: string; instructions?: string }) => {\n\t\t\t\t\tdialog.showAuth(info.url, info.instructions);\n\n\t\t\t\t\tif (usesCallbackServer) {\n\t\t\t\t\t\t// Show input for manual paste, racing with callback\n\t\t\t\t\t\tdialog\n\t\t\t\t\t\t\t.showManualInput(\"Paste redirect URL below, or complete login in browser:\")\n\t\t\t\t\t\t\t.then((value) => {\n\t\t\t\t\t\t\t\tif (value && manualCodeResolve) {\n\t\t\t\t\t\t\t\t\tmanualCodeResolve(value);\n\t\t\t\t\t\t\t\t\tmanualCodeResolve = undefined;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\t\tif (manualCodeReject) {\n\t\t\t\t\t\t\t\t\tmanualCodeReject(new Error(\"Login cancelled\"));\n\t\t\t\t\t\t\t\t\tmanualCodeReject = undefined;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} else if (providerId === \"github-copilot\") {\n\t\t\t\t\t\t// GitHub Copilot polls after onAuth\n\t\t\t\t\t\tdialog.showWaiting(\"Waiting for browser authentication...\");\n\t\t\t\t\t}\n\t\t\t\t\t// For Anthropic: onPrompt is called immediately after\n\t\t\t\t},\n\n\t\t\t\tonPrompt: async (prompt: { message: string; placeholder?: string }) => {\n\t\t\t\t\treturn dialog.showPrompt(prompt.message, prompt.placeholder);\n\t\t\t\t},\n\n\t\t\t\tonProgress: (message: string) => {\n\t\t\t\t\tdialog.showProgress(message);\n\t\t\t\t},\n\n\t\t\t\tonManualCodeInput: () => manualCodePromise,\n\n\t\t\t\tsignal: dialog.signal,\n\t\t\t});\n\n\t\t\t// Success\n\t\t\trestoreEditor();\n\t\t\tthis.session.modelRegistry.refresh();\n\t\t\tawait this.updateAvailableProviderCount();\n\t\t\tthis.showStatus(`Logged in to ${providerName}. Credentials saved to ${getAuthPath()}`);\n\t\t} catch (error: unknown) {\n\t\t\trestoreEditor();\n\t\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\t\tif (errorMsg !== \"Login cancelled\") {\n\t\t\t\tthis.showError(`Failed to login to ${providerName}: ${errorMsg}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// Command handlers\n\t// =========================================================================\n\n\tprivate async handleReloadCommand(): Promise<void> {\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.showWarning(\"Wait for the current response to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isCompacting) {\n\t\t\tthis.showWarning(\"Wait for compaction to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.resetExtensionUI();\n\n\t\tconst loader = new BorderedLoader(this.ui, theme, \"Reloading extensions, skills, prompts, themes...\", {\n\t\t\tcancellable: false,\n\t\t});\n\t\tconst previousEditor = this.editor;\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(loader);\n\t\tthis.ui.setFocus(loader);\n\t\tthis.ui.requestRender();\n\n\t\tconst dismissLoader = (editor: Component) => {\n\t\t\tloader.dispose();\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(editor);\n\t\t\tthis.ui.setFocus(editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.session.reload();\n\t\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\t\tconst themeName = this.settingsManager.getTheme();\n\t\t\tconst themeResult = themeName ? setTheme(themeName, true) : { success: true };\n\t\t\tif (!themeResult.success) {\n\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${themeResult.error}\\nFell back to dark theme.`);\n\t\t\t}\n\t\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\t\tthis.defaultEditor.setPaddingX(editorPaddingX);\n\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\t\tif (this.editor !== this.defaultEditor) {\n\t\t\t\tthis.editor.setPaddingX?.(editorPaddingX);\n\t\t\t\tthis.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t\t}\n\t\t\tthis.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());\n\t\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\t\tthis.setupAutocomplete(this.fdPath);\n\t\t\tconst runner = this.session.extensionRunner;\n\t\t\tif (runner) {\n\t\t\t\tthis.setupExtensionShortcuts(runner);\n\t\t\t}\n\t\t\tthis.rebuildChatFromMessages();\n\t\t\tdismissLoader(this.editor as Component);\n\t\t\tthis.showLoadedResources({\n\t\t\t\textensionPaths: runner?.getExtensionPaths() ?? [],\n\t\t\t\tforce: false,\n\t\t\t\tshowDiagnosticsWhenQuiet: true,\n\t\t\t});\n\t\t\tconst modelsJsonError = this.session.modelRegistry.getError();\n\t\t\tif (modelsJsonError) {\n\t\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\n\t\t\t}\n\t\t\tthis.showStatus(\"Reloaded extensions, skills, prompts, themes\");\n\t\t} catch (error) {\n\t\t\tdismissLoader(previousEditor as Component);\n\t\t\tthis.showError(`Reload failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleExportCommand(text: string): Promise<void> {\n\t\tconst parts = text.split(/\\s+/);\n\t\tconst outputPath = parts.length > 1 ? parts[1] : undefined;\n\n\t\ttry {\n\t\t\tconst filePath = await this.session.exportToHtml(outputPath);\n\t\t\tthis.showStatus(`Session exported to: ${filePath}`);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to export session: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t}\n\t}\n\n\tprivate async handleShareCommand(): Promise<void> {\n\t\t// Check if gh is available and logged in\n\t\ttry {\n\t\t\tconst authResult = spawnSync(\"gh\", [\"auth\", \"status\"], { encoding: \"utf-8\" });\n\t\t\tif (authResult.status !== 0) {\n\t\t\t\tthis.showError(\"GitHub CLI is not logged in. Run 'gh auth login' first.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\tthis.showError(\"GitHub CLI (gh) is not installed. Install it from https://cli.github.com/\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Export to a temp file\n\t\tconst tmpFile = path.join(os.tmpdir(), \"session.html\");\n\t\ttry {\n\t\t\tawait this.session.exportToHtml(tmpFile);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to export session: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t\treturn;\n\t\t}\n\n\t\t// Show cancellable loader, replacing the editor\n\t\tconst loader = new BorderedLoader(this.ui, theme, \"Creating gist...\");\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(loader);\n\t\tthis.ui.setFocus(loader);\n\t\tthis.ui.requestRender();\n\n\t\tconst restoreEditor = () => {\n\t\t\tloader.dispose();\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpFile);\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\t\t};\n\n\t\t// Create a secret gist asynchronously\n\t\tlet proc: ReturnType<typeof spawn> | null = null;\n\n\t\tloader.onAbort = () => {\n\t\t\tproc?.kill();\n\t\t\trestoreEditor();\n\t\t\tthis.showStatus(\"Share cancelled\");\n\t\t};\n\n\t\ttry {\n\t\t\tconst result = await new Promise<{ stdout: string; stderr: string; code: number | null }>((resolve) => {\n\t\t\t\tproc = spawn(\"gh\", [\"gist\", \"create\", \"--public=false\", tmpFile]);\n\t\t\t\tlet stdout = \"\";\n\t\t\t\tlet stderr = \"\";\n\t\t\t\tproc.stdout?.on(\"data\", (data) => {\n\t\t\t\t\tstdout += data.toString();\n\t\t\t\t});\n\t\t\t\tproc.stderr?.on(\"data\", (data) => {\n\t\t\t\t\tstderr += data.toString();\n\t\t\t\t});\n\t\t\t\tproc.on(\"close\", (code) => resolve({ stdout, stderr, code }));\n\t\t\t});\n\n\t\t\tif (loader.signal.aborted) return;\n\n\t\t\trestoreEditor();\n\n\t\t\tif (result.code !== 0) {\n\t\t\t\tconst errorMsg = result.stderr?.trim() || \"Unknown error\";\n\t\t\t\tthis.showError(`Failed to create gist: ${errorMsg}`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Extract gist ID from the URL returned by gh\n\t\t\t// gh returns something like: https://gist.github.com/username/GIST_ID\n\t\t\tconst gistUrl = result.stdout?.trim();\n\t\t\tconst gistId = gistUrl?.split(\"/\").pop();\n\t\t\tif (!gistId) {\n\t\t\t\tthis.showError(\"Failed to parse gist ID from gh output\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Create the preview URL\n\t\t\tconst previewUrl = getShareViewerUrl(gistId);\n\t\t\tthis.showStatus(`Share URL: ${previewUrl}\\nGist: ${gistUrl}`);\n\t\t} catch (error: unknown) {\n\t\t\tif (!loader.signal.aborted) {\n\t\t\t\trestoreEditor();\n\t\t\t\tthis.showError(`Failed to create gist: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate handleCopyCommand(): void {\n\t\tconst text = this.session.getLastAssistantText();\n\t\tif (!text) {\n\t\t\tthis.showError(\"No agent messages to copy yet.\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tcopyToClipboard(text);\n\t\t\tthis.showStatus(\"Copied last agent message to clipboard\");\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate handleNameCommand(text: string): void {\n\t\tconst name = text.replace(/^\\/name\\s*/, \"\").trim();\n\t\tif (!name) {\n\t\t\tconst currentName = this.sessionManager.getSessionName();\n\t\t\tif (currentName) {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"dim\", `Session name: ${currentName}`), 1, 0));\n\t\t\t} else {\n\t\t\t\tthis.showWarning(\"Usage: /name <name>\");\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.sessionManager.appendSessionInfo(name);\n\t\tthis.updateTerminalTitle();\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"dim\", `Session name set: ${name}`), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleSessionCommand(): void {\n\t\tconst stats = this.session.getSessionStats();\n\t\tconst sessionName = this.sessionManager.getSessionName();\n\n\t\tlet info = `${theme.bold(\"Session Info\")}\\n\\n`;\n\t\tif (sessionName) {\n\t\t\tinfo += `${theme.fg(\"dim\", \"Name:\")} ${sessionName}\\n`;\n\t\t}\n\t\tinfo += `${theme.fg(\"dim\", \"File:\")} ${stats.sessionFile ?? \"In-memory\"}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"ID:\")} ${stats.sessionId}\\n\\n`;\n\t\tinfo += `${theme.bold(\"Messages\")}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"User:\")} ${stats.userMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Assistant:\")} ${stats.assistantMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Tool Calls:\")} ${stats.toolCalls}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Tool Results:\")} ${stats.toolResults}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.totalMessages}\\n\\n`;\n\t\tinfo += `${theme.bold(\"Tokens\")}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Input:\")} ${stats.tokens.input.toLocaleString()}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Output:\")} ${stats.tokens.output.toLocaleString()}\\n`;\n\t\tif (stats.tokens.cacheRead > 0) {\n\t\t\tinfo += `${theme.fg(\"dim\", \"Cache Read:\")} ${stats.tokens.cacheRead.toLocaleString()}\\n`;\n\t\t}\n\t\tif (stats.tokens.cacheWrite > 0) {\n\t\t\tinfo += `${theme.fg(\"dim\", \"Cache Write:\")} ${stats.tokens.cacheWrite.toLocaleString()}\\n`;\n\t\t}\n\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.tokens.total.toLocaleString()}\\n`;\n\n\t\tif (stats.cost > 0) {\n\t\t\tinfo += `\\n${theme.bold(\"Cost\")}\\n`;\n\t\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.cost.toFixed(4)}`;\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(info, 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleChangelogCommand(): void {\n\t\tconst changelogPath = getChangelogPath();\n\t\tconst allEntries = parseChangelog(changelogPath);\n\n\t\tconst changelogMarkdown =\n\t\t\tallEntries.length > 0\n\t\t\t\t? allEntries\n\t\t\t\t\t\t.reverse()\n\t\t\t\t\t\t.map((e) => e.content)\n\t\t\t\t\t\t.join(\"\\n\\n\")\n\t\t\t\t: \"No changelog entries found.\";\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(changelogMarkdown, 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Capitalize keybinding for display (e.g., \"ctrl+c\" -> \"Ctrl+C\").\n\t */\n\tprivate capitalizeKey(key: string): string {\n\t\treturn key\n\t\t\t.split(\"/\")\n\t\t\t.map((k) =>\n\t\t\t\tk\n\t\t\t\t\t.split(\"+\")\n\t\t\t\t\t.map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n\t\t\t\t\t.join(\"+\"),\n\t\t\t)\n\t\t\t.join(\"/\");\n\t}\n\n\t/**\n\t * Get capitalized display string for an app keybinding action.\n\t */\n\tprivate getAppKeyDisplay(action: AppAction): string {\n\t\treturn this.capitalizeKey(appKey(this.keybindings, action));\n\t}\n\n\t/**\n\t * Get capitalized display string for an editor keybinding action.\n\t */\n\tprivate getEditorKeyDisplay(action: EditorAction): string {\n\t\treturn this.capitalizeKey(editorKey(action));\n\t}\n\n\tprivate handleHotkeysCommand(): void {\n\t\t// Navigation keybindings\n\t\tconst cursorWordLeft = this.getEditorKeyDisplay(\"cursorWordLeft\");\n\t\tconst cursorWordRight = this.getEditorKeyDisplay(\"cursorWordRight\");\n\t\tconst cursorLineStart = this.getEditorKeyDisplay(\"cursorLineStart\");\n\t\tconst cursorLineEnd = this.getEditorKeyDisplay(\"cursorLineEnd\");\n\t\tconst jumpForward = this.getEditorKeyDisplay(\"jumpForward\");\n\t\tconst jumpBackward = this.getEditorKeyDisplay(\"jumpBackward\");\n\t\tconst pageUp = this.getEditorKeyDisplay(\"pageUp\");\n\t\tconst pageDown = this.getEditorKeyDisplay(\"pageDown\");\n\n\t\t// Editing keybindings\n\t\tconst submit = this.getEditorKeyDisplay(\"submit\");\n\t\tconst newLine = this.getEditorKeyDisplay(\"newLine\");\n\t\tconst deleteWordBackward = this.getEditorKeyDisplay(\"deleteWordBackward\");\n\t\tconst deleteWordForward = this.getEditorKeyDisplay(\"deleteWordForward\");\n\t\tconst deleteToLineStart = this.getEditorKeyDisplay(\"deleteToLineStart\");\n\t\tconst deleteToLineEnd = this.getEditorKeyDisplay(\"deleteToLineEnd\");\n\t\tconst yank = this.getEditorKeyDisplay(\"yank\");\n\t\tconst yankPop = this.getEditorKeyDisplay(\"yankPop\");\n\t\tconst undo = this.getEditorKeyDisplay(\"undo\");\n\t\tconst tab = this.getEditorKeyDisplay(\"tab\");\n\n\t\t// App keybindings\n\t\tconst interrupt = this.getAppKeyDisplay(\"interrupt\");\n\t\tconst clear = this.getAppKeyDisplay(\"clear\");\n\t\tconst exit = this.getAppKeyDisplay(\"exit\");\n\t\tconst suspend = this.getAppKeyDisplay(\"suspend\");\n\t\tconst cycleThinkingLevel = this.getAppKeyDisplay(\"cycleThinkingLevel\");\n\t\tconst cycleModelForward = this.getAppKeyDisplay(\"cycleModelForward\");\n\t\tconst selectModel = this.getAppKeyDisplay(\"selectModel\");\n\t\tconst expandTools = this.getAppKeyDisplay(\"expandTools\");\n\t\tconst toggleThinking = this.getAppKeyDisplay(\"toggleThinking\");\n\t\tconst externalEditor = this.getAppKeyDisplay(\"externalEditor\");\n\t\tconst followUp = this.getAppKeyDisplay(\"followUp\");\n\t\tconst dequeue = this.getAppKeyDisplay(\"dequeue\");\n\n\t\tlet hotkeys = `\n**Navigation**\n| Key | Action |\n|-----|--------|\n| \\`Arrow keys\\` | Move cursor / browse history (Up when empty) |\n| \\`${cursorWordLeft}\\` / \\`${cursorWordRight}\\` | Move by word |\n| \\`${cursorLineStart}\\` | Start of line |\n| \\`${cursorLineEnd}\\` | End of line |\n| \\`${jumpForward}\\` | Jump forward to character |\n| \\`${jumpBackward}\\` | Jump backward to character |\n| \\`${pageUp}\\` / \\`${pageDown}\\` | Scroll by page |\n\n**Editing**\n| Key | Action |\n|-----|--------|\n| \\`${submit}\\` | Send message |\n| \\`${newLine}\\` | New line${process.platform === \"win32\" ? \" (Ctrl+Enter on Windows Terminal)\" : \"\"} |\n| \\`${deleteWordBackward}\\` | Delete word backwards |\n| \\`${deleteWordForward}\\` | Delete word forwards |\n| \\`${deleteToLineStart}\\` | Delete to start of line |\n| \\`${deleteToLineEnd}\\` | Delete to end of line |\n| \\`${yank}\\` | Paste the most-recently-deleted text |\n| \\`${yankPop}\\` | Cycle through the deleted text after pasting |\n| \\`${undo}\\` | Undo |\n\n**Other**\n| Key | Action |\n|-----|--------|\n| \\`${tab}\\` | Path completion / accept autocomplete |\n| \\`${interrupt}\\` | Cancel autocomplete / abort streaming |\n| \\`${clear}\\` | Clear editor (first) / exit (second) |\n| \\`${exit}\\` | Exit (when editor is empty) |\n| \\`${suspend}\\` | Suspend to background |\n| \\`${cycleThinkingLevel}\\` | Cycle thinking level |\n| \\`${cycleModelForward}\\` | Cycle models |\n| \\`${selectModel}\\` | Open model selector |\n| \\`${expandTools}\\` | Toggle tool output expansion |\n| \\`${toggleThinking}\\` | Toggle thinking block visibility |\n| \\`${externalEditor}\\` | Edit message in external editor |\n| \\`${followUp}\\` | Queue follow-up message |\n| \\`${dequeue}\\` | Restore queued messages |\n| \\`Ctrl+V\\` | Paste image from clipboard |\n| \\`/\\` | Slash commands |\n| \\`!\\` | Run bash command |\n| \\`!!\\` | Run bash command (excluded from context) |\n`;\n\n\t\t// Add extension-registered shortcuts\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tif (extensionRunner) {\n\t\t\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\n\t\t\tif (shortcuts.size > 0) {\n\t\t\t\thotkeys += `\n**Extensions**\n| Key | Action |\n|-----|--------|\n`;\n\t\t\t\tfor (const [key, shortcut] of shortcuts) {\n\t\t\t\t\tconst description = shortcut.description ?? shortcut.extensionPath;\n\t\t\t\t\tconst keyDisplay = key.replace(/\\b\\w/g, (c) => c.toUpperCase());\n\t\t\t\t\thotkeys += `| \\`${keyDisplay}\\` | ${description} |\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"Keyboard Shortcuts\")), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(hotkeys.trim(), 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async handleClearCommand(): Promise<void> {\n\t\t// Stop loading animation\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\n\t\t// New session via session (emits extension session events)\n\t\tawait this.session.newSession();\n\n\t\t// Clear UI state\n\t\tthis.headerContainer.clear();\n\t\tthis.chatContainer.clear();\n\t\tthis.pendingMessagesContainer.clear();\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.streamingComponent = undefined;\n\t\tthis.streamingMessage = undefined;\n\t\tthis.pendingTools.clear();\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"accent\", \"✓ New session started\")}`, 1, 1));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleDebugCommand(): void {\n\t\tconst width = this.ui.terminal.columns;\n\t\tconst height = this.ui.terminal.rows;\n\t\tconst allLines = this.ui.render(width);\n\n\t\tconst debugLogPath = getDebugLogPath();\n\t\tconst debugData = [\n\t\t\t`Debug output at ${new Date().toISOString()}`,\n\t\t\t`Terminal: ${width}x${height}`,\n\t\t\t`Total lines: ${allLines.length}`,\n\t\t\t\"\",\n\t\t\t\"=== All rendered lines with visible widths ===\",\n\t\t\t...allLines.map((line, idx) => {\n\t\t\t\tconst vw = visibleWidth(line);\n\t\t\t\tconst escaped = JSON.stringify(line);\n\t\t\t\treturn `[${idx}] (w=${vw}) ${escaped}`;\n\t\t\t}),\n\t\t\t\"\",\n\t\t\t\"=== Agent messages (JSONL) ===\",\n\t\t\t...this.session.messages.map((msg) => JSON.stringify(msg)),\n\t\t\t\"\",\n\t\t].join(\"\\n\");\n\n\t\tfs.mkdirSync(path.dirname(debugLogPath), { recursive: true });\n\t\tfs.writeFileSync(debugLogPath, debugData);\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(`${theme.fg(\"accent\", \"✓ Debug log written\")}\\n${theme.fg(\"muted\", debugLogPath)}`, 1, 1),\n\t\t);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleArminSaysHi(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new ArminComponent(this.ui));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleDaxnuts(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DaxnutsComponent(this.ui));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate checkDaxnutsEasterEgg(model: { provider: string; id: string }): void {\n\t\tif (model.provider === \"opencode\" && model.id.toLowerCase().includes(\"kimi-k2.5\")) {\n\t\t\tthis.handleDaxnuts();\n\t\t}\n\t}\n\n\tprivate async handleBashCommand(command: string, excludeFromContext = false): Promise<void> {\n\t\tconst extensionRunner = this.session.extensionRunner;\n\n\t\t// Emit user_bash event to let extensions intercept\n\t\tconst eventResult = extensionRunner\n\t\t\t? await extensionRunner.emitUserBash({\n\t\t\t\t\ttype: \"user_bash\",\n\t\t\t\t\tcommand,\n\t\t\t\t\texcludeFromContext,\n\t\t\t\t\tcwd: process.cwd(),\n\t\t\t\t})\n\t\t\t: undefined;\n\n\t\t// If extension returned a full result, use it directly\n\t\tif (eventResult?.result) {\n\t\t\tconst result = eventResult.result;\n\n\t\t\t// Create UI component for display\n\t\t\tthis.bashComponent = new BashExecutionComponent(command, this.ui, excludeFromContext);\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.pendingMessagesContainer.addChild(this.bashComponent);\n\t\t\t\tthis.pendingBashComponents.push(this.bashComponent);\n\t\t\t} else {\n\t\t\t\tthis.chatContainer.addChild(this.bashComponent);\n\t\t\t}\n\n\t\t\t// Show output and complete\n\t\t\tif (result.output) {\n\t\t\t\tthis.bashComponent.appendOutput(result.output);\n\t\t\t}\n\t\t\tthis.bashComponent.setComplete(\n\t\t\t\tresult.exitCode,\n\t\t\t\tresult.cancelled,\n\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\tresult.fullOutputPath,\n\t\t\t);\n\n\t\t\t// Record the result in session\n\t\t\tthis.session.recordBashResult(command, result, { excludeFromContext });\n\t\t\tthis.bashComponent = undefined;\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\t// Normal execution path (possibly with custom operations)\n\t\tconst isDeferred = this.session.isStreaming;\n\t\tthis.bashComponent = new BashExecutionComponent(command, this.ui, excludeFromContext);\n\n\t\tif (isDeferred) {\n\t\t\t// Show in pending area when agent is streaming\n\t\t\tthis.pendingMessagesContainer.addChild(this.bashComponent);\n\t\t\tthis.pendingBashComponents.push(this.bashComponent);\n\t\t} else {\n\t\t\t// Show in chat immediately when agent is idle\n\t\t\tthis.chatContainer.addChild(this.bashComponent);\n\t\t}\n\t\tthis.ui.requestRender();\n\n\t\ttry {\n\t\t\tconst result = await this.session.executeBash(\n\t\t\t\tcommand,\n\t\t\t\t(chunk) => {\n\t\t\t\t\tif (this.bashComponent) {\n\t\t\t\t\t\tthis.bashComponent.appendOutput(chunk);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ excludeFromContext, operations: eventResult?.operations },\n\t\t\t);\n\n\t\t\tif (this.bashComponent) {\n\t\t\t\tthis.bashComponent.setComplete(\n\t\t\t\t\tresult.exitCode,\n\t\t\t\t\tresult.cancelled,\n\t\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\t\tresult.fullOutputPath,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (this.bashComponent) {\n\t\t\t\tthis.bashComponent.setComplete(undefined, false);\n\t\t\t}\n\t\t\tthis.showError(`Bash command failed: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t}\n\n\t\tthis.bashComponent = undefined;\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async handleCompactCommand(customInstructions?: string): Promise<void> {\n\t\tconst entries = this.sessionManager.getEntries();\n\t\tconst messageCount = entries.filter((e) => e.type === \"message\").length;\n\n\t\tif (messageCount < 2) {\n\t\t\tthis.showWarning(\"Nothing to compact (no messages yet)\");\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.executeCompaction(customInstructions, false);\n\t}\n\n\tprivate async executeCompaction(customInstructions?: string, isAuto = false): Promise<CompactionResult | undefined> {\n\t\t// Stop loading animation\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\n\t\t// Set up escape handler during compaction\n\t\tconst originalOnEscape = this.defaultEditor.onEscape;\n\t\tthis.defaultEditor.onEscape = () => {\n\t\t\tthis.session.abortCompaction();\n\t\t};\n\n\t\t// Show compacting status\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tconst cancelHint = `(${appKey(this.keybindings, \"interrupt\")} to cancel)`;\n\t\tconst label = isAuto ? `Auto-compacting context... ${cancelHint}` : `Compacting context... ${cancelHint}`;\n\t\tconst compactingLoader = new Loader(\n\t\t\tthis.ui,\n\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\tlabel,\n\t\t);\n\t\tthis.statusContainer.addChild(compactingLoader);\n\t\tthis.ui.requestRender();\n\n\t\tlet result: CompactionResult | undefined;\n\n\t\ttry {\n\t\t\tresult = await this.session.compact(customInstructions);\n\n\t\t\t// Rebuild UI\n\t\t\tthis.rebuildChatFromMessages();\n\n\t\t\t// Add compaction component at bottom so user sees it without scrolling\n\t\t\tconst msg = createCompactionSummaryMessage(result.summary, result.tokensBefore, new Date().toISOString());\n\t\t\tthis.addMessageToChat(msg);\n\n\t\t\tthis.footer.invalidate();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tif (message === \"Compaction cancelled\" || (error instanceof Error && error.name === \"AbortError\")) {\n\t\t\t\tthis.showError(\"Compaction cancelled\");\n\t\t\t} else {\n\t\t\t\tthis.showError(`Compaction failed: ${message}`);\n\t\t\t}\n\t\t} finally {\n\t\t\tcompactingLoader.stop();\n\t\t\tthis.statusContainer.clear();\n\t\t\tthis.defaultEditor.onEscape = originalOnEscape;\n\t\t}\n\t\tvoid this.flushCompactionQueue({ willRetry: false });\n\t\treturn result;\n\t}\n\n\tstop(): void {\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.footer.dispose();\n\t\tthis.footerDataProvider.dispose();\n\t\tif (this.unsubscribe) {\n\t\t\tthis.unsubscribe();\n\t\t}\n\t\tif (this.isInitialized) {\n\t\t\tthis.ui.stop();\n\t\t\tthis.isInitialized = false;\n\t\t}\n\t}\n}\n"]}
|