@oh-my-pi/pi-coding-agent 16.0.5 → 16.0.7

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 (223) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/dist/cli.js +1945 -1386
  3. package/dist/types/advisor/advise-tool.d.ts +22 -19
  4. package/dist/types/autoresearch/tools/init-experiment.d.ts +13 -17
  5. package/dist/types/autoresearch/tools/log-experiment.d.ts +17 -19
  6. package/dist/types/autoresearch/tools/run-experiment.d.ts +3 -4
  7. package/dist/types/autoresearch/tools/update-notes.d.ts +4 -5
  8. package/dist/types/cli/ttsr-cli.d.ts +39 -0
  9. package/dist/types/commands/ttsr.d.ts +57 -0
  10. package/dist/types/commit/agentic/tools/analyze-file.d.ts +4 -5
  11. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +4 -5
  12. package/dist/types/commit/agentic/tools/git-hunk.d.ts +5 -6
  13. package/dist/types/commit/agentic/tools/git-overview.d.ts +4 -5
  14. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +23 -24
  15. package/dist/types/commit/agentic/tools/propose-commit.d.ts +11 -32
  16. package/dist/types/commit/agentic/tools/recent-commits.d.ts +3 -4
  17. package/dist/types/commit/agentic/tools/schemas.d.ts +6 -27
  18. package/dist/types/commit/agentic/tools/split-commit.d.ts +28 -49
  19. package/dist/types/commit/changelog/generate.d.ts +12 -13
  20. package/dist/types/commit/shared-llm.d.ts +10 -37
  21. package/dist/types/config/config-file.d.ts +4 -4
  22. package/dist/types/config/keybindings.d.ts +5 -0
  23. package/dist/types/config/models-config-schema.d.ts +625 -990
  24. package/dist/types/config/models-config.d.ts +229 -217
  25. package/dist/types/config/settings-schema.d.ts +53 -23
  26. package/dist/types/edit/hashline/params.d.ts +7 -11
  27. package/dist/types/edit/index.d.ts +2 -1
  28. package/dist/types/edit/modes/apply-patch.d.ts +4 -5
  29. package/dist/types/edit/modes/patch.d.ts +15 -24
  30. package/dist/types/edit/modes/replace.d.ts +16 -17
  31. package/dist/types/eval/js/index.d.ts +1 -0
  32. package/dist/types/extensibility/custom-commands/types.d.ts +6 -3
  33. package/dist/types/extensibility/custom-tools/types.d.ts +8 -5
  34. package/dist/types/extensibility/extensions/types.d.ts +6 -3
  35. package/dist/types/extensibility/hooks/types.d.ts +7 -4
  36. package/dist/types/extensibility/legacy-pi-ai-shim.d.ts +13 -5
  37. package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +17 -0
  38. package/dist/types/extensibility/typebox.d.ts +80 -58
  39. package/dist/types/goals/tools/goal-tool.d.ts +11 -24
  40. package/dist/types/index.d.ts +2 -0
  41. package/dist/types/lsp/index.d.ts +11 -26
  42. package/dist/types/lsp/types.d.ts +12 -28
  43. package/dist/types/mcp/client.d.ts +8 -0
  44. package/dist/types/modes/components/btw-panel.d.ts +1 -0
  45. package/dist/types/modes/components/custom-editor.d.ts +3 -1
  46. package/dist/types/modes/controllers/btw-controller.d.ts +2 -0
  47. package/dist/types/modes/controllers/input-controller.d.ts +1 -0
  48. package/dist/types/modes/interactive-mode.d.ts +3 -0
  49. package/dist/types/modes/setup-wizard/index.d.ts +1 -0
  50. package/dist/types/modes/setup-wizard/startup-splash.d.ts +7 -0
  51. package/dist/types/modes/theme/theme.d.ts +1 -1
  52. package/dist/types/modes/types.d.ts +3 -0
  53. package/dist/types/sdk.d.ts +5 -0
  54. package/dist/types/session/agent-session.d.ts +4 -0
  55. package/dist/types/startup-splash.d.ts +12 -0
  56. package/dist/types/task/types.d.ts +47 -48
  57. package/dist/types/tools/ask.d.ts +26 -27
  58. package/dist/types/tools/ast-edit.d.ts +17 -17
  59. package/dist/types/tools/ast-grep.d.ts +12 -13
  60. package/dist/types/tools/bash.d.ts +20 -17
  61. package/dist/types/tools/browser.d.ts +46 -71
  62. package/dist/types/tools/checkpoint.d.ts +14 -15
  63. package/dist/types/tools/debug.d.ts +82 -145
  64. package/dist/types/tools/eval.d.ts +30 -40
  65. package/dist/types/tools/find.d.ts +17 -18
  66. package/dist/types/tools/gh.d.ts +49 -78
  67. package/dist/types/tools/image-gen.d.ts +20 -36
  68. package/dist/types/tools/inspect-image.d.ts +10 -11
  69. package/dist/types/tools/irc.d.ts +22 -33
  70. package/dist/types/tools/job.d.ts +11 -12
  71. package/dist/types/tools/learn.d.ts +21 -28
  72. package/dist/types/tools/manage-skill.d.ts +13 -22
  73. package/dist/types/tools/memory-edit.d.ts +15 -24
  74. package/dist/types/tools/memory-recall.d.ts +7 -8
  75. package/dist/types/tools/memory-reflect.d.ts +9 -10
  76. package/dist/types/tools/memory-retain.d.ts +13 -14
  77. package/dist/types/tools/read.d.ts +7 -8
  78. package/dist/types/tools/resolve.d.ts +11 -18
  79. package/dist/types/tools/review.d.ts +9 -15
  80. package/dist/types/tools/search-tool-bm25.d.ts +9 -10
  81. package/dist/types/tools/search.d.ts +16 -17
  82. package/dist/types/tools/ssh.d.ts +14 -15
  83. package/dist/types/tools/todo.d.ts +27 -43
  84. package/dist/types/tools/tts.d.ts +8 -9
  85. package/dist/types/tools/write.d.ts +9 -10
  86. package/dist/types/tui/index.d.ts +1 -0
  87. package/dist/types/tui/width-aware-text.d.ts +23 -0
  88. package/dist/types/utils/markit.d.ts +10 -1
  89. package/dist/types/web/search/index.d.ts +17 -28
  90. package/dist/types/web/search/providers/perplexity.d.ts +0 -2
  91. package/dist/types/web/search/types.d.ts +32 -26
  92. package/package.json +14 -13
  93. package/scripts/omp +1 -1
  94. package/src/advisor/__tests__/advisor.test.ts +44 -1
  95. package/src/advisor/advise-tool.ts +34 -11
  96. package/src/autoresearch/tools/init-experiment.ts +13 -16
  97. package/src/autoresearch/tools/log-experiment.ts +15 -18
  98. package/src/autoresearch/tools/run-experiment.ts +3 -3
  99. package/src/autoresearch/tools/update-notes.ts +4 -4
  100. package/src/cli/ttsr-cli.ts +995 -0
  101. package/src/cli-commands.ts +1 -0
  102. package/src/cli.ts +7 -1
  103. package/src/commands/ttsr.ts +125 -0
  104. package/src/commit/agentic/tools/analyze-file.ts +4 -4
  105. package/src/commit/agentic/tools/git-file-diff.ts +4 -4
  106. package/src/commit/agentic/tools/git-hunk.ts +7 -5
  107. package/src/commit/agentic/tools/git-overview.ts +4 -4
  108. package/src/commit/agentic/tools/propose-changelog.ts +18 -15
  109. package/src/commit/agentic/tools/propose-commit.ts +6 -6
  110. package/src/commit/agentic/tools/recent-commits.ts +3 -3
  111. package/src/commit/agentic/tools/schemas.ts +8 -20
  112. package/src/commit/agentic/tools/split-commit.ts +19 -23
  113. package/src/commit/analysis/summary.ts +7 -5
  114. package/src/commit/changelog/generate.ts +15 -11
  115. package/src/commit/shared-llm.ts +17 -24
  116. package/src/config/config-file.ts +13 -15
  117. package/src/config/keybindings.ts +6 -0
  118. package/src/config/models-config-schema.ts +206 -179
  119. package/src/config/settings-schema.ts +34 -0
  120. package/src/discovery/builtin-rules/index.ts +2 -0
  121. package/src/discovery/builtin-rules/ts-import-type.md +2 -2
  122. package/src/discovery/builtin-rules/ts-no-any.md +11 -2
  123. package/src/discovery/builtin-rules/ts-no-inline-cast-access.md +55 -0
  124. package/src/edit/hashline/params.ts +12 -11
  125. package/src/edit/index.ts +5 -4
  126. package/src/edit/modes/apply-patch.ts +4 -4
  127. package/src/edit/modes/patch.ts +15 -18
  128. package/src/edit/modes/replace.ts +13 -17
  129. package/src/edit/renderer.ts +0 -1
  130. package/src/eval/agent-bridge.ts +11 -13
  131. package/src/eval/completion-bridge.ts +25 -17
  132. package/src/eval/js/context-manager.ts +17 -2
  133. package/src/eval/js/index.ts +1 -1
  134. package/src/eval/py/executor.ts +2 -2
  135. package/src/extensibility/custom-commands/loader.ts +5 -3
  136. package/src/extensibility/custom-commands/types.ts +6 -3
  137. package/src/extensibility/custom-tools/loader.ts +4 -2
  138. package/src/extensibility/custom-tools/types.ts +8 -5
  139. package/src/extensibility/extensions/loader.ts +4 -2
  140. package/src/extensibility/extensions/types.ts +6 -3
  141. package/src/extensibility/hooks/loader.ts +5 -2
  142. package/src/extensibility/hooks/types.ts +7 -4
  143. package/src/extensibility/legacy-pi-ai-shim.ts +42 -5
  144. package/src/extensibility/legacy-pi-coding-agent-shim.ts +113 -0
  145. package/src/extensibility/plugins/legacy-pi-compat.ts +13 -13
  146. package/src/extensibility/tool-proxy.ts +4 -1
  147. package/src/extensibility/typebox.ts +778 -251
  148. package/src/goals/guided-setup.ts +12 -3
  149. package/src/goals/tools/goal-tool.ts +6 -6
  150. package/src/index.ts +2 -0
  151. package/src/internal-urls/docs-index.generated.ts +11 -9
  152. package/src/lsp/types.ts +13 -27
  153. package/src/main.ts +19 -18
  154. package/src/mcp/client.ts +38 -13
  155. package/src/mcp/render.ts +102 -89
  156. package/src/modes/components/agent-hub.ts +11 -4
  157. package/src/modes/components/btw-panel.ts +5 -1
  158. package/src/modes/components/custom-editor.ts +18 -0
  159. package/src/modes/components/status-line/component.ts +8 -1
  160. package/src/modes/components/tool-execution.ts +17 -10
  161. package/src/modes/controllers/btw-controller.ts +69 -1
  162. package/src/modes/controllers/input-controller.ts +29 -0
  163. package/src/modes/interactive-mode.ts +38 -8
  164. package/src/modes/setup-wizard/index.ts +1 -0
  165. package/src/modes/setup-wizard/scenes/sign-in.ts +77 -5
  166. package/src/modes/setup-wizard/startup-splash.ts +107 -0
  167. package/src/modes/theme/theme.ts +133 -143
  168. package/src/modes/types.ts +3 -0
  169. package/src/modes/utils/context-usage.ts +9 -5
  170. package/src/modes/utils/hotkeys-markdown.ts +1 -0
  171. package/src/prompts/system/system-prompt.md +1 -0
  172. package/src/sdk.ts +21 -4
  173. package/src/session/agent-session.ts +173 -33
  174. package/src/session/session-history-format.ts +11 -2
  175. package/src/session/snapcompact-inline.ts +1 -1
  176. package/src/slash-commands/builtin-registry.ts +3 -10
  177. package/src/startup-splash.ts +19 -0
  178. package/src/task/executor.ts +11 -6
  179. package/src/task/types.ts +44 -41
  180. package/src/tool-discovery/tool-index.ts +17 -4
  181. package/src/tools/ask.ts +14 -14
  182. package/src/tools/ast-edit.ts +17 -14
  183. package/src/tools/ast-grep.ts +10 -9
  184. package/src/tools/bash.ts +15 -10
  185. package/src/tools/browser/launch.ts +13 -0
  186. package/src/tools/browser.ts +26 -32
  187. package/src/tools/checkpoint.ts +7 -7
  188. package/src/tools/debug.ts +72 -69
  189. package/src/tools/eval.ts +18 -19
  190. package/src/tools/find.ts +20 -13
  191. package/src/tools/gh.ts +29 -49
  192. package/src/tools/image-gen.ts +27 -32
  193. package/src/tools/inspect-image.ts +8 -9
  194. package/src/tools/irc.ts +12 -12
  195. package/src/tools/job.ts +6 -6
  196. package/src/tools/learn.ts +11 -14
  197. package/src/tools/manage-skill.ts +19 -23
  198. package/src/tools/memory-edit.ts +8 -8
  199. package/src/tools/memory-recall.ts +4 -4
  200. package/src/tools/memory-reflect.ts +5 -5
  201. package/src/tools/memory-retain.ts +9 -11
  202. package/src/tools/puppeteer/02_stealth_hairline.txt +1 -1
  203. package/src/tools/puppeteer/04_stealth_iframe.txt +4 -4
  204. package/src/tools/puppeteer/05_stealth_webgl.txt +1 -1
  205. package/src/tools/puppeteer/10_stealth_plugins.txt +6 -4
  206. package/src/tools/puppeteer/12_stealth_codecs.txt +2 -2
  207. package/src/tools/puppeteer/13_stealth_worker.txt +1 -1
  208. package/src/tools/read.ts +169 -13
  209. package/src/tools/report-tool-issue.ts +6 -6
  210. package/src/tools/resolve.ts +6 -6
  211. package/src/tools/review.ts +10 -12
  212. package/src/tools/search-tool-bm25.ts +5 -5
  213. package/src/tools/search.ts +20 -29
  214. package/src/tools/ssh.ts +8 -8
  215. package/src/tools/todo.ts +16 -19
  216. package/src/tools/tts.ts +16 -15
  217. package/src/tools/write.ts +5 -5
  218. package/src/tui/index.ts +1 -0
  219. package/src/tui/width-aware-text.ts +58 -0
  220. package/src/utils/markit.ts +17 -2
  221. package/src/web/search/index.ts +9 -9
  222. package/src/web/search/providers/perplexity.ts +373 -126
  223. package/src/web/search/types.ts +28 -48
@@ -27,142 +27,14 @@ export interface ProviderValidationConfig {
27
27
  }
28
28
  export declare function validateProviderConfiguration(providerName: string, config: ProviderValidationConfig, mode: ProviderValidationMode): void;
29
29
  export declare const ModelsConfigFile: ConfigFile<{
30
- providers?: Record<string, {
31
- baseUrl?: string | undefined;
32
- apiKey?: string | undefined;
33
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
34
- headers?: Record<string, string> | undefined;
35
- compat?: {
36
- supportsStore?: boolean | undefined;
37
- supportsDeveloperRole?: boolean | undefined;
38
- supportsMultipleSystemMessages?: boolean | undefined;
39
- supportsReasoningEffort?: boolean | undefined;
40
- reasoningEffortMap?: {
41
- minimal?: string | undefined;
42
- low?: string | undefined;
43
- medium?: string | undefined;
44
- high?: string | undefined;
45
- xhigh?: string | undefined;
46
- } | undefined;
47
- maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
48
- supportsUsageInStreaming?: boolean | undefined;
49
- requiresToolResultName?: boolean | undefined;
50
- requiresMistralToolIds?: boolean | undefined;
51
- requiresAssistantAfterToolResult?: boolean | undefined;
52
- requiresThinkingAsText?: boolean | undefined;
53
- reasoningContentField?: "reasoning" | "reasoning_content" | "reasoning_text" | undefined;
54
- requiresReasoningContentForToolCalls?: boolean | undefined;
55
- allowsSyntheticReasoningContentForToolCalls?: boolean | undefined;
56
- requiresAssistantContentForToolCalls?: boolean | undefined;
57
- supportsToolChoice?: boolean | undefined;
58
- supportsForcedToolChoice?: boolean | undefined;
59
- disableReasoningOnForcedToolChoice?: boolean | undefined;
60
- disableReasoningOnToolChoice?: boolean | undefined;
61
- thinkingFormat?: "openai" | "openrouter" | "qwen" | "qwen-chat-template" | "zai" | undefined;
62
- openRouterRouting?: {
63
- only?: string[] | undefined;
64
- order?: string[] | undefined;
65
- } | undefined;
66
- vercelGatewayRouting?: {
67
- only?: string[] | undefined;
68
- order?: string[] | undefined;
69
- } | undefined;
70
- extraBody?: Record<string, unknown> | undefined;
71
- cacheControlFormat?: "anthropic" | undefined;
72
- supportsStrictMode?: boolean | undefined;
73
- toolStrictMode?: "all_strict" | "none" | undefined;
74
- streamIdleTimeoutMs?: number | undefined;
75
- supportsLongPromptCacheRetention?: boolean | undefined;
76
- supportsReasoningParams?: boolean | undefined;
77
- alwaysSendMaxTokens?: boolean | undefined;
78
- strictResponsesPairing?: boolean | undefined;
79
- requiresToolResultId?: boolean | undefined;
80
- replayUnsignedThinking?: boolean | undefined;
81
- whenThinking?: {
82
- supportsStore?: boolean | undefined;
83
- supportsDeveloperRole?: boolean | undefined;
84
- supportsMultipleSystemMessages?: boolean | undefined;
85
- supportsReasoningEffort?: boolean | undefined;
86
- reasoningEffortMap?: {
87
- minimal?: string | undefined;
88
- low?: string | undefined;
89
- medium?: string | undefined;
90
- high?: string | undefined;
91
- xhigh?: string | undefined;
92
- } | undefined;
93
- maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
94
- supportsUsageInStreaming?: boolean | undefined;
95
- requiresToolResultName?: boolean | undefined;
96
- requiresMistralToolIds?: boolean | undefined;
97
- requiresAssistantAfterToolResult?: boolean | undefined;
98
- requiresThinkingAsText?: boolean | undefined;
99
- reasoningContentField?: "reasoning" | "reasoning_content" | "reasoning_text" | undefined;
100
- requiresReasoningContentForToolCalls?: boolean | undefined;
101
- allowsSyntheticReasoningContentForToolCalls?: boolean | undefined;
102
- requiresAssistantContentForToolCalls?: boolean | undefined;
103
- supportsToolChoice?: boolean | undefined;
104
- supportsForcedToolChoice?: boolean | undefined;
105
- disableReasoningOnForcedToolChoice?: boolean | undefined;
106
- disableReasoningOnToolChoice?: boolean | undefined;
107
- thinkingFormat?: "openai" | "openrouter" | "qwen" | "qwen-chat-template" | "zai" | undefined;
108
- openRouterRouting?: {
109
- only?: string[] | undefined;
110
- order?: string[] | undefined;
111
- } | undefined;
112
- vercelGatewayRouting?: {
113
- only?: string[] | undefined;
114
- order?: string[] | undefined;
115
- } | undefined;
116
- extraBody?: Record<string, unknown> | undefined;
117
- cacheControlFormat?: "anthropic" | undefined;
118
- supportsStrictMode?: boolean | undefined;
119
- toolStrictMode?: "all_strict" | "none" | undefined;
120
- streamIdleTimeoutMs?: number | undefined;
121
- supportsLongPromptCacheRetention?: boolean | undefined;
122
- supportsReasoningParams?: boolean | undefined;
123
- alwaysSendMaxTokens?: boolean | undefined;
124
- strictResponsesPairing?: boolean | undefined;
125
- requiresToolResultId?: boolean | undefined;
126
- replayUnsignedThinking?: boolean | undefined;
127
- } | undefined;
128
- } | undefined;
129
- authHeader?: boolean | undefined;
130
- auth?: "apiKey" | "none" | "oauth" | undefined;
131
- discovery?: {
132
- type: "llama.cpp" | "lm-studio" | "ollama" | "openai-models-list" | "proxy";
133
- } | undefined;
134
- models?: {
135
- id: string;
136
- name?: string | undefined;
137
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
30
+ providers?: {
31
+ [x: string]: {
138
32
  baseUrl?: string | undefined;
139
- reasoning?: boolean | undefined;
140
- thinking?: {
141
- mode: "anthropic-adaptive" | "anthropic-budget-effort" | "budget" | "effort" | "google-level";
142
- efforts: ("high" | "low" | "medium" | "minimal" | "xhigh")[];
143
- defaultLevel?: "high" | "low" | "medium" | "minimal" | "xhigh" | undefined;
144
- effortMap?: {
145
- minimal?: string | undefined;
146
- low?: string | undefined;
147
- medium?: string | undefined;
148
- high?: string | undefined;
149
- xhigh?: string | undefined;
150
- } | undefined;
151
- supportsDisplay?: boolean | undefined;
152
- } | undefined;
153
- input?: ("image" | "text")[] | undefined;
154
- supportsTools?: boolean | undefined;
155
- cost?: {
156
- input: number;
157
- output: number;
158
- cacheRead: number;
159
- cacheWrite: number;
33
+ apiKey?: string | undefined;
34
+ api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
35
+ headers?: {
36
+ [x: string]: string;
160
37
  } | undefined;
161
- premiumMultiplier?: number | undefined;
162
- contextWindow?: number | undefined;
163
- maxTokens?: number | undefined;
164
- omitMaxOutputTokens?: boolean | undefined;
165
- headers?: Record<string, string> | undefined;
166
38
  compat?: {
167
39
  supportsStore?: boolean | undefined;
168
40
  supportsDeveloperRole?: boolean | undefined;
@@ -198,7 +70,9 @@ export declare const ModelsConfigFile: ConfigFile<{
198
70
  only?: string[] | undefined;
199
71
  order?: string[] | undefined;
200
72
  } | undefined;
201
- extraBody?: Record<string, unknown> | undefined;
73
+ extraBody?: {
74
+ [x: string]: unknown;
75
+ } | undefined;
202
76
  cacheControlFormat?: "anthropic" | undefined;
203
77
  supportsStrictMode?: boolean | undefined;
204
78
  toolStrictMode?: "all_strict" | "none" | undefined;
@@ -244,7 +118,9 @@ export declare const ModelsConfigFile: ConfigFile<{
244
118
  only?: string[] | undefined;
245
119
  order?: string[] | undefined;
246
120
  } | undefined;
247
- extraBody?: Record<string, unknown> | undefined;
121
+ extraBody?: {
122
+ [x: string]: unknown;
123
+ } | undefined;
248
124
  cacheControlFormat?: "anthropic" | undefined;
249
125
  supportsStrictMode?: boolean | undefined;
250
126
  toolStrictMode?: "all_strict" | "none" | undefined;
@@ -257,84 +133,40 @@ export declare const ModelsConfigFile: ConfigFile<{
257
133
  replayUnsignedThinking?: boolean | undefined;
258
134
  } | undefined;
259
135
  } | undefined;
260
- contextPromotionTarget?: string | undefined;
261
- }[] | undefined;
262
- modelOverrides?: Record<string, {
263
- name?: string | undefined;
264
- reasoning?: boolean | undefined;
265
- thinking?: {
266
- mode: "anthropic-adaptive" | "anthropic-budget-effort" | "budget" | "effort" | "google-level";
267
- efforts: ("high" | "low" | "medium" | "minimal" | "xhigh")[];
268
- defaultLevel?: "high" | "low" | "medium" | "minimal" | "xhigh" | undefined;
269
- effortMap?: {
270
- minimal?: string | undefined;
271
- low?: string | undefined;
272
- medium?: string | undefined;
273
- high?: string | undefined;
274
- xhigh?: string | undefined;
275
- } | undefined;
276
- supportsDisplay?: boolean | undefined;
277
- } | undefined;
278
- input?: ("image" | "text")[] | undefined;
279
- supportsTools?: boolean | undefined;
280
- cost?: {
281
- input?: number | undefined;
282
- output?: number | undefined;
283
- cacheRead?: number | undefined;
284
- cacheWrite?: number | undefined;
136
+ authHeader?: boolean | undefined;
137
+ auth?: "apiKey" | "none" | "oauth" | undefined;
138
+ discovery?: {
139
+ type: "llama.cpp" | "lm-studio" | "ollama" | "openai-models-list" | "proxy";
285
140
  } | undefined;
286
- premiumMultiplier?: number | undefined;
287
- contextWindow?: number | undefined;
288
- maxTokens?: number | undefined;
289
- omitMaxOutputTokens?: boolean | undefined;
290
- headers?: Record<string, string> | undefined;
291
- compat?: {
292
- supportsStore?: boolean | undefined;
293
- supportsDeveloperRole?: boolean | undefined;
294
- supportsMultipleSystemMessages?: boolean | undefined;
295
- supportsReasoningEffort?: boolean | undefined;
296
- reasoningEffortMap?: {
297
- minimal?: string | undefined;
298
- low?: string | undefined;
299
- medium?: string | undefined;
300
- high?: string | undefined;
301
- xhigh?: string | undefined;
141
+ models?: {
142
+ id: string;
143
+ name?: string | undefined;
144
+ api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
145
+ baseUrl?: string | undefined;
146
+ reasoning?: boolean | undefined;
147
+ thinking?: {
148
+ mode: any;
149
+ efforts: any;
150
+ defaultLevel?: any;
151
+ effortMap?: any;
152
+ supportsDisplay?: any;
302
153
  } | undefined;
303
- maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
304
- supportsUsageInStreaming?: boolean | undefined;
305
- requiresToolResultName?: boolean | undefined;
306
- requiresMistralToolIds?: boolean | undefined;
307
- requiresAssistantAfterToolResult?: boolean | undefined;
308
- requiresThinkingAsText?: boolean | undefined;
309
- reasoningContentField?: "reasoning" | "reasoning_content" | "reasoning_text" | undefined;
310
- requiresReasoningContentForToolCalls?: boolean | undefined;
311
- allowsSyntheticReasoningContentForToolCalls?: boolean | undefined;
312
- requiresAssistantContentForToolCalls?: boolean | undefined;
313
- supportsToolChoice?: boolean | undefined;
314
- supportsForcedToolChoice?: boolean | undefined;
315
- disableReasoningOnForcedToolChoice?: boolean | undefined;
316
- disableReasoningOnToolChoice?: boolean | undefined;
317
- thinkingFormat?: "openai" | "openrouter" | "qwen" | "qwen-chat-template" | "zai" | undefined;
318
- openRouterRouting?: {
319
- only?: string[] | undefined;
320
- order?: string[] | undefined;
154
+ input?: ("image" | "text")[] | undefined;
155
+ supportsTools?: boolean | undefined;
156
+ cost?: {
157
+ input: number;
158
+ output: number;
159
+ cacheRead: number;
160
+ cacheWrite: number;
321
161
  } | undefined;
322
- vercelGatewayRouting?: {
323
- only?: string[] | undefined;
324
- order?: string[] | undefined;
162
+ premiumMultiplier?: number | undefined;
163
+ contextWindow?: number | undefined;
164
+ maxTokens?: number | undefined;
165
+ omitMaxOutputTokens?: boolean | undefined;
166
+ headers?: {
167
+ [x: string]: string;
325
168
  } | undefined;
326
- extraBody?: Record<string, unknown> | undefined;
327
- cacheControlFormat?: "anthropic" | undefined;
328
- supportsStrictMode?: boolean | undefined;
329
- toolStrictMode?: "all_strict" | "none" | undefined;
330
- streamIdleTimeoutMs?: number | undefined;
331
- supportsLongPromptCacheRetention?: boolean | undefined;
332
- supportsReasoningParams?: boolean | undefined;
333
- alwaysSendMaxTokens?: boolean | undefined;
334
- strictResponsesPairing?: boolean | undefined;
335
- requiresToolResultId?: boolean | undefined;
336
- replayUnsignedThinking?: boolean | undefined;
337
- whenThinking?: {
169
+ compat?: {
338
170
  supportsStore?: boolean | undefined;
339
171
  supportsDeveloperRole?: boolean | undefined;
340
172
  supportsMultipleSystemMessages?: boolean | undefined;
@@ -369,7 +201,9 @@ export declare const ModelsConfigFile: ConfigFile<{
369
201
  only?: string[] | undefined;
370
202
  order?: string[] | undefined;
371
203
  } | undefined;
372
- extraBody?: Record<string, unknown> | undefined;
204
+ extraBody?: {
205
+ [x: string]: unknown;
206
+ } | undefined;
373
207
  cacheControlFormat?: "anthropic" | undefined;
374
208
  supportsStrictMode?: boolean | undefined;
375
209
  toolStrictMode?: "all_strict" | "none" | undefined;
@@ -380,15 +214,193 @@ export declare const ModelsConfigFile: ConfigFile<{
380
214
  strictResponsesPairing?: boolean | undefined;
381
215
  requiresToolResultId?: boolean | undefined;
382
216
  replayUnsignedThinking?: boolean | undefined;
217
+ whenThinking?: {
218
+ supportsStore?: boolean | undefined;
219
+ supportsDeveloperRole?: boolean | undefined;
220
+ supportsMultipleSystemMessages?: boolean | undefined;
221
+ supportsReasoningEffort?: boolean | undefined;
222
+ reasoningEffortMap?: {
223
+ minimal?: string | undefined;
224
+ low?: string | undefined;
225
+ medium?: string | undefined;
226
+ high?: string | undefined;
227
+ xhigh?: string | undefined;
228
+ } | undefined;
229
+ maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
230
+ supportsUsageInStreaming?: boolean | undefined;
231
+ requiresToolResultName?: boolean | undefined;
232
+ requiresMistralToolIds?: boolean | undefined;
233
+ requiresAssistantAfterToolResult?: boolean | undefined;
234
+ requiresThinkingAsText?: boolean | undefined;
235
+ reasoningContentField?: "reasoning" | "reasoning_content" | "reasoning_text" | undefined;
236
+ requiresReasoningContentForToolCalls?: boolean | undefined;
237
+ allowsSyntheticReasoningContentForToolCalls?: boolean | undefined;
238
+ requiresAssistantContentForToolCalls?: boolean | undefined;
239
+ supportsToolChoice?: boolean | undefined;
240
+ supportsForcedToolChoice?: boolean | undefined;
241
+ disableReasoningOnForcedToolChoice?: boolean | undefined;
242
+ disableReasoningOnToolChoice?: boolean | undefined;
243
+ thinkingFormat?: "openai" | "openrouter" | "qwen" | "qwen-chat-template" | "zai" | undefined;
244
+ openRouterRouting?: {
245
+ only?: string[] | undefined;
246
+ order?: string[] | undefined;
247
+ } | undefined;
248
+ vercelGatewayRouting?: {
249
+ only?: string[] | undefined;
250
+ order?: string[] | undefined;
251
+ } | undefined;
252
+ extraBody?: {
253
+ [x: string]: unknown;
254
+ } | undefined;
255
+ cacheControlFormat?: "anthropic" | undefined;
256
+ supportsStrictMode?: boolean | undefined;
257
+ toolStrictMode?: "all_strict" | "none" | undefined;
258
+ streamIdleTimeoutMs?: number | undefined;
259
+ supportsLongPromptCacheRetention?: boolean | undefined;
260
+ supportsReasoningParams?: boolean | undefined;
261
+ alwaysSendMaxTokens?: boolean | undefined;
262
+ strictResponsesPairing?: boolean | undefined;
263
+ requiresToolResultId?: boolean | undefined;
264
+ replayUnsignedThinking?: boolean | undefined;
265
+ } | undefined;
383
266
  } | undefined;
267
+ contextPromotionTarget?: string | undefined;
268
+ }[] | undefined;
269
+ modelOverrides?: {
270
+ [x: string]: {
271
+ name?: string | undefined;
272
+ reasoning?: boolean | undefined;
273
+ thinking?: {
274
+ mode: any;
275
+ efforts: any;
276
+ defaultLevel?: any;
277
+ effortMap?: any;
278
+ supportsDisplay?: any;
279
+ } | undefined;
280
+ input?: ("image" | "text")[] | undefined;
281
+ supportsTools?: boolean | undefined;
282
+ cost?: {
283
+ input?: number | undefined;
284
+ output?: number | undefined;
285
+ cacheRead?: number | undefined;
286
+ cacheWrite?: number | undefined;
287
+ } | undefined;
288
+ premiumMultiplier?: number | undefined;
289
+ contextWindow?: number | undefined;
290
+ maxTokens?: number | undefined;
291
+ omitMaxOutputTokens?: boolean | undefined;
292
+ headers?: {
293
+ [x: string]: string;
294
+ } | undefined;
295
+ compat?: {
296
+ supportsStore?: boolean | undefined;
297
+ supportsDeveloperRole?: boolean | undefined;
298
+ supportsMultipleSystemMessages?: boolean | undefined;
299
+ supportsReasoningEffort?: boolean | undefined;
300
+ reasoningEffortMap?: {
301
+ minimal?: string | undefined;
302
+ low?: string | undefined;
303
+ medium?: string | undefined;
304
+ high?: string | undefined;
305
+ xhigh?: string | undefined;
306
+ } | undefined;
307
+ maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
308
+ supportsUsageInStreaming?: boolean | undefined;
309
+ requiresToolResultName?: boolean | undefined;
310
+ requiresMistralToolIds?: boolean | undefined;
311
+ requiresAssistantAfterToolResult?: boolean | undefined;
312
+ requiresThinkingAsText?: boolean | undefined;
313
+ reasoningContentField?: "reasoning" | "reasoning_content" | "reasoning_text" | undefined;
314
+ requiresReasoningContentForToolCalls?: boolean | undefined;
315
+ allowsSyntheticReasoningContentForToolCalls?: boolean | undefined;
316
+ requiresAssistantContentForToolCalls?: boolean | undefined;
317
+ supportsToolChoice?: boolean | undefined;
318
+ supportsForcedToolChoice?: boolean | undefined;
319
+ disableReasoningOnForcedToolChoice?: boolean | undefined;
320
+ disableReasoningOnToolChoice?: boolean | undefined;
321
+ thinkingFormat?: "openai" | "openrouter" | "qwen" | "qwen-chat-template" | "zai" | undefined;
322
+ openRouterRouting?: {
323
+ only?: string[] | undefined;
324
+ order?: string[] | undefined;
325
+ } | undefined;
326
+ vercelGatewayRouting?: {
327
+ only?: string[] | undefined;
328
+ order?: string[] | undefined;
329
+ } | undefined;
330
+ extraBody?: {
331
+ [x: string]: unknown;
332
+ } | undefined;
333
+ cacheControlFormat?: "anthropic" | undefined;
334
+ supportsStrictMode?: boolean | undefined;
335
+ toolStrictMode?: "all_strict" | "none" | undefined;
336
+ streamIdleTimeoutMs?: number | undefined;
337
+ supportsLongPromptCacheRetention?: boolean | undefined;
338
+ supportsReasoningParams?: boolean | undefined;
339
+ alwaysSendMaxTokens?: boolean | undefined;
340
+ strictResponsesPairing?: boolean | undefined;
341
+ requiresToolResultId?: boolean | undefined;
342
+ replayUnsignedThinking?: boolean | undefined;
343
+ whenThinking?: {
344
+ supportsStore?: boolean | undefined;
345
+ supportsDeveloperRole?: boolean | undefined;
346
+ supportsMultipleSystemMessages?: boolean | undefined;
347
+ supportsReasoningEffort?: boolean | undefined;
348
+ reasoningEffortMap?: {
349
+ minimal?: string | undefined;
350
+ low?: string | undefined;
351
+ medium?: string | undefined;
352
+ high?: string | undefined;
353
+ xhigh?: string | undefined;
354
+ } | undefined;
355
+ maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
356
+ supportsUsageInStreaming?: boolean | undefined;
357
+ requiresToolResultName?: boolean | undefined;
358
+ requiresMistralToolIds?: boolean | undefined;
359
+ requiresAssistantAfterToolResult?: boolean | undefined;
360
+ requiresThinkingAsText?: boolean | undefined;
361
+ reasoningContentField?: "reasoning" | "reasoning_content" | "reasoning_text" | undefined;
362
+ requiresReasoningContentForToolCalls?: boolean | undefined;
363
+ allowsSyntheticReasoningContentForToolCalls?: boolean | undefined;
364
+ requiresAssistantContentForToolCalls?: boolean | undefined;
365
+ supportsToolChoice?: boolean | undefined;
366
+ supportsForcedToolChoice?: boolean | undefined;
367
+ disableReasoningOnForcedToolChoice?: boolean | undefined;
368
+ disableReasoningOnToolChoice?: boolean | undefined;
369
+ thinkingFormat?: "openai" | "openrouter" | "qwen" | "qwen-chat-template" | "zai" | undefined;
370
+ openRouterRouting?: {
371
+ only?: string[] | undefined;
372
+ order?: string[] | undefined;
373
+ } | undefined;
374
+ vercelGatewayRouting?: {
375
+ only?: string[] | undefined;
376
+ order?: string[] | undefined;
377
+ } | undefined;
378
+ extraBody?: {
379
+ [x: string]: unknown;
380
+ } | undefined;
381
+ cacheControlFormat?: "anthropic" | undefined;
382
+ supportsStrictMode?: boolean | undefined;
383
+ toolStrictMode?: "all_strict" | "none" | undefined;
384
+ streamIdleTimeoutMs?: number | undefined;
385
+ supportsLongPromptCacheRetention?: boolean | undefined;
386
+ supportsReasoningParams?: boolean | undefined;
387
+ alwaysSendMaxTokens?: boolean | undefined;
388
+ strictResponsesPairing?: boolean | undefined;
389
+ requiresToolResultId?: boolean | undefined;
390
+ replayUnsignedThinking?: boolean | undefined;
391
+ } | undefined;
392
+ } | undefined;
393
+ contextPromotionTarget?: string | undefined;
394
+ };
384
395
  } | undefined;
385
- contextPromotionTarget?: string | undefined;
386
- }> | undefined;
387
- disableStrictTools?: boolean | undefined;
388
- transport?: "pi-native" | undefined;
389
- }> | undefined;
396
+ disableStrictTools?: boolean | undefined;
397
+ transport?: "pi-native" | undefined;
398
+ };
399
+ } | undefined;
390
400
  equivalence?: {
391
- overrides?: Record<string, string> | undefined;
401
+ overrides?: {
402
+ [x: string]: string;
403
+ } | undefined;
392
404
  exclude?: string[] | undefined;
393
405
  } | undefined;
394
406
  }>;
@@ -855,6 +855,26 @@ export declare const SETTINGS_SCHEMA: {
855
855
  readonly description: "Hide thinking blocks in assistant responses";
856
856
  };
857
857
  };
858
+ readonly "model.loopGuard.enabled": {
859
+ readonly type: "boolean";
860
+ readonly default: true;
861
+ readonly ui: {
862
+ readonly tab: "model";
863
+ readonly group: "Thinking";
864
+ readonly label: "Loop Guard";
865
+ readonly description: "Enable automatic stream loop detection for Gemini and DeepSeek models";
866
+ };
867
+ };
868
+ readonly "model.loopGuard.checkAssistantContent": {
869
+ readonly type: "boolean";
870
+ readonly default: true;
871
+ readonly ui: {
872
+ readonly tab: "model";
873
+ readonly group: "Thinking";
874
+ readonly label: "Loop Guard Scan Prose";
875
+ readonly description: "Apply loop guard to assistant prose messages in addition to thinking logs";
876
+ };
877
+ };
858
878
  readonly repeatToolDescriptions: {
859
879
  readonly type: "boolean";
860
880
  readonly default: false;
@@ -1397,6 +1417,16 @@ export declare const SETTINGS_SCHEMA: {
1397
1417
  readonly description: "Skip welcome screen and startup status messages";
1398
1418
  };
1399
1419
  };
1420
+ readonly "startup.showSplash": {
1421
+ readonly type: "boolean";
1422
+ readonly default: false;
1423
+ readonly ui: {
1424
+ readonly tab: "interaction";
1425
+ readonly group: "Startup & Updates";
1426
+ readonly label: "Show Startup Splash";
1427
+ readonly description: "Show the full animated setup splash on normal interactive startup without rerunning setup. Quiet Startup still suppresses it.";
1428
+ };
1429
+ };
1400
1430
  readonly "startup.setupWizard": {
1401
1431
  readonly type: "boolean";
1402
1432
  readonly default: true;
@@ -4117,7 +4147,7 @@ export declare const SETTINGS_SCHEMA: {
4117
4147
  };
4118
4148
  readonly "providers.webSearch": {
4119
4149
  readonly type: "enum";
4120
- readonly values: readonly ["auto", "tavily", "perplexity", "brave", "jina", "kimi", "anthropic", "gemini", "codex", "zai", "exa", "parallel", "kagi", "synthetic", "searxng"];
4150
+ readonly values: readonly ["auto", ...SearchProviderId[]];
4121
4151
  readonly default: "auto";
4122
4152
  readonly ui: {
4123
4153
  readonly tab: "providers";
@@ -4128,34 +4158,18 @@ export declare const SETTINGS_SCHEMA: {
4128
4158
  readonly value: "auto";
4129
4159
  readonly label: "Auto";
4130
4160
  readonly description: "Automatically uses the first configured web-search provider";
4131
- }, {
4132
- readonly value: "tavily";
4133
- readonly label: "Tavily";
4134
- readonly description: "Requires TAVILY_API_KEY";
4135
4161
  }, {
4136
4162
  readonly value: "perplexity";
4137
4163
  readonly label: "Perplexity";
4138
4164
  readonly description: "Uses auth when configured; explicit selection falls back to anonymous search";
4139
4165
  }, {
4140
- readonly value: "brave";
4141
- readonly label: "Brave";
4142
- readonly description: "Requires BRAVE_API_KEY";
4143
- }, {
4144
- readonly value: "jina";
4145
- readonly label: "Jina";
4146
- readonly description: "Requires JINA_API_KEY";
4147
- }, {
4148
- readonly value: "kimi";
4149
- readonly label: "Kimi";
4150
- readonly description: "Requires MOONSHOT_SEARCH_API_KEY or MOONSHOT_API_KEY";
4166
+ readonly value: "gemini";
4167
+ readonly label: "Gemini";
4168
+ readonly description: "Google Search grounding via Gemini (uses google-gemini-cli or google-antigravity OAuth)";
4151
4169
  }, {
4152
4170
  readonly value: "anthropic";
4153
4171
  readonly label: "Anthropic";
4154
4172
  readonly description: "Claude's native web_search tool (uses Anthropic OAuth or ANTHROPIC_API_KEY)";
4155
- }, {
4156
- readonly value: "gemini";
4157
- readonly label: "Gemini";
4158
- readonly description: "Google Search grounding via Gemini (uses google-gemini-cli or google-antigravity OAuth)";
4159
4173
  }, {
4160
4174
  readonly value: "codex";
4161
4175
  readonly label: "OpenAI";
@@ -4169,13 +4183,29 @@ export declare const SETTINGS_SCHEMA: {
4169
4183
  readonly label: "Exa";
4170
4184
  readonly description: "Uses Exa API when EXA_API_KEY is set; falls back to Exa MCP";
4171
4185
  }, {
4172
- readonly value: "parallel";
4173
- readonly label: "Parallel";
4174
- readonly description: "Requires PARALLEL_API_KEY";
4186
+ readonly value: "jina";
4187
+ readonly label: "Jina";
4188
+ readonly description: "Requires JINA_API_KEY";
4175
4189
  }, {
4176
4190
  readonly value: "kagi";
4177
4191
  readonly label: "Kagi";
4178
4192
  readonly description: "Requires KAGI_API_KEY and Kagi Search API beta access";
4193
+ }, {
4194
+ readonly value: "tavily";
4195
+ readonly label: "Tavily";
4196
+ readonly description: "Requires TAVILY_API_KEY";
4197
+ }, {
4198
+ readonly value: "brave";
4199
+ readonly label: "Brave";
4200
+ readonly description: "Requires BRAVE_API_KEY";
4201
+ }, {
4202
+ readonly value: "kimi";
4203
+ readonly label: "Kimi";
4204
+ readonly description: "Requires MOONSHOT_SEARCH_API_KEY or MOONSHOT_API_KEY";
4205
+ }, {
4206
+ readonly value: "parallel";
4207
+ readonly label: "Parallel";
4208
+ readonly description: "Requires PARALLEL_API_KEY";
4179
4209
  }, {
4180
4210
  readonly value: "synthetic";
4181
4211
  readonly label: "Synthetic";
@@ -1,11 +1,7 @@
1
- /**
2
- * Zod schema for the `edit` tool's hashline mode payload. The schema is
3
- * deliberately permissive (`.passthrough()`) so providers can attach extra
4
- * keys without rejection; only `input` is required. `_input` is accepted as a
5
- * provider-emitted alias for `input`.
6
- */
7
- import { z } from "zod/v4";
8
- export declare const hashlineEditParamsSchema: z.ZodPreprocess<z.ZodObject<{
9
- input: z.ZodString;
10
- }, z.core.$loose>>;
11
- export type HashlineParams = z.infer<typeof hashlineEditParamsSchema>;
1
+ export declare const hashlineEditParamsSchema: import("arktype/internal/variants/object.ts").ObjectType<(In: {
2
+ input?: string | undefined;
3
+ _input?: string | undefined;
4
+ }) => import("arktype/internal/attributes.ts").To<{
5
+ input: string;
6
+ }>, {}>;
7
+ export type HashlineParams = Parameters<typeof hashlineEditParamsSchema.assert>[0];
@@ -2,7 +2,7 @@ import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallb
2
2
  import type { ToolExample } from "@oh-my-pi/pi-ai";
3
3
  import type { ToolSession } from "../tools";
4
4
  import { type EditMode } from "../utils/edit-mode";
5
- import { type HashlineParams, hashlineEditParamsSchema } from "./hashline";
5
+ import { hashlineEditParamsSchema } from "./hashline";
6
6
  import { type ApplyPatchParams, applyPatchSchema } from "./modes/apply-patch";
7
7
  import { type PatchParams, patchEditSchema } from "./modes/patch";
8
8
  import { type ReplaceParams, replaceEditSchema } from "./modes/replace";
@@ -20,6 +20,7 @@ export * from "./normalize";
20
20
  export * from "./renderer";
21
21
  export * from "./streaming";
22
22
  type TInput = typeof replaceEditSchema | typeof patchEditSchema | typeof hashlineEditParamsSchema | typeof applyPatchSchema;
23
+ type HashlineParams = typeof hashlineEditParamsSchema.infer;
23
24
  type EditParams = ReplaceParams | PatchParams | HashlineParams | ApplyPatchParams;
24
25
  export declare class EditTool implements AgentTool<TInput> {
25
26
  #private;