@selesai/code 0.13.26 → 0.13.27

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.
Files changed (119) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/dist/cli/args.js +1 -0
  3. package/dist/cli/session-picker.d.ts +1 -1
  4. package/dist/config.js +1 -1
  5. package/dist/core/agent-session-auto-handoff.test.js +2 -1
  6. package/dist/core/agent-session-length-continuation.test.js +2 -1
  7. package/dist/core/agent-session.d.ts +58 -7
  8. package/dist/core/agent-session.js +334 -167
  9. package/dist/core/bug-report-upload.d.ts +11 -0
  10. package/dist/core/bug-report-upload.js +21 -0
  11. package/dist/core/bug-report.d.ts +175 -0
  12. package/dist/core/bug-report.js +291 -0
  13. package/dist/core/cache-stats.js +12 -1
  14. package/dist/core/cache-warmer.d.ts +101 -0
  15. package/dist/core/cache-warmer.js +341 -0
  16. package/dist/core/compaction/branch-summarization.js +2 -2
  17. package/dist/core/compaction/compaction.d.ts +6 -5
  18. package/dist/core/compaction/compaction.js +49 -42
  19. package/dist/core/crash-log.d.ts +21 -0
  20. package/dist/core/crash-log.js +70 -0
  21. package/dist/core/experimental.d.ts +0 -4
  22. package/dist/core/experimental.js +0 -4
  23. package/dist/core/extensions/index.d.ts +1 -1
  24. package/dist/core/extensions/jiti-loader.d.ts +1 -0
  25. package/dist/core/extensions/jiti-loader.js +3 -0
  26. package/dist/core/extensions/jiti-static-loader.d.ts +1 -0
  27. package/dist/core/extensions/jiti-static-loader.js +3 -0
  28. package/dist/core/extensions/loader.js +39 -49
  29. package/dist/core/extensions/runner.d.ts +10 -7
  30. package/dist/core/extensions/runner.js +85 -67
  31. package/dist/core/extensions/types.d.ts +66 -52
  32. package/dist/core/extensions/virtual-modules.d.ts +2 -0
  33. package/dist/core/extensions/virtual-modules.js +39 -0
  34. package/dist/core/extensions/wrapper.js +1 -20
  35. package/dist/core/index.d.ts +2 -1
  36. package/dist/core/keybindings.d.ts +1 -1
  37. package/dist/core/keybindings.js +1 -1
  38. package/dist/core/messages.js +1 -0
  39. package/dist/core/model-config.d.ts +101 -20
  40. package/dist/core/model-config.js +25 -18
  41. package/dist/core/model-resolver.js +2 -1
  42. package/dist/core/model-runtime.js +5 -3
  43. package/dist/core/provider-composer.d.ts +7 -2
  44. package/dist/core/provider-composer.js +10 -5
  45. package/dist/core/radius.d.ts +3 -0
  46. package/dist/core/radius.js +6 -0
  47. package/dist/core/sdk.js +60 -38
  48. package/dist/core/session-export.d.ts +6 -2
  49. package/dist/core/session-export.js +14 -13
  50. package/dist/core/session-format.test.d.ts +1 -0
  51. package/dist/core/session-format.test.js +96 -0
  52. package/dist/core/session-manager.d.ts +29 -6
  53. package/dist/core/session-manager.js +159 -96
  54. package/dist/core/settings-manager.d.ts +22 -5
  55. package/dist/core/settings-manager.js +56 -23
  56. package/dist/core/slash-commands.js +1 -0
  57. package/dist/core/system-prompt.d.ts +49 -4
  58. package/dist/core/system-prompt.js +155 -102
  59. package/dist/core/system-prompt.test.js +61 -23
  60. package/dist/core/tools/bash.d.ts +2 -1
  61. package/dist/core/tools/bash.js +10 -4
  62. package/dist/core/tools/edit.js +1 -2
  63. package/dist/core/tools/read.js +1 -2
  64. package/dist/core/tools/renderers/bash.js +9 -1
  65. package/dist/core/tools/write.js +1 -2
  66. package/dist/core/usage-totals.d.ts +1 -1
  67. package/dist/core/usage-totals.js +5 -1
  68. package/dist/extensions/pi-web-agent/src/backends/factory.ts +14 -6
  69. package/dist/extensions/pi-web-agent/src/extension.ts +3 -1
  70. package/dist/extensions/pi-web-agent/src/orchestration/answer-synthesizer.ts +7 -3
  71. package/dist/extensions/pi-web-agent/src/orchestration/research-orchestrator.ts +3 -0
  72. package/dist/extensions/pi-web-agent/src/orchestration/research-types.ts +2 -0
  73. package/dist/extensions/pi-web-agent/src/presentation/explore-presentation.ts +4 -2
  74. package/dist/extensions/pi-web-agent/src/search/tokenin.ts +4 -1
  75. package/dist/extensions/pi-web-agent/src/tools/web-explore.ts +2 -1
  76. package/dist/extensions/pi-web-agent/src/types.ts +4 -0
  77. package/dist/index.d.ts +3 -2
  78. package/dist/main.js +13 -9
  79. package/dist/migrations.js +2 -2
  80. package/dist/modes/interactive/bug-report.d.ts +15 -0
  81. package/dist/modes/interactive/bug-report.js +205 -0
  82. package/dist/modes/interactive/chat-viewport.js +1 -1
  83. package/dist/modes/interactive/components/branch-summary-message.js +12 -5
  84. package/dist/modes/interactive/components/compaction-summary-message.js +12 -5
  85. package/dist/modes/interactive/components/custom-editor.d.ts +3 -3
  86. package/dist/modes/interactive/components/extension-editor.d.ts +4 -1
  87. package/dist/modes/interactive/components/extension-editor.js +7 -2
  88. package/dist/modes/interactive/components/extension-input.d.ts +2 -0
  89. package/dist/modes/interactive/components/extension-input.js +6 -0
  90. package/dist/modes/interactive/components/extension-selector.d.ts +1 -0
  91. package/dist/modes/interactive/components/extension-selector.js +4 -0
  92. package/dist/modes/interactive/components/footer.js +4 -1
  93. package/dist/modes/interactive/components/session-selector.d.ts +5 -5
  94. package/dist/modes/interactive/components/session-selector.js +74 -48
  95. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  96. package/dist/modes/interactive/components/settings-selector.js +11 -0
  97. package/dist/modes/interactive/components/skill-invocation-message.js +11 -4
  98. package/dist/modes/interactive/components/status-indicator.d.ts +2 -2
  99. package/dist/modes/interactive/components/status-indicator.js +7 -7
  100. package/dist/modes/interactive/components/tool-execution.js +18 -9
  101. package/dist/modes/interactive/components/tree-selector.js +2 -0
  102. package/dist/modes/interactive/interactive-mode.d.ts +15 -2
  103. package/dist/modes/interactive/interactive-mode.js +257 -81
  104. package/dist/modes/interactive/session-share.d.ts +2 -0
  105. package/dist/modes/interactive/session-share.js +8 -4
  106. package/dist/modes/interactive/tui-renderer.js +2 -2
  107. package/dist/modes/rpc/rpc-mode.js +2 -2
  108. package/dist/utils/clipboard-command.d.ts +6 -0
  109. package/dist/utils/clipboard-command.js +44 -0
  110. package/dist/utils/clipboard-image.js +55 -89
  111. package/dist/utils/clipboard.d.ts +1 -1
  112. package/dist/utils/clipboard.js +118 -108
  113. package/dist/utils/wsl.d.ts +2 -0
  114. package/dist/utils/wsl.js +14 -0
  115. package/dist/utils/zip.d.ts +6 -0
  116. package/dist/utils/zip.js +59 -0
  117. package/package.json +9 -9
  118. package/dist/utils/clipboard-native.d.ts +0 -10
  119. package/dist/utils/clipboard-native.js +0 -19
@@ -8,11 +8,12 @@
8
8
  * - Interact with the user via UI primitives
9
9
  */
10
10
  import type { AgentMessage, AgentToolResult, AgentToolUpdateCallback, ThinkingLevel, ToolExecutionMode } from "@earendil-works/pi-agent-core";
11
- import type { Api, AssistantMessageEvent, AssistantMessageEventStream, ConstrainedSamplingConfig, Context, ImageContent, Model, OAuthCredentials, OAuthLoginCallbacks, Provider, ProviderHeaders, RefreshModelsContext, SimpleStreamOptions, TextContent, ToolResultMessage, Usage } from "@earendil-works/pi-ai";
11
+ import type { Api, AssistantMessageEvent, AssistantMessageEventStream, ConstrainedSamplingConfig, ImageContent, Model, OAuthCredentials, OAuthLoginCallbacks, Provider, ProviderHeaders, RefreshModelsContext, SimpleStreamOptions, TextContent, ToolResultMessage, TranscriptContext, Usage } from "@earendil-works/pi-ai";
12
12
  import type { AutocompleteItem, AutocompleteProvider, Component, EditorComponent, EditorTheme, KeyId, OverlayHandle, OverlayOptions, TUI } from "@earendil-works/pi-tui";
13
13
  import type { Static, TSchema } from "typebox";
14
14
  import type { Theme } from "../../modes/interactive/theme/theme.ts";
15
15
  import type { BashResult } from "../bash-executor.ts";
16
+ import type { CacheWarmingDecisionEvent, CacheWarmingDecisionEventResult } from "../cache-warmer.ts";
16
17
  import type { CompactionPreparation, CompactionResult } from "../compaction/index.ts";
17
18
  import type { EventBus } from "../event-bus.ts";
18
19
  import type { ExecOptions, ExecResult } from "../exec.ts";
@@ -25,12 +26,12 @@ import type { BranchSummaryEntry, CompactionEntry, CustomEntry, ReadonlySessionM
25
26
  import type { SlashCommandInfo } from "../slash-commands.ts";
26
27
  import type { Skill } from "../skills.ts";
27
28
  import type { SourceInfo } from "../source-info.ts";
28
- import type { BuildSystemPromptOptions } from "../system-prompt.ts";
29
+ import type { BuildSystemPromptOptions, NormalizedBuildSystemPromptOptions } from "../system-prompt.ts";
29
30
  import type { BashOperations } from "../tools/bash.ts";
30
31
  import type { EditToolDetails } from "../tools/edit.ts";
31
32
  import type { BashToolDetails, BashToolInput, EditToolInput, FindToolDetails, FindToolInput, GrepToolDetails, GrepToolInput, LsToolDetails, LsToolInput, ReadToolDetails, ReadToolInput, WriteToolInput } from "../tools/index.ts";
32
33
  export type { ExecOptions, ExecResult } from "../exec.ts";
33
- export type { BuildSystemPromptOptions } from "../system-prompt.ts";
34
+ export type { BuildSystemPromptOptions, NormalizedBuildSystemPromptOptions } from "../system-prompt.ts";
34
35
  export type { AgentToolResult, AgentToolUpdateCallback, ToolExecutionMode };
35
36
  export type { AppKeybinding, KeybindingsManager } from "../keybindings.ts";
36
37
  /** Options for extension UI dialogs. */
@@ -560,10 +561,10 @@ export interface BeforeAgentStartEvent {
560
561
  prompt: string;
561
562
  /** Images attached to the user prompt, if any. */
562
563
  images?: ImageContent[];
563
- /** The fully assembled system prompt string. */
564
- systemPrompt: string;
565
- /** Structured options used to build the system prompt. Extensions can inspect this to understand what Pi loaded without re-discovering resources. */
566
- systemPromptOptions: BuildSystemPromptOptions;
564
+ /** The current system prompt, rendered from systemPromptOptions and earlier handler changes. */
565
+ readonly systemPrompt: string;
566
+ /** Mutable prompt sections. Later handlers observe mutations made by earlier handlers. */
567
+ systemPromptOptions: NormalizedBuildSystemPromptOptions;
567
568
  }
568
569
  /** Fired when an agent loop starts */
569
570
  export interface AgentStartEvent {
@@ -818,23 +819,27 @@ export declare function isToolCallEventType<TName extends string, TInput extends
818
819
  input: TInput;
819
820
  };
820
821
  /** Union of all event types */
821
- export type ExtensionEvent = ProjectTrustEvent | ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeProviderRequestEvent | BeforeProviderHeadersEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | AgentSettledEvent | UIPromptStartEvent | UIPromptEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ModelSelectEvent | ThinkingLevelSelectEvent | UserBashEvent | InputEvent | ToolCallEvent | ToolResultEvent;
822
+ export type ExtensionEvent = ProjectTrustEvent | ResourcesDiscoverEvent | SessionEvent | ContextEvent | CacheWarmingDecisionEvent | BeforeProviderRequestEvent | BeforeProviderHeadersEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | AgentSettledEvent | UIPromptStartEvent | UIPromptEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ModelSelectEvent | ThinkingLevelSelectEvent | UserBashEvent | InputEvent | ToolCallEvent | ToolResultEvent;
822
823
  export interface ContextEventResult {
823
824
  messages?: AgentMessage[];
824
825
  }
825
826
  export type BeforeProviderRequestEventResult = unknown;
827
+ export type { CacheWarmingDecisionEvent, CacheWarmingDecisionEventResult } from "../cache-warmer.ts";
826
828
  export interface ToolCallEventResult {
827
829
  /** Block tool execution. To modify arguments, mutate `event.input` in place instead. */
828
830
  block?: boolean;
829
831
  reason?: string;
830
832
  }
831
833
  /** Result from user_bash event handler */
832
- export interface UserBashEventResult {
834
+ export type UserBashEventResult = {
833
835
  /** Custom operations to use for execution */
834
- operations?: BashOperations;
836
+ operations: BashOperations;
837
+ result?: never;
838
+ } | {
839
+ operations?: never;
835
840
  /** Full replacement: extension handled execution, use this result */
836
- result?: BashResult;
837
- }
841
+ result: BashResult;
842
+ };
838
843
  export interface ToolResultEventResult {
839
844
  content?: (TextContent | ImageContent)[];
840
845
  details?: unknown;
@@ -849,7 +854,7 @@ export interface MessageEndEventResult {
849
854
  }
850
855
  export interface BeforeAgentStartEventResult {
851
856
  message?: Pick<CustomMessage, "customType" | "content" | "display" | "details">;
852
- /** Replace the system prompt for this turn. If multiple extensions return this, they are chained. */
857
+ /** Replace the complete system prompt for this turn. Later handlers observe this exact override. */
853
858
  systemPrompt?: string;
854
859
  }
855
860
  export interface SessionBeforeSwitchResult {
@@ -909,43 +914,43 @@ export type ExtensionHandler<E, R = undefined> = (event: E, ctx: ExtensionContex
909
914
  * ExtensionAPI passed to extension factory functions.
910
915
  */
911
916
  export interface ExtensionAPI {
912
- on(event: "project_trust", handler: ProjectTrustHandler): void;
913
- on(event: "resources_discover", handler: ExtensionHandler<ResourcesDiscoverEvent, ResourcesDiscoverResult>): void;
914
- on(event: "session_start", handler: ExtensionHandler<SessionStartEvent>): void;
915
- on(event: "session_info_changed", handler: ExtensionHandler<SessionInfoChangedEvent>): void;
916
- on(event: "session_before_switch", handler: ExtensionHandler<SessionBeforeSwitchEvent, SessionBeforeSwitchResult>): void;
917
- on(event: "session_before_fork", handler: ExtensionHandler<SessionBeforeForkEvent, SessionBeforeForkResult>): void;
918
- on(event: "session_before_compact", handler: ExtensionHandler<SessionBeforeCompactEvent, SessionBeforeCompactResult>): void;
919
- on(event: "session_compact", handler: ExtensionHandler<SessionCompactEvent>): void;
920
- on(event: "session_compact_failed", handler: ExtensionHandler<SessionCompactFailedEvent>): void;
921
- on(event: "session_info_changed", handler: ExtensionHandler<SessionInfoChangedEvent>): void;
922
- on(event: "session_shutdown", handler: ExtensionHandler<SessionShutdownEvent>): void;
923
- on(event: "session_before_tree", handler: ExtensionHandler<SessionBeforeTreeEvent, SessionBeforeTreeResult>): void;
924
- on(event: "session_tree", handler: ExtensionHandler<SessionTreeEvent>): void;
925
- on(event: "context", handler: ExtensionHandler<ContextEvent, ContextEventResult>): void;
926
- on(event: "before_provider_request", handler: ExtensionHandler<BeforeProviderRequestEvent, BeforeProviderRequestEventResult>): void;
927
- on(event: "before_provider_headers", handler: ExtensionHandler<BeforeProviderHeadersEvent>): void;
928
- on(event: "after_provider_response", handler: ExtensionHandler<AfterProviderResponseEvent>): void;
929
- on(event: "before_agent_start", handler: ExtensionHandler<BeforeAgentStartEvent, BeforeAgentStartEventResult>): void;
930
- on(event: "agent_start", handler: ExtensionHandler<AgentStartEvent>): void;
931
- on(event: "agent_end", handler: ExtensionHandler<AgentEndEvent>): void;
932
- on(event: "agent_settled", handler: ExtensionHandler<AgentSettledEvent>): void;
933
- on(event: "ui_prompt_start", handler: ExtensionHandler<UIPromptStartEvent>): void;
934
- on(event: "ui_prompt_end", handler: ExtensionHandler<UIPromptEndEvent>): void;
935
- on(event: "turn_start", handler: ExtensionHandler<TurnStartEvent>): void;
936
- on(event: "turn_end", handler: ExtensionHandler<TurnEndEvent>): void;
937
- on(event: "message_start", handler: ExtensionHandler<MessageStartEvent>): void;
938
- on(event: "message_update", handler: ExtensionHandler<MessageUpdateEvent>): void;
939
- on(event: "message_end", handler: ExtensionHandler<MessageEndEvent, MessageEndEventResult>): void;
940
- on(event: "tool_execution_start", handler: ExtensionHandler<ToolExecutionStartEvent>): void;
941
- on(event: "tool_execution_update", handler: ExtensionHandler<ToolExecutionUpdateEvent>): void;
942
- on(event: "tool_execution_end", handler: ExtensionHandler<ToolExecutionEndEvent>): void;
943
- on(event: "model_select", handler: ExtensionHandler<ModelSelectEvent>): void;
944
- on(event: "thinking_level_select", handler: ExtensionHandler<ThinkingLevelSelectEvent>): void;
945
- on(event: "tool_call", handler: ExtensionHandler<ToolCallEvent, ToolCallEventResult>): void;
946
- on(event: "tool_result", handler: ExtensionHandler<ToolResultEvent, ToolResultEventResult>): void;
947
- on(event: "user_bash", handler: ExtensionHandler<UserBashEvent, UserBashEventResult>): void;
948
- on(event: "input", handler: ExtensionHandler<InputEvent, InputEventResult>): void;
917
+ on(event: "project_trust", handler: ProjectTrustHandler): () => void;
918
+ on(event: "resources_discover", handler: ExtensionHandler<ResourcesDiscoverEvent, ResourcesDiscoverResult>): () => void;
919
+ on(event: "session_start", handler: ExtensionHandler<SessionStartEvent>): () => void;
920
+ on(event: "session_info_changed", handler: ExtensionHandler<SessionInfoChangedEvent>): () => void;
921
+ on(event: "session_before_switch", handler: ExtensionHandler<SessionBeforeSwitchEvent, SessionBeforeSwitchResult>): () => void;
922
+ on(event: "session_before_fork", handler: ExtensionHandler<SessionBeforeForkEvent, SessionBeforeForkResult>): () => void;
923
+ on(event: "session_before_compact", handler: ExtensionHandler<SessionBeforeCompactEvent, SessionBeforeCompactResult>): () => void;
924
+ on(event: "session_compact", handler: ExtensionHandler<SessionCompactEvent>): () => void;
925
+ on(event: "session_compact_failed", handler: ExtensionHandler<SessionCompactFailedEvent>): () => void;
926
+ on(event: "session_shutdown", handler: ExtensionHandler<SessionShutdownEvent>): () => void;
927
+ on(event: "session_before_tree", handler: ExtensionHandler<SessionBeforeTreeEvent, SessionBeforeTreeResult>): () => void;
928
+ on(event: "session_tree", handler: ExtensionHandler<SessionTreeEvent>): () => void;
929
+ on(event: "context", handler: ExtensionHandler<ContextEvent, ContextEventResult>): () => void;
930
+ on(event: "cache_warming_decision", handler: ExtensionHandler<CacheWarmingDecisionEvent, CacheWarmingDecisionEventResult>): () => void;
931
+ on(event: "before_provider_request", handler: ExtensionHandler<BeforeProviderRequestEvent, BeforeProviderRequestEventResult>): () => void;
932
+ on(event: "before_provider_headers", handler: ExtensionHandler<BeforeProviderHeadersEvent>): () => void;
933
+ on(event: "after_provider_response", handler: ExtensionHandler<AfterProviderResponseEvent>): () => void;
934
+ on(event: "before_agent_start", handler: ExtensionHandler<BeforeAgentStartEvent, BeforeAgentStartEventResult>): () => void;
935
+ on(event: "agent_start", handler: ExtensionHandler<AgentStartEvent>): () => void;
936
+ on(event: "agent_end", handler: ExtensionHandler<AgentEndEvent>): () => void;
937
+ on(event: "agent_settled", handler: ExtensionHandler<AgentSettledEvent>): () => void;
938
+ on(event: "ui_prompt_start", handler: ExtensionHandler<UIPromptStartEvent>): () => void;
939
+ on(event: "ui_prompt_end", handler: ExtensionHandler<UIPromptEndEvent>): () => void;
940
+ on(event: "turn_start", handler: ExtensionHandler<TurnStartEvent>): () => void;
941
+ on(event: "turn_end", handler: ExtensionHandler<TurnEndEvent>): () => void;
942
+ on(event: "message_start", handler: ExtensionHandler<MessageStartEvent>): () => void;
943
+ on(event: "message_update", handler: ExtensionHandler<MessageUpdateEvent>): () => void;
944
+ on(event: "message_end", handler: ExtensionHandler<MessageEndEvent, MessageEndEventResult>): () => void;
945
+ on(event: "tool_execution_start", handler: ExtensionHandler<ToolExecutionStartEvent>): () => void;
946
+ on(event: "tool_execution_update", handler: ExtensionHandler<ToolExecutionUpdateEvent>): () => void;
947
+ on(event: "tool_execution_end", handler: ExtensionHandler<ToolExecutionEndEvent>): () => void;
948
+ on(event: "model_select", handler: ExtensionHandler<ModelSelectEvent>): () => void;
949
+ on(event: "thinking_level_select", handler: ExtensionHandler<ThinkingLevelSelectEvent>): () => void;
950
+ on(event: "tool_call", handler: ExtensionHandler<ToolCallEvent, ToolCallEventResult>): () => void;
951
+ on(event: "tool_result", handler: ExtensionHandler<ToolResultEvent, ToolResultEventResult>): () => void;
952
+ on(event: "user_bash", handler: ExtensionHandler<UserBashEvent, UserBashEventResult>): () => void;
953
+ on(event: "input", handler: ExtensionHandler<InputEvent, InputEventResult>): () => void;
949
954
  /** Register a tool that the LLM can call. */
950
955
  registerTool<TParams extends TSchema = TSchema, TDetails = unknown, TState = any>(tool: ToolDefinition<TParams, TDetails, TState>): void;
951
956
  /** Register a custom command. */
@@ -1108,8 +1113,15 @@ export interface ProviderConfig {
1108
1113
  apiKey?: string;
1109
1114
  /** API type. Required at provider or model level when defining models. */
1110
1115
  api?: Api;
1111
- /** Optional streamSimple handler for custom APIs. */
1112
- streamSimple?: (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;
1116
+ /**
1117
+ * Optional streamSimple handler for custom APIs.
1118
+ * The context is a normalized transcript: read the prompt and tools from its system messages
1119
+ * (`getCurrentSystemPrompt(context.messages)`, `getCurrentTools(context.messages)`).
1120
+ * Implementations must invoke `options.onPayload` before sending the provider request and use any
1121
+ * returned replacement payload. They must invoke `options.onResponse` after receiving the response
1122
+ * and before consuming its body, matching built-in providers.
1123
+ */
1124
+ streamSimple?: (model: Model<Api>, context: TranscriptContext, options?: SimpleStreamOptions) => AssistantMessageEventStream;
1113
1125
  /** Custom headers to include in requests. */
1114
1126
  headers?: Record<string, string>;
1115
1127
  /** If true, adds Authorization: Bearer header with the resolved API key. */
@@ -1155,6 +1167,8 @@ export interface ProviderModelConfig {
1155
1167
  input: ("text" | "image")[];
1156
1168
  /** Per-million-token cost rates and optional request-wide input pricing tiers. */
1157
1169
  cost: Model<Api>["cost"];
1170
+ /** Best-effort prompt cache lifetime in seconds per retention tier. Unset disables cache warming. */
1171
+ promptCache?: Model<Api>["promptCache"];
1158
1172
  /** Maximum context window size in tokens. */
1159
1173
  contextWindow: number;
1160
1174
  /** Maximum output tokens. */
@@ -0,0 +1,2 @@
1
+ /** Modules available to extensions in source and compiled binary runtimes. */
2
+ export declare const VIRTUAL_MODULES: Record<string, unknown>;
@@ -0,0 +1,39 @@
1
+ import * as bundledPiAgentCore from "@earendil-works/pi-agent-core";
2
+ import * as bundledPiAiCompat from "@earendil-works/pi-ai/compat";
3
+ import * as bundledPiAiOauth from "@earendil-works/pi-ai/oauth";
4
+ import * as bundledPiAiProviders from "@earendil-works/pi-ai/providers/all";
5
+ import * as bundledPiTui from "@earendil-works/pi-tui";
6
+ import * as bundledTypebox from "typebox";
7
+ import * as bundledTypeboxCompile from "typebox/compile";
8
+ import * as bundledTypeboxValue from "typebox/value";
9
+ // This import is safe because loader.ts exports are not re-exported from index.ts.
10
+ // Extensions can therefore import from @earendil-works/pi-coding-agent.
11
+ import * as bundledPiCodingAgent from "../../index.js";
12
+ /** Modules available to extensions in source and compiled binary runtimes. */
13
+ export const VIRTUAL_MODULES = {
14
+ typebox: bundledTypebox,
15
+ "typebox/compile": bundledTypeboxCompile,
16
+ "typebox/value": bundledTypeboxValue,
17
+ "@sinclair/typebox": bundledTypebox,
18
+ "@sinclair/typebox/compile": bundledTypeboxCompile,
19
+ "@sinclair/typebox/value": bundledTypeboxValue,
20
+ "@earendil-works/pi-agent-core": bundledPiAgentCore,
21
+ "@earendil-works/pi-tui": bundledPiTui,
22
+ // Extensions resolve the pi-ai root to the compat entrypoint (a strict
23
+ // superset of the core entrypoint): existing extensions using the old
24
+ // global API keep working at runtime until compat is removed.
25
+ "@earendil-works/pi-ai": bundledPiAiCompat,
26
+ "@earendil-works/pi-ai/compat": bundledPiAiCompat,
27
+ "@earendil-works/pi-ai/oauth": bundledPiAiOauth,
28
+ "@earendil-works/pi-ai/providers/all": bundledPiAiProviders,
29
+ "@earendil-works/pi-coding-agent": bundledPiCodingAgent,
30
+ // Selesai fork: in-tree extensions may import this fork's own package name.
31
+ "@selesai/code": bundledPiCodingAgent,
32
+ "@mariozechner/pi-agent-core": bundledPiAgentCore,
33
+ "@mariozechner/pi-tui": bundledPiTui,
34
+ "@mariozechner/pi-ai": bundledPiAiCompat,
35
+ "@mariozechner/pi-ai/compat": bundledPiAiCompat,
36
+ "@mariozechner/pi-ai/oauth": bundledPiAiOauth,
37
+ "@mariozechner/pi-ai/providers/all": bundledPiAiProviders,
38
+ "@mariozechner/pi-coding-agent": bundledPiCodingAgent,
39
+ };
@@ -10,26 +10,7 @@ import { wrapToolDefinition } from "../tools/tool-definition-wrapper.js";
10
10
  * Uses the runner's createContext() for consistent context across tools and event handlers.
11
11
  */
12
12
  export function wrapRegisteredTool(registeredTool, runner) {
13
- const tool = wrapToolDefinition(registeredTool.definition, () => runner.createContext());
14
- const execute = tool.execute;
15
- return {
16
- ...tool,
17
- execute: async (toolCallId, params, signal, onUpdate) => {
18
- const activeBefore = runner.getActiveTools();
19
- const result = await execute(toolCallId, params, signal, onUpdate);
20
- const activeAfter = runner.getActiveTools();
21
- if (!activeBefore.every((name) => activeAfter.includes(name)))
22
- return result;
23
- const beforeNames = new Set(activeBefore);
24
- const addedToolNames = activeAfter.filter((name) => !beforeNames.has(name));
25
- if (addedToolNames.length === 0)
26
- return result;
27
- return {
28
- ...result,
29
- addedToolNames: [...new Set([...(result.addedToolNames ?? []), ...addedToolNames])],
30
- };
31
- },
32
- };
13
+ return wrapToolDefinition(registeredTool.definition, () => runner.createContext());
33
14
  }
34
15
  /**
35
16
  * Wrap all registered tools into AgentTools.
@@ -5,8 +5,9 @@ export { AgentSession, type AgentSessionConfig, type AgentSessionEvent, type Age
5
5
  export { AgentSessionRuntime, type CreateAgentSessionRuntimeFactory, type CreateAgentSessionRuntimeResult, createAgentSessionRuntime, } from "./agent-session-runtime.ts";
6
6
  export { type AgentSessionRuntimeDiagnostic, type AgentSessionServices, type CreateAgentSessionFromServicesOptions, type CreateAgentSessionServicesOptions, createAgentSessionFromServices, createAgentSessionServices, } from "./agent-session-services.ts";
7
7
  export { type BashExecutorOptions, type BashResult, executeBashWithOperations } from "./bash-executor.ts";
8
+ export type { CacheWarmingDecision, CacheWarmingStatus } from "./cache-warmer.ts";
8
9
  export type { CompactionResult } from "./compaction/index.ts";
9
10
  export { createEventBus, type EventBus, type EventBusController } from "./event-bus.ts";
10
11
  export { areExperimentalFeaturesEnabled } from "./experimental.ts";
11
- export { type AgentEndEvent, type AgentSettledEvent, type AgentStartEvent, type AgentToolResult, type AgentToolUpdateCallback, type BeforeAgentStartEvent, type BeforeAgentStartEventResult, type BuildSystemPromptOptions, type ContextEvent, defineTool, discoverAndLoadExtensions, type ExecOptions, type ExecResult, type Extension, type ExtensionAPI, type ExtensionCommandContext, type ExtensionContext, type ExtensionError, type ExtensionEvent, type ExtensionFactory, type ExtensionFlag, type ExtensionHandler, ExtensionRunner, type ExtensionShortcut, type ExtensionUIContext, type InlineExtension, type LoadExtensionsResult, type MessageRenderer, type RegisteredCommand, type SessionBeforeCompactEvent, type SessionBeforeForkEvent, type SessionBeforeSwitchEvent, type SessionBeforeTreeEvent, type SessionCompactEvent, type SessionShutdownEvent, type SessionStartEvent, type SessionTreeEvent, type ToolCallEvent, type ToolCallEventResult, type ToolDefinition, type ToolRenderResultOptions, type ToolResultEvent, type TurnEndEvent, type TurnStartEvent, type WorkingIndicatorOptions, } from "./extensions/index.ts";
12
+ export { type AgentEndEvent, type AgentSettledEvent, type AgentStartEvent, type AgentToolResult, type AgentToolUpdateCallback, type BeforeAgentStartEvent, type BeforeAgentStartEventResult, type BuildSystemPromptOptions, type CacheWarmingDecisionEvent, type CacheWarmingDecisionEventResult, type ContextEvent, defineTool, discoverAndLoadExtensions, type ExecOptions, type ExecResult, type Extension, type ExtensionAPI, type ExtensionCommandContext, type ExtensionContext, type ExtensionError, type ExtensionEvent, type ExtensionFactory, type ExtensionFlag, type ExtensionHandler, ExtensionRunner, type ExtensionShortcut, type ExtensionUIContext, type InlineExtension, type LoadExtensionsResult, type MessageRenderer, type NormalizedBuildSystemPromptOptions, type RegisteredCommand, type SessionBeforeCompactEvent, type SessionBeforeForkEvent, type SessionBeforeSwitchEvent, type SessionBeforeTreeEvent, type SessionCompactEvent, type SessionShutdownEvent, type SessionStartEvent, type SessionTreeEvent, type ToolCallEvent, type ToolCallEventResult, type ToolDefinition, type ToolRenderResultOptions, type ToolResultEvent, type TurnEndEvent, type TurnStartEvent, type WorkingIndicatorOptions, } from "./extensions/index.ts";
12
13
  export { createSyntheticSourceInfo } from "./source-info.ts";
@@ -292,7 +292,7 @@ export declare const KEYBINDINGS: {
292
292
  };
293
293
  readonly "app.message.copy": {
294
294
  readonly defaultKeys: "ctrl+x";
295
- readonly description: "Copy message to clipboard";
295
+ readonly description: "Copy selection or last assistant message";
296
296
  };
297
297
  readonly "app.message.followUp": {
298
298
  readonly defaultKeys: "alt+enter";
@@ -43,7 +43,7 @@ export const KEYBINDINGS = {
43
43
  },
44
44
  "app.message.copy": {
45
45
  defaultKeys: "ctrl+x",
46
- description: "Copy message to clipboard",
46
+ description: "Copy selection or last assistant message",
47
47
  },
48
48
  "app.message.followUp": {
49
49
  defaultKeys: "alt+enter",
@@ -108,6 +108,7 @@ export function convertToLlm(messages) {
108
108
  ],
109
109
  timestamp: m.timestamp,
110
110
  };
111
+ case "system":
111
112
  case "user":
112
113
  case "assistant":
113
114
  case "toolResult":
@@ -29,6 +29,10 @@ declare const ModelDefinitionSchema: Type.TObject<{
29
29
  inputTokensAbove: Type.TNumber;
30
30
  }>>>;
31
31
  }>>;
32
+ promptCache: Type.TOptional<Type.TObject<{
33
+ short: Type.TOptional<Type.TNumber>;
34
+ long: Type.TOptional<Type.TNumber>;
35
+ }>>;
32
36
  contextWindow: Type.TOptional<Type.TNumber>;
33
37
  maxTokens: Type.TOptional<Type.TNumber>;
34
38
  headers: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
@@ -89,7 +93,6 @@ declare const ModelDefinitionSchema: Type.TObject<{
89
93
  supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
90
94
  supportsStrictMode: Type.TOptional<Type.TBoolean>;
91
95
  sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
92
- deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
93
96
  sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
94
97
  supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
95
98
  vllmPriority: Type.TOptional<Type.TNumber>;
@@ -99,8 +102,6 @@ declare const ModelDefinitionSchema: Type.TObject<{
99
102
  supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
100
103
  supportsStrictMode: Type.TOptional<Type.TBoolean>;
101
104
  supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
102
- supportsAdditionalTools: Type.TOptional<Type.TBoolean>;
103
- supportsToolSearch: Type.TOptional<Type.TBoolean>;
104
105
  supportsMaxOutputTokens: Type.TOptional<Type.TBoolean>;
105
106
  }>, Type.TObject<{
106
107
  supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
@@ -112,7 +113,23 @@ declare const ModelDefinitionSchema: Type.TObject<{
112
113
  allowEmptySignature: Type.TOptional<Type.TBoolean>;
113
114
  supportsStrictTools: Type.TOptional<Type.TBoolean>;
114
115
  supportsMidConvoEffort: Type.TOptional<Type.TBoolean>;
115
- supportsToolReferences: Type.TOptional<Type.TBoolean>;
116
+ allowedFallbackModels: Type.TOptional<Type.TArray<Type.TObject<{
117
+ provider: Type.TString;
118
+ model: Type.TString;
119
+ cost: Type.TObject<{
120
+ input: Type.TNumber;
121
+ output: Type.TNumber;
122
+ cacheRead: Type.TNumber;
123
+ cacheWrite: Type.TNumber;
124
+ tiers: Type.TOptional<Type.TArray<Type.TObject<{
125
+ input: Type.TNumber;
126
+ output: Type.TNumber;
127
+ cacheRead: Type.TNumber;
128
+ cacheWrite: Type.TNumber;
129
+ inputTokensAbove: Type.TNumber;
130
+ }>>>;
131
+ }>;
132
+ }>>>;
116
133
  }>]>>;
117
134
  }>;
118
135
  declare const ModelOverrideSchema: Type.TObject<{
@@ -141,6 +158,10 @@ declare const ModelOverrideSchema: Type.TObject<{
141
158
  inputTokensAbove: Type.TNumber;
142
159
  }>>>;
143
160
  }>>;
161
+ promptCache: Type.TOptional<Type.TObject<{
162
+ short: Type.TOptional<Type.TNumber>;
163
+ long: Type.TOptional<Type.TNumber>;
164
+ }>>;
144
165
  contextWindow: Type.TOptional<Type.TNumber>;
145
166
  maxTokens: Type.TOptional<Type.TNumber>;
146
167
  headers: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
@@ -201,7 +222,6 @@ declare const ModelOverrideSchema: Type.TObject<{
201
222
  supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
202
223
  supportsStrictMode: Type.TOptional<Type.TBoolean>;
203
224
  sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
204
- deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
205
225
  sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
206
226
  supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
207
227
  vllmPriority: Type.TOptional<Type.TNumber>;
@@ -211,8 +231,6 @@ declare const ModelOverrideSchema: Type.TObject<{
211
231
  supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
212
232
  supportsStrictMode: Type.TOptional<Type.TBoolean>;
213
233
  supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
214
- supportsAdditionalTools: Type.TOptional<Type.TBoolean>;
215
- supportsToolSearch: Type.TOptional<Type.TBoolean>;
216
234
  supportsMaxOutputTokens: Type.TOptional<Type.TBoolean>;
217
235
  }>, Type.TObject<{
218
236
  supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
@@ -224,7 +242,23 @@ declare const ModelOverrideSchema: Type.TObject<{
224
242
  allowEmptySignature: Type.TOptional<Type.TBoolean>;
225
243
  supportsStrictTools: Type.TOptional<Type.TBoolean>;
226
244
  supportsMidConvoEffort: Type.TOptional<Type.TBoolean>;
227
- supportsToolReferences: Type.TOptional<Type.TBoolean>;
245
+ allowedFallbackModels: Type.TOptional<Type.TArray<Type.TObject<{
246
+ provider: Type.TString;
247
+ model: Type.TString;
248
+ cost: Type.TObject<{
249
+ input: Type.TNumber;
250
+ output: Type.TNumber;
251
+ cacheRead: Type.TNumber;
252
+ cacheWrite: Type.TNumber;
253
+ tiers: Type.TOptional<Type.TArray<Type.TObject<{
254
+ input: Type.TNumber;
255
+ output: Type.TNumber;
256
+ cacheRead: Type.TNumber;
257
+ cacheWrite: Type.TNumber;
258
+ inputTokensAbove: Type.TNumber;
259
+ }>>>;
260
+ }>;
261
+ }>>>;
228
262
  }>]>>;
229
263
  }>;
230
264
  declare const ProviderConfigSchema: Type.TObject<{
@@ -291,7 +325,6 @@ declare const ProviderConfigSchema: Type.TObject<{
291
325
  supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
292
326
  supportsStrictMode: Type.TOptional<Type.TBoolean>;
293
327
  sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
294
- deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
295
328
  sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
296
329
  supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
297
330
  vllmPriority: Type.TOptional<Type.TNumber>;
@@ -301,8 +334,6 @@ declare const ProviderConfigSchema: Type.TObject<{
301
334
  supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
302
335
  supportsStrictMode: Type.TOptional<Type.TBoolean>;
303
336
  supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
304
- supportsAdditionalTools: Type.TOptional<Type.TBoolean>;
305
- supportsToolSearch: Type.TOptional<Type.TBoolean>;
306
337
  supportsMaxOutputTokens: Type.TOptional<Type.TBoolean>;
307
338
  }>, Type.TObject<{
308
339
  supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
@@ -314,7 +345,23 @@ declare const ProviderConfigSchema: Type.TObject<{
314
345
  allowEmptySignature: Type.TOptional<Type.TBoolean>;
315
346
  supportsStrictTools: Type.TOptional<Type.TBoolean>;
316
347
  supportsMidConvoEffort: Type.TOptional<Type.TBoolean>;
317
- supportsToolReferences: Type.TOptional<Type.TBoolean>;
348
+ allowedFallbackModels: Type.TOptional<Type.TArray<Type.TObject<{
349
+ provider: Type.TString;
350
+ model: Type.TString;
351
+ cost: Type.TObject<{
352
+ input: Type.TNumber;
353
+ output: Type.TNumber;
354
+ cacheRead: Type.TNumber;
355
+ cacheWrite: Type.TNumber;
356
+ tiers: Type.TOptional<Type.TArray<Type.TObject<{
357
+ input: Type.TNumber;
358
+ output: Type.TNumber;
359
+ cacheRead: Type.TNumber;
360
+ cacheWrite: Type.TNumber;
361
+ inputTokensAbove: Type.TNumber;
362
+ }>>>;
363
+ }>;
364
+ }>>>;
318
365
  }>]>>;
319
366
  authHeader: Type.TOptional<Type.TBoolean>;
320
367
  models: Type.TOptional<Type.TArray<Type.TObject<{
@@ -346,6 +393,10 @@ declare const ProviderConfigSchema: Type.TObject<{
346
393
  inputTokensAbove: Type.TNumber;
347
394
  }>>>;
348
395
  }>>;
396
+ promptCache: Type.TOptional<Type.TObject<{
397
+ short: Type.TOptional<Type.TNumber>;
398
+ long: Type.TOptional<Type.TNumber>;
399
+ }>>;
349
400
  contextWindow: Type.TOptional<Type.TNumber>;
350
401
  maxTokens: Type.TOptional<Type.TNumber>;
351
402
  headers: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
@@ -406,7 +457,6 @@ declare const ProviderConfigSchema: Type.TObject<{
406
457
  supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
407
458
  supportsStrictMode: Type.TOptional<Type.TBoolean>;
408
459
  sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
409
- deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
410
460
  sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
411
461
  supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
412
462
  vllmPriority: Type.TOptional<Type.TNumber>;
@@ -416,8 +466,6 @@ declare const ProviderConfigSchema: Type.TObject<{
416
466
  supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
417
467
  supportsStrictMode: Type.TOptional<Type.TBoolean>;
418
468
  supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
419
- supportsAdditionalTools: Type.TOptional<Type.TBoolean>;
420
- supportsToolSearch: Type.TOptional<Type.TBoolean>;
421
469
  supportsMaxOutputTokens: Type.TOptional<Type.TBoolean>;
422
470
  }>, Type.TObject<{
423
471
  supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
@@ -429,7 +477,23 @@ declare const ProviderConfigSchema: Type.TObject<{
429
477
  allowEmptySignature: Type.TOptional<Type.TBoolean>;
430
478
  supportsStrictTools: Type.TOptional<Type.TBoolean>;
431
479
  supportsMidConvoEffort: Type.TOptional<Type.TBoolean>;
432
- supportsToolReferences: Type.TOptional<Type.TBoolean>;
480
+ allowedFallbackModels: Type.TOptional<Type.TArray<Type.TObject<{
481
+ provider: Type.TString;
482
+ model: Type.TString;
483
+ cost: Type.TObject<{
484
+ input: Type.TNumber;
485
+ output: Type.TNumber;
486
+ cacheRead: Type.TNumber;
487
+ cacheWrite: Type.TNumber;
488
+ tiers: Type.TOptional<Type.TArray<Type.TObject<{
489
+ input: Type.TNumber;
490
+ output: Type.TNumber;
491
+ cacheRead: Type.TNumber;
492
+ cacheWrite: Type.TNumber;
493
+ inputTokensAbove: Type.TNumber;
494
+ }>>>;
495
+ }>;
496
+ }>>>;
433
497
  }>]>>;
434
498
  }>>>;
435
499
  modelOverrides: Type.TOptional<Type.TRecord<"^.*$", Type.TObject<{
@@ -458,6 +522,10 @@ declare const ProviderConfigSchema: Type.TObject<{
458
522
  inputTokensAbove: Type.TNumber;
459
523
  }>>>;
460
524
  }>>;
525
+ promptCache: Type.TOptional<Type.TObject<{
526
+ short: Type.TOptional<Type.TNumber>;
527
+ long: Type.TOptional<Type.TNumber>;
528
+ }>>;
461
529
  contextWindow: Type.TOptional<Type.TNumber>;
462
530
  maxTokens: Type.TOptional<Type.TNumber>;
463
531
  headers: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
@@ -518,7 +586,6 @@ declare const ProviderConfigSchema: Type.TObject<{
518
586
  supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
519
587
  supportsStrictMode: Type.TOptional<Type.TBoolean>;
520
588
  sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
521
- deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
522
589
  sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
523
590
  supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
524
591
  vllmPriority: Type.TOptional<Type.TNumber>;
@@ -528,8 +595,6 @@ declare const ProviderConfigSchema: Type.TObject<{
528
595
  supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
529
596
  supportsStrictMode: Type.TOptional<Type.TBoolean>;
530
597
  supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
531
- supportsAdditionalTools: Type.TOptional<Type.TBoolean>;
532
- supportsToolSearch: Type.TOptional<Type.TBoolean>;
533
598
  supportsMaxOutputTokens: Type.TOptional<Type.TBoolean>;
534
599
  }>, Type.TObject<{
535
600
  supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
@@ -541,7 +606,23 @@ declare const ProviderConfigSchema: Type.TObject<{
541
606
  allowEmptySignature: Type.TOptional<Type.TBoolean>;
542
607
  supportsStrictTools: Type.TOptional<Type.TBoolean>;
543
608
  supportsMidConvoEffort: Type.TOptional<Type.TBoolean>;
544
- supportsToolReferences: Type.TOptional<Type.TBoolean>;
609
+ allowedFallbackModels: Type.TOptional<Type.TArray<Type.TObject<{
610
+ provider: Type.TString;
611
+ model: Type.TString;
612
+ cost: Type.TObject<{
613
+ input: Type.TNumber;
614
+ output: Type.TNumber;
615
+ cacheRead: Type.TNumber;
616
+ cacheWrite: Type.TNumber;
617
+ tiers: Type.TOptional<Type.TArray<Type.TObject<{
618
+ input: Type.TNumber;
619
+ output: Type.TNumber;
620
+ cacheRead: Type.TNumber;
621
+ cacheWrite: Type.TNumber;
622
+ inputTokensAbove: Type.TNumber;
623
+ }>>>;
624
+ }>;
625
+ }>>>;
545
626
  }>]>>;
546
627
  }>>>;
547
628
  }>;