@codex-infinity/pi-infinity 0.63.3 → 0.64.2

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 (112) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +7 -3
  3. package/dist/core/agent-session-runtime.d.ts +134 -0
  4. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  5. package/dist/core/agent-session-runtime.js +262 -0
  6. package/dist/core/agent-session-runtime.js.map +1 -0
  7. package/dist/core/agent-session.d.ts +10 -42
  8. package/dist/core/agent-session.d.ts.map +1 -1
  9. package/dist/core/agent-session.js +56 -236
  10. package/dist/core/agent-session.js.map +1 -1
  11. package/dist/core/export-html/tool-renderer.d.ts +2 -0
  12. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  13. package/dist/core/export-html/tool-renderer.js +2 -2
  14. package/dist/core/export-html/tool-renderer.js.map +1 -1
  15. package/dist/core/extensions/index.d.ts +1 -1
  16. package/dist/core/extensions/index.d.ts.map +1 -1
  17. package/dist/core/extensions/index.js.map +1 -1
  18. package/dist/core/extensions/runner.d.ts.map +1 -1
  19. package/dist/core/extensions/runner.js +1 -0
  20. package/dist/core/extensions/runner.js.map +1 -1
  21. package/dist/core/extensions/types.d.ts +11 -16
  22. package/dist/core/extensions/types.d.ts.map +1 -1
  23. package/dist/core/extensions/types.js.map +1 -1
  24. package/dist/core/footer-data-provider.d.ts +5 -1
  25. package/dist/core/footer-data-provider.d.ts.map +1 -1
  26. package/dist/core/footer-data-provider.js +69 -8
  27. package/dist/core/footer-data-provider.js.map +1 -1
  28. package/dist/core/index.d.ts +2 -1
  29. package/dist/core/index.d.ts.map +1 -1
  30. package/dist/core/index.js +1 -0
  31. package/dist/core/index.js.map +1 -1
  32. package/dist/core/keybindings.d.ts +10 -0
  33. package/dist/core/keybindings.d.ts.map +1 -1
  34. package/dist/core/keybindings.js +10 -0
  35. package/dist/core/keybindings.js.map +1 -1
  36. package/dist/core/model-registry.d.ts +3 -1
  37. package/dist/core/model-registry.d.ts.map +1 -1
  38. package/dist/core/model-registry.js +7 -1
  39. package/dist/core/model-registry.js.map +1 -1
  40. package/dist/core/sdk.d.ts +5 -2
  41. package/dist/core/sdk.d.ts.map +1 -1
  42. package/dist/core/sdk.js +5 -2
  43. package/dist/core/sdk.js.map +1 -1
  44. package/dist/core/session-manager.d.ts +3 -0
  45. package/dist/core/session-manager.d.ts.map +1 -1
  46. package/dist/core/session-manager.js +13 -6
  47. package/dist/core/session-manager.js.map +1 -1
  48. package/dist/core/tools/edit.d.ts.map +1 -1
  49. package/dist/core/tools/edit.js +15 -4
  50. package/dist/core/tools/edit.js.map +1 -1
  51. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  52. package/dist/core/tools/tool-definition-wrapper.js +2 -0
  53. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  54. package/dist/index.d.ts +2 -2
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +2 -2
  57. package/dist/index.js.map +1 -1
  58. package/dist/main.d.ts.map +1 -1
  59. package/dist/main.js +42 -10
  60. package/dist/main.js.map +1 -1
  61. package/dist/modes/interactive/components/assistant-message.d.ts +3 -1
  62. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  63. package/dist/modes/interactive/components/assistant-message.js +13 -3
  64. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  65. package/dist/modes/interactive/components/footer.d.ts +1 -0
  66. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  67. package/dist/modes/interactive/components/footer.js +4 -1
  68. package/dist/modes/interactive/components/footer.js.map +1 -1
  69. package/dist/modes/interactive/components/tree-selector.d.ts +4 -2
  70. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  71. package/dist/modes/interactive/components/tree-selector.js +48 -15
  72. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  73. package/dist/modes/interactive/interactive-mode.d.ts +11 -4
  74. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  75. package/dist/modes/interactive/interactive-mode.js +112 -89
  76. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  77. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  78. package/dist/modes/interactive/theme/theme.js +6 -11
  79. package/dist/modes/interactive/theme/theme.js.map +1 -1
  80. package/dist/modes/print-mode.d.ts +2 -2
  81. package/dist/modes/print-mode.d.ts.map +1 -1
  82. package/dist/modes/print-mode.js +37 -36
  83. package/dist/modes/print-mode.js.map +1 -1
  84. package/dist/modes/rpc/rpc-mode.d.ts +2 -2
  85. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  86. package/dist/modes/rpc/rpc-mode.js +72 -49
  87. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  88. package/docs/extensions.md +104 -19
  89. package/docs/json.md +5 -2
  90. package/docs/keybindings.md +2 -0
  91. package/docs/rpc.md +21 -7
  92. package/docs/sdk.md +168 -75
  93. package/docs/tree.md +6 -3
  94. package/examples/extensions/README.md +1 -0
  95. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  96. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  97. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  98. package/examples/extensions/custom-provider-qwen-cli/package.json +1 -1
  99. package/examples/extensions/hidden-thinking-label.ts +53 -0
  100. package/examples/extensions/rpc-demo.ts +3 -9
  101. package/examples/extensions/status-line.ts +0 -8
  102. package/examples/extensions/todo.ts +0 -2
  103. package/examples/extensions/tools.ts +0 -5
  104. package/examples/extensions/widget-placement.ts +4 -12
  105. package/examples/extensions/with-deps/package-lock.json +2 -2
  106. package/examples/extensions/with-deps/package.json +1 -1
  107. package/examples/sdk/02-custom-model.ts +1 -1
  108. package/examples/sdk/09-api-keys-and-oauth.ts +3 -3
  109. package/examples/sdk/12-full-control.ts +1 -1
  110. package/examples/sdk/13-session-runtime.ts +49 -0
  111. package/examples/sdk/README.md +5 -4
  112. package/package.json +4 -4
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
3
  "private": true,
4
- "version": "1.27.2",
4
+ "version": "1.28.1",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -9,7 +9,7 @@ import { AuthStorage, createAgentSession, ModelRegistry } from "@mariozechner/pi
9
9
 
10
10
  // Set up auth storage and model registry
11
11
  const authStorage = AuthStorage.create();
12
- const modelRegistry = new ModelRegistry(authStorage);
12
+ const modelRegistry = ModelRegistry.create(authStorage);
13
13
 
14
14
  // Option 1: Find a specific built-in model by provider/id
15
15
  const opus = getModel("anthropic", "claude-opus-4-5");
@@ -9,7 +9,7 @@ import { AuthStorage, createAgentSession, ModelRegistry, SessionManager } from "
9
9
  // Default: AuthStorage uses ~/.pi/agent/auth.json
10
10
  // ModelRegistry loads built-in + custom models from ~/.pi/agent/models.json
11
11
  const authStorage = AuthStorage.create();
12
- const modelRegistry = new ModelRegistry(authStorage);
12
+ const modelRegistry = ModelRegistry.create(authStorage);
13
13
 
14
14
  await createAgentSession({
15
15
  sessionManager: SessionManager.inMemory(),
@@ -20,7 +20,7 @@ console.log("Session with default auth storage and model registry");
20
20
 
21
21
  // Custom auth storage location
22
22
  const customAuthStorage = AuthStorage.create("/tmp/my-app/auth.json");
23
- const customModelRegistry = new ModelRegistry(customAuthStorage, "/tmp/my-app/models.json");
23
+ const customModelRegistry = ModelRegistry.create(customAuthStorage, "/tmp/my-app/models.json");
24
24
 
25
25
  await createAgentSession({
26
26
  sessionManager: SessionManager.inMemory(),
@@ -39,7 +39,7 @@ await createAgentSession({
39
39
  console.log("Session with runtime API key override");
40
40
 
41
41
  // No models.json - only built-in models
42
- const simpleRegistry = new ModelRegistry(authStorage); // null = no models.json
42
+ const simpleRegistry = ModelRegistry.inMemory(authStorage);
43
43
  await createAgentSession({
44
44
  sessionManager: SessionManager.inMemory(),
45
45
  authStorage,
@@ -30,7 +30,7 @@ if (process.env.MY_ANTHROPIC_KEY) {
30
30
  }
31
31
 
32
32
  // Model registry with no custom models.json
33
- const modelRegistry = new ModelRegistry(authStorage);
33
+ const modelRegistry = ModelRegistry.inMemory(authStorage);
34
34
 
35
35
  const model = getModel("anthropic", "claude-sonnet-4-20250514");
36
36
  if (!model) throw new Error("Model not found");
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Session Runtime Host
3
+ *
4
+ * Use the runtime host when you need to replace the active AgentSession,
5
+ * for example for new-session, resume, fork, or import flows.
6
+ *
7
+ * The important pattern is: after the host replaces the runtime, rebind any
8
+ * session-local subscriptions and extension bindings to `runtimeHost.session`.
9
+ */
10
+
11
+ import { AgentSessionRuntimeHost, createAgentSessionRuntime, SessionManager } from "@mariozechner/pi-coding-agent";
12
+
13
+ const bootstrap = {};
14
+ const runtime = await createAgentSessionRuntime(bootstrap, {
15
+ cwd: process.cwd(),
16
+ sessionManager: SessionManager.create(process.cwd()),
17
+ });
18
+ const runtimeHost = new AgentSessionRuntimeHost(bootstrap, runtime);
19
+
20
+ let unsubscribe: (() => void) | undefined;
21
+
22
+ async function bindSession() {
23
+ unsubscribe?.();
24
+ const session = runtimeHost.session;
25
+ await session.bindExtensions({});
26
+ unsubscribe = session.subscribe((event) => {
27
+ if (event.type === "queue_update") {
28
+ console.log("Queued:", event.steering.length + event.followUp.length);
29
+ }
30
+ });
31
+ return session;
32
+ }
33
+
34
+ let session = await bindSession();
35
+ const originalSessionFile = session.sessionFile;
36
+ console.log("Initial session:", originalSessionFile);
37
+
38
+ await runtimeHost.newSession();
39
+ session = await bindSession();
40
+ console.log("After newSession():", session.sessionFile);
41
+
42
+ if (originalSessionFile) {
43
+ await runtimeHost.switchSession(originalSessionFile);
44
+ session = await bindSession();
45
+ console.log("After switchSession():", session.sessionFile);
46
+ }
47
+
48
+ unsubscribe?.();
49
+ await runtimeHost.dispose();
@@ -1,6 +1,6 @@
1
1
  # SDK Examples
2
2
 
3
- Programmatic usage of pi-coding-agent via `createAgentSession()`.
3
+ Programmatic usage of pi-coding-agent via `createAgentSession()` and `createAgentSessionRuntime()`.
4
4
 
5
5
  ## Examples
6
6
 
@@ -18,6 +18,7 @@ Programmatic usage of pi-coding-agent via `createAgentSession()`.
18
18
  | `10-settings.ts` | Override compaction, retry, terminal settings |
19
19
  | `11-sessions.ts` | In-memory, persistent, continue, list sessions |
20
20
  | `12-full-control.ts` | Replace everything, no discovery |
21
+ | `13-session-runtime.ts` | Manage runtime-backed session replacement |
21
22
 
22
23
  ## Running
23
24
 
@@ -44,7 +45,7 @@ import {
44
45
 
45
46
  // Auth and models setup
46
47
  const authStorage = AuthStorage.create();
47
- const modelRegistry = new ModelRegistry(authStorage);
48
+ const modelRegistry = ModelRegistry.create(authStorage);
48
49
 
49
50
  // Minimal
50
51
  const { session } = await createAgentSession({ authStorage, modelRegistry });
@@ -73,7 +74,7 @@ const { session } = await createAgentSession({
73
74
  // Full control
74
75
  const customAuth = AuthStorage.create("/my/app/auth.json");
75
76
  customAuth.setRuntimeApiKey("anthropic", process.env.MY_KEY!);
76
- const customRegistry = new ModelRegistry(customAuth);
77
+ const customRegistry = ModelRegistry.create(customAuth);
77
78
 
78
79
  const resourceLoader = new DefaultResourceLoader({
79
80
  systemPromptOverride: () => "You are helpful.",
@@ -109,7 +110,7 @@ await session.prompt("Hello");
109
110
  | Option | Default | Description |
110
111
  |--------|---------|-------------|
111
112
  | `authStorage` | `AuthStorage.create()` | Credential storage |
112
- | `modelRegistry` | `new ModelRegistry(authStorage)` | Model registry |
113
+ | `modelRegistry` | `ModelRegistry.create(authStorage)` | Model registry |
113
114
  | `cwd` | `process.cwd()` | Working directory |
114
115
  | `agentDir` | `~/.pi/agent` | Config directory |
115
116
  | `model` | From settings/first available | Model to use |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codex-infinity/pi-infinity",
3
- "version": "0.63.3",
3
+ "version": "0.64.2",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "piConfig": {
@@ -40,9 +40,9 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@mariozechner/jiti": "^2.6.2",
43
- "@mariozechner/pi-agent-core": "^0.63.3",
44
- "@mariozechner/pi-ai": "^0.63.3",
45
- "@mariozechner/pi-tui": "^0.63.3",
43
+ "@mariozechner/pi-agent-core": "^0.64.2",
44
+ "@mariozechner/pi-ai": "^0.64.2",
45
+ "@mariozechner/pi-tui": "^0.64.2",
46
46
  "@silvia-odwyer/photon-node": "^0.3.4",
47
47
  "ajv": "^8.17.1",
48
48
  "chalk": "^5.5.0",