@dyyz1993/pi-coding-agent 0.70.6 → 0.74.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +266 -80
- package/README.md +48 -20
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js +4 -2
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/restore-sandbox-env.d.ts +13 -0
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
- package/dist/bun/restore-sandbox-env.js +32 -0
- package/dist/bun/restore-sandbox-env.js.map +1 -0
- package/dist/cli/args.d.ts +2 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +34 -22
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +2 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -4
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +16 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +238 -66
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +10 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +14 -0
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +2 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +1 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +37 -26
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +1068 -1116
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts +5 -0
- package/dist/core/auth-guidance.d.ts.map +1 -0
- package/dist/core/auth-guidance.js +21 -0
- package/dist/core/auth-guidance.js.map +1 -0
- package/dist/core/auth-storage.d.ts +9 -0
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +20 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +9 -6
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +0 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js +1 -1
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/template.css +53 -4
- package/dist/core/export-html/template.js +84 -20
- package/dist/core/export-html/tool-renderer.d.ts +0 -6
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +15 -2
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +0 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +49 -137
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +24 -20
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +128 -253
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +88 -60
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js +10 -0
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/file-store/file-snapshot-manager.d.ts +95 -0
- package/dist/core/file-store/file-snapshot-manager.d.ts.map +1 -0
- package/dist/core/file-store/file-snapshot-manager.js +508 -0
- package/dist/core/file-store/file-snapshot-manager.js.map +1 -0
- package/dist/core/file-store/index.d.ts +5 -0
- package/dist/core/file-store/index.d.ts.map +1 -0
- package/dist/core/file-store/index.js +3 -0
- package/dist/core/file-store/index.js.map +1 -0
- package/dist/core/messages.d.ts +10 -2
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +23 -6
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry.d.ts +19 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +97 -16
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +24 -15
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-manager.d.ts +1 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +61 -35
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/provider-display-names.d.ts +2 -0
- package/dist/core/provider-display-names.d.ts.map +1 -0
- package/dist/core/provider-display-names.js +32 -0
- package/dist/core/provider-display-names.js.map +1 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +9 -21
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +9 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +39 -18
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +27 -17
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +133 -47
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +22 -3
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +54 -6
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +3 -8
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +4 -3
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tools/bash.d.ts +0 -2
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +155 -110
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +3 -2
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +4 -3
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +50 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -0
- package/dist/core/tools/output-accumulator.js +178 -0
- package/dist/core/tools/output-accumulator.js.map +1 -0
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +70 -13
- package/dist/core/tools/read.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +17 -39
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +3 -3
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +3 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +1 -4
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +14 -56
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +5 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +19 -4
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +1 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +18 -6
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +93 -25
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +3 -7
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +5 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +53 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +20 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +423 -186
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/dark.json +1 -1
- package/dist/modes/interactive/theme/light.json +1 -1
- package/dist/modes/print-mode.d.ts +3 -0
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +62 -19
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +80 -60
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +108 -93
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +106 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +115 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +238 -12
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/child-process.d.ts +1 -0
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js +8 -0
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +2 -2
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +84 -45
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/paths.d.ts +9 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +31 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/pi-user-agent.d.ts +2 -0
- package/dist/utils/pi-user-agent.d.ts.map +1 -0
- package/dist/utils/pi-user-agent.js +5 -0
- package/dist/utils/pi-user-agent.js.map +1 -0
- package/dist/utils/structured-output.d.ts +10 -0
- package/dist/utils/structured-output.d.ts.map +1 -0
- package/dist/utils/structured-output.js +57 -0
- package/dist/utils/structured-output.js.map +1 -0
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +6 -2
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts +14 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +77 -0
- package/dist/utils/version-check.js.map +1 -0
- package/docs/compaction.md +14 -14
- package/docs/custom-provider.md +40 -31
- package/docs/development.md +1 -1
- package/docs/docs.json +148 -0
- package/docs/extensions.md +116 -56
- package/docs/index.md +70 -0
- package/docs/json.md +4 -4
- package/docs/models.md +150 -3
- package/docs/packages.md +10 -5
- package/docs/providers.md +62 -17
- package/docs/quickstart.md +142 -0
- package/docs/rollback-architecture.md +693 -0
- package/docs/rollback-test-cases.md +412 -0
- package/docs/rpc.md +1 -1
- package/docs/sdk.md +26 -26
- package/docs/{session.md → session-format.md} +6 -6
- package/docs/sessions.md +137 -0
- package/docs/settings.md +52 -9
- package/docs/termux.md +1 -1
- package/docs/themes.md +2 -2
- package/docs/tui.md +20 -20
- package/docs/usage.md +277 -0
- package/examples/extensions/README.md +2 -4
- package/examples/extensions/border-status-editor.ts +150 -0
- package/examples/extensions/commands.ts +2 -2
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/dynamic-resources/dynamic.json +1 -1
- package/examples/extensions/git-checkpoint.ts +1 -1
- package/examples/extensions/handoff.ts +49 -11
- package/examples/extensions/plan-mode/index.ts +1 -1
- package/examples/extensions/sandbox/package-lock.json +5 -5
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/subagent/agents.ts +126 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/sdk/README.md +2 -2
- package/package.json +7 -16
- package/docs/tree.md +0 -233
- 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:
|
|
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>):
|
|
828
|
-
on(event: "session_start", handler: ExtensionHandler<SessionStartEvent>):
|
|
829
|
-
on(event: "session_before_switch", handler: ExtensionHandler<SessionBeforeSwitchEvent, SessionBeforeSwitchResult>):
|
|
830
|
-
on(event: "session_before_fork", handler: ExtensionHandler<SessionBeforeForkEvent, SessionBeforeForkResult>):
|
|
831
|
-
on(event: "session_before_compact", handler: ExtensionHandler<SessionBeforeCompactEvent, SessionBeforeCompactResult>):
|
|
832
|
-
on(event: "session_compact", handler: ExtensionHandler<SessionCompactEvent>):
|
|
833
|
-
on(event: "session_shutdown", handler: ExtensionHandler<SessionShutdownEvent>):
|
|
834
|
-
on(event: "session_rename", handler: ExtensionHandler<SessionRenameEvent>):
|
|
835
|
-
on(event: "session_before_tree", handler: ExtensionHandler<SessionBeforeTreeEvent, SessionBeforeTreeResult>):
|
|
836
|
-
on(event: "session_tree", handler: ExtensionHandler<SessionTreeEvent>):
|
|
837
|
-
on(event: "context", handler: ExtensionHandler<ContextEvent, ContextEventResult>):
|
|
838
|
-
on(event: "before_provider_request", handler: ExtensionHandler<BeforeProviderRequestEvent, BeforeProviderRequestEventResult>):
|
|
839
|
-
on(event: "after_provider_response", handler: ExtensionHandler<AfterProviderResponseEvent>):
|
|
840
|
-
on(event: "before_agent_start", handler: ExtensionHandler<BeforeAgentStartEvent, BeforeAgentStartEventResult>):
|
|
841
|
-
on(event: "agent_start", handler: ExtensionHandler<AgentStartEvent>):
|
|
842
|
-
on(event: "agent_end", handler: ExtensionHandler<AgentEndEvent>):
|
|
843
|
-
on(event: "turn_start", handler: ExtensionHandler<TurnStartEvent>):
|
|
844
|
-
on(event: "turn_end", handler: ExtensionHandler<TurnEndEvent>):
|
|
845
|
-
on(event: "message_start", handler: ExtensionHandler<MessageStartEvent>):
|
|
846
|
-
on(event: "message_update", handler: ExtensionHandler<MessageUpdateEvent>):
|
|
847
|
-
on(event: "message_end", handler: ExtensionHandler<MessageEndEvent>):
|
|
848
|
-
on(event: "tool_execution_start", handler: ExtensionHandler<ToolExecutionStartEvent>):
|
|
849
|
-
on(event: "tool_execution_update", handler: ExtensionHandler<ToolExecutionUpdateEvent>):
|
|
850
|
-
on(event: "tool_execution_end", handler: ExtensionHandler<ToolExecutionEndEvent>):
|
|
851
|
-
on(event: "model_select", handler: ExtensionHandler<ModelSelectEvent>):
|
|
852
|
-
on(event: "
|
|
853
|
-
on(event: "
|
|
854
|
-
on(event: "
|
|
855
|
-
on(event: "
|
|
856
|
-
on(event: "
|
|
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).
|