@dyyz1993/pi-coding-agent 0.70.6 → 0.74.4

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 (275) hide show
  1. package/CHANGELOG.md +266 -80
  2. package/README.md +48 -20
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js +4 -2
  5. package/dist/bun/cli.js.map +1 -1
  6. package/dist/bun/restore-sandbox-env.d.ts +13 -0
  7. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  8. package/dist/bun/restore-sandbox-env.js +32 -0
  9. package/dist/bun/restore-sandbox-env.js.map +1 -0
  10. package/dist/cli/args.d.ts +2 -1
  11. package/dist/cli/args.d.ts.map +1 -1
  12. package/dist/cli/args.js +34 -22
  13. package/dist/cli/args.js.map +1 -1
  14. package/dist/cli/list-models.d.ts.map +1 -1
  15. package/dist/cli/list-models.js +2 -1
  16. package/dist/cli/list-models.js.map +1 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +9 -4
  19. package/dist/cli.js.map +1 -1
  20. package/dist/config.d.ts +16 -8
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +238 -66
  23. package/dist/config.js.map +1 -1
  24. package/dist/core/agent-session-runtime.d.ts +10 -0
  25. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  26. package/dist/core/agent-session-runtime.js +14 -0
  27. package/dist/core/agent-session-runtime.js.map +1 -1
  28. package/dist/core/agent-session-services.d.ts +2 -1
  29. package/dist/core/agent-session-services.d.ts.map +1 -1
  30. package/dist/core/agent-session-services.js +1 -0
  31. package/dist/core/agent-session-services.js.map +1 -1
  32. package/dist/core/agent-session.d.ts +25 -26
  33. package/dist/core/agent-session.d.ts.map +1 -1
  34. package/dist/core/agent-session.js +1042 -1116
  35. package/dist/core/agent-session.js.map +1 -1
  36. package/dist/core/auth-guidance.d.ts +5 -0
  37. package/dist/core/auth-guidance.d.ts.map +1 -0
  38. package/dist/core/auth-guidance.js +21 -0
  39. package/dist/core/auth-guidance.js.map +1 -0
  40. package/dist/core/auth-storage.d.ts +9 -0
  41. package/dist/core/auth-storage.d.ts.map +1 -1
  42. package/dist/core/auth-storage.js +20 -1
  43. package/dist/core/auth-storage.js.map +1 -1
  44. package/dist/core/bash-executor.d.ts.map +1 -1
  45. package/dist/core/bash-executor.js +9 -6
  46. package/dist/core/bash-executor.js.map +1 -1
  47. package/dist/core/compaction/compaction.d.ts +0 -1
  48. package/dist/core/compaction/compaction.d.ts.map +1 -1
  49. package/dist/core/compaction/compaction.js.map +1 -1
  50. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  51. package/dist/core/export-html/ansi-to-html.js +1 -1
  52. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  53. package/dist/core/export-html/template.css +53 -4
  54. package/dist/core/export-html/template.js +84 -20
  55. package/dist/core/export-html/tool-renderer.d.ts +0 -6
  56. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  57. package/dist/core/export-html/tool-renderer.js +15 -2
  58. package/dist/core/export-html/tool-renderer.js.map +1 -1
  59. package/dist/core/extensions/index.d.ts +1 -1
  60. package/dist/core/extensions/index.d.ts.map +1 -1
  61. package/dist/core/extensions/index.js.map +1 -1
  62. package/dist/core/extensions/loader.d.ts +0 -1
  63. package/dist/core/extensions/loader.d.ts.map +1 -1
  64. package/dist/core/extensions/loader.js +49 -137
  65. package/dist/core/extensions/loader.js.map +1 -1
  66. package/dist/core/extensions/runner.d.ts +24 -20
  67. package/dist/core/extensions/runner.d.ts.map +1 -1
  68. package/dist/core/extensions/runner.js +128 -253
  69. package/dist/core/extensions/runner.js.map +1 -1
  70. package/dist/core/extensions/types.d.ts +88 -60
  71. package/dist/core/extensions/types.d.ts.map +1 -1
  72. package/dist/core/extensions/types.js +10 -0
  73. package/dist/core/extensions/types.js.map +1 -1
  74. package/dist/core/file-store/file-snapshot-manager.d.ts +95 -0
  75. package/dist/core/file-store/file-snapshot-manager.d.ts.map +1 -0
  76. package/dist/core/file-store/file-snapshot-manager.js +508 -0
  77. package/dist/core/file-store/file-snapshot-manager.js.map +1 -0
  78. package/dist/core/file-store/index.d.ts +5 -0
  79. package/dist/core/file-store/index.d.ts.map +1 -0
  80. package/dist/core/file-store/index.js +3 -0
  81. package/dist/core/file-store/index.js.map +1 -0
  82. package/dist/core/messages.d.ts +10 -2
  83. package/dist/core/messages.d.ts.map +1 -1
  84. package/dist/core/messages.js +23 -6
  85. package/dist/core/messages.js.map +1 -1
  86. package/dist/core/model-registry.d.ts +19 -1
  87. package/dist/core/model-registry.d.ts.map +1 -1
  88. package/dist/core/model-registry.js +97 -16
  89. package/dist/core/model-registry.js.map +1 -1
  90. package/dist/core/model-resolver.d.ts.map +1 -1
  91. package/dist/core/model-resolver.js +24 -15
  92. package/dist/core/model-resolver.js.map +1 -1
  93. package/dist/core/package-manager.d.ts +1 -0
  94. package/dist/core/package-manager.d.ts.map +1 -1
  95. package/dist/core/package-manager.js +61 -35
  96. package/dist/core/package-manager.js.map +1 -1
  97. package/dist/core/provider-display-names.d.ts +2 -0
  98. package/dist/core/provider-display-names.d.ts.map +1 -0
  99. package/dist/core/provider-display-names.js +32 -0
  100. package/dist/core/provider-display-names.js.map +1 -0
  101. package/dist/core/resource-loader.d.ts.map +1 -1
  102. package/dist/core/resource-loader.js +9 -21
  103. package/dist/core/resource-loader.js.map +1 -1
  104. package/dist/core/sdk.d.ts +9 -1
  105. package/dist/core/sdk.d.ts.map +1 -1
  106. package/dist/core/sdk.js +39 -18
  107. package/dist/core/sdk.js.map +1 -1
  108. package/dist/core/session-manager.d.ts +27 -17
  109. package/dist/core/session-manager.d.ts.map +1 -1
  110. package/dist/core/session-manager.js +133 -47
  111. package/dist/core/session-manager.js.map +1 -1
  112. package/dist/core/settings-manager.d.ts +21 -3
  113. package/dist/core/settings-manager.d.ts.map +1 -1
  114. package/dist/core/settings-manager.js +51 -6
  115. package/dist/core/settings-manager.js.map +1 -1
  116. package/dist/core/skills.d.ts.map +1 -1
  117. package/dist/core/skills.js +3 -8
  118. package/dist/core/skills.js.map +1 -1
  119. package/dist/core/slash-commands.d.ts.map +1 -1
  120. package/dist/core/slash-commands.js +4 -3
  121. package/dist/core/slash-commands.js.map +1 -1
  122. package/dist/core/tools/bash.d.ts +0 -2
  123. package/dist/core/tools/bash.d.ts.map +1 -1
  124. package/dist/core/tools/bash.js +155 -110
  125. package/dist/core/tools/bash.js.map +1 -1
  126. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  127. package/dist/core/tools/edit-diff.js +3 -2
  128. package/dist/core/tools/edit-diff.js.map +1 -1
  129. package/dist/core/tools/edit.d.ts.map +1 -1
  130. package/dist/core/tools/edit.js +4 -3
  131. package/dist/core/tools/edit.js.map +1 -1
  132. package/dist/core/tools/find.d.ts.map +1 -1
  133. package/dist/core/tools/find.js +1 -1
  134. package/dist/core/tools/find.js.map +1 -1
  135. package/dist/core/tools/grep.d.ts.map +1 -1
  136. package/dist/core/tools/grep.js +1 -1
  137. package/dist/core/tools/grep.js.map +1 -1
  138. package/dist/core/tools/output-accumulator.d.ts +50 -0
  139. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  140. package/dist/core/tools/output-accumulator.js +178 -0
  141. package/dist/core/tools/output-accumulator.js.map +1 -0
  142. package/dist/core/tools/read.d.ts.map +1 -1
  143. package/dist/core/tools/read.js +70 -13
  144. package/dist/core/tools/read.js.map +1 -1
  145. package/dist/index.d.ts +1 -1
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js.map +1 -1
  148. package/dist/main.d.ts.map +1 -1
  149. package/dist/main.js +17 -39
  150. package/dist/main.js.map +1 -1
  151. package/dist/migrations.d.ts +1 -1
  152. package/dist/migrations.d.ts.map +1 -1
  153. package/dist/migrations.js +3 -3
  154. package/dist/migrations.js.map +1 -1
  155. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  156. package/dist/modes/interactive/components/config-selector.js +3 -1
  157. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  158. package/dist/modes/interactive/components/extension-selector.d.ts +1 -4
  159. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  160. package/dist/modes/interactive/components/extension-selector.js +14 -56
  161. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  162. package/dist/modes/interactive/components/login-dialog.d.ts +5 -1
  163. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  164. package/dist/modes/interactive/components/login-dialog.js +19 -4
  165. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  166. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  167. package/dist/modes/interactive/components/model-selector.js +1 -1
  168. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  169. package/dist/modes/interactive/components/oauth-selector.d.ts +18 -6
  170. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  171. package/dist/modes/interactive/components/oauth-selector.js +93 -25
  172. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  173. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  174. package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
  175. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  176. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  177. package/dist/modes/interactive/components/session-selector.js +3 -7
  178. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  179. package/dist/modes/interactive/components/settings-selector.d.ts +5 -0
  180. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  181. package/dist/modes/interactive/components/settings-selector.js +53 -1
  182. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  183. package/dist/modes/interactive/interactive-mode.d.ts +20 -4
  184. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  185. package/dist/modes/interactive/interactive-mode.js +423 -186
  186. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  187. package/dist/modes/interactive/theme/dark.json +1 -1
  188. package/dist/modes/interactive/theme/light.json +1 -1
  189. package/dist/modes/print-mode.d.ts +3 -0
  190. package/dist/modes/print-mode.d.ts.map +1 -1
  191. package/dist/modes/print-mode.js +62 -19
  192. package/dist/modes/print-mode.js.map +1 -1
  193. package/dist/modes/rpc/rpc-client.d.ts +80 -60
  194. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  195. package/dist/modes/rpc/rpc-client.js +108 -93
  196. package/dist/modes/rpc/rpc-client.js.map +1 -1
  197. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  198. package/dist/modes/rpc/rpc-mode.js +106 -0
  199. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  200. package/dist/modes/rpc/rpc-types.d.ts +115 -0
  201. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  202. package/dist/modes/rpc/rpc-types.js.map +1 -1
  203. package/dist/package-manager-cli.d.ts.map +1 -1
  204. package/dist/package-manager-cli.js +238 -12
  205. package/dist/package-manager-cli.js.map +1 -1
  206. package/dist/utils/child-process.d.ts +1 -0
  207. package/dist/utils/child-process.d.ts.map +1 -1
  208. package/dist/utils/child-process.js +8 -0
  209. package/dist/utils/child-process.js.map +1 -1
  210. package/dist/utils/clipboard-image.d.ts.map +1 -1
  211. package/dist/utils/clipboard-image.js +2 -2
  212. package/dist/utils/clipboard-image.js.map +1 -1
  213. package/dist/utils/clipboard.d.ts.map +1 -1
  214. package/dist/utils/clipboard.js +84 -45
  215. package/dist/utils/clipboard.js.map +1 -1
  216. package/dist/utils/paths.d.ts +9 -0
  217. package/dist/utils/paths.d.ts.map +1 -1
  218. package/dist/utils/paths.js +31 -0
  219. package/dist/utils/paths.js.map +1 -1
  220. package/dist/utils/pi-user-agent.d.ts +2 -0
  221. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  222. package/dist/utils/pi-user-agent.js +5 -0
  223. package/dist/utils/pi-user-agent.js.map +1 -0
  224. package/dist/utils/structured-output.d.ts +10 -0
  225. package/dist/utils/structured-output.d.ts.map +1 -0
  226. package/dist/utils/structured-output.js +57 -0
  227. package/dist/utils/structured-output.js.map +1 -0
  228. package/dist/utils/tools-manager.d.ts.map +1 -1
  229. package/dist/utils/tools-manager.js +6 -2
  230. package/dist/utils/tools-manager.js.map +1 -1
  231. package/dist/utils/version-check.d.ts +14 -0
  232. package/dist/utils/version-check.d.ts.map +1 -0
  233. package/dist/utils/version-check.js +77 -0
  234. package/dist/utils/version-check.js.map +1 -0
  235. package/docs/compaction.md +14 -14
  236. package/docs/custom-provider.md +40 -31
  237. package/docs/development.md +1 -1
  238. package/docs/docs.json +148 -0
  239. package/docs/extensions.md +116 -56
  240. package/docs/index.md +70 -0
  241. package/docs/json.md +4 -4
  242. package/docs/models.md +150 -3
  243. package/docs/packages.md +10 -5
  244. package/docs/providers.md +62 -17
  245. package/docs/quickstart.md +142 -0
  246. package/docs/rollback-architecture.md +693 -0
  247. package/docs/rollback-test-cases.md +412 -0
  248. package/docs/rpc.md +1 -1
  249. package/docs/sdk.md +26 -26
  250. package/docs/{session.md → session-format.md} +6 -6
  251. package/docs/sessions.md +137 -0
  252. package/docs/settings.md +52 -9
  253. package/docs/termux.md +1 -1
  254. package/docs/themes.md +2 -2
  255. package/docs/tui.md +20 -20
  256. package/docs/usage.md +277 -0
  257. package/examples/extensions/README.md +2 -4
  258. package/examples/extensions/border-status-editor.ts +150 -0
  259. package/examples/extensions/commands.ts +2 -2
  260. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  261. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  262. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  263. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  264. package/examples/extensions/git-checkpoint.ts +1 -1
  265. package/examples/extensions/handoff.ts +49 -11
  266. package/examples/extensions/plan-mode/index.ts +1 -1
  267. package/examples/extensions/sandbox/package-lock.json +5 -5
  268. package/examples/extensions/sandbox/package.json +1 -1
  269. package/examples/extensions/subagent/agents.ts +126 -0
  270. package/examples/extensions/with-deps/package-lock.json +2 -2
  271. package/examples/extensions/with-deps/package.json +1 -1
  272. package/examples/sdk/README.md +2 -2
  273. package/package.json +7 -16
  274. package/docs/tree.md +0 -233
  275. package/examples/extensions/antigravity-image-gen.ts +0 -418
@@ -1,4 +1,3 @@
1
- import type { Channel } from "./channel-types.js";
2
1
  /**
3
2
  * Extension system types.
4
3
  *
@@ -29,13 +28,16 @@ import type { BuildSystemPromptOptions } from "../system-prompt.js";
29
28
  import type { BashOperations } from "../tools/bash.js";
30
29
  import type { EditToolDetails } from "../tools/edit.js";
31
30
  import type { BashToolDetails, BashToolInput, EditToolInput, FindToolDetails, FindToolInput, GrepToolDetails, GrepToolInput, LsToolDetails, LsToolInput, ReadToolDetails, ReadToolInput, WriteToolInput } from "../tools/index.js";
31
+ import type { Channel } from "./channel-types.js";
32
32
  export type { ExecOptions, ExecResult } from "../exec.js";
33
33
  export type { BuildSystemPromptOptions } from "../system-prompt.js";
34
34
  export type { AgentToolResult, AgentToolUpdateCallback, ToolExecutionMode };
35
35
  export type { AppKeybinding, KeybindingsManager } from "../keybindings.js";
36
36
  /** Options for extension UI dialogs. */
37
37
  export interface ExtensionUIDialogOptions {
38
+ /** AbortSignal to programmatically dismiss the dialog. */
38
39
  signal?: AbortSignal;
40
+ /** Timeout in milliseconds. Dialog auto-dismisses with live countdown display. */
39
41
  timeout?: number;
40
42
  multiple?: boolean;
41
43
  }
@@ -60,6 +62,7 @@ export interface WorkingIndicatorOptions {
60
62
  }
61
63
  /** Wrap the current autocomplete provider with additional behavior. */
62
64
  export type AutocompleteProviderFactory = (current: AutocompleteProvider) => AutocompleteProvider;
65
+ export type EditorFactory = (tui: TUI, theme: EditorTheme, keybindings: KeybindingsManager) => EditorComponent;
63
66
  /**
64
67
  * UI context for extensions to request interactive UI.
65
68
  * Each mode (interactive, RPC, print) provides its own implementation.
@@ -79,6 +82,8 @@ export interface ExtensionUIContext {
79
82
  setStatus(key: string, text: string | undefined): void;
80
83
  /** Set the working/loading message shown during streaming. Call with no argument to restore default. */
81
84
  setWorkingMessage(message?: string): void;
85
+ /** Show or hide the built-in interactive working loader row during streaming. */
86
+ setWorkingVisible(visible: boolean): void;
82
87
  /**
83
88
  * Configure the interactive working indicator shown during streaming.
84
89
  *
@@ -165,7 +170,9 @@ export interface ExtensionUIContext {
165
170
  * );
166
171
  * ```
167
172
  */
168
- setEditorComponent(factory: ((tui: TUI, theme: EditorTheme, keybindings: KeybindingsManager) => EditorComponent) | undefined): void;
173
+ setEditorComponent(factory: EditorFactory | undefined): void;
174
+ /** Get the currently configured custom editor factory, or undefined when using the default editor. */
175
+ getEditorComponent(): EditorFactory | undefined;
169
176
  /** Get the current theme for styling. */
170
177
  readonly theme: Theme;
171
178
  /** Get all available themes with their names and file paths. */
@@ -207,18 +214,6 @@ export interface ExtensionContext {
207
214
  hasUI: boolean;
208
215
  /** Current working directory */
209
216
  cwd: string;
210
- /** The name of the current extension. */
211
- extensionName: string;
212
- /** Canonical git root (worktree-aware). Falls back to cwd if not a git repo. */
213
- projectRoot: string;
214
- /** Per-session data directory. Automatically created on first access. Use this to store session-scoped data. */
215
- sessionDataDir: string;
216
- /** Per-project data directory (shared across sessions). Automatically created on first access. Use this to store project-scoped data. */
217
- projectDataDir: string;
218
- /** Per-cwd data directory (isolated by current working directory). Same as projectDataDir for normal repos; different in worktrees where each working directory gets its own storage. Automatically created on first access. */
219
- cwdDataDir: string;
220
- /** Global data directory shared across all projects. Use this for cross-project data like knowledge bases, shared caches, etc. Automatically created on first access. */
221
- globalDataDir: string;
222
217
  /** Session manager (read-only) */
223
218
  sessionManager: ReadonlySessionManager;
224
219
  /** Model registry for API key resolution */
@@ -229,8 +224,6 @@ export interface ExtensionContext {
229
224
  isIdle(): boolean;
230
225
  /** The current abort signal, or undefined when the agent is not streaming. */
231
226
  signal: AbortSignal | undefined;
232
- /** Signal that aborts on session shutdown. Available in ALL events, including agent_end. */
233
- readonly sessionSignal: AbortSignal;
234
227
  /** Abort the current agent operation */
235
228
  abort(): void;
236
229
  /** Whether there are queued messages waiting */
@@ -243,6 +236,20 @@ export interface ExtensionContext {
243
236
  compact(options?: CompactOptions): void;
244
237
  /** Get the current effective system prompt. */
245
238
  getSystemPrompt(): string;
239
+ /** The name of the current extension. */
240
+ extensionName: string;
241
+ /** Canonical git root (worktree-aware). Falls back to cwd if not a git repo. */
242
+ projectRoot: string;
243
+ /** Per-session data directory. Automatically created on first access. Use this to store session-scoped data. */
244
+ sessionDataDir: string;
245
+ /** Per-project data directory (shared across sessions). Automatically created on first access. Use this to store project-scoped data. */
246
+ projectDataDir: string;
247
+ /** Per-cwd data directory (isolated by current working directory). Same as projectDataDir for normal repos; different in worktrees where each working directory gets its own storage. Automatically created on first access. */
248
+ cwdDataDir: string;
249
+ /** Global data directory shared across all projects. Use this for cross-project data like knowledge bases, shared caches, etc. Automatically created on first access. */
250
+ globalDataDir: string;
251
+ /** Signal that aborts on session shutdown. Available in ALL events, including agent_end. */
252
+ readonly sessionSignal: AbortSignal;
246
253
  /**
247
254
  * Asynchronously inject a response to a pending UI event.
248
255
  * Use with the `ui` event: capture event.id, return undefined from handler,
@@ -250,6 +257,8 @@ export interface ExtensionContext {
250
257
  * First response wins (original UI or respondUI), subsequent calls are ignored.
251
258
  */
252
259
  respondUI(id: string, result: UIEventResult): void;
260
+ /** File snapshot manager for turn-level file tracking and restore. Null when not available. */
261
+ fileSnapshotManager: import("../file-store/file-snapshot-manager.js").FileSnapshotManager | null;
253
262
  }
254
263
  /**
255
264
  * Extended context for command handlers.
@@ -435,6 +444,7 @@ export interface SessionShutdownEvent {
435
444
  reason: "quit" | "reload" | "new" | "resume" | "fork";
436
445
  /** Destination session file when shutting down due to session replacement. */
437
446
  targetSessionFile?: string;
447
+ entryId?: string;
438
448
  }
439
449
  /** Fired when the session display name is changed via pi.setSessionName(). */
440
450
  export interface SessionRenameEvent {
@@ -457,6 +467,8 @@ export interface TreePreparation {
457
467
  replaceInstructions?: boolean;
458
468
  /** Label to attach to the branch summary entry */
459
469
  label?: string;
470
+ skipFiles?: boolean;
471
+ preview?: boolean;
460
472
  }
461
473
  /** Fired before navigating in the session tree (can be cancelled) */
462
474
  export interface SessionBeforeTreeEvent {
@@ -474,11 +486,11 @@ export interface SessionTreeEvent {
474
486
  skipFiles?: boolean;
475
487
  preview?: boolean;
476
488
  }
489
+ export type SessionEvent = SessionStartEvent | SessionBeforeSwitchEvent | SessionBeforeForkEvent | SessionBeforeCompactEvent | SessionCompactEvent | SessionShutdownEvent | SessionRenameEvent | SessionBeforeTreeEvent | SessionTreeEvent;
477
490
  export interface SessionTreePreviewResult {
478
491
  restored: string[];
479
492
  deleted: string[];
480
493
  }
481
- export type SessionEvent = SessionStartEvent | SessionBeforeSwitchEvent | SessionBeforeForkEvent | SessionBeforeCompactEvent | SessionCompactEvent | SessionShutdownEvent | SessionRenameEvent | SessionBeforeTreeEvent | SessionTreeEvent;
482
494
  /** Fired before each LLM call. Can modify messages. */
483
495
  export interface ContextEvent {
484
496
  type: "context";
@@ -506,6 +518,8 @@ export interface BeforeAgentStartEvent {
506
518
  systemPrompt: string;
507
519
  /** Structured options used to build the system prompt. Extensions can inspect this to understand what Pi loaded without re-discovering resources. */
508
520
  systemPromptOptions: BuildSystemPromptOptions;
521
+ /** Arbitrary key-value metadata from the current execution context (e.g. agent role, permission mode). */
522
+ variables?: Record<string, string>;
509
523
  }
510
524
  /** Fired when an agent loop starts */
511
525
  export interface AgentStartEvent {
@@ -544,7 +558,6 @@ export interface MessageUpdateEvent {
544
558
  export interface MessageEndEvent {
545
559
  type: "message_end";
546
560
  message: AgentMessage;
547
- entryId?: string;
548
561
  }
549
562
  /** Fired when a tool starts executing */
550
563
  export interface ToolExecutionStartEvent {
@@ -577,6 +590,12 @@ export interface ModelSelectEvent {
577
590
  previousModel: Model<any> | undefined;
578
591
  source: ModelSelectSource;
579
592
  }
593
+ /** Fired when a new thinking level is selected */
594
+ export interface ThinkingLevelSelectEvent {
595
+ type: "thinking_level_select";
596
+ level: ThinkingLevel;
597
+ previousLevel: ThinkingLevel;
598
+ }
580
599
  /** Fired when user executes a bash command via ! or !! prefix */
581
600
  export interface UserBashEvent {
582
601
  type: "user_bash";
@@ -631,8 +650,6 @@ export type UIEventResult = {
631
650
  interface ToolCallEventBase {
632
651
  type: "tool_call";
633
652
  toolCallId: string;
634
- /** Arbitrary key-value metadata from the current execution context (e.g. agent role, permission mode). */
635
- variables?: Record<string, string>;
636
653
  }
637
654
  export interface BashToolCallEvent extends ToolCallEventBase {
638
655
  toolName: "bash";
@@ -753,7 +770,7 @@ export declare function isToolCallEventType<TName extends string, TInput extends
753
770
  input: TInput;
754
771
  };
755
772
  /** Union of all event types */
756
- export type ExtensionEvent = ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeProviderRequestEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ModelSelectEvent | UserBashEvent | InputEvent | ToolCallEvent | ToolResultEvent;
773
+ export type ExtensionEvent = ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeProviderRequestEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ModelSelectEvent | ThinkingLevelSelectEvent | UserBashEvent | InputEvent | ToolCallEvent | ToolResultEvent | UIEvent;
757
774
  export interface ContextEventResult {
758
775
  messages?: AgentMessage[];
759
776
  }
@@ -775,6 +792,10 @@ export interface ToolResultEventResult {
775
792
  details?: unknown;
776
793
  isError?: boolean;
777
794
  }
795
+ export interface MessageEndEventResult {
796
+ /** Replace the finalized message. The replacement must keep the original message role. */
797
+ message?: AgentMessage;
798
+ }
778
799
  export interface BeforeAgentStartEventResult {
779
800
  message?: Pick<CustomMessage, "customType" | "content" | "display" | "details">;
780
801
  /** Replace the system prompt for this turn. If multiple extensions return this, they are chained. */
@@ -824,36 +845,37 @@ export type ExtensionHandler<E, R = undefined> = (event: E, ctx: ExtensionContex
824
845
  * ExtensionAPI passed to extension factory functions.
825
846
  */
826
847
  export interface ExtensionAPI {
827
- on(event: "resources_discover", handler: ExtensionHandler<ResourcesDiscoverEvent, ResourcesDiscoverResult>): () => void;
828
- on(event: "session_start", handler: ExtensionHandler<SessionStartEvent>): () => void;
829
- on(event: "session_before_switch", handler: ExtensionHandler<SessionBeforeSwitchEvent, SessionBeforeSwitchResult>): () => void;
830
- on(event: "session_before_fork", handler: ExtensionHandler<SessionBeforeForkEvent, SessionBeforeForkResult>): () => void;
831
- on(event: "session_before_compact", handler: ExtensionHandler<SessionBeforeCompactEvent, SessionBeforeCompactResult>): () => void;
832
- on(event: "session_compact", handler: ExtensionHandler<SessionCompactEvent>): () => void;
833
- on(event: "session_shutdown", handler: ExtensionHandler<SessionShutdownEvent>): () => void;
834
- on(event: "session_rename", handler: ExtensionHandler<SessionRenameEvent>): () => void;
835
- on(event: "session_before_tree", handler: ExtensionHandler<SessionBeforeTreeEvent, SessionBeforeTreeResult>): () => void;
836
- on(event: "session_tree", handler: ExtensionHandler<SessionTreeEvent>): () => void;
837
- on(event: "context", handler: ExtensionHandler<ContextEvent, ContextEventResult>): () => void;
838
- on(event: "before_provider_request", handler: ExtensionHandler<BeforeProviderRequestEvent, BeforeProviderRequestEventResult>): () => void;
839
- on(event: "after_provider_response", handler: ExtensionHandler<AfterProviderResponseEvent>): () => void;
840
- on(event: "before_agent_start", handler: ExtensionHandler<BeforeAgentStartEvent, BeforeAgentStartEventResult>): () => void;
841
- on(event: "agent_start", handler: ExtensionHandler<AgentStartEvent>): () => void;
842
- on(event: "agent_end", handler: ExtensionHandler<AgentEndEvent>): () => void;
843
- on(event: "turn_start", handler: ExtensionHandler<TurnStartEvent>): () => void;
844
- on(event: "turn_end", handler: ExtensionHandler<TurnEndEvent>): () => void;
845
- on(event: "message_start", handler: ExtensionHandler<MessageStartEvent>): () => void;
846
- on(event: "message_update", handler: ExtensionHandler<MessageUpdateEvent>): () => void;
847
- on(event: "message_end", handler: ExtensionHandler<MessageEndEvent>): () => void;
848
- on(event: "tool_execution_start", handler: ExtensionHandler<ToolExecutionStartEvent>): () => void;
849
- on(event: "tool_execution_update", handler: ExtensionHandler<ToolExecutionUpdateEvent>): () => void;
850
- on(event: "tool_execution_end", handler: ExtensionHandler<ToolExecutionEndEvent>): () => void;
851
- on(event: "model_select", handler: ExtensionHandler<ModelSelectEvent>): () => void;
852
- on(event: "tool_call", handler: ExtensionHandler<ToolCallEvent, ToolCallEventResult>): () => void;
853
- on(event: "tool_result", handler: ExtensionHandler<ToolResultEvent, ToolResultEventResult>): () => void;
854
- on(event: "user_bash", handler: ExtensionHandler<UserBashEvent, UserBashEventResult>): () => void;
855
- on(event: "input", handler: ExtensionHandler<InputEvent, InputEventResult>): () => void;
856
- on(event: "ui", handler: ExtensionHandler<UIEvent, UIEventResult>): () => void;
848
+ on(event: "resources_discover", handler: ExtensionHandler<ResourcesDiscoverEvent, ResourcesDiscoverResult>): void;
849
+ on(event: "session_start", handler: ExtensionHandler<SessionStartEvent>): void;
850
+ on(event: "session_before_switch", handler: ExtensionHandler<SessionBeforeSwitchEvent, SessionBeforeSwitchResult>): void;
851
+ on(event: "session_before_fork", handler: ExtensionHandler<SessionBeforeForkEvent, SessionBeforeForkResult>): void;
852
+ on(event: "session_before_compact", handler: ExtensionHandler<SessionBeforeCompactEvent, SessionBeforeCompactResult>): void;
853
+ on(event: "session_compact", handler: ExtensionHandler<SessionCompactEvent>): void;
854
+ on(event: "session_shutdown", handler: ExtensionHandler<SessionShutdownEvent>): void;
855
+ on(event: "session_rename", handler: ExtensionHandler<SessionRenameEvent>): void;
856
+ on(event: "session_before_tree", handler: ExtensionHandler<SessionBeforeTreeEvent, SessionBeforeTreeResult>): void;
857
+ on(event: "session_tree", handler: ExtensionHandler<SessionTreeEvent>): void;
858
+ on(event: "context", handler: ExtensionHandler<ContextEvent, ContextEventResult>): void;
859
+ on(event: "before_provider_request", handler: ExtensionHandler<BeforeProviderRequestEvent, BeforeProviderRequestEventResult>): void;
860
+ on(event: "after_provider_response", handler: ExtensionHandler<AfterProviderResponseEvent>): void;
861
+ on(event: "before_agent_start", handler: ExtensionHandler<BeforeAgentStartEvent, BeforeAgentStartEventResult>): void;
862
+ on(event: "agent_start", handler: ExtensionHandler<AgentStartEvent>): void;
863
+ on(event: "agent_end", handler: ExtensionHandler<AgentEndEvent>): void;
864
+ on(event: "turn_start", handler: ExtensionHandler<TurnStartEvent>): void;
865
+ on(event: "turn_end", handler: ExtensionHandler<TurnEndEvent>): void;
866
+ on(event: "message_start", handler: ExtensionHandler<MessageStartEvent>): void;
867
+ on(event: "message_update", handler: ExtensionHandler<MessageUpdateEvent>): void;
868
+ on(event: "message_end", handler: ExtensionHandler<MessageEndEvent, MessageEndEventResult>): void;
869
+ on(event: "tool_execution_start", handler: ExtensionHandler<ToolExecutionStartEvent>): void;
870
+ on(event: "tool_execution_update", handler: ExtensionHandler<ToolExecutionUpdateEvent>): void;
871
+ on(event: "tool_execution_end", handler: ExtensionHandler<ToolExecutionEndEvent>): void;
872
+ on(event: "model_select", handler: ExtensionHandler<ModelSelectEvent>): void;
873
+ on(event: "thinking_level_select", handler: ExtensionHandler<ThinkingLevelSelectEvent>): void;
874
+ on(event: "tool_call", handler: ExtensionHandler<ToolCallEvent, ToolCallEventResult>): void;
875
+ on(event: "tool_result", handler: ExtensionHandler<ToolResultEvent, ToolResultEventResult>): void;
876
+ on(event: "user_bash", handler: ExtensionHandler<UserBashEvent, UserBashEventResult>): void;
877
+ on(event: "input", handler: ExtensionHandler<InputEvent, InputEventResult>): void;
878
+ on(event: "ui", handler: ExtensionHandler<UIEvent, UIEventResult>): void;
857
879
  /** Register a tool that the LLM can call. */
858
880
  registerTool<TParams extends TSchema = TSchema, TDetails = unknown, TState = any>(tool: ToolDefinition<TParams, TDetails, TState>): void;
859
881
  /** Register a custom command. */
@@ -891,16 +913,16 @@ export interface ExtensionAPI {
891
913
  }): void;
892
914
  /** Fold a message entry, replacing its content with a summary in LLM context. */
893
915
  foldEntry(entryId: string, summary: string, originalTokens: number): void;
894
- /** Set the extension's display name. Used for storage path namespacing and error reporting. Must be called before any event handlers are registered. */
895
- setName(name: string): void;
896
- /** Get the extension's name. If not explicitly set via setName(), returns the auto-derived name. */
897
- extensionName: string;
898
916
  /** Set the session display name (shown in session selector). */
899
917
  setSessionName(name: string): void;
900
918
  /** Get the current session name, if set. */
901
919
  getSessionName(): string | undefined;
902
920
  /** Set or clear a label on an entry. Labels are user-defined markers for bookmarking/navigation. */
903
921
  setLabel(entryId: string, label: string | undefined): void;
922
+ /** Set the extension's display name. Used for storage path namespacing and error reporting. Must be called before any event handlers are registered. */
923
+ setName(name: string): void;
924
+ /** Get the extension's name. If not explicitly set via setName(), returns the auto-derived name. */
925
+ extensionName: string;
904
926
  /** Execute a shell command. */
905
927
  exec(command: string, args: string[], options?: ExecOptions): Promise<ExecResult>;
906
928
  /** Get the list of currently active tool names. */
@@ -1003,6 +1025,8 @@ export interface ExtensionAPI {
1003
1025
  }
1004
1026
  /** Configuration for registering a provider via pi.registerProvider(). */
1005
1027
  export interface ProviderConfig {
1028
+ /** Display name for the provider in UI. */
1029
+ name?: string;
1006
1030
  /** Base URL for the API endpoint. Required when defining models. */
1007
1031
  baseUrl?: string;
1008
1032
  /** API key or environment variable name. Required when defining models (unless oauth provided). */
@@ -1039,8 +1063,12 @@ export interface ProviderModelConfig {
1039
1063
  name: string;
1040
1064
  /** API type override for this model. */
1041
1065
  api?: Api;
1066
+ /** API endpoint URL override for this model. */
1067
+ baseUrl?: string;
1042
1068
  /** Whether the model supports extended thinking. */
1043
1069
  reasoning: boolean;
1070
+ /** Maps pi thinking levels to provider/model-specific values; null marks a level unsupported. */
1071
+ thinkingLevelMap?: Model<Api>["thinkingLevelMap"];
1044
1072
  /** Supported input types. */
1045
1073
  input: ("text" | "image")[];
1046
1074
  /** Cost per token (for tracking, can be 0). */
@@ -1079,6 +1107,10 @@ export interface ExtensionShortcut {
1079
1107
  extensionPath: string;
1080
1108
  }
1081
1109
  type HandlerFn = (...args: unknown[]) => Promise<unknown>;
1110
+ /** Tool info with name, description, parameter schema, and source metadata */
1111
+ export type ToolInfo = Pick<ToolDefinition, "name" | "description" | "parameters"> & {
1112
+ sourceInfo: SourceInfo;
1113
+ };
1082
1114
  export type SendMessageHandler = <T = unknown>(message: Pick<CustomMessage<T>, "customType" | "content" | "display" | "details">, options?: {
1083
1115
  triggerTurn?: boolean;
1084
1116
  deliverAs?: "steer" | "followUp" | "nextTurn";
@@ -1093,10 +1125,6 @@ export type FoldEntryHandler = (entryId: string, summary: string, originalTokens
1093
1125
  export type SetSessionNameHandler = (name: string) => void;
1094
1126
  export type GetSessionNameHandler = () => string | undefined;
1095
1127
  export type GetActiveToolsHandler = () => string[];
1096
- /** Tool info with name, description, parameter schema, and source metadata */
1097
- export type ToolInfo = Pick<ToolDefinition, "name" | "description" | "parameters"> & {
1098
- sourceInfo: SourceInfo;
1099
- };
1100
1128
  export type GetAllToolsHandler = () => ToolInfo[];
1101
1129
  export type GetCommandsHandler = () => SlashCommandInfo[];
1102
1130
  export type SetActiveToolsHandler = (toolNames: string[]) => void;
@@ -1226,13 +1254,13 @@ export interface ExtensionContextActions {
1226
1254
  getModel: () => Model<any> | undefined;
1227
1255
  isIdle: () => boolean;
1228
1256
  getSignal: () => AbortSignal | undefined;
1229
- getSessionSignal: () => AbortSignal;
1230
1257
  abort: () => void;
1231
1258
  hasPendingMessages: () => boolean;
1232
1259
  shutdown: () => void;
1233
1260
  getContextUsage: () => ContextUsage | undefined;
1234
1261
  compact: (options?: CompactOptions) => void;
1235
1262
  getSystemPrompt: () => string;
1263
+ getSessionSignal: () => AbortSignal;
1236
1264
  }
1237
1265
  /**
1238
1266
  * Actions for ExtensionCommandContext (ctx.* in command handlers).