@mariozechner/pi-coding-agent 0.49.2 → 0.50.0
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 +126 -1
- package/README.md +310 -1229
- package/dist/cli/args.d.ts +5 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +57 -22
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +53 -34
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +262 -67
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +8 -18
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +39 -55
- 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 +2 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/diagnostics.d.ts +15 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/export-html/template.css +9 -0
- package/dist/core/export-html/template.js +6 -4
- 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 +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +10 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +9 -3
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +39 -12
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +112 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +9 -2
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +13 -0
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/model-registry.d.ts +42 -2
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +154 -44
- 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 +3 -2
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-manager.d.ts +129 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +1148 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +6 -0
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +114 -54
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/resource-loader.d.ts +160 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +604 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/sdk.d.ts +14 -105
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +52 -304
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +45 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +39 -16
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +107 -25
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts +18 -10
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +126 -93
- package/dist/core/skills.js.map +1 -1
- package/dist/core/system-prompt.d.ts +3 -27
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +16 -103
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +2 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +4 -4
- package/dist/core/tools/read.js.map +1 -1
- package/dist/index.d.ts +12 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -6
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +209 -97
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +3 -2
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +5 -3
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +5 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +29 -9
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +3 -2
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +4 -2
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +3 -2
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +4 -2
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +71 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +468 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +3 -2
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +4 -2
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +9 -0
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +1 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +1 -0
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +3 -4
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +18 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +195 -87
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +12 -5
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +2 -2
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +2 -2
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +2 -2
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +47 -2
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +566 -211
- 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/interactive/theme/theme-schema.json +8 -1
- package/dist/modes/interactive/theme/theme.d.ts +8 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +79 -28
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +25 -89
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +32 -92
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/utils/git.d.ts +2 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +6 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/shell.d.ts +1 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +16 -2
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/docs/compaction.md +23 -21
- package/docs/custom-provider.md +538 -0
- package/docs/development.md +69 -0
- package/docs/extensions.md +180 -118
- package/docs/images/doom-extension.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/json.md +79 -0
- package/docs/keybindings.md +162 -0
- package/docs/models.md +193 -0
- package/docs/packages.md +163 -0
- package/docs/prompt-templates.md +67 -0
- package/docs/providers.md +147 -0
- package/docs/sdk.md +111 -178
- package/docs/session.md +167 -16
- package/docs/settings.md +216 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +111 -202
- package/docs/terminal-setup.md +65 -0
- package/docs/themes.md +295 -0
- package/docs/tui.md +36 -5
- package/docs/windows.md +17 -0
- package/examples/README.md +1 -0
- package/examples/extensions/README.md +24 -2
- package/examples/extensions/antigravity-image-gen.ts +413 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/examples/extensions/doom-overlay/doom/build.sh +1 -1
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/space-invaders.ts +560 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/sdk/02-custom-model.ts +3 -3
- package/examples/sdk/03-custom-prompt.ts +20 -9
- package/examples/sdk/04-skills.ts +26 -27
- package/examples/sdk/06-extensions.ts +15 -6
- package/examples/sdk/07-context-files.ts +22 -18
- package/examples/sdk/08-prompt-templates.ts +19 -14
- package/examples/sdk/09-api-keys-and-oauth.ts +5 -12
- package/examples/sdk/10-settings.ts +3 -3
- package/examples/sdk/12-full-control.ts +16 -7
- package/examples/sdk/README.md +24 -30
- package/package.json +4 -4
- package/docs/theme.md +0 -617
- package/examples/extensions/chalk-logger.ts +0 -26
package/docs/session.md
CHANGED
|
@@ -26,11 +26,147 @@ Sessions have a version field in the header:
|
|
|
26
26
|
|
|
27
27
|
Existing sessions are automatically migrated to the current version (v3) when loaded.
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## Source Files
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
- [`packages/agent
|
|
33
|
-
- [`packages/
|
|
31
|
+
Source on GitHub ([pi-mono](https://github.com/badlogic/pi-mono)):
|
|
32
|
+
- [`packages/coding-agent/src/core/session-manager.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/session-manager.ts) - Session entry types and SessionManager
|
|
33
|
+
- [`packages/coding-agent/src/core/messages.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/messages.ts) - Extended message types (BashExecutionMessage, CustomMessage, etc.)
|
|
34
|
+
- [`packages/ai/src/types.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/types.ts) - Base message types (UserMessage, AssistantMessage, ToolResultMessage)
|
|
35
|
+
- [`packages/agent/src/types.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/agent/src/types.ts) - AgentMessage union type
|
|
36
|
+
|
|
37
|
+
For TypeScript definitions in your project, inspect `node_modules/@mariozechner/pi-coding-agent/dist/` and `node_modules/@mariozechner/pi-ai/dist/`.
|
|
38
|
+
|
|
39
|
+
## Message Types
|
|
40
|
+
|
|
41
|
+
Session entries contain `AgentMessage` objects. Understanding these types is essential for parsing sessions and writing extensions.
|
|
42
|
+
|
|
43
|
+
### Content Blocks
|
|
44
|
+
|
|
45
|
+
Messages contain arrays of typed content blocks:
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
interface TextContent {
|
|
49
|
+
type: "text";
|
|
50
|
+
text: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
interface ImageContent {
|
|
54
|
+
type: "image";
|
|
55
|
+
data: string; // base64 encoded
|
|
56
|
+
mimeType: string; // e.g., "image/jpeg", "image/png"
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
interface ThinkingContent {
|
|
60
|
+
type: "thinking";
|
|
61
|
+
thinking: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
interface ToolCall {
|
|
65
|
+
type: "toolCall";
|
|
66
|
+
id: string;
|
|
67
|
+
name: string;
|
|
68
|
+
arguments: Record<string, any>;
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Base Message Types (from pi-ai)
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
interface UserMessage {
|
|
76
|
+
role: "user";
|
|
77
|
+
content: string | (TextContent | ImageContent)[];
|
|
78
|
+
timestamp: number; // Unix ms
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
interface AssistantMessage {
|
|
82
|
+
role: "assistant";
|
|
83
|
+
content: (TextContent | ThinkingContent | ToolCall)[];
|
|
84
|
+
api: string;
|
|
85
|
+
provider: string;
|
|
86
|
+
model: string;
|
|
87
|
+
usage: Usage;
|
|
88
|
+
stopReason: "stop" | "length" | "toolUse" | "error" | "aborted";
|
|
89
|
+
errorMessage?: string;
|
|
90
|
+
timestamp: number;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
interface ToolResultMessage {
|
|
94
|
+
role: "toolResult";
|
|
95
|
+
toolCallId: string;
|
|
96
|
+
toolName: string;
|
|
97
|
+
content: (TextContent | ImageContent)[];
|
|
98
|
+
details?: any; // Tool-specific metadata
|
|
99
|
+
isError: boolean;
|
|
100
|
+
timestamp: number;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
interface Usage {
|
|
104
|
+
input: number;
|
|
105
|
+
output: number;
|
|
106
|
+
cacheRead: number;
|
|
107
|
+
cacheWrite: number;
|
|
108
|
+
totalTokens: number;
|
|
109
|
+
cost: {
|
|
110
|
+
input: number;
|
|
111
|
+
output: number;
|
|
112
|
+
cacheRead: number;
|
|
113
|
+
cacheWrite: number;
|
|
114
|
+
total: number;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Extended Message Types (from pi-coding-agent)
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
interface BashExecutionMessage {
|
|
123
|
+
role: "bashExecution";
|
|
124
|
+
command: string;
|
|
125
|
+
output: string;
|
|
126
|
+
exitCode: number | undefined;
|
|
127
|
+
cancelled: boolean;
|
|
128
|
+
truncated: boolean;
|
|
129
|
+
fullOutputPath?: string;
|
|
130
|
+
excludeFromContext?: boolean; // true for !! prefix commands
|
|
131
|
+
timestamp: number;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
interface CustomMessage {
|
|
135
|
+
role: "custom";
|
|
136
|
+
customType: string; // Extension identifier
|
|
137
|
+
content: string | (TextContent | ImageContent)[];
|
|
138
|
+
display: boolean; // Show in TUI
|
|
139
|
+
details?: any; // Extension-specific metadata
|
|
140
|
+
timestamp: number;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
interface BranchSummaryMessage {
|
|
144
|
+
role: "branchSummary";
|
|
145
|
+
summary: string;
|
|
146
|
+
fromId: string; // Entry we branched from
|
|
147
|
+
timestamp: number;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
interface CompactionSummaryMessage {
|
|
151
|
+
role: "compactionSummary";
|
|
152
|
+
summary: string;
|
|
153
|
+
tokensBefore: number;
|
|
154
|
+
timestamp: number;
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### AgentMessage Union
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
type AgentMessage =
|
|
162
|
+
| UserMessage
|
|
163
|
+
| AssistantMessage
|
|
164
|
+
| ToolResultMessage
|
|
165
|
+
| BashExecutionMessage
|
|
166
|
+
| CustomMessage
|
|
167
|
+
| BranchSummaryMessage
|
|
168
|
+
| CompactionSummaryMessage;
|
|
169
|
+
```
|
|
34
170
|
|
|
35
171
|
## Entry Base
|
|
36
172
|
|
|
@@ -96,8 +232,8 @@ Created when context is compacted. Stores a summary of earlier messages.
|
|
|
96
232
|
```
|
|
97
233
|
|
|
98
234
|
Optional fields:
|
|
99
|
-
- `details`:
|
|
100
|
-
- `fromHook`: `true` if generated by an extension, `false`/`undefined` if pi-generated
|
|
235
|
+
- `details`: Implementation-specific data (e.g., `{ readFiles: string[], modifiedFiles: string[] }` for default, or custom data for extensions)
|
|
236
|
+
- `fromHook`: `true` if generated by an extension, `false`/`undefined` if pi-generated (legacy field name)
|
|
101
237
|
|
|
102
238
|
### BranchSummaryEntry
|
|
103
239
|
|
|
@@ -108,8 +244,8 @@ Created when switching branches via `/tree` with an LLM generated summary of the
|
|
|
108
244
|
```
|
|
109
245
|
|
|
110
246
|
Optional fields:
|
|
111
|
-
- `details`: File tracking data (`{ readFiles: string[], modifiedFiles: string[] }`) for default
|
|
112
|
-
- `fromHook`: `true` if generated by an extension
|
|
247
|
+
- `details`: File tracking data (`{ readFiles: string[], modifiedFiles: string[] }`) for default, or custom data for extensions
|
|
248
|
+
- `fromHook`: `true` if generated by an extension, `false`/`undefined` if pi-generated (legacy field name)
|
|
113
249
|
|
|
114
250
|
### CustomEntry
|
|
115
251
|
|
|
@@ -224,15 +360,25 @@ for (const line of lines) {
|
|
|
224
360
|
|
|
225
361
|
## SessionManager API
|
|
226
362
|
|
|
227
|
-
Key methods for working with sessions programmatically
|
|
363
|
+
Key methods for working with sessions programmatically.
|
|
228
364
|
|
|
229
|
-
### Creation
|
|
365
|
+
### Static Creation Methods
|
|
230
366
|
- `SessionManager.create(cwd, sessionDir?)` - New session
|
|
231
|
-
- `SessionManager.open(path, sessionDir?)` - Open existing
|
|
367
|
+
- `SessionManager.open(path, sessionDir?)` - Open existing session file
|
|
232
368
|
- `SessionManager.continueRecent(cwd, sessionDir?)` - Continue most recent or create new
|
|
233
369
|
- `SessionManager.inMemory(cwd?)` - No file persistence
|
|
370
|
+
- `SessionManager.forkFrom(sourcePath, targetCwd, sessionDir?)` - Fork session from another project
|
|
371
|
+
|
|
372
|
+
### Static Listing Methods
|
|
373
|
+
- `SessionManager.list(cwd, sessionDir?, onProgress?)` - List sessions for a directory
|
|
374
|
+
- `SessionManager.listAll(onProgress?)` - List all sessions across all projects
|
|
375
|
+
|
|
376
|
+
### Instance Methods - Session Management
|
|
377
|
+
- `newSession(options?)` - Start a new session (options: `{ parentSession?: string }`)
|
|
378
|
+
- `setSessionFile(path)` - Switch to a different session file
|
|
379
|
+
- `createBranchedSession(leafId)` - Extract branch to new session file
|
|
234
380
|
|
|
235
|
-
### Appending (all return entry ID)
|
|
381
|
+
### Instance Methods - Appending (all return entry ID)
|
|
236
382
|
- `appendMessage(message)` - Add message
|
|
237
383
|
- `appendThinkingLevelChange(level)` - Record thinking change
|
|
238
384
|
- `appendModelChange(provider, modelId)` - Record model change
|
|
@@ -242,7 +388,7 @@ Key methods for working with sessions programmatically:
|
|
|
242
388
|
- `appendCustomMessageEntry(customType, content, display, details?)` - Extension message (in context)
|
|
243
389
|
- `appendLabelChange(targetId, label)` - Set/clear label
|
|
244
390
|
|
|
245
|
-
### Tree Navigation
|
|
391
|
+
### Instance Methods - Tree Navigation
|
|
246
392
|
- `getLeafId()` - Current position
|
|
247
393
|
- `getLeafEntry()` - Get current leaf entry
|
|
248
394
|
- `getEntry(id)` - Get entry by ID
|
|
@@ -254,8 +400,13 @@ Key methods for working with sessions programmatically:
|
|
|
254
400
|
- `resetLeaf()` - Reset leaf to null (before any entries)
|
|
255
401
|
- `branchWithSummary(entryId, summary, details?, fromHook?)` - Branch with context summary
|
|
256
402
|
|
|
257
|
-
### Context
|
|
258
|
-
- `buildSessionContext()` - Get messages for LLM
|
|
403
|
+
### Instance Methods - Context & Info
|
|
404
|
+
- `buildSessionContext()` - Get messages, thinkingLevel, and model for LLM
|
|
259
405
|
- `getEntries()` - All entries (excluding header)
|
|
260
|
-
- `getHeader()` - Session metadata
|
|
406
|
+
- `getHeader()` - Session header metadata
|
|
261
407
|
- `getSessionName()` - Get display name from latest session_info entry
|
|
408
|
+
- `getCwd()` - Working directory
|
|
409
|
+
- `getSessionDir()` - Session storage directory
|
|
410
|
+
- `getSessionId()` - Session UUID
|
|
411
|
+
- `getSessionFile()` - Session file path (undefined for in-memory)
|
|
412
|
+
- `isPersisted()` - Whether session is saved to disk
|
package/docs/settings.md
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# Settings
|
|
2
|
+
|
|
3
|
+
Pi uses JSON settings files with project settings overriding global settings.
|
|
4
|
+
|
|
5
|
+
| Location | Scope |
|
|
6
|
+
|----------|-------|
|
|
7
|
+
| `~/.pi/agent/settings.json` | Global (all projects) |
|
|
8
|
+
| `.pi/settings.json` | Project (current directory) |
|
|
9
|
+
|
|
10
|
+
Edit directly or use `/settings` for common options.
|
|
11
|
+
|
|
12
|
+
## All Settings
|
|
13
|
+
|
|
14
|
+
### Model & Thinking
|
|
15
|
+
|
|
16
|
+
| Setting | Type | Default | Description |
|
|
17
|
+
|---------|------|---------|-------------|
|
|
18
|
+
| `defaultProvider` | string | - | Default provider (e.g., `"anthropic"`, `"openai"`) |
|
|
19
|
+
| `defaultModel` | string | - | Default model ID |
|
|
20
|
+
| `defaultThinkingLevel` | string | - | `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"` |
|
|
21
|
+
| `hideThinkingBlock` | boolean | `false` | Hide thinking blocks in output |
|
|
22
|
+
| `thinkingBudgets` | object | - | Custom token budgets per thinking level |
|
|
23
|
+
|
|
24
|
+
#### thinkingBudgets
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"thinkingBudgets": {
|
|
29
|
+
"minimal": 1024,
|
|
30
|
+
"low": 4096,
|
|
31
|
+
"medium": 10240,
|
|
32
|
+
"high": 32768
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### UI & Display
|
|
38
|
+
|
|
39
|
+
| Setting | Type | Default | Description |
|
|
40
|
+
|---------|------|---------|-------------|
|
|
41
|
+
| `theme` | string | `"dark"` | Theme name (`"dark"`, `"light"`, or custom) |
|
|
42
|
+
| `quietStartup` | boolean | `false` | Hide startup header |
|
|
43
|
+
| `collapseChangelog` | boolean | `false` | Show condensed changelog after updates |
|
|
44
|
+
| `doubleEscapeAction` | string | `"tree"` | Action for double-escape: `"tree"` or `"fork"` |
|
|
45
|
+
| `editorPaddingX` | number | `0` | Horizontal padding for input editor (0-3) |
|
|
46
|
+
| `showHardwareCursor` | boolean | `false` | Show terminal cursor |
|
|
47
|
+
|
|
48
|
+
### Compaction
|
|
49
|
+
|
|
50
|
+
| Setting | Type | Default | Description |
|
|
51
|
+
|---------|------|---------|-------------|
|
|
52
|
+
| `compaction.enabled` | boolean | `true` | Enable auto-compaction |
|
|
53
|
+
| `compaction.reserveTokens` | number | `16384` | Tokens reserved for LLM response |
|
|
54
|
+
| `compaction.keepRecentTokens` | number | `20000` | Recent tokens to keep (not summarized) |
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"compaction": {
|
|
59
|
+
"enabled": true,
|
|
60
|
+
"reserveTokens": 16384,
|
|
61
|
+
"keepRecentTokens": 20000
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Branch Summary
|
|
67
|
+
|
|
68
|
+
| Setting | Type | Default | Description |
|
|
69
|
+
|---------|------|---------|-------------|
|
|
70
|
+
| `branchSummary.reserveTokens` | number | `16384` | Tokens reserved for branch summarization |
|
|
71
|
+
|
|
72
|
+
### Retry
|
|
73
|
+
|
|
74
|
+
| Setting | Type | Default | Description |
|
|
75
|
+
|---------|------|---------|-------------|
|
|
76
|
+
| `retry.enabled` | boolean | `true` | Enable automatic retry on transient errors |
|
|
77
|
+
| `retry.maxRetries` | number | `3` | Maximum retry attempts |
|
|
78
|
+
| `retry.baseDelayMs` | number | `2000` | Base delay for exponential backoff (2s, 4s, 8s) |
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"retry": {
|
|
83
|
+
"enabled": true,
|
|
84
|
+
"maxRetries": 3,
|
|
85
|
+
"baseDelayMs": 2000
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Message Delivery
|
|
91
|
+
|
|
92
|
+
| Setting | Type | Default | Description |
|
|
93
|
+
|---------|------|---------|-------------|
|
|
94
|
+
| `steeringMode` | string | `"one-at-a-time"` | How steering messages are sent: `"all"` or `"one-at-a-time"` |
|
|
95
|
+
| `followUpMode` | string | `"one-at-a-time"` | How follow-up messages are sent: `"all"` or `"one-at-a-time"` |
|
|
96
|
+
|
|
97
|
+
### Terminal & Images
|
|
98
|
+
|
|
99
|
+
| Setting | Type | Default | Description |
|
|
100
|
+
|---------|------|---------|-------------|
|
|
101
|
+
| `terminal.showImages` | boolean | `true` | Show images in terminal (if supported) |
|
|
102
|
+
| `images.autoResize` | boolean | `true` | Resize images to 2000x2000 max |
|
|
103
|
+
| `images.blockImages` | boolean | `false` | Block all images from being sent to LLM |
|
|
104
|
+
|
|
105
|
+
### Shell
|
|
106
|
+
|
|
107
|
+
| Setting | Type | Default | Description |
|
|
108
|
+
|---------|------|---------|-------------|
|
|
109
|
+
| `shellPath` | string | - | Custom shell path (e.g., for Cygwin on Windows) |
|
|
110
|
+
| `shellCommandPrefix` | string | - | Prefix for every bash command (e.g., `"shopt -s expand_aliases"`) |
|
|
111
|
+
|
|
112
|
+
### Model Cycling
|
|
113
|
+
|
|
114
|
+
| Setting | Type | Default | Description |
|
|
115
|
+
|---------|------|---------|-------------|
|
|
116
|
+
| `enabledModels` | string[] | - | Model patterns for Ctrl+P cycling (same format as `--models` CLI flag) |
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{
|
|
120
|
+
"enabledModels": ["claude-*", "gpt-4o", "gemini-2*"]
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Markdown
|
|
125
|
+
|
|
126
|
+
| Setting | Type | Default | Description |
|
|
127
|
+
|---------|------|---------|-------------|
|
|
128
|
+
| `markdown.codeBlockIndent` | string | `" "` | Indentation for code blocks |
|
|
129
|
+
|
|
130
|
+
### Resources
|
|
131
|
+
|
|
132
|
+
These settings define where to load extensions, skills, prompts, and themes from.
|
|
133
|
+
|
|
134
|
+
Paths in `~/.pi/agent/settings.json` resolve relative to `~/.pi/agent`. Paths in `.pi/settings.json` resolve relative to `.pi`. Absolute paths and `~` are supported.
|
|
135
|
+
|
|
136
|
+
| Setting | Type | Default | Description |
|
|
137
|
+
|---------|------|---------|-------------|
|
|
138
|
+
| `packages` | array | `[]` | npm/git packages to load resources from |
|
|
139
|
+
| `extensions` | string[] | `[]` | Local extension file paths or directories |
|
|
140
|
+
| `skills` | string[] | `[]` | Local skill file paths or directories |
|
|
141
|
+
| `prompts` | string[] | `[]` | Local prompt template paths or directories |
|
|
142
|
+
| `themes` | string[] | `[]` | Local theme file paths or directories |
|
|
143
|
+
| `enableSkillCommands` | boolean | `true` | Register skills as `/skill:name` commands |
|
|
144
|
+
|
|
145
|
+
Arrays support glob patterns and exclusions. Use `!pattern` to exclude. Use `+path` to force-include an exact path and `-path` to force-exclude an exact path.
|
|
146
|
+
|
|
147
|
+
#### packages
|
|
148
|
+
|
|
149
|
+
String form loads all resources from a package:
|
|
150
|
+
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"packages": ["pi-skills", "@org/my-extension"]
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Object form filters which resources to load:
|
|
158
|
+
|
|
159
|
+
```json
|
|
160
|
+
{
|
|
161
|
+
"packages": [
|
|
162
|
+
{
|
|
163
|
+
"source": "pi-skills",
|
|
164
|
+
"skills": ["brave-search", "transcribe"],
|
|
165
|
+
"extensions": []
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
See [packages.md](packages.md) for package management details.
|
|
172
|
+
|
|
173
|
+
## Example
|
|
174
|
+
|
|
175
|
+
```json
|
|
176
|
+
{
|
|
177
|
+
"defaultProvider": "anthropic",
|
|
178
|
+
"defaultModel": "claude-sonnet-4-20250514",
|
|
179
|
+
"defaultThinkingLevel": "medium",
|
|
180
|
+
"theme": "dark",
|
|
181
|
+
"compaction": {
|
|
182
|
+
"enabled": true,
|
|
183
|
+
"reserveTokens": 16384,
|
|
184
|
+
"keepRecentTokens": 20000
|
|
185
|
+
},
|
|
186
|
+
"retry": {
|
|
187
|
+
"enabled": true,
|
|
188
|
+
"maxRetries": 3
|
|
189
|
+
},
|
|
190
|
+
"enabledModels": ["claude-*", "gpt-4o"],
|
|
191
|
+
"packages": ["pi-skills"]
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Project Overrides
|
|
196
|
+
|
|
197
|
+
Project settings (`.pi/settings.json`) override global settings. Nested objects are merged:
|
|
198
|
+
|
|
199
|
+
```json
|
|
200
|
+
// ~/.pi/agent/settings.json (global)
|
|
201
|
+
{
|
|
202
|
+
"theme": "dark",
|
|
203
|
+
"compaction": { "enabled": true, "reserveTokens": 16384 }
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// .pi/settings.json (project)
|
|
207
|
+
{
|
|
208
|
+
"compaction": { "reserveTokens": 8192 }
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Result
|
|
212
|
+
{
|
|
213
|
+
"theme": "dark",
|
|
214
|
+
"compaction": { "enabled": true, "reserveTokens": 8192 }
|
|
215
|
+
}
|
|
216
|
+
```
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Shell Aliases
|
|
2
|
+
|
|
3
|
+
Pi runs bash in non-interactive mode (`bash -c`), which doesn't expand aliases by default.
|
|
4
|
+
|
|
5
|
+
To enable your shell aliases, add to `~/.pi/agent/settings.json`:
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"shellCommandPrefix": "shopt -s expand_aliases\neval \"$(grep '^alias ' ~/.zshrc)\""
|
|
10
|
+
}
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Adjust the path (`~/.zshrc`, `~/.bashrc`, etc.) to match your shell config.
|