@astralyn/pi 1.1.0 → 1.2.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.
Files changed (244) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/bundle/chunks/anthropic-messages-NVP5OPIM.js +6 -0
  3. package/dist/bundle/chunks/{azure-openai-responses-CH74HGP4.js → azure-openai-responses-IBTOZ5MH.js} +1 -1
  4. package/dist/bundle/chunks/{chunk-H35KWBT5.js → chunk-4XZYHGVN.js} +1 -1
  5. package/dist/bundle/chunks/{chunk-3MMB5I7J.js → chunk-7HJ6CHUB.js} +1 -1
  6. package/dist/bundle/chunks/{chunk-MAC4N3BW.js → chunk-7UBIBLPN.js} +1 -1
  7. package/dist/bundle/chunks/{chunk-D3XW5X3Z.js → chunk-A5HU4TE6.js} +160 -229
  8. package/dist/bundle/chunks/{chunk-C2ARIVS3.js → chunk-B2UOWO4A.js} +1 -1
  9. package/dist/bundle/chunks/{chunk-KAC2YPTW.js → chunk-J75WV3FL.js} +1 -1
  10. package/dist/bundle/chunks/{chunk-TEAAYBTS.js → chunk-LHSPN2IO.js} +1 -1
  11. package/dist/bundle/chunks/chunk-Q74S7ILH.js +2 -0
  12. package/dist/bundle/chunks/{chunk-QLU3LESZ.js → chunk-QDDSFJ35.js} +1 -1
  13. package/dist/bundle/chunks/{chunk-EJEOEBSJ.js → chunk-UQECUCUH.js} +1 -1
  14. package/dist/bundle/chunks/{cloudflare-workers-ai-system-one-XO45ZT3V.js → cloudflare-workers-ai-system-one-HGOVFZDC.js} +1 -1
  15. package/dist/bundle/chunks/codemode-worker.js +17 -9
  16. package/dist/bundle/chunks/github-copilot.js +1 -1
  17. package/dist/bundle/chunks/{google-generative-ai-VVO64ZRQ.js → google-generative-ai-M44TSMAN.js} +1 -1
  18. package/dist/bundle/chunks/{google-vertex-LKS5NUHA.js → google-vertex-3C4OWLFX.js} +1 -1
  19. package/dist/bundle/chunks/{mistral-conversations-NJUOG4ET.js → mistral-conversations-I5PL4VCZ.js} +1 -1
  20. package/dist/bundle/chunks/openai-codex-responses-O5EUDL54.js +10 -0
  21. package/dist/bundle/chunks/{openai-completions-7HTTU6FH.js → openai-completions-X3SSG5BQ.js} +1 -1
  22. package/dist/bundle/chunks/{openai-decisions-776H4VDZ.js → openai-decisions-TVCDIPZX.js} +1 -1
  23. package/dist/bundle/chunks/{openai-responses-7A6BAQ5X.js → openai-responses-NYPNKVDV.js} +1 -1
  24. package/dist/bundle/chunks/{typesafe-system-one-2DQLG4R2.js → typesafe-system-one-LWPJYTJP.js} +1 -1
  25. package/dist/bundle/chunks/{virtual-modules-2NHGQRS6.js → virtual-modules-OZTPKGU7.js} +1 -1
  26. package/dist/bundle/cli.js +1 -1
  27. package/dist/bundle/index.js +1 -1
  28. package/dist/bundle/rpc-entry.js +1 -1
  29. package/dist/core/agent-session.d.ts +14 -1
  30. package/dist/core/agent-session.d.ts.map +1 -1
  31. package/dist/core/agent-session.js +93 -58
  32. package/dist/core/agent-session.js.map +1 -1
  33. package/dist/core/auth-storage.d.ts.map +1 -1
  34. package/dist/core/auth-storage.js +20 -13
  35. package/dist/core/auth-storage.js.map +1 -1
  36. package/dist/core/bug-report.d.ts +9 -1
  37. package/dist/core/bug-report.d.ts.map +1 -1
  38. package/dist/core/compaction/utils.d.ts +6 -0
  39. package/dist/core/compaction/utils.d.ts.map +1 -1
  40. package/dist/core/compaction/utils.js +7 -8
  41. package/dist/core/compaction/utils.js.map +1 -1
  42. package/dist/core/extensions/index.d.ts +1 -1
  43. package/dist/core/extensions/index.d.ts.map +1 -1
  44. package/dist/core/extensions/index.js.map +1 -1
  45. package/dist/core/extensions/runner.d.ts +4 -2
  46. package/dist/core/extensions/runner.d.ts.map +1 -1
  47. package/dist/core/extensions/runner.js +2 -3
  48. package/dist/core/extensions/runner.js.map +1 -1
  49. package/dist/core/extensions/types.d.ts +31 -7
  50. package/dist/core/extensions/types.d.ts.map +1 -1
  51. package/dist/core/extensions/types.js.map +1 -1
  52. package/dist/core/key-id-schema.d.ts +6 -0
  53. package/dist/core/key-id-schema.d.ts.map +1 -0
  54. package/dist/core/key-id-schema.js +16 -0
  55. package/dist/core/key-id-schema.js.map +1 -0
  56. package/dist/core/keybinding-registry.d.ts +4 -3
  57. package/dist/core/keybinding-registry.d.ts.map +1 -1
  58. package/dist/core/keybinding-registry.js +4 -3
  59. package/dist/core/keybinding-registry.js.map +1 -1
  60. package/dist/core/keybindings-schema.d.ts +4 -0
  61. package/dist/core/keybindings-schema.d.ts.map +1 -0
  62. package/dist/core/keybindings-schema.js +16 -0
  63. package/dist/core/keybindings-schema.js.map +1 -0
  64. package/dist/core/keybindings.d.ts +258 -81
  65. package/dist/core/keybindings.d.ts.map +1 -1
  66. package/dist/core/keybindings.js +27 -24
  67. package/dist/core/keybindings.js.map +1 -1
  68. package/dist/core/model-config.d.ts +713 -180
  69. package/dist/core/model-config.d.ts.map +1 -1
  70. package/dist/core/model-config.js +18 -179
  71. package/dist/core/model-config.js.map +1 -1
  72. package/dist/core/model-runtime.d.ts.map +1 -1
  73. package/dist/core/model-runtime.js +11 -6
  74. package/dist/core/model-runtime.js.map +1 -1
  75. package/dist/core/package-manager.d.ts.map +1 -1
  76. package/dist/core/package-manager.js +3 -3
  77. package/dist/core/package-manager.js.map +1 -1
  78. package/dist/core/project-trust.d.ts.map +1 -1
  79. package/dist/core/project-trust.js +2 -1
  80. package/dist/core/project-trust.js.map +1 -1
  81. package/dist/core/remote-catalog-provider.d.ts +12 -1
  82. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  83. package/dist/core/remote-catalog-provider.js +82 -24
  84. package/dist/core/remote-catalog-provider.js.map +1 -1
  85. package/dist/core/resource-loader.d.ts.map +1 -1
  86. package/dist/core/resource-loader.js +7 -2
  87. package/dist/core/resource-loader.js.map +1 -1
  88. package/dist/core/settings-defaults.d.ts +65 -0
  89. package/dist/core/settings-defaults.d.ts.map +1 -0
  90. package/dist/core/settings-defaults.js +66 -0
  91. package/dist/core/settings-defaults.js.map +1 -0
  92. package/dist/core/settings-manager.d.ts +4 -149
  93. package/dist/core/settings-manager.d.ts.map +1 -1
  94. package/dist/core/settings-manager.js +48 -44
  95. package/dist/core/settings-manager.js.map +1 -1
  96. package/dist/core/settings-schema.d.ts +231 -0
  97. package/dist/core/settings-schema.d.ts.map +1 -0
  98. package/dist/core/settings-schema.js +294 -0
  99. package/dist/core/settings-schema.js.map +1 -0
  100. package/dist/core/tools/render-utils.d.ts +18 -0
  101. package/dist/core/tools/render-utils.d.ts.map +1 -1
  102. package/dist/core/tools/render-utils.js +46 -0
  103. package/dist/core/tools/render-utils.js.map +1 -1
  104. package/dist/core/tools/renderers/bash.d.ts.map +1 -1
  105. package/dist/core/tools/renderers/bash.js +21 -50
  106. package/dist/core/tools/renderers/bash.js.map +1 -1
  107. package/dist/extensions/btw/keybindings.d.ts +2 -2
  108. package/dist/extensions/btw/keybindings.d.ts.map +1 -1
  109. package/dist/extensions/btw/keybindings.js.map +1 -1
  110. package/dist/extensions/codemode/execute.d.ts.map +1 -1
  111. package/dist/extensions/codemode/execute.js +64 -45
  112. package/dist/extensions/codemode/execute.js.map +1 -1
  113. package/dist/extensions/codemode/index.d.ts.map +1 -1
  114. package/dist/extensions/codemode/index.js +3 -7
  115. package/dist/extensions/codemode/index.js.map +1 -1
  116. package/dist/extensions/codemode/renderer.d.ts +2 -2
  117. package/dist/extensions/codemode/renderer.d.ts.map +1 -1
  118. package/dist/extensions/codemode/renderer.js +9 -3
  119. package/dist/extensions/codemode/renderer.js.map +1 -1
  120. package/dist/extensions/codemode/tool.d.ts +6 -12
  121. package/dist/extensions/codemode/tool.d.ts.map +1 -1
  122. package/dist/extensions/codemode/tool.js +44 -32
  123. package/dist/extensions/codemode/tool.js.map +1 -1
  124. package/dist/extensions/list-keybindings.d.ts +2 -2
  125. package/dist/extensions/list-keybindings.d.ts.map +1 -1
  126. package/dist/extensions/list-keybindings.js.map +1 -1
  127. package/dist/extensions/mcp/cli.js +5 -8
  128. package/dist/extensions/mcp/cli.js.map +1 -1
  129. package/dist/extensions/mcp/index.d.ts.map +1 -1
  130. package/dist/extensions/mcp/index.js +25 -34
  131. package/dist/extensions/mcp/index.js.map +1 -1
  132. package/dist/extensions/mcp/resources.d.ts +0 -6
  133. package/dist/extensions/mcp/resources.d.ts.map +1 -1
  134. package/dist/extensions/mcp/resources.js +1 -1
  135. package/dist/extensions/mcp/resources.js.map +1 -1
  136. package/dist/extensions/mcp/runtime.d.ts +3 -6
  137. package/dist/extensions/mcp/runtime.d.ts.map +1 -1
  138. package/dist/extensions/mcp/runtime.js +4 -39
  139. package/dist/extensions/mcp/runtime.js.map +1 -1
  140. package/dist/extensions/mcp/tools.d.ts +2 -3
  141. package/dist/extensions/mcp/tools.d.ts.map +1 -1
  142. package/dist/extensions/mcp/tools.js +62 -6
  143. package/dist/extensions/mcp/tools.js.map +1 -1
  144. package/dist/extensions/provider/keybindings.d.ts +2 -2
  145. package/dist/extensions/provider/keybindings.d.ts.map +1 -1
  146. package/dist/extensions/provider/keybindings.js.map +1 -1
  147. package/dist/extensions/search/code-search.d.ts +0 -2
  148. package/dist/extensions/search/code-search.d.ts.map +1 -1
  149. package/dist/extensions/search/code-search.js +2 -2
  150. package/dist/extensions/search/code-search.js.map +1 -1
  151. package/dist/extensions/search/command.js +2 -2
  152. package/dist/extensions/search/command.js.map +1 -1
  153. package/dist/extensions/search/index.d.ts.map +1 -1
  154. package/dist/extensions/search/index.js +14 -11
  155. package/dist/extensions/search/index.js.map +1 -1
  156. package/dist/extensions/search/workspace.d.ts +11 -10
  157. package/dist/extensions/search/workspace.d.ts.map +1 -1
  158. package/dist/extensions/search/workspace.js +259 -141
  159. package/dist/extensions/search/workspace.js.map +1 -1
  160. package/dist/extensions/tool-search/index.d.ts.map +1 -1
  161. package/dist/extensions/tool-search/index.js +1 -6
  162. package/dist/extensions/tool-search/index.js.map +1 -1
  163. package/dist/extensions/tool-search/tool.d.ts +0 -2
  164. package/dist/extensions/tool-search/tool.d.ts.map +1 -1
  165. package/dist/extensions/tool-search/tool.js +2 -4
  166. package/dist/extensions/tool-search/tool.js.map +1 -1
  167. package/dist/index.d.ts +1 -1
  168. package/dist/index.d.ts.map +1 -1
  169. package/dist/index.js.map +1 -1
  170. package/dist/main.js +3 -3
  171. package/dist/main.js.map +1 -1
  172. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  173. package/dist/modes/interactive/components/settings-selector.js +3 -2
  174. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  175. package/dist/modes/interactive/components/status-indicator.d.ts +1 -1
  176. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  177. package/dist/modes/interactive/components/status-indicator.js +2 -2
  178. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  179. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  180. package/dist/modes/interactive/interactive-mode.js +11 -5
  181. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  182. package/dist/modes/interactive/theme/dark.json +1 -1
  183. package/dist/modes/interactive/theme/light.json +1 -1
  184. package/dist/modes/interactive/theme/theme-schema.d.ts +28 -0
  185. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  186. package/dist/modes/interactive/theme/theme-schema.js +105 -0
  187. package/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  188. package/dist/modes/interactive/theme/theme-tokens.d.ts +257 -0
  189. package/dist/modes/interactive/theme/theme-tokens.d.ts.map +1 -0
  190. package/dist/modes/interactive/theme/theme-tokens.js +94 -0
  191. package/dist/modes/interactive/theme/theme-tokens.js.map +1 -0
  192. package/dist/modes/interactive/theme/theme.d.ts +13 -16
  193. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  194. package/dist/modes/interactive/theme/theme.js +23 -31
  195. package/dist/modes/interactive/theme/theme.js.map +1 -1
  196. package/dist/modes/print-mode.d.ts.map +1 -1
  197. package/dist/modes/print-mode.js +4 -0
  198. package/dist/modes/print-mode.js.map +1 -1
  199. package/dist/utils/clipboard.d.ts.map +1 -1
  200. package/dist/utils/clipboard.js +6 -1
  201. package/dist/utils/clipboard.js.map +1 -1
  202. package/docs/bundled/extensions/search.md +2 -1
  203. package/docs/codemode.md +1 -1
  204. package/docs/compaction.md +2 -2
  205. package/docs/environment-variables.md +2 -1
  206. package/docs/extensions.md +10 -4
  207. package/docs/keybindings.md +1 -0
  208. package/docs/mcp.md +1 -1
  209. package/docs/models.md +1 -0
  210. package/docs/providers.md +16 -0
  211. package/docs/settings.md +2 -2
  212. package/docs/themes.md +4 -2
  213. package/docs/tui.md +1 -1
  214. package/docs/usage.md +2 -0
  215. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  216. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  217. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  218. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  219. package/examples/extensions/gondolin/package-lock.json +2 -2
  220. package/examples/extensions/gondolin/package.json +1 -1
  221. package/examples/extensions/overlay-test.ts +2 -2
  222. package/examples/extensions/plan-mode/index.ts +6 -2
  223. package/examples/extensions/sandbox/package-lock.json +2 -2
  224. package/examples/extensions/sandbox/package.json +1 -1
  225. package/examples/extensions/with-deps/package-lock.json +2 -2
  226. package/examples/extensions/with-deps/package.json +1 -1
  227. package/npm-shrinkwrap.json +54 -102
  228. package/package.json +8 -20
  229. package/schemas/keybindings.schema.json +453 -0
  230. package/schemas/models.schema.json +1157 -0
  231. package/schemas/settings.schema.json +782 -0
  232. package/schemas/theme.schema.json +365 -0
  233. package/dist/bundle/chunks/anthropic-messages-3K3DWVY6.js +0 -6
  234. package/dist/bundle/chunks/openai-codex-responses-TZWBTTYM.js +0 -10
  235. package/dist/modes/interactive/theme/theme-json.d.ts +0 -85
  236. package/dist/modes/interactive/theme/theme-json.d.ts.map +0 -1
  237. package/dist/modes/interactive/theme/theme-json.js +0 -132
  238. package/dist/modes/interactive/theme/theme-json.js.map +0 -1
  239. package/dist/modes/interactive/theme/theme-schema.json +0 -361
  240. package/examples/plugins/pi-example-plugin/README.md +0 -38
  241. package/examples/plugins/pi-example-plugin/package.json +0 -10
  242. package/examples/plugins/pi-example-plugin/src/contract.ts +0 -13
  243. package/examples/plugins/pi-example-plugin/src/session.ts +0 -24
  244. package/examples/plugins/pi-example-plugin/src/tui.ts +0 -31
@@ -131,13 +131,14 @@ export function renderServersSection(servers) {
131
131
  return [intro, ...lines, ...omitted(listed.length - kept)].join("\n");
132
132
  }
133
133
  /**
134
- * Whether a codemode script needs the server: it names the server's namespace, or searches,
135
- * enumerates, or describes tools or namespaces, which may name the server in other forms.
134
+ * Whether a call that reaches `reach` (see `ToolDefinition.reachesTools`) needs the server: it
135
+ * reaches every tool, or one of its words contains the server's namespace.
136
136
  */
137
- function scriptNeedsServer(code, server) {
138
- if (/\b(searchTools|describeNamespace|describeTool|ALL_TOOLS)\b/.test(code))
137
+ function reachesServer(reach, server) {
138
+ if (reach === "all")
139
139
  return true;
140
- return code.includes(mcpNamespace(server));
140
+ const namespace = mcpNamespace(server);
141
+ return reach.some((word) => word.includes(namespace));
141
142
  }
142
143
  /** Short state for lists and the startup report. `withError` appends the first line of a failure. */
143
144
  function describeState(server, withError = true) {
@@ -152,10 +153,8 @@ function describeState(server, withError = true) {
152
153
  case "failed":
153
154
  return withError ? `failed: ${firstLine(connection.error ?? "unknown error")}` : "failed";
154
155
  case "connected": {
155
- const { tools, resources } = connection;
156
- const count = resources.length;
157
- const resourceCount = count > 0 ? ` · ${count} resource${count === 1 ? "" : "s"}` : "";
158
- return `connected · ${tools.length} tool${tools.length === 1 ? "" : "s"}${resourceCount}`;
156
+ const { tools, hasResources } = connection;
157
+ return `connected · ${tools.length} tool${tools.length === 1 ? "" : "s"}${hasResources ? " · resources" : ""}`;
159
158
  }
160
159
  case "connecting":
161
160
  return "connecting…";
@@ -287,6 +286,8 @@ export function createMcpExtension(options = {}) {
287
286
  const description = entry.config.description?.trim();
288
287
  const namespace = {
289
288
  name: mcpNamespace(server),
289
+ // `describeNamespace("docs")` finds `mcp__docs`.
290
+ aliases: [server],
290
291
  ...(description ? { description } : {}),
291
292
  ...(connection.instructions ? { instructions: connection.instructions } : {}),
292
293
  };
@@ -379,19 +380,6 @@ export function createMcpExtension(options = {}) {
379
380
  pi.setActiveTools(pi.getActiveTools().filter((name) => !names.has(name)));
380
381
  }
381
382
  };
382
- /**
383
- * Which of the tools are the bundled codemode and tool_search tools. Other extensions' tools of
384
- * the same names cannot reach MCP tools. The owning extensions identify their tools through the
385
- * event bus, so this extension does not import their internals.
386
- */
387
- const discoverOrchestrators = (tools) => {
388
- const candidates = new Map(tools.map((tool) => [tool.name, tool.parameters]));
389
- pi.events.emit("pi:discover-tool-orchestrators", candidates);
390
- return {
391
- codemode: candidates.get(CODEMODE_TOOL_NAME) === true,
392
- toolSearch: candidates.get(TOOL_SEARCH_TOOL_NAME) === true,
393
- };
394
- };
395
383
  /**
396
384
  * Tools that are not declared to the model are reached through the codemode tool (scripts call
397
385
  * them) or the tool_search tool (it declares them). Either reaches every such tool. Activate the
@@ -411,8 +399,12 @@ export function createMcpExtension(options = {}) {
411
399
  const needsToolSearch = exposures.has("deferred");
412
400
  if (!needsCodemode && !needsToolSearch)
413
401
  return;
414
- // Other extensions' tools of the same names cannot reach MCP tools, so never activate them.
415
- const { codemode: hasCodemode, toolSearch: hasToolSearch } = discoverOrchestrators(pi.getAllTools());
402
+ // Only a tool of these names that declares `reachesTools` can reach MCP tools; another
403
+ // extension's tool of the same name without it is never activated.
404
+ const tools = pi.getAllTools();
405
+ const hasReachingTool = (name) => tools.some((tool) => tool.name === name && tool.reachesTools);
406
+ const hasCodemode = hasReachingTool(CODEMODE_TOOL_NAME);
407
+ const hasToolSearch = hasReachingTool(TOOL_SEARCH_TOOL_NAME);
416
408
  const active = pi.getActiveTools();
417
409
  const activate = [];
418
410
  if (needsCodemode && hasCodemode && autoEnableCodemode && !active.includes(CODEMODE_TOOL_NAME)) {
@@ -1049,10 +1041,11 @@ export function createMcpExtension(options = {}) {
1049
1041
  else
1050
1042
  delete sections[MCP_SERVERS_SECTION];
1051
1043
  });
1052
- // A codemode script waits for the servers it names, or for every server when it searches or
1053
- // enumerates tools, so their tools are registered before the script runs. tool_search and the
1054
- // resource tools reach every server, so they wait for all of them. Direct MCP calls wait only
1055
- // for their own server, including a reconnect still closing its old transport.
1044
+ // A tool that reaches other tools (`reachesTools`) waits for the servers it may reach, so their
1045
+ // tools are registered before it runs: a codemode script for the servers it names, or for every
1046
+ // server when it searches or enumerates tools, and tool_search for every server. The resource
1047
+ // tools reach every server, so they wait for all of them. Direct MCP calls wait only for their
1048
+ // own server, including a reconnect still closing its old transport.
1056
1049
  pi.on("tool_call", async (event, ctx) => {
1057
1050
  const tool = pi.getAllTools().find((candidate) => candidate.name === event.toolName);
1058
1051
  if (!tool)
@@ -1063,13 +1056,11 @@ export function createMcpExtension(options = {}) {
1063
1056
  if (readyServers.length === 0)
1064
1057
  return;
1065
1058
  let waiting = [];
1066
- const orchestrator = discoverOrchestrators([tool]);
1067
- if (orchestrator.codemode) {
1068
- const { code } = event.input;
1069
- const source = typeof code === "string" ? code : "";
1070
- waiting = readyServers.filter((server) => scriptNeedsServer(source, server.entry.name));
1059
+ const reach = tool.reachesTools?.(event.input);
1060
+ if (reach !== undefined) {
1061
+ waiting = readyServers.filter((server) => reachesServer(reach, server.entry.name));
1071
1062
  }
1072
- else if (orchestrator.toolSearch || RESOURCE_TOOL_NAMES.has(tool.name)) {
1063
+ else if (RESOURCE_TOOL_NAMES.has(tool.name)) {
1073
1064
  waiting = readyServers;
1074
1065
  }
1075
1066
  else {