@earendil-works/pi-coding-agent 0.80.3 → 0.80.6

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 (172) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/README.md +2 -2
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +4 -4
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/cli/config-selector.d.ts +4 -2
  7. package/dist/cli/config-selector.d.ts.map +1 -1
  8. package/dist/cli/config-selector.js +1 -1
  9. package/dist/cli/config-selector.js.map +1 -1
  10. package/dist/core/agent-session.d.ts +20 -4
  11. package/dist/core/agent-session.d.ts.map +1 -1
  12. package/dist/core/agent-session.js +95 -22
  13. package/dist/core/agent-session.js.map +1 -1
  14. package/dist/core/auth-storage.d.ts.map +1 -1
  15. package/dist/core/auth-storage.js +13 -5
  16. package/dist/core/auth-storage.js.map +1 -1
  17. package/dist/core/cache-stats.d.ts +49 -0
  18. package/dist/core/cache-stats.d.ts.map +1 -0
  19. package/dist/core/cache-stats.js +101 -0
  20. package/dist/core/cache-stats.js.map +1 -0
  21. package/dist/core/compaction/compaction.d.ts +1 -2
  22. package/dist/core/compaction/compaction.d.ts.map +1 -1
  23. package/dist/core/compaction/compaction.js +56 -81
  24. package/dist/core/compaction/compaction.js.map +1 -1
  25. package/dist/core/extensions/index.d.ts +1 -1
  26. package/dist/core/extensions/index.d.ts.map +1 -1
  27. package/dist/core/extensions/index.js.map +1 -1
  28. package/dist/core/extensions/loader.d.ts.map +1 -1
  29. package/dist/core/extensions/loader.js +6 -0
  30. package/dist/core/extensions/loader.js.map +1 -1
  31. package/dist/core/extensions/runner.d.ts +5 -3
  32. package/dist/core/extensions/runner.d.ts.map +1 -1
  33. package/dist/core/extensions/runner.js +38 -0
  34. package/dist/core/extensions/runner.js.map +1 -1
  35. package/dist/core/extensions/types.d.ts +33 -11
  36. package/dist/core/extensions/types.d.ts.map +1 -1
  37. package/dist/core/extensions/types.js.map +1 -1
  38. package/dist/core/index.d.ts +1 -1
  39. package/dist/core/index.d.ts.map +1 -1
  40. package/dist/core/index.js.map +1 -1
  41. package/dist/core/keybindings.d.ts.map +1 -1
  42. package/dist/core/keybindings.js +3 -6
  43. package/dist/core/keybindings.js.map +1 -1
  44. package/dist/core/model-registry.d.ts +4 -6
  45. package/dist/core/model-registry.d.ts.map +1 -1
  46. package/dist/core/model-registry.js +34 -8
  47. package/dist/core/model-registry.js.map +1 -1
  48. package/dist/core/model-resolver.d.ts +10 -0
  49. package/dist/core/model-resolver.d.ts.map +1 -1
  50. package/dist/core/model-resolver.js +14 -17
  51. package/dist/core/model-resolver.js.map +1 -1
  52. package/dist/core/package-manager.d.ts +4 -1
  53. package/dist/core/package-manager.d.ts.map +1 -1
  54. package/dist/core/package-manager.js +68 -26
  55. package/dist/core/package-manager.js.map +1 -1
  56. package/dist/core/provider-attribution.d.ts.map +1 -1
  57. package/dist/core/provider-attribution.js +0 -10
  58. package/dist/core/provider-attribution.js.map +1 -1
  59. package/dist/core/resource-loader.d.ts +2 -2
  60. package/dist/core/resource-loader.d.ts.map +1 -1
  61. package/dist/core/resource-loader.js +6 -7
  62. package/dist/core/resource-loader.js.map +1 -1
  63. package/dist/core/sdk.d.ts +1 -1
  64. package/dist/core/sdk.d.ts.map +1 -1
  65. package/dist/core/sdk.js +8 -1
  66. package/dist/core/sdk.js.map +1 -1
  67. package/dist/core/session-manager.d.ts +20 -1
  68. package/dist/core/session-manager.d.ts.map +1 -1
  69. package/dist/core/session-manager.js +97 -68
  70. package/dist/core/session-manager.js.map +1 -1
  71. package/dist/core/settings-manager.d.ts +9 -3
  72. package/dist/core/settings-manager.d.ts.map +1 -1
  73. package/dist/core/settings-manager.js +10 -1
  74. package/dist/core/settings-manager.js.map +1 -1
  75. package/dist/core/slash-commands.d.ts +1 -0
  76. package/dist/core/slash-commands.d.ts.map +1 -1
  77. package/dist/core/slash-commands.js +3 -3
  78. package/dist/core/slash-commands.js.map +1 -1
  79. package/dist/core/tools/bash.d.ts.map +1 -1
  80. package/dist/core/tools/bash.js +20 -5
  81. package/dist/core/tools/bash.js.map +1 -1
  82. package/dist/core/tools/edit.d.ts.map +1 -1
  83. package/dist/core/tools/edit.js +2 -2
  84. package/dist/core/tools/edit.js.map +1 -1
  85. package/dist/index.d.ts +3 -2
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +2 -1
  88. package/dist/index.js.map +1 -1
  89. package/dist/main.d.ts +2 -2
  90. package/dist/main.d.ts.map +1 -1
  91. package/dist/main.js +1 -0
  92. package/dist/main.js.map +1 -1
  93. package/dist/modes/interactive/components/config-selector.d.ts +34 -3
  94. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  95. package/dist/modes/interactive/components/config-selector.js +280 -25
  96. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  97. package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  98. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  99. package/dist/modes/interactive/components/custom-entry.js +52 -0
  100. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  101. package/dist/modes/interactive/components/footer.d.ts +4 -0
  102. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  103. package/dist/modes/interactive/components/footer.js +1 -1
  104. package/dist/modes/interactive/components/footer.js.map +1 -1
  105. package/dist/modes/interactive/components/oauth-selector.d.ts +3 -1
  106. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  107. package/dist/modes/interactive/components/oauth-selector.js +17 -6
  108. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  109. package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  110. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  111. package/dist/modes/interactive/components/settings-selector.js +12 -1
  112. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  113. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  114. package/dist/modes/interactive/components/thinking-selector.js +2 -1
  115. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  116. package/dist/modes/interactive/interactive-mode.d.ts +15 -3
  117. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  118. package/dist/modes/interactive/interactive-mode.js +302 -61
  119. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  120. package/dist/modes/interactive/theme/dark.json +1 -0
  121. package/dist/modes/interactive/theme/light.json +1 -0
  122. package/dist/modes/interactive/theme/theme-schema.json +6 -2
  123. package/dist/modes/interactive/theme/theme.d.ts +3 -2
  124. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  125. package/dist/modes/interactive/theme/theme.js +10 -3
  126. package/dist/modes/interactive/theme/theme.js.map +1 -1
  127. package/dist/modes/print-mode.d.ts.map +1 -1
  128. package/dist/modes/print-mode.js +1 -1
  129. package/dist/modes/print-mode.js.map +1 -1
  130. package/dist/modes/rpc/rpc-client.d.ts +6 -6
  131. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  132. package/dist/modes/rpc/rpc-client.js +3 -3
  133. package/dist/modes/rpc/rpc-client.js.map +1 -1
  134. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  135. package/dist/modes/rpc/rpc-mode.js +4 -1
  136. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  137. package/dist/package-manager-cli.d.ts +2 -2
  138. package/dist/package-manager-cli.d.ts.map +1 -1
  139. package/dist/package-manager-cli.js +71 -17
  140. package/dist/package-manager-cli.js.map +1 -1
  141. package/dist/utils/clipboard-image.d.ts.map +1 -1
  142. package/dist/utils/clipboard-image.js +1 -1
  143. package/dist/utils/clipboard-image.js.map +1 -1
  144. package/docs/custom-provider.md +4 -3
  145. package/docs/extensions.md +75 -18
  146. package/docs/models.md +49 -8
  147. package/docs/packages.md +2 -2
  148. package/docs/rpc.md +15 -5
  149. package/docs/sdk.md +51 -1
  150. package/docs/session-format.md +18 -8
  151. package/docs/settings.md +3 -2
  152. package/docs/themes.md +5 -3
  153. package/docs/tui.md +1 -1
  154. package/docs/usage.md +2 -2
  155. package/examples/extensions/README.md +1 -0
  156. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  157. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  158. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  159. package/examples/extensions/entry-renderer.ts +41 -0
  160. package/examples/extensions/gondolin/package-lock.json +2 -2
  161. package/examples/extensions/gondolin/package.json +1 -1
  162. package/examples/extensions/preset.ts +2 -2
  163. package/examples/extensions/question.ts +1 -0
  164. package/examples/extensions/reload-runtime.ts +2 -2
  165. package/examples/extensions/sandbox/package-lock.json +2 -2
  166. package/examples/extensions/sandbox/package.json +1 -1
  167. package/examples/extensions/with-deps/package-lock.json +2 -2
  168. package/examples/extensions/with-deps/package.json +1 -1
  169. package/examples/sdk/12-full-control.ts +1 -1
  170. package/examples/sdk/README.md +1 -1
  171. package/npm-shrinkwrap.json +12 -12
  172. package/package.json +4 -4
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Custom entry rendering example.
3
+ *
4
+ * Shows how to render durable extension data inside the chat without sending it
5
+ * to the LLM. Custom entries are stored in the session via pi.appendEntry() and
6
+ * rendered in interactive mode via pi.registerEntryRenderer().
7
+ *
8
+ * Usage: /status-card [message]
9
+ */
10
+
11
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
12
+ import { Box, Text } from "@earendil-works/pi-tui";
13
+
14
+ interface StatusCardData {
15
+ message: string;
16
+ timestamp: number;
17
+ }
18
+
19
+ export default function (pi: ExtensionAPI) {
20
+ pi.registerEntryRenderer<StatusCardData>("status-card", (entry, { expanded }, theme) => {
21
+ const data = entry.data ?? { message: "No data", timestamp: Date.now() };
22
+ const box = new Box(1, 1, (text) => theme.bg("customMessageBg", text));
23
+ box.addChild(new Text(`${theme.fg("accent", "[status]")} ${data.message}`, 0, 0));
24
+
25
+ if (expanded) {
26
+ box.addChild(new Text(theme.fg("dim", new Date(data.timestamp).toLocaleString()), 0, 0));
27
+ }
28
+
29
+ return box;
30
+ });
31
+
32
+ pi.registerCommand("status-card", {
33
+ description: "Render a durable status card that is not sent to the LLM",
34
+ handler: async (args) => {
35
+ pi.appendEntry<StatusCardData>("status-card", {
36
+ message: args.trim() || "Status card",
37
+ timestamp: Date.now(),
38
+ });
39
+ },
40
+ });
41
+ }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-gondolin",
3
- "version": "0.80.3",
3
+ "version": "0.80.6",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-gondolin",
9
- "version": "0.80.3",
9
+ "version": "0.80.6",
10
10
  "dependencies": {
11
11
  "@earendil-works/gondolin": "0.12.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-gondolin",
3
3
  "private": true,
4
- "version": "0.80.3",
4
+ "version": "0.80.6",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -52,7 +52,7 @@ interface Preset {
52
52
  /** Model ID (e.g., "claude-sonnet-4-5") */
53
53
  model?: string;
54
54
  /** Thinking level */
55
- thinkingLevel?: "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
55
+ thinkingLevel?: "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
56
56
  /** Tools to enable (replaces default set) */
57
57
  tools?: string[];
58
58
  /** Instructions to append to system prompt */
@@ -100,7 +100,7 @@ function loadPresets(cwd: string): PresetsConfig {
100
100
 
101
101
  interface OriginalState {
102
102
  model: Model<Api> | undefined;
103
- thinkingLevel: "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
103
+ thinkingLevel: "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
104
104
  tools: string[];
105
105
  }
106
106
 
@@ -47,6 +47,7 @@ export default function question(pi: ExtensionAPI) {
47
47
  label: "Question",
48
48
  description: "Ask the user a question and let them pick from options. Use when you need user input to proceed.",
49
49
  parameters: QuestionParams,
50
+ executionMode: "sequential",
50
51
 
51
52
  async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
52
53
  if (ctx.mode !== "tui") {
@@ -12,7 +12,7 @@ export default function (pi: ExtensionAPI) {
12
12
  // Command entrypoint for reload.
13
13
  // Treat reload as terminal for this handler.
14
14
  pi.registerCommand("reload-runtime", {
15
- description: "Reload extensions, skills, prompts, and themes",
15
+ description: "Reload extensions, skills, prompts, themes, and context files",
16
16
  handler: async (_args, ctx) => {
17
17
  await ctx.reload();
18
18
  return;
@@ -24,7 +24,7 @@ export default function (pi: ExtensionAPI) {
24
24
  pi.registerTool({
25
25
  name: "reload_runtime",
26
26
  label: "Reload Runtime",
27
- description: "Reload extensions, skills, prompts, and themes",
27
+ description: "Reload extensions, skills, prompts, themes, and context files",
28
28
  parameters: Type.Object({}),
29
29
  async execute() {
30
30
  pi.sendUserMessage("/reload-runtime", { deliverAs: "followUp" });
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
- "version": "1.10.3",
3
+ "version": "1.10.6",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-sandbox",
9
- "version": "1.10.3",
9
+ "version": "1.10.6",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sandbox-runtime": "^0.0.26"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
3
  "private": true,
4
- "version": "1.10.3",
4
+ "version": "1.10.6",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
- "version": "0.80.3",
3
+ "version": "0.80.6",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-with-deps",
9
- "version": "0.80.3",
9
+ "version": "0.80.6",
10
10
  "dependencies": {
11
11
  "ms": "^2.1.3"
12
12
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
3
  "private": true,
4
- "version": "0.80.3",
4
+ "version": "0.80.6",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -26,7 +26,7 @@ if (process.env.MY_ANTHROPIC_KEY) {
26
26
  // Model registry with no custom models.json
27
27
  const modelRegistry = ModelRegistry.inMemory(authStorage);
28
28
 
29
- const model = getModel("anthropic", "claude-sonnet-4-20250514");
29
+ const model = getModel("anthropic", "claude-sonnet-4-5");
30
30
  if (!model) throw new Error("Model not found");
31
31
 
32
32
  // In-memory settings with overrides
@@ -116,7 +116,7 @@ await session.prompt("Hello");
116
116
  | `thinkingLevel` | From settings/"off" | off, low, medium, high |
117
117
  | `tools` | `["read", "bash", "edit", "write"]` built-ins | Allowlist tool names across built-in, extension, and custom tools |
118
118
  | `customTools` | `[]` | Additional tool definitions |
119
- | `resourceLoader` | DefaultResourceLoader | Resource loader for extensions, skills, prompts, themes |
119
+ | `resourceLoader` | DefaultResourceLoader | Resource loader for extensions, skills, prompts, themes, and context files |
120
120
  | `sessionManager` | `SessionManager.create(cwd)` | Persistence |
121
121
  | `settingsManager` | `SettingsManager.create(cwd, agentDir)` | Settings overrides |
122
122
 
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@earendil-works/pi-coding-agent",
3
- "version": "0.80.3",
3
+ "version": "0.80.6",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@earendil-works/pi-coding-agent",
9
- "version": "0.80.3",
9
+ "version": "0.80.6",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "@earendil-works/pi-agent-core": "^0.80.3",
13
- "@earendil-works/pi-ai": "^0.80.3",
14
- "@earendil-works/pi-tui": "^0.80.3",
12
+ "@earendil-works/pi-agent-core": "^0.80.6",
13
+ "@earendil-works/pi-ai": "^0.80.6",
14
+ "@earendil-works/pi-tui": "^0.80.6",
15
15
  "@silvia-odwyer/photon-node": "0.3.4",
16
16
  "chalk": "5.6.2",
17
17
  "cross-spawn": "7.0.6",
@@ -474,11 +474,11 @@
474
474
  }
475
475
  },
476
476
  "node_modules/@earendil-works/pi-agent-core": {
477
- "version": "0.80.3",
478
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.80.3.tgz",
477
+ "version": "0.80.6",
478
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.80.6.tgz",
479
479
  "license": "MIT",
480
480
  "dependencies": {
481
- "@earendil-works/pi-ai": "^0.80.3",
481
+ "@earendil-works/pi-ai": "^0.80.6",
482
482
  "ignore": "7.0.5",
483
483
  "typebox": "1.1.38",
484
484
  "yaml": "2.9.0"
@@ -488,8 +488,8 @@
488
488
  }
489
489
  },
490
490
  "node_modules/@earendil-works/pi-ai": {
491
- "version": "0.80.3",
492
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.3.tgz",
491
+ "version": "0.80.6",
492
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.6.tgz",
493
493
  "license": "MIT",
494
494
  "dependencies": {
495
495
  "@anthropic-ai/sdk": "0.91.1",
@@ -512,8 +512,8 @@
512
512
  }
513
513
  },
514
514
  "node_modules/@earendil-works/pi-tui": {
515
- "version": "0.80.3",
516
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.80.3.tgz",
515
+ "version": "0.80.6",
516
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.80.6.tgz",
517
517
  "license": "MIT",
518
518
  "dependencies": {
519
519
  "get-east-asian-width": "1.6.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@earendil-works/pi-coding-agent",
3
- "version": "0.80.3",
3
+ "version": "0.80.6",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "piConfig": {
@@ -39,9 +39,9 @@
39
39
  "prepublishOnly": "npm run clean && npm run build && npm run shrinkwrap"
40
40
  },
41
41
  "dependencies": {
42
- "@earendil-works/pi-agent-core": "^0.80.3",
43
- "@earendil-works/pi-ai": "^0.80.3",
44
- "@earendil-works/pi-tui": "^0.80.3",
42
+ "@earendil-works/pi-agent-core": "^0.80.6",
43
+ "@earendil-works/pi-ai": "^0.80.6",
44
+ "@earendil-works/pi-tui": "^0.80.6",
45
45
  "@silvia-odwyer/photon-node": "0.3.4",
46
46
  "chalk": "5.6.2",
47
47
  "cross-spawn": "7.0.6",