@bastani/atomic 0.9.14 → 0.9.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/README.md +1 -1
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/CHANGELOG.md +14 -0
- package/dist/builtin/mcp/package.json +4 -4
- package/dist/builtin/mcp/sampling-handler.ts +2 -2
- package/dist/builtin/mcp/types.ts +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +40 -0
- package/dist/builtin/subagents/README.md +5 -22
- package/dist/builtin/subagents/agents/code-simplifier.md +2 -2
- package/dist/builtin/subagents/agents/codebase-analyzer.md +2 -2
- package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +2 -2
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +2 -2
- package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
- package/dist/builtin/subagents/agents/worker.md +2 -2
- package/dist/builtin/subagents/package.json +4 -4
- package/dist/builtin/subagents/skills/subagent/SKILL.md +6 -6
- package/dist/builtin/subagents/src/agents/agent-loaders.ts +0 -4
- package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +1 -12
- package/dist/builtin/subagents/src/agents/agent-management.ts +0 -1
- package/dist/builtin/subagents/src/agents/agent-serializer.ts +7 -6
- package/dist/builtin/subagents/src/agents/agent-types.ts +0 -1
- package/dist/builtin/subagents/src/extension/schemas.ts +2 -2
- package/dist/builtin/subagents/src/extension/startup-maintenance.ts +2 -2
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +0 -127
- package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +1 -3
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +15 -106
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +0 -3
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +2 -13
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +2 -12
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +1 -20
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +0 -6
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +10 -21
- package/dist/builtin/subagents/src/runs/inprocess/attempt-handles.ts +104 -0
- package/dist/builtin/subagents/src/runs/inprocess/index.ts +10 -21
- package/dist/builtin/subagents/src/runs/inprocess/prompt-behavior.ts +2 -3
- package/dist/builtin/subagents/src/runs/inprocess/runner.ts +11 -32
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/temp-cleanup.ts +69 -0
- package/dist/builtin/subagents/src/shared/model-resolution.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-config.ts +0 -4
- package/dist/builtin/subagents/src/shared/types-depth.ts +15 -103
- package/dist/builtin/subagents/src/shared/types-foreground-state.ts +56 -0
- package/dist/builtin/subagents/src/shared/types-results.ts +1 -59
- package/dist/builtin/subagents/src/shared/types-runtime.ts +0 -2
- package/dist/builtin/subagents/src/shared/types.ts +1 -1
- package/dist/builtin/subagents/src/shared/utils.ts +1 -1
- package/dist/builtin/subagents/src/slash/slash-live-state.ts +1 -1
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/web-access/summary-review.ts +2 -2
- package/dist/builtin/web-access/web-search-summary.ts +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +30 -0
- package/dist/builtin/workflows/README.md +2 -2
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +60473 -401
- package/dist/builtin/workflows/src/extension/public-types.ts +1 -1
- package/dist/builtin/workflows/src/extension/wiring.ts +1 -1
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-delivery.ts +48 -4
- package/dist/builtin/workflows/src/extension/workflow-tool.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +5 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +35 -2
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-pause.ts +6 -0
- package/dist/builtin/workflows/src/tui/chat-surface-message.ts +15 -13
- package/dist/builtin/workflows/src/tui/store-widget-installer.ts +25 -2
- package/dist/bun/cli.js +1 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/register-bedrock.js +2 -2
- package/dist/bun/register-bedrock.js.map +1 -1
- package/dist/cli/auth-check.d.ts +1 -1
- package/dist/cli/auth-check.d.ts.map +1 -1
- package/dist/cli/auth-check.js +1 -1
- package/dist/cli/auth-check.js.map +1 -1
- package/dist/cli/credential-print.d.ts +1 -1
- package/dist/cli/credential-print.d.ts.map +1 -1
- package/dist/cli/credential-print.js +2 -2
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/cli/file-processor.d.ts +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +1 -1
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-events.d.ts +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +1 -1
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +1 -1
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-message-queue.d.ts +1 -1
- package/dist/core/agent-session-message-queue.d.ts.map +1 -1
- package/dist/core/agent-session-message-queue.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +2 -2
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-models.d.ts +2 -2
- package/dist/core/agent-session-models.d.ts.map +1 -1
- package/dist/core/agent-session-models.js +2 -2
- package/dist/core/agent-session-models.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts +1 -1
- package/dist/core/agent-session-retry.d.ts.map +1 -1
- package/dist/core/agent-session-retry.js +1 -1
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-runtime-auth.js +1 -1
- package/dist/core/agent-session-runtime-auth.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +1 -1
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-state.d.ts +1 -1
- package/dist/core/agent-session-state.d.ts.map +1 -1
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-tree.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +1 -1
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/anthropic-thinking-guard.d.ts +1 -1
- package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
- package/dist/core/anthropic-thinking-guard.js +1 -1
- package/dist/core/anthropic-thinking-guard.js.map +1 -1
- package/dist/core/auth-storage.d.ts +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/cache-stats.d.ts +1 -1
- package/dist/core/cache-stats.d.ts.map +1 -1
- package/dist/core/cache-stats.js.map +1 -1
- package/dist/core/cloudflare-gateway-binding.d.ts +1 -1
- package/dist/core/cloudflare-gateway-binding.d.ts.map +1 -1
- package/dist/core/cloudflare-gateway-binding.js +1 -1
- package/dist/core/cloudflare-gateway-binding.js.map +1 -1
- package/dist/core/codex-fast-mode.d.ts +2 -2
- package/dist/core/codex-fast-mode.d.ts.map +1 -1
- package/dist/core/codex-fast-mode.js +3 -2
- package/dist/core/codex-fast-mode.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +2 -2
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +2 -2
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction-runner.d.ts +2 -2
- package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
- package/dist/core/compaction/compaction-runner.js.map +1 -1
- package/dist/core/compaction/compaction-types.d.ts +2 -2
- package/dist/core/compaction/compaction-types.d.ts.map +1 -1
- package/dist/core/compaction/compaction-types.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/fallback-planner.d.ts +1 -1
- package/dist/core/compaction/fallback-planner.d.ts.map +1 -1
- package/dist/core/compaction/fallback-planner.js.map +1 -1
- package/dist/core/compaction/planner-outcome.d.ts +1 -1
- package/dist/core/compaction/planner-outcome.d.ts.map +1 -1
- package/dist/core/compaction/planner-outcome.js +1 -1
- package/dist/core/compaction/planner-outcome.js.map +1 -1
- package/dist/core/compaction/range-planner-diagnostics.d.ts +1 -1
- package/dist/core/compaction/range-planner-diagnostics.d.ts.map +1 -1
- package/dist/core/compaction/range-planner-diagnostics.js +1 -1
- package/dist/core/compaction/range-planner-diagnostics.js.map +1 -1
- package/dist/core/compaction/range-planner.d.ts +2 -2
- package/dist/core/compaction/range-planner.d.ts.map +1 -1
- package/dist/core/compaction/range-planner.js +2 -2
- package/dist/core/compaction/range-planner.js.map +1 -1
- package/dist/core/compaction/session-summarization.d.ts +2 -2
- package/dist/core/compaction/session-summarization.d.ts.map +1 -1
- package/dist/core/compaction/session-summarization.js +2 -2
- package/dist/core/compaction/session-summarization.js.map +1 -1
- package/dist/core/compaction/transcript-serialization.d.ts +1 -1
- package/dist/core/compaction/transcript-serialization.d.ts.map +1 -1
- package/dist/core/compaction/transcript-serialization.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +1 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/experimental.d.ts +1 -1
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/agent-events.d.ts +2 -2
- package/dist/core/extensions/agent-events.d.ts.map +1 -1
- package/dist/core/extensions/agent-events.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +2 -2
- package/dist/core/extensions/api-types.d.ts.map +1 -1
- package/dist/core/extensions/api-types.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +1 -7
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/event-results.d.ts +1 -1
- package/dist/core/extensions/event-results.d.ts.map +1 -1
- package/dist/core/extensions/event-results.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +21 -9
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/provider-types.d.ts +2 -2
- package/dist/core/extensions/provider-types.d.ts.map +1 -1
- package/dist/core/extensions/provider-types.js.map +1 -1
- package/dist/core/extensions/reactive-widget.d.ts +6 -0
- package/dist/core/extensions/reactive-widget.d.ts.map +1 -1
- package/dist/core/extensions/reactive-widget.js +62 -6
- package/dist/core/extensions/reactive-widget.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts +1 -1
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/runner-events.d.ts +1 -1
- package/dist/core/extensions/runner-events.d.ts.map +1 -1
- package/dist/core/extensions/runner-events.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +2 -2
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +2 -2
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/tool-events.d.ts +1 -1
- package/dist/core/extensions/tool-events.d.ts.map +1 -1
- package/dist/core/extensions/tool-events.js.map +1 -1
- package/dist/core/extensions/tool-types.d.ts +2 -2
- package/dist/core/extensions/tool-types.d.ts.map +1 -1
- package/dist/core/extensions/tool-types.js.map +1 -1
- package/dist/core/extensions/ui-types.d.ts +2 -0
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js.map +1 -1
- package/dist/core/fallback-models.d.ts +1 -1
- package/dist/core/fallback-models.d.ts.map +1 -1
- package/dist/core/fallback-models.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +14 -0
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/messages.d.ts +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-capabilities.d.ts +1 -1
- package/dist/core/model-capabilities.d.ts.map +1 -1
- package/dist/core/model-capabilities.js.map +1 -1
- package/dist/core/model-fallback-failures.d.ts.map +1 -1
- package/dist/core/model-fallback-failures.js +18 -1
- package/dist/core/model-fallback-failures.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-cli.js.map +1 -1
- package/dist/core/model-resolver-defaults.d.ts +1 -1
- package/dist/core/model-resolver-defaults.d.ts.map +1 -1
- package/dist/core/model-resolver-defaults.js +1 -1
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/model-resolver-initial.d.ts +1 -1
- package/dist/core/model-resolver-initial.d.ts.map +1 -1
- package/dist/core/model-resolver-initial.js.map +1 -1
- package/dist/core/model-resolver-patterns.d.ts +1 -1
- package/dist/core/model-resolver-patterns.d.ts.map +1 -1
- package/dist/core/model-resolver-patterns.js.map +1 -1
- package/dist/core/model-resolver-scope.d.ts +1 -1
- package/dist/core/model-resolver-scope.d.ts.map +1 -1
- package/dist/core/model-resolver-scope.js +1 -1
- package/dist/core/model-resolver-scope.js.map +1 -1
- package/dist/core/model-resolver-types.d.ts +1 -1
- package/dist/core/model-resolver-types.d.ts.map +1 -1
- package/dist/core/model-resolver-types.js.map +1 -1
- package/dist/core/model-runtime-auth.d.ts +1 -1
- package/dist/core/model-runtime-auth.d.ts.map +1 -1
- package/dist/core/model-runtime-auth.js.map +1 -1
- package/dist/core/model-runtime-providers.d.ts +2 -2
- package/dist/core/model-runtime-providers.d.ts.map +1 -1
- package/dist/core/model-runtime-providers.js +2 -2
- package/dist/core/model-runtime-providers.js.map +1 -1
- package/dist/core/model-runtime-restoration.d.ts +1 -1
- package/dist/core/model-runtime-restoration.d.ts.map +1 -1
- package/dist/core/model-runtime-restoration.js.map +1 -1
- package/dist/core/model-runtime-snapshot.d.ts +1 -1
- package/dist/core/model-runtime-snapshot.d.ts.map +1 -1
- package/dist/core/model-runtime-snapshot.js.map +1 -1
- package/dist/core/model-runtime-streaming.d.ts +1 -1
- package/dist/core/model-runtime-streaming.d.ts.map +1 -1
- package/dist/core/model-runtime-streaming.js +1 -1
- package/dist/core/model-runtime-streaming.js.map +1 -1
- package/dist/core/model-runtime-types.d.ts +1 -1
- package/dist/core/model-runtime-types.d.ts.map +1 -1
- package/dist/core/model-runtime-types.js.map +1 -1
- package/dist/core/model-runtime.d.ts +8 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +15 -3
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/models-store.d.ts +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/oauth-login.d.ts +1 -1
- package/dist/core/oauth-login.d.ts.map +1 -1
- package/dist/core/oauth-login.js.map +1 -1
- package/dist/core/oauth-provider-metadata.d.ts +1 -1
- package/dist/core/oauth-provider-metadata.d.ts.map +1 -1
- package/dist/core/oauth-provider-metadata.js.map +1 -1
- package/dist/core/openai-responses-payload-sanitizer.d.ts +1 -1
- package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -1
- package/dist/core/openai-responses-payload-sanitizer.js.map +1 -1
- package/dist/core/provider-attribution.d.ts +1 -1
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/provider-composer-internal.d.ts +1 -1
- package/dist/core/provider-composer-internal.d.ts.map +1 -1
- package/dist/core/provider-composer-internal.js.map +1 -1
- package/dist/core/provider-composer.d.ts +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +2 -2
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/provider-context-usage.d.ts.map +1 -1
- package/dist/core/provider-context-usage.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/runtime-credentials.d.ts +1 -1
- package/dist/core/runtime-credentials.d.ts.map +1 -1
- package/dist/core/runtime-credentials.js.map +1 -1
- package/dist/core/sdk-types.d.ts +1 -1
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +30 -6
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +2 -2
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-entries.d.ts +1 -1
- package/dist/core/session-manager-entries.d.ts.map +1 -1
- package/dist/core/session-manager-entries.js.map +1 -1
- package/dist/core/session-manager-list.js.map +1 -1
- package/dist/core/session-manager-types.d.ts +1 -1
- package/dist/core/session-manager-types.d.ts.map +1 -1
- package/dist/core/session-manager-types.js.map +1 -1
- package/dist/core/session-manager-validation.js +1 -1
- package/dist/core/session-manager-validation.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +1 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +11 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-types.d.ts +2 -1
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/summarization-retry.d.ts +1 -1
- package/dist/core/summarization-retry.d.ts.map +1 -1
- package/dist/core/summarization-retry.js.map +1 -1
- package/dist/core/tools/bash-session-environment.d.ts +1 -1
- package/dist/core/tools/bash-session-environment.d.ts.map +1 -1
- package/dist/core/tools/bash-session-environment.js.map +1 -1
- package/dist/core/tools/oversized-tool-result.d.ts +1 -1
- package/dist/core/tools/oversized-tool-result.d.ts.map +1 -1
- package/dist/core/tools/oversized-tool-result.js.map +1 -1
- package/dist/core/tools/read-url.d.ts +1 -1
- package/dist/core/tools/read-url.d.ts.map +1 -1
- package/dist/core/tools/read-url.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/resource-selectors.d.ts +1 -1
- package/dist/core/tools/resource-selectors.d.ts.map +1 -1
- package/dist/core/tools/resource-selectors.js +2 -7
- package/dist/core/tools/resource-selectors.js.map +1 -1
- package/dist/core/typebox-compat.js +1 -1
- package/dist/core/typebox-compat.js.map +1 -1
- package/dist/core/usage-totals.d.ts +1 -1
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +1 -1
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/main-app-mode.d.ts +1 -1
- package/dist/main-app-mode.d.ts.map +1 -1
- package/dist/main-app-mode.js.map +1 -1
- package/dist/main-session-options.js +1 -1
- package/dist/main-session-options.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +1 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-context.js +26 -0
- package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js +7 -2
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +1 -0
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-helpers.js +1 -1
- package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -0
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/model-catalog-refresh.d.ts +1 -1
- package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -1
- package/dist/modes/interactive/model-catalog-refresh.js.map +1 -1
- package/dist/modes/interactive/streaming-assistant-message.d.ts +1 -1
- package/dist/modes/interactive/streaming-assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/streaming-assistant-message.js.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts +3 -0
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +26 -3
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/remote-component.d.ts +2 -1
- package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-component.js +14 -0
- package/dist/modes/interactive-engine/remote-component.js.map +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
- package/dist/modes/json-event.d.ts +1 -1
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/print-mode.d.ts +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client-api.d.ts +2 -2
- package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-api.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-extension-ui.js +4 -1
- package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.d.ts +1 -1
- package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +2 -2
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/utils/tool-result-images.d.ts +1 -1
- package/dist/utils/tool-result-images.d.ts.map +1 -1
- package/dist/utils/tool-result-images.js.map +1 -1
- package/docs/custom-provider.md +11 -8
- package/docs/development.md +0 -2
- package/docs/extensions.md +2 -2
- package/docs/json.md +1 -1
- package/docs/models/artificial-analysis-index.md +2 -2
- package/docs/models/model-selection.md +8 -8
- package/docs/models/pareto-efficiency.md +10 -10
- package/docs/models.md +9 -3
- package/docs/packages.md +1 -1
- package/docs/providers.md +5 -3
- package/docs/quickstart.md +1 -1
- package/docs/rpc.md +1 -1
- package/docs/sdk.md +2 -2
- package/docs/session-format.md +2 -2
- package/docs/settings.md +2 -1
- package/docs/subagents.md +5 -6
- package/docs/tui.md +3 -0
- package/docs/workflows.md +3 -1
- package/examples/extensions/README.md +1 -1
- package/examples/extensions/custom-footer.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/index.ts +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
- package/examples/extensions/handoff.ts +2 -2
- package/examples/extensions/hello.ts +1 -1
- package/examples/extensions/plan-mode/index.ts +1 -1
- package/examples/extensions/preset.ts +1 -1
- package/examples/extensions/qna.ts +1 -1
- package/examples/extensions/subagent/display.ts +1 -1
- package/examples/extensions/subagent/runner.ts +1 -1
- package/examples/extensions/subagent/types.ts +1 -1
- package/examples/extensions/summarize.ts +2 -2
- package/examples/extensions/tool-override.ts +1 -1
- package/examples/sdk/02-custom-model.ts +1 -1
- package/examples/sdk/12-full-control.ts +1 -1
- package/examples/sdk/README.md +1 -1
- package/npm-shrinkwrap.json +54 -31
- package/package.json +3 -3
- package/dist/builtin/subagents/src/extension/fanout-child.ts +0 -259
- package/dist/builtin/subagents/src/runs/inprocess/nested-routing.ts +0 -218
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-api.ts +0 -55
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-control.ts +0 -178
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-core.ts +0 -187
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-paths.ts +0 -57
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-projection.ts +0 -42
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-registry.ts +0 -352
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-rendering.ts +0 -136
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-sanitize.ts +0 -252
- package/dist/builtin/subagents/src/shared/types-nested.ts +0 -127
- package/dist/core/copilot-env-routing.d.ts +0 -36
- package/dist/core/copilot-env-routing.d.ts.map +0 -1
- package/dist/core/copilot-env-routing.js +0 -94
- package/dist/core/copilot-env-routing.js.map +0 -1
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
import type { NestedRunState, NestedRunSummary, NestedStepSummary } from "../../../shared/types.js";
|
|
2
|
-
import {
|
|
3
|
-
clampNumber,
|
|
4
|
-
isSafeNestedId,
|
|
5
|
-
MAX_NESTED_CHILDREN,
|
|
6
|
-
MAX_NESTED_DEPTH,
|
|
7
|
-
MAX_NESTED_EVENT_BYTES,
|
|
8
|
-
MAX_NESTED_STEPS,
|
|
9
|
-
type NestedEventRecord,
|
|
10
|
-
type NestedRegistry,
|
|
11
|
-
type NestedRoute,
|
|
12
|
-
stringValue,
|
|
13
|
-
} from "./nested-core.js";
|
|
14
|
-
import { sanitizeNestedPath } from "./nested-paths.js";
|
|
15
|
-
|
|
16
|
-
function sanitizeTokenUsage(value: unknown): NestedRunSummary["totalTokens"] | undefined {
|
|
17
|
-
if (!value || typeof value !== "object") return undefined;
|
|
18
|
-
const raw = value as Record<string, unknown>;
|
|
19
|
-
const input = clampNumber(raw.input);
|
|
20
|
-
const output = clampNumber(raw.output);
|
|
21
|
-
const total = clampNumber(raw.total);
|
|
22
|
-
return input !== undefined && output !== undefined && total !== undefined ? { input, output, total } : undefined;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function sanitizeState(value: unknown, fallback: NestedRunState): NestedRunState {
|
|
26
|
-
return value === "queued" || value === "running" || value === "complete" || value === "failed" || value === "paused"
|
|
27
|
-
? value
|
|
28
|
-
: fallback;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function sanitizeStep(input: unknown, depth: number): NestedStepSummary | undefined {
|
|
32
|
-
if (!input || typeof input !== "object") return undefined;
|
|
33
|
-
const raw = input as Record<string, unknown>;
|
|
34
|
-
const agent = stringValue(raw.agent, 128);
|
|
35
|
-
if (!agent) return undefined;
|
|
36
|
-
const status =
|
|
37
|
-
raw.status === "pending" ||
|
|
38
|
-
raw.status === "running" ||
|
|
39
|
-
raw.status === "complete" ||
|
|
40
|
-
raw.status === "completed" ||
|
|
41
|
-
raw.status === "failed" ||
|
|
42
|
-
raw.status === "paused"
|
|
43
|
-
? raw.status
|
|
44
|
-
: "pending";
|
|
45
|
-
return {
|
|
46
|
-
agent,
|
|
47
|
-
status: status === "completed" ? "complete" : status,
|
|
48
|
-
...(stringValue(raw.sessionFile, 2048) ? { sessionFile: stringValue(raw.sessionFile, 2048) } : {}),
|
|
49
|
-
...(raw.activityState === "active_long_running" || raw.activityState === "needs_attention"
|
|
50
|
-
? { activityState: raw.activityState }
|
|
51
|
-
: {}),
|
|
52
|
-
...(clampNumber(raw.lastActivityAt) !== undefined ? { lastActivityAt: clampNumber(raw.lastActivityAt) } : {}),
|
|
53
|
-
...(stringValue(raw.currentTool, 128) ? { currentTool: stringValue(raw.currentTool, 128) } : {}),
|
|
54
|
-
...(clampNumber(raw.currentToolStartedAt) !== undefined
|
|
55
|
-
? { currentToolStartedAt: clampNumber(raw.currentToolStartedAt) }
|
|
56
|
-
: {}),
|
|
57
|
-
...(stringValue(raw.currentPath, 2048) ? { currentPath: stringValue(raw.currentPath, 2048) } : {}),
|
|
58
|
-
...(clampNumber(raw.turnCount) !== undefined ? { turnCount: clampNumber(raw.turnCount) } : {}),
|
|
59
|
-
...(clampNumber(raw.toolCount) !== undefined ? { toolCount: clampNumber(raw.toolCount) } : {}),
|
|
60
|
-
...(clampNumber(raw.startedAt) !== undefined ? { startedAt: clampNumber(raw.startedAt) } : {}),
|
|
61
|
-
...(clampNumber(raw.endedAt) !== undefined ? { endedAt: clampNumber(raw.endedAt) } : {}),
|
|
62
|
-
...(stringValue(raw.error, 1024) ? { error: stringValue(raw.error, 1024) } : {}),
|
|
63
|
-
...(depth < MAX_NESTED_DEPTH && Array.isArray(raw.children)
|
|
64
|
-
? {
|
|
65
|
-
children: raw.children
|
|
66
|
-
.map((child) => sanitizeSummary(child, depth + 1))
|
|
67
|
-
.filter((child): child is NestedRunSummary => Boolean(child))
|
|
68
|
-
.slice(0, MAX_NESTED_CHILDREN),
|
|
69
|
-
}
|
|
70
|
-
: {}),
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export function sanitizeSummary(input: unknown, depth = 0): NestedRunSummary | undefined {
|
|
75
|
-
if (!input || typeof input !== "object") return undefined;
|
|
76
|
-
const raw = input as Record<string, unknown>;
|
|
77
|
-
if (!isSafeNestedId(raw.id) || !isSafeNestedId(raw.parentRunId)) return undefined;
|
|
78
|
-
const pathParts = sanitizeNestedPath(raw.path);
|
|
79
|
-
const steps = Array.isArray(raw.steps)
|
|
80
|
-
? raw.steps
|
|
81
|
-
.map((step) => sanitizeStep(step, depth + 1))
|
|
82
|
-
.filter((step): step is NestedStepSummary => Boolean(step))
|
|
83
|
-
.slice(0, MAX_NESTED_STEPS)
|
|
84
|
-
: undefined;
|
|
85
|
-
const totalTokens = sanitizeTokenUsage(raw.totalTokens);
|
|
86
|
-
return {
|
|
87
|
-
id: raw.id,
|
|
88
|
-
parentRunId: raw.parentRunId,
|
|
89
|
-
...(clampNumber(raw.parentStepIndex) !== undefined ? { parentStepIndex: clampNumber(raw.parentStepIndex) } : {}),
|
|
90
|
-
...(stringValue(raw.parentAgent, 128) ? { parentAgent: stringValue(raw.parentAgent, 128) } : {}),
|
|
91
|
-
depth: Math.min(Math.max(0, clampNumber(raw.depth) ?? 0), MAX_NESTED_DEPTH),
|
|
92
|
-
path: pathParts,
|
|
93
|
-
state: sanitizeState(raw.state, "running"),
|
|
94
|
-
...(stringValue(raw.sessionId, 256) ? { sessionId: stringValue(raw.sessionId, 256) } : {}),
|
|
95
|
-
...(stringValue(raw.sessionFile, 2048) ? { sessionFile: stringValue(raw.sessionFile, 2048) } : {}),
|
|
96
|
-
...(stringValue(raw.intercomTarget, 256) ? { intercomTarget: stringValue(raw.intercomTarget, 256) } : {}),
|
|
97
|
-
...(stringValue(raw.ownerIntercomTarget, 256)
|
|
98
|
-
? { ownerIntercomTarget: stringValue(raw.ownerIntercomTarget, 256) }
|
|
99
|
-
: {}),
|
|
100
|
-
...(stringValue(raw.leafIntercomTarget, 256)
|
|
101
|
-
? { leafIntercomTarget: stringValue(raw.leafIntercomTarget, 256) }
|
|
102
|
-
: {}),
|
|
103
|
-
...(raw.ownerState === "live" || raw.ownerState === "gone" || raw.ownerState === "unknown"
|
|
104
|
-
? { ownerState: raw.ownerState }
|
|
105
|
-
: {}),
|
|
106
|
-
...(stringValue(raw.controlInbox, 2048) ? { controlInbox: stringValue(raw.controlInbox, 2048) } : {}),
|
|
107
|
-
...(stringValue(raw.capabilityToken, 128) ? { capabilityToken: stringValue(raw.capabilityToken, 128) } : {}),
|
|
108
|
-
...(raw.mode === "single" || raw.mode === "parallel" ? { mode: raw.mode } : {}),
|
|
109
|
-
...(stringValue(raw.agent, 128) ? { agent: stringValue(raw.agent, 128) } : {}),
|
|
110
|
-
...(Array.isArray(raw.agents)
|
|
111
|
-
? {
|
|
112
|
-
agents: raw.agents
|
|
113
|
-
.map((agent) => stringValue(agent, 128))
|
|
114
|
-
.filter((agent): agent is string => Boolean(agent))
|
|
115
|
-
.slice(0, MAX_NESTED_STEPS),
|
|
116
|
-
}
|
|
117
|
-
: {}),
|
|
118
|
-
...(raw.activityState === "active_long_running" || raw.activityState === "needs_attention"
|
|
119
|
-
? { activityState: raw.activityState }
|
|
120
|
-
: {}),
|
|
121
|
-
...(clampNumber(raw.lastActivityAt) !== undefined ? { lastActivityAt: clampNumber(raw.lastActivityAt) } : {}),
|
|
122
|
-
...(stringValue(raw.currentTool, 128) ? { currentTool: stringValue(raw.currentTool, 128) } : {}),
|
|
123
|
-
...(clampNumber(raw.currentToolStartedAt) !== undefined
|
|
124
|
-
? { currentToolStartedAt: clampNumber(raw.currentToolStartedAt) }
|
|
125
|
-
: {}),
|
|
126
|
-
...(stringValue(raw.currentPath, 2048) ? { currentPath: stringValue(raw.currentPath, 2048) } : {}),
|
|
127
|
-
...(clampNumber(raw.turnCount) !== undefined ? { turnCount: clampNumber(raw.turnCount) } : {}),
|
|
128
|
-
...(clampNumber(raw.toolCount) !== undefined ? { toolCount: clampNumber(raw.toolCount) } : {}),
|
|
129
|
-
...(totalTokens ? { totalTokens } : {}),
|
|
130
|
-
...(clampNumber(raw.startedAt) !== undefined ? { startedAt: clampNumber(raw.startedAt) } : {}),
|
|
131
|
-
...(clampNumber(raw.endedAt) !== undefined ? { endedAt: clampNumber(raw.endedAt) } : {}),
|
|
132
|
-
...(clampNumber(raw.lastUpdate) !== undefined ? { lastUpdate: clampNumber(raw.lastUpdate) } : {}),
|
|
133
|
-
...(stringValue(raw.error, 1024) ? { error: stringValue(raw.error, 1024) } : {}),
|
|
134
|
-
...(steps && steps.length > 0 ? { steps } : {}),
|
|
135
|
-
...(depth < MAX_NESTED_DEPTH && Array.isArray(raw.children)
|
|
136
|
-
? {
|
|
137
|
-
children: raw.children
|
|
138
|
-
.map((child) => sanitizeSummary(child, depth + 1))
|
|
139
|
-
.filter((child): child is NestedRunSummary => Boolean(child))
|
|
140
|
-
.slice(0, MAX_NESTED_CHILDREN),
|
|
141
|
-
}
|
|
142
|
-
: {}),
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
export function parseRecord(content: string, route: NestedRoute): NestedEventRecord | undefined {
|
|
147
|
-
if (Buffer.byteLength(content, "utf-8") > MAX_NESTED_EVENT_BYTES) return undefined;
|
|
148
|
-
let parsed: unknown;
|
|
149
|
-
try {
|
|
150
|
-
parsed = JSON.parse(content);
|
|
151
|
-
} catch {
|
|
152
|
-
return undefined;
|
|
153
|
-
}
|
|
154
|
-
if (!parsed || typeof parsed !== "object") return undefined;
|
|
155
|
-
const raw = parsed as Record<string, unknown>;
|
|
156
|
-
if (
|
|
157
|
-
raw.type !== "subagent.nested.started" &&
|
|
158
|
-
raw.type !== "subagent.nested.updated" &&
|
|
159
|
-
raw.type !== "subagent.nested.completed"
|
|
160
|
-
)
|
|
161
|
-
return undefined;
|
|
162
|
-
if (raw.rootRunId !== route.rootRunId || raw.capabilityToken !== route.capabilityToken) return undefined;
|
|
163
|
-
if (!isSafeNestedId(raw.parentRunId)) return undefined;
|
|
164
|
-
const ts = clampNumber(raw.ts);
|
|
165
|
-
if (ts === undefined) return undefined;
|
|
166
|
-
const child = sanitizeSummary(raw.child);
|
|
167
|
-
if (!child || child.id === route.rootRunId) return undefined;
|
|
168
|
-
const routedChild: NestedRunSummary = {
|
|
169
|
-
...child,
|
|
170
|
-
controlInbox: route.controlInbox,
|
|
171
|
-
capabilityToken: route.capabilityToken,
|
|
172
|
-
ownerState: child.ownerState ?? "unknown",
|
|
173
|
-
};
|
|
174
|
-
return {
|
|
175
|
-
type: raw.type,
|
|
176
|
-
ts,
|
|
177
|
-
rootRunId: route.rootRunId,
|
|
178
|
-
parentRunId: raw.parentRunId,
|
|
179
|
-
...(clampNumber(raw.parentStepIndex) !== undefined ? { parentStepIndex: clampNumber(raw.parentStepIndex) } : {}),
|
|
180
|
-
capabilityToken: route.capabilityToken,
|
|
181
|
-
child: routedChild,
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
export function parseNestedEventRecords(content: string, route: NestedRoute): NestedEventRecord[] {
|
|
186
|
-
if (!content.includes("\n")) {
|
|
187
|
-
const record = parseRecord(content.trim(), route);
|
|
188
|
-
return record ? [record] : [];
|
|
189
|
-
}
|
|
190
|
-
return content
|
|
191
|
-
.split("\n")
|
|
192
|
-
.slice(0, content.endsWith("\n") ? undefined : -1)
|
|
193
|
-
.map((line) => (line.trim() ? parseRecord(line, route) : undefined))
|
|
194
|
-
.filter((event): event is NestedEventRecord => Boolean(event));
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
export function terminal(state: NestedRunState): boolean {
|
|
198
|
-
return state === "complete" || state === "failed" || state === "paused";
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
function mergeSummary(existing: NestedRunSummary | undefined, event: NestedEventRecord): NestedRunSummary {
|
|
202
|
-
const incomingState =
|
|
203
|
-
event.type === "subagent.nested.completed" && event.child.state === "running" ? "complete" : event.child.state;
|
|
204
|
-
const incoming = { ...event.child, state: incomingState, lastUpdate: event.child.lastUpdate ?? event.ts };
|
|
205
|
-
if (!existing) return incoming;
|
|
206
|
-
const existingUpdate = existing.lastUpdate ?? 0;
|
|
207
|
-
const incomingUpdate = incoming.lastUpdate ?? event.ts;
|
|
208
|
-
if (incomingUpdate < existingUpdate) return existing;
|
|
209
|
-
if (terminal(existing.state) && !terminal(incoming.state)) return existing;
|
|
210
|
-
if (terminal(existing.state) && terminal(incoming.state) && incomingUpdate === existingUpdate) return existing;
|
|
211
|
-
return { ...existing, ...incoming, state: incoming.state, lastUpdate: Math.max(existingUpdate, incomingUpdate) };
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
function attachChild(children: NestedRunSummary[], event: NestedEventRecord): NestedRunSummary[] {
|
|
215
|
-
let updated = false;
|
|
216
|
-
const walk = (items: NestedRunSummary[]): NestedRunSummary[] =>
|
|
217
|
-
items.map((item) => {
|
|
218
|
-
if (item.id === event.parentRunId) {
|
|
219
|
-
const existingChildren = item.children ?? [];
|
|
220
|
-
const childIndex = existingChildren.findIndex((child) => child.id === event.child.id);
|
|
221
|
-
const nextChild = mergeSummary(childIndex >= 0 ? existingChildren[childIndex] : undefined, event);
|
|
222
|
-
const nextChildren =
|
|
223
|
-
childIndex >= 0
|
|
224
|
-
? existingChildren.map((child, index) => (index === childIndex ? nextChild : child))
|
|
225
|
-
: [...existingChildren, nextChild];
|
|
226
|
-
updated = true;
|
|
227
|
-
return {
|
|
228
|
-
...item,
|
|
229
|
-
children: nextChildren.slice(0, MAX_NESTED_CHILDREN),
|
|
230
|
-
lastUpdate: Math.max(item.lastUpdate ?? 0, event.ts),
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
if (!item.children?.length) return item;
|
|
234
|
-
const nextChildren = walk(item.children);
|
|
235
|
-
return nextChildren === item.children ? item : { ...item, children: nextChildren };
|
|
236
|
-
});
|
|
237
|
-
const next = walk(children);
|
|
238
|
-
if (updated) return next;
|
|
239
|
-
const childIndex = next.findIndex((child) => child.id === event.child.id);
|
|
240
|
-
const nextChild = mergeSummary(childIndex >= 0 ? next[childIndex] : undefined, event);
|
|
241
|
-
return childIndex >= 0
|
|
242
|
-
? next.map((child, index) => (index === childIndex ? nextChild : child))
|
|
243
|
-
: [...next, nextChild].slice(0, MAX_NESTED_CHILDREN);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
export function applyNestedEvent(registry: NestedRegistry, event: NestedEventRecord): NestedRegistry {
|
|
247
|
-
return {
|
|
248
|
-
...registry,
|
|
249
|
-
updatedAt: Math.max(registry.updatedAt, event.ts),
|
|
250
|
-
children: attachChild(registry.children, event),
|
|
251
|
-
};
|
|
252
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nested foreground run and extension state public types.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import type { ExtensionContext } from "@bastani/atomic";
|
|
6
|
-
import type {
|
|
7
|
-
ActivityState,
|
|
8
|
-
SingleResult,
|
|
9
|
-
SubagentResultStatus,
|
|
10
|
-
SubagentRunMode,
|
|
11
|
-
TokenUsage,
|
|
12
|
-
} from "./types-results.js";
|
|
13
|
-
|
|
14
|
-
export type NestedRunState = "queued" | "running" | "complete" | "failed" | "paused";
|
|
15
|
-
export type NestedOwnerState = "live" | "gone" | "unknown";
|
|
16
|
-
|
|
17
|
-
export interface NestedRunAddress {
|
|
18
|
-
id: string;
|
|
19
|
-
parentRunId: string;
|
|
20
|
-
parentStepIndex?: number;
|
|
21
|
-
parentAgent?: string;
|
|
22
|
-
depth: number;
|
|
23
|
-
path: Array<{ runId: string; stepIndex?: number; agent?: string }>;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export interface NestedStepSummary {
|
|
27
|
-
agent: string;
|
|
28
|
-
status: "pending" | "running" | "complete" | "completed" | "failed" | "paused";
|
|
29
|
-
sessionFile?: string;
|
|
30
|
-
activityState?: ActivityState;
|
|
31
|
-
lastActivityAt?: number;
|
|
32
|
-
currentTool?: string;
|
|
33
|
-
currentToolStartedAt?: number;
|
|
34
|
-
currentPath?: string;
|
|
35
|
-
turnCount?: number;
|
|
36
|
-
toolCount?: number;
|
|
37
|
-
startedAt?: number;
|
|
38
|
-
endedAt?: number;
|
|
39
|
-
error?: string;
|
|
40
|
-
children?: NestedRunSummary[];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export interface NestedRunSummary extends NestedRunAddress {
|
|
44
|
-
sessionId?: string;
|
|
45
|
-
sessionFile?: string;
|
|
46
|
-
intercomTarget?: string;
|
|
47
|
-
ownerIntercomTarget?: string;
|
|
48
|
-
leafIntercomTarget?: string;
|
|
49
|
-
ownerState?: NestedOwnerState;
|
|
50
|
-
controlInbox?: string;
|
|
51
|
-
capabilityToken?: string;
|
|
52
|
-
mode?: SubagentRunMode;
|
|
53
|
-
state: NestedRunState;
|
|
54
|
-
agent?: string;
|
|
55
|
-
agents?: string[];
|
|
56
|
-
steps?: NestedStepSummary[];
|
|
57
|
-
children?: NestedRunSummary[];
|
|
58
|
-
activityState?: ActivityState;
|
|
59
|
-
lastActivityAt?: number;
|
|
60
|
-
currentTool?: string;
|
|
61
|
-
currentToolStartedAt?: number;
|
|
62
|
-
currentPath?: string;
|
|
63
|
-
turnCount?: number;
|
|
64
|
-
toolCount?: number;
|
|
65
|
-
totalTokens?: TokenUsage;
|
|
66
|
-
startedAt?: number;
|
|
67
|
-
endedAt?: number;
|
|
68
|
-
lastUpdate?: number;
|
|
69
|
-
error?: string;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export interface NestedRouteInfo {
|
|
73
|
-
rootRunId: string;
|
|
74
|
-
eventSink: string;
|
|
75
|
-
controlInbox: string;
|
|
76
|
-
capabilityToken: string;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export interface ForegroundResumeChild {
|
|
80
|
-
agent: string;
|
|
81
|
-
index: number;
|
|
82
|
-
sessionFile?: string;
|
|
83
|
-
status: SubagentResultStatus;
|
|
84
|
-
result?: SingleResult;
|
|
85
|
-
/** Effective delegation limit retained for a resumed child. */
|
|
86
|
-
maxSubagentDepth?: number;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export interface ForegroundResumeRun {
|
|
90
|
-
runId: string;
|
|
91
|
-
mode: SubagentRunMode;
|
|
92
|
-
cwd: string;
|
|
93
|
-
updatedAt: number;
|
|
94
|
-
children: ForegroundResumeChild[];
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export interface SubagentState {
|
|
98
|
-
baseCwd: string;
|
|
99
|
-
currentSessionId: string | null;
|
|
100
|
-
subagentInProgress?: boolean;
|
|
101
|
-
foregroundRuns?: Map<string, ForegroundResumeRun>;
|
|
102
|
-
foregroundControls: Map<
|
|
103
|
-
string,
|
|
104
|
-
{
|
|
105
|
-
runId: string;
|
|
106
|
-
mode: SubagentRunMode;
|
|
107
|
-
startedAt: number;
|
|
108
|
-
updatedAt: number;
|
|
109
|
-
currentAgent?: string;
|
|
110
|
-
currentIndex?: number;
|
|
111
|
-
currentActivityState?: ActivityState;
|
|
112
|
-
lastActivityAt?: number;
|
|
113
|
-
currentTool?: string;
|
|
114
|
-
currentToolStartedAt?: number;
|
|
115
|
-
currentPath?: string;
|
|
116
|
-
turnCount?: number;
|
|
117
|
-
tokens?: number;
|
|
118
|
-
toolCount?: number;
|
|
119
|
-
nestedRoute?: NestedRouteInfo;
|
|
120
|
-
nestedChildren?: NestedRunSummary[];
|
|
121
|
-
interrupt?: () => boolean;
|
|
122
|
-
}
|
|
123
|
-
>;
|
|
124
|
-
lastForegroundControlId: string | null;
|
|
125
|
-
pendingForegroundControlNotices?: Map<string, ReturnType<typeof setTimeout>>;
|
|
126
|
-
lastUiContext: ExtensionContext | null;
|
|
127
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { Provider } from "@earendil-works/pi-ai";
|
|
2
|
-
/**
|
|
3
|
-
* GitHub Copilot host routing for `COPILOT_GITHUB_TOKEN` (PAT) auth.
|
|
4
|
-
*
|
|
5
|
-
* Upstream pi pins `github-copilot` to `https://api.individual.githubcopilot.com`
|
|
6
|
-
* and only derives a per-tenant host inside the OAuth loader, which returns an
|
|
7
|
-
* `auth.baseUrl` from the token's `proxy-ep` segment. `envApiKeyAuth` resolves
|
|
8
|
-
* `COPILOT_GITHUB_TOKEN` without a base URL, so business/enterprise tokens are
|
|
9
|
-
* sent to the individual CAPI host and GitHub answers `421 Misdirected Request`.
|
|
10
|
-
*
|
|
11
|
-
* This module restores the routing precedence for the env-token path only; the
|
|
12
|
-
* OAuth path stays exactly upstream. A `models.json` provider `baseUrl` still
|
|
13
|
-
* wins, because it is applied as a later overlay in `applyModelsJson`.
|
|
14
|
-
*/
|
|
15
|
-
export type CopilotRoutingEnv = Readonly<Record<string, string | undefined>>;
|
|
16
|
-
/**
|
|
17
|
-
* Resolve the Copilot API base URL for env-token auth, highest precedence first:
|
|
18
|
-
*
|
|
19
|
-
* 1. `COPILOT_API_TARGET` / `GITHUB_COPILOT_BASE_URL` explicit override
|
|
20
|
-
* 2. the `proxy-ep` segment embedded in `COPILOT_GITHUB_TOKEN`
|
|
21
|
-
* 3. an explicit `enterpriseDomain`
|
|
22
|
-
* 4. `GITHUB_SERVER_URL` (`*.ghe.com` tenant host, else the enterprise host)
|
|
23
|
-
* 5. the public Copilot routing hub when `COPILOT_GITHUB_TOKEN` is set
|
|
24
|
-
*
|
|
25
|
-
* Returns `undefined` when nothing applies, leaving pi's individual-host default.
|
|
26
|
-
*/
|
|
27
|
-
export declare function resolveCopilotEnvBaseUrl(env: CopilotRoutingEnv, enterpriseDomain?: string): string | undefined;
|
|
28
|
-
/**
|
|
29
|
-
* Rewrite the builtin Copilot provider's host when `COPILOT_GITHUB_TOKEN` is set.
|
|
30
|
-
*
|
|
31
|
-
* Applied to the builtin layer so a `models.json` `baseUrl` override, which is
|
|
32
|
-
* composed afterwards, still takes precedence. Providers without the env token
|
|
33
|
-
* are returned untouched so OAuth logins keep pi's exact behavior.
|
|
34
|
-
*/
|
|
35
|
-
export declare function withCopilotEnvBaseUrl(provider: Provider, env: CopilotRoutingEnv): Provider;
|
|
36
|
-
//# sourceMappingURL=copilot-env-routing.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"copilot-env-routing.d.ts","sourceRoot":"","sources":["../../src/core/copilot-env-routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAElE;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAyC7E;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoB9G;AAMD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,iBAAiB,GAAG,QAAQ,CAU1F"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
const COPILOT_PROVIDER_ID = "github-copilot";
|
|
2
|
-
/** Public routing hub: resolves the caller's plan-specific CAPI host server-side. */
|
|
3
|
-
const PUBLIC_COPILOT_HUB = "https://api.githubcopilot.com";
|
|
4
|
-
const ENTERPRISE_COPILOT_HOST = "https://api.enterprise.githubcopilot.com";
|
|
5
|
-
function normalizeBaseUrl(value) {
|
|
6
|
-
const trimmed = value.trim().replace(/\/+$/u, "");
|
|
7
|
-
if (!trimmed)
|
|
8
|
-
return "";
|
|
9
|
-
return /^https?:\/\//u.test(trimmed) ? trimmed : `https://${trimmed}`;
|
|
10
|
-
}
|
|
11
|
-
/** `tid=...;exp=...;proxy-ep=proxy.business.githubcopilot.com;...` -> API host. */
|
|
12
|
-
function baseUrlFromToken(token) {
|
|
13
|
-
const match = token.match(/proxy-ep=([^;]+)/u);
|
|
14
|
-
if (!match?.[1])
|
|
15
|
-
return undefined;
|
|
16
|
-
const host = match[1].trim().replace(/^proxy\./u, "api.");
|
|
17
|
-
return host ? normalizeBaseUrl(host) : undefined;
|
|
18
|
-
}
|
|
19
|
-
function hostFromServerUrl(serverUrl) {
|
|
20
|
-
try {
|
|
21
|
-
return new URL(normalizeBaseUrl(serverUrl)).hostname.toLowerCase() || undefined;
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return undefined;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function baseUrlFromServerHost(host) {
|
|
28
|
-
if (host === "github.com" || host.endsWith(".github.com"))
|
|
29
|
-
return undefined;
|
|
30
|
-
// Tenant-scoped GHE.com: octocorp.ghe.com -> copilot-api.octocorp.ghe.com
|
|
31
|
-
if (host.endsWith(".ghe.com")) {
|
|
32
|
-
const tenant = host.slice(0, -".ghe.com".length).split(".").pop();
|
|
33
|
-
return tenant ? `https://copilot-api.${tenant}.ghe.com` : ENTERPRISE_COPILOT_HOST;
|
|
34
|
-
}
|
|
35
|
-
// GitHub Enterprise Server on a self-hosted domain routes through the
|
|
36
|
-
// enterprise CAPI host rather than a per-appliance Copilot endpoint.
|
|
37
|
-
return ENTERPRISE_COPILOT_HOST;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Resolve the Copilot API base URL for env-token auth, highest precedence first:
|
|
41
|
-
*
|
|
42
|
-
* 1. `COPILOT_API_TARGET` / `GITHUB_COPILOT_BASE_URL` explicit override
|
|
43
|
-
* 2. the `proxy-ep` segment embedded in `COPILOT_GITHUB_TOKEN`
|
|
44
|
-
* 3. an explicit `enterpriseDomain`
|
|
45
|
-
* 4. `GITHUB_SERVER_URL` (`*.ghe.com` tenant host, else the enterprise host)
|
|
46
|
-
* 5. the public Copilot routing hub when `COPILOT_GITHUB_TOKEN` is set
|
|
47
|
-
*
|
|
48
|
-
* Returns `undefined` when nothing applies, leaving pi's individual-host default.
|
|
49
|
-
*/
|
|
50
|
-
export function resolveCopilotEnvBaseUrl(env, enterpriseDomain) {
|
|
51
|
-
const override = env.COPILOT_API_TARGET?.trim() || env.GITHUB_COPILOT_BASE_URL?.trim();
|
|
52
|
-
if (override)
|
|
53
|
-
return normalizeBaseUrl(override);
|
|
54
|
-
const token = env.COPILOT_GITHUB_TOKEN?.trim();
|
|
55
|
-
if (token) {
|
|
56
|
-
const fromToken = baseUrlFromToken(token);
|
|
57
|
-
if (fromToken)
|
|
58
|
-
return fromToken;
|
|
59
|
-
}
|
|
60
|
-
if (enterpriseDomain?.trim())
|
|
61
|
-
return `https://copilot-api.${enterpriseDomain.trim()}`;
|
|
62
|
-
const serverUrl = env.GITHUB_SERVER_URL?.trim();
|
|
63
|
-
if (serverUrl) {
|
|
64
|
-
const host = hostFromServerUrl(serverUrl);
|
|
65
|
-
const fromServer = host ? baseUrlFromServerHost(host) : undefined;
|
|
66
|
-
if (fromServer)
|
|
67
|
-
return fromServer;
|
|
68
|
-
}
|
|
69
|
-
return token ? PUBLIC_COPILOT_HUB : undefined;
|
|
70
|
-
}
|
|
71
|
-
function withModelBaseUrl(models, baseUrl) {
|
|
72
|
-
return models.map((model) => ({ ...model, baseUrl }));
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Rewrite the builtin Copilot provider's host when `COPILOT_GITHUB_TOKEN` is set.
|
|
76
|
-
*
|
|
77
|
-
* Applied to the builtin layer so a `models.json` `baseUrl` override, which is
|
|
78
|
-
* composed afterwards, still takes precedence. Providers without the env token
|
|
79
|
-
* are returned untouched so OAuth logins keep pi's exact behavior.
|
|
80
|
-
*/
|
|
81
|
-
export function withCopilotEnvBaseUrl(provider, env) {
|
|
82
|
-
if (provider.id !== COPILOT_PROVIDER_ID || !env.COPILOT_GITHUB_TOKEN?.trim())
|
|
83
|
-
return provider;
|
|
84
|
-
const baseUrl = resolveCopilotEnvBaseUrl(env);
|
|
85
|
-
if (!baseUrl || baseUrl === provider.baseUrl)
|
|
86
|
-
return provider;
|
|
87
|
-
return {
|
|
88
|
-
...provider,
|
|
89
|
-
baseUrl,
|
|
90
|
-
// Wrap the getter so dynamically refreshed models are routed too.
|
|
91
|
-
getModels: () => withModelBaseUrl(provider.getModels(), baseUrl),
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=copilot-env-routing.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"copilot-env-routing.js","sourceRoot":"","sources":["../../src/core/copilot-env-routing.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model, Provider } from \"@earendil-works/pi-ai\";\n\n/**\n * GitHub Copilot host routing for `COPILOT_GITHUB_TOKEN` (PAT) auth.\n *\n * Upstream pi pins `github-copilot` to `https://api.individual.githubcopilot.com`\n * and only derives a per-tenant host inside the OAuth loader, which returns an\n * `auth.baseUrl` from the token's `proxy-ep` segment. `envApiKeyAuth` resolves\n * `COPILOT_GITHUB_TOKEN` without a base URL, so business/enterprise tokens are\n * sent to the individual CAPI host and GitHub answers `421 Misdirected Request`.\n *\n * This module restores the routing precedence for the env-token path only; the\n * OAuth path stays exactly upstream. A `models.json` provider `baseUrl` still\n * wins, because it is applied as a later overlay in `applyModelsJson`.\n */\n\nexport type CopilotRoutingEnv = Readonly<Record<string, string | undefined>>;\n\nconst COPILOT_PROVIDER_ID = \"github-copilot\";\n/** Public routing hub: resolves the caller's plan-specific CAPI host server-side. */\nconst PUBLIC_COPILOT_HUB = \"https://api.githubcopilot.com\";\nconst ENTERPRISE_COPILOT_HOST = \"https://api.enterprise.githubcopilot.com\";\n\nfunction normalizeBaseUrl(value: string): string {\n\tconst trimmed = value.trim().replace(/\\/+$/u, \"\");\n\tif (!trimmed) return \"\";\n\treturn /^https?:\\/\\//u.test(trimmed) ? trimmed : `https://${trimmed}`;\n}\n\n/** `tid=...;exp=...;proxy-ep=proxy.business.githubcopilot.com;...` -> API host. */\nfunction baseUrlFromToken(token: string): string | undefined {\n\tconst match = token.match(/proxy-ep=([^;]+)/u);\n\tif (!match?.[1]) return undefined;\n\tconst host = match[1].trim().replace(/^proxy\\./u, \"api.\");\n\treturn host ? normalizeBaseUrl(host) : undefined;\n}\n\nfunction hostFromServerUrl(serverUrl: string): string | undefined {\n\ttry {\n\t\treturn new URL(normalizeBaseUrl(serverUrl)).hostname.toLowerCase() || undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction baseUrlFromServerHost(host: string): string | undefined {\n\tif (host === \"github.com\" || host.endsWith(\".github.com\")) return undefined;\n\t// Tenant-scoped GHE.com: octocorp.ghe.com -> copilot-api.octocorp.ghe.com\n\tif (host.endsWith(\".ghe.com\")) {\n\t\tconst tenant = host.slice(0, -\".ghe.com\".length).split(\".\").pop();\n\t\treturn tenant ? `https://copilot-api.${tenant}.ghe.com` : ENTERPRISE_COPILOT_HOST;\n\t}\n\t// GitHub Enterprise Server on a self-hosted domain routes through the\n\t// enterprise CAPI host rather than a per-appliance Copilot endpoint.\n\treturn ENTERPRISE_COPILOT_HOST;\n}\n\n/**\n * Resolve the Copilot API base URL for env-token auth, highest precedence first:\n *\n * 1. `COPILOT_API_TARGET` / `GITHUB_COPILOT_BASE_URL` explicit override\n * 2. the `proxy-ep` segment embedded in `COPILOT_GITHUB_TOKEN`\n * 3. an explicit `enterpriseDomain`\n * 4. `GITHUB_SERVER_URL` (`*.ghe.com` tenant host, else the enterprise host)\n * 5. the public Copilot routing hub when `COPILOT_GITHUB_TOKEN` is set\n *\n * Returns `undefined` when nothing applies, leaving pi's individual-host default.\n */\nexport function resolveCopilotEnvBaseUrl(env: CopilotRoutingEnv, enterpriseDomain?: string): string | undefined {\n\tconst override = env.COPILOT_API_TARGET?.trim() || env.GITHUB_COPILOT_BASE_URL?.trim();\n\tif (override) return normalizeBaseUrl(override);\n\n\tconst token = env.COPILOT_GITHUB_TOKEN?.trim();\n\tif (token) {\n\t\tconst fromToken = baseUrlFromToken(token);\n\t\tif (fromToken) return fromToken;\n\t}\n\n\tif (enterpriseDomain?.trim()) return `https://copilot-api.${enterpriseDomain.trim()}`;\n\n\tconst serverUrl = env.GITHUB_SERVER_URL?.trim();\n\tif (serverUrl) {\n\t\tconst host = hostFromServerUrl(serverUrl);\n\t\tconst fromServer = host ? baseUrlFromServerHost(host) : undefined;\n\t\tif (fromServer) return fromServer;\n\t}\n\n\treturn token ? PUBLIC_COPILOT_HUB : undefined;\n}\n\nfunction withModelBaseUrl<TApi extends Api>(models: readonly Model<TApi>[], baseUrl: string): Model<TApi>[] {\n\treturn models.map((model) => ({ ...model, baseUrl }));\n}\n\n/**\n * Rewrite the builtin Copilot provider's host when `COPILOT_GITHUB_TOKEN` is set.\n *\n * Applied to the builtin layer so a `models.json` `baseUrl` override, which is\n * composed afterwards, still takes precedence. Providers without the env token\n * are returned untouched so OAuth logins keep pi's exact behavior.\n */\nexport function withCopilotEnvBaseUrl(provider: Provider, env: CopilotRoutingEnv): Provider {\n\tif (provider.id !== COPILOT_PROVIDER_ID || !env.COPILOT_GITHUB_TOKEN?.trim()) return provider;\n\tconst baseUrl = resolveCopilotEnvBaseUrl(env);\n\tif (!baseUrl || baseUrl === provider.baseUrl) return provider;\n\treturn {\n\t\t...provider,\n\t\tbaseUrl,\n\t\t// Wrap the getter so dynamically refreshed models are routed too.\n\t\tgetModels: () => withModelBaseUrl(provider.getModels(), baseUrl),\n\t};\n}\n"]}
|