@code-yeongyu/senpi 2026.7.23 → 2026.7.24

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 (825) hide show
  1. package/CHANGELOG.md +131 -6
  2. package/README.md +14 -1
  3. package/dist/cli/args.d.ts +2 -0
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +6 -0
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/cli/config-selector.js +1 -1
  8. package/dist/cli/config-selector.js.map +1 -1
  9. package/dist/core/agent-session-runtime.d.ts +15 -1
  10. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  11. package/dist/core/agent-session-runtime.js +12 -2
  12. package/dist/core/agent-session-runtime.js.map +1 -1
  13. package/dist/core/agent-session.d.ts +102 -4
  14. package/dist/core/agent-session.d.ts.map +1 -1
  15. package/dist/core/agent-session.js +1295 -320
  16. package/dist/core/agent-session.js.map +1 -1
  17. package/dist/core/compaction/branch-summarization.d.ts +7 -1
  18. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  19. package/dist/core/compaction/branch-summarization.js +8 -12
  20. package/dist/core/compaction/branch-summarization.js.map +1 -1
  21. package/dist/core/compaction/compaction.d.ts +22 -4
  22. package/dist/core/compaction/compaction.d.ts.map +1 -1
  23. package/dist/core/compaction/compaction.js +114 -51
  24. package/dist/core/compaction/compaction.js.map +1 -1
  25. package/dist/core/compaction/lifecycle.d.ts +69 -0
  26. package/dist/core/compaction/lifecycle.d.ts.map +1 -0
  27. package/dist/core/compaction/lifecycle.js +104 -0
  28. package/dist/core/compaction/lifecycle.js.map +1 -0
  29. package/dist/core/compaction/utils.d.ts +12 -1
  30. package/dist/core/compaction/utils.d.ts.map +1 -1
  31. package/dist/core/compaction/utils.js +22 -17
  32. package/dist/core/compaction/utils.js.map +1 -1
  33. package/dist/core/event-bus.d.ts.map +1 -1
  34. package/dist/core/event-bus.js +11 -1
  35. package/dist/core/event-bus.js.map +1 -1
  36. package/dist/core/extensions/builtin/compaction/index.d.ts +2 -1
  37. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  38. package/dist/core/extensions/builtin/compaction/index.js +42 -30
  39. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  40. package/dist/core/extensions/builtin/compaction/openai-remote-model.d.ts +9 -2
  41. package/dist/core/extensions/builtin/compaction/openai-remote-model.d.ts.map +1 -1
  42. package/dist/core/extensions/builtin/compaction/openai-remote-model.js +78 -28
  43. package/dist/core/extensions/builtin/compaction/openai-remote-model.js.map +1 -1
  44. package/dist/core/extensions/builtin/compaction/openai-remote-schema.d.ts +3 -1
  45. package/dist/core/extensions/builtin/compaction/openai-remote-schema.d.ts.map +1 -1
  46. package/dist/core/extensions/builtin/compaction/openai-remote-schema.js +19 -1
  47. package/dist/core/extensions/builtin/compaction/openai-remote-schema.js.map +1 -1
  48. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +20 -6
  49. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
  50. package/dist/core/extensions/builtin/compaction/openai-remote.js +207 -22
  51. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  52. package/dist/core/extensions/builtin/compaction/speculative.d.ts +4 -2
  53. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  54. package/dist/core/extensions/builtin/compaction/speculative.js +25 -13
  55. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  56. package/dist/core/extensions/builtin/config-reload/index.d.ts +7 -0
  57. package/dist/core/extensions/builtin/config-reload/index.d.ts.map +1 -1
  58. package/dist/core/extensions/builtin/config-reload/index.js +49 -17
  59. package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
  60. package/dist/core/extensions/builtin/hooks/index.js +1 -1
  61. package/dist/core/extensions/builtin/hooks/index.js.map +1 -1
  62. package/dist/core/extensions/builtin/hooks/lifecycle-adapter.d.ts +3 -1
  63. package/dist/core/extensions/builtin/hooks/lifecycle-adapter.d.ts.map +1 -1
  64. package/dist/core/extensions/builtin/hooks/lifecycle-adapter.js +2 -1
  65. package/dist/core/extensions/builtin/hooks/lifecycle-adapter.js.map +1 -1
  66. package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.d.ts +2 -1
  67. package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.d.ts.map +1 -1
  68. package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.js +5 -3
  69. package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.js.map +1 -1
  70. package/dist/core/extensions/builtin/mcp/auth/commands-auth.d.ts +5 -0
  71. package/dist/core/extensions/builtin/mcp/auth/commands-auth.d.ts.map +1 -1
  72. package/dist/core/extensions/builtin/mcp/auth/commands-auth.js +8 -3
  73. package/dist/core/extensions/builtin/mcp/auth/commands-auth.js.map +1 -1
  74. package/dist/core/extensions/builtin/mcp/catalog.d.ts +3 -1
  75. package/dist/core/extensions/builtin/mcp/catalog.d.ts.map +1 -1
  76. package/dist/core/extensions/builtin/mcp/catalog.js +2 -0
  77. package/dist/core/extensions/builtin/mcp/catalog.js.map +1 -1
  78. package/dist/core/extensions/builtin/mcp/commands.d.ts +1 -1
  79. package/dist/core/extensions/builtin/mcp/commands.d.ts.map +1 -1
  80. package/dist/core/extensions/builtin/mcp/commands.js +34 -39
  81. package/dist/core/extensions/builtin/mcp/commands.js.map +1 -1
  82. package/dist/core/extensions/builtin/mcp/connection-types.d.ts +2 -0
  83. package/dist/core/extensions/builtin/mcp/connection-types.d.ts.map +1 -1
  84. package/dist/core/extensions/builtin/mcp/connection-types.js.map +1 -1
  85. package/dist/core/extensions/builtin/mcp/connection.d.ts.map +1 -1
  86. package/dist/core/extensions/builtin/mcp/connection.js +3 -0
  87. package/dist/core/extensions/builtin/mcp/connection.js.map +1 -1
  88. package/dist/core/extensions/builtin/mcp/elicitation.d.ts +7 -3
  89. package/dist/core/extensions/builtin/mcp/elicitation.d.ts.map +1 -1
  90. package/dist/core/extensions/builtin/mcp/elicitation.js +5 -5
  91. package/dist/core/extensions/builtin/mcp/elicitation.js.map +1 -1
  92. package/dist/core/extensions/builtin/mcp/expose/register.d.ts.map +1 -1
  93. package/dist/core/extensions/builtin/mcp/expose/register.js +1 -0
  94. package/dist/core/extensions/builtin/mcp/expose/register.js.map +1 -1
  95. package/dist/core/extensions/builtin/mcp/expose/session.d.ts +2 -0
  96. package/dist/core/extensions/builtin/mcp/expose/session.d.ts.map +1 -1
  97. package/dist/core/extensions/builtin/mcp/expose/session.js +3 -0
  98. package/dist/core/extensions/builtin/mcp/expose/session.js.map +1 -1
  99. package/dist/core/extensions/builtin/mcp/guard/output-guard.d.ts +9 -1
  100. package/dist/core/extensions/builtin/mcp/guard/output-guard.d.ts.map +1 -1
  101. package/dist/core/extensions/builtin/mcp/guard/output-guard.js +18 -6
  102. package/dist/core/extensions/builtin/mcp/guard/output-guard.js.map +1 -1
  103. package/dist/core/extensions/builtin/mcp/index.d.ts +4 -2
  104. package/dist/core/extensions/builtin/mcp/index.d.ts.map +1 -1
  105. package/dist/core/extensions/builtin/mcp/index.js +150 -127
  106. package/dist/core/extensions/builtin/mcp/index.js.map +1 -1
  107. package/dist/core/extensions/builtin/mcp/instructions.d.ts +1 -1
  108. package/dist/core/extensions/builtin/mcp/instructions.d.ts.map +1 -1
  109. package/dist/core/extensions/builtin/mcp/instructions.js +6 -6
  110. package/dist/core/extensions/builtin/mcp/instructions.js.map +1 -1
  111. package/dist/core/extensions/builtin/mcp/prompts.d.ts +2 -0
  112. package/dist/core/extensions/builtin/mcp/prompts.d.ts.map +1 -1
  113. package/dist/core/extensions/builtin/mcp/prompts.js +9 -3
  114. package/dist/core/extensions/builtin/mcp/prompts.js.map +1 -1
  115. package/dist/core/extensions/builtin/mcp/resources.d.ts +2 -0
  116. package/dist/core/extensions/builtin/mcp/resources.d.ts.map +1 -1
  117. package/dist/core/extensions/builtin/mcp/resources.js +1 -0
  118. package/dist/core/extensions/builtin/mcp/resources.js.map +1 -1
  119. package/dist/core/extensions/builtin/mcp/service-register.d.ts.map +1 -1
  120. package/dist/core/extensions/builtin/mcp/service-register.js +1 -0
  121. package/dist/core/extensions/builtin/mcp/service-register.js.map +1 -1
  122. package/dist/core/extensions/builtin/mcp/service-types.d.ts +2 -0
  123. package/dist/core/extensions/builtin/mcp/service-types.d.ts.map +1 -1
  124. package/dist/core/extensions/builtin/mcp/service-types.js.map +1 -1
  125. package/dist/core/extensions/builtin/mcp/service.d.ts +12 -1
  126. package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
  127. package/dist/core/extensions/builtin/mcp/service.js +44 -2
  128. package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
  129. package/dist/core/extensions/builtin/mcp/transport.d.ts +2 -0
  130. package/dist/core/extensions/builtin/mcp/transport.d.ts.map +1 -1
  131. package/dist/core/extensions/builtin/mcp/transport.js +7 -7
  132. package/dist/core/extensions/builtin/mcp/transport.js.map +1 -1
  133. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.d.ts.map +1 -1
  134. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js +86 -7
  135. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js.map +1 -1
  136. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.d.ts +3 -0
  137. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.d.ts.map +1 -0
  138. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js +102 -0
  139. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js.map +1 -0
  140. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.d.ts.map +1 -1
  141. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +96 -6
  142. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
  143. package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
  144. package/dist/core/extensions/builtin/prompt-preset/presets.js +9 -0
  145. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  146. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
  147. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
  148. package/dist/core/extensions/builtin/prompt-preset/settings.js +1 -0
  149. package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
  150. package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
  151. package/dist/core/extensions/builtin/terminal/extension.js +1 -0
  152. package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
  153. package/dist/core/extensions/builtin/terminal/tools/bash.d.ts +15 -3
  154. package/dist/core/extensions/builtin/terminal/tools/bash.d.ts.map +1 -1
  155. package/dist/core/extensions/builtin/terminal/tools/bash.js +30 -6
  156. package/dist/core/extensions/builtin/terminal/tools/bash.js.map +1 -1
  157. package/dist/core/extensions/builtin/terminal/tools/context.d.ts +5 -0
  158. package/dist/core/extensions/builtin/terminal/tools/context.d.ts.map +1 -1
  159. package/dist/core/extensions/builtin/terminal/tools/context.js.map +1 -1
  160. package/dist/core/extensions/runner.d.ts +14 -7
  161. package/dist/core/extensions/runner.d.ts.map +1 -1
  162. package/dist/core/extensions/runner.js +64 -37
  163. package/dist/core/extensions/runner.js.map +1 -1
  164. package/dist/core/extensions/types.d.ts +30 -3
  165. package/dist/core/extensions/types.d.ts.map +1 -1
  166. package/dist/core/extensions/types.js.map +1 -1
  167. package/dist/core/http-dispatcher.d.ts.map +1 -1
  168. package/dist/core/http-dispatcher.js +16 -0
  169. package/dist/core/http-dispatcher.js.map +1 -1
  170. package/dist/core/messages.d.ts +1 -1
  171. package/dist/core/messages.d.ts.map +1 -1
  172. package/dist/core/messages.js +10 -8
  173. package/dist/core/messages.js.map +1 -1
  174. package/dist/core/model-registry.d.ts +1 -0
  175. package/dist/core/model-registry.d.ts.map +1 -1
  176. package/dist/core/model-registry.js +3 -2
  177. package/dist/core/model-registry.js.map +1 -1
  178. package/dist/core/model-resolver.d.ts.map +1 -1
  179. package/dist/core/model-resolver.js +9 -0
  180. package/dist/core/model-resolver.js.map +1 -1
  181. package/dist/core/model-runtime.d.ts +4 -2
  182. package/dist/core/model-runtime.d.ts.map +1 -1
  183. package/dist/core/model-runtime.js +34 -18
  184. package/dist/core/model-runtime.js.map +1 -1
  185. package/dist/core/remote-catalog-provider.d.ts +1 -1
  186. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  187. package/dist/core/remote-catalog-provider.js +21 -7
  188. package/dist/core/remote-catalog-provider.js.map +1 -1
  189. package/dist/core/resolve-config-value.d.ts.map +1 -1
  190. package/dist/core/resolve-config-value.js +12 -8
  191. package/dist/core/resolve-config-value.js.map +1 -1
  192. package/dist/core/sdk.d.ts +1 -1
  193. package/dist/core/sdk.d.ts.map +1 -1
  194. package/dist/core/sdk.js +8 -3
  195. package/dist/core/sdk.js.map +1 -1
  196. package/dist/core/session-manager.d.ts +22 -3
  197. package/dist/core/session-manager.d.ts.map +1 -1
  198. package/dist/core/session-manager.js +155 -58
  199. package/dist/core/session-manager.js.map +1 -1
  200. package/dist/core/settings-manager.d.ts +1 -1
  201. package/dist/core/settings-manager.d.ts.map +1 -1
  202. package/dist/core/settings-manager.js.map +1 -1
  203. package/dist/core/system-prompt.js +1 -1
  204. package/dist/core/system-prompt.js.map +1 -1
  205. package/dist/core/tools/bash.d.ts +2 -0
  206. package/dist/core/tools/bash.d.ts.map +1 -1
  207. package/dist/core/tools/bash.js +34 -5
  208. package/dist/core/tools/bash.js.map +1 -1
  209. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  210. package/dist/core/tools/tool-definition-wrapper.js +3 -1
  211. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  212. package/dist/core/usage-totals.d.ts +19 -0
  213. package/dist/core/usage-totals.d.ts.map +1 -0
  214. package/dist/core/usage-totals.js +52 -0
  215. package/dist/core/usage-totals.js.map +1 -0
  216. package/dist/extensions/llama/client.d.ts.map +1 -1
  217. package/dist/extensions/llama/client.js +3 -1
  218. package/dist/extensions/llama/client.js.map +1 -1
  219. package/dist/extensions/llama/index.js +3 -3
  220. package/dist/extensions/llama/index.js.map +1 -1
  221. package/dist/extensions/llama/provider.d.ts.map +1 -1
  222. package/dist/extensions/llama/provider.js +1 -2
  223. package/dist/extensions/llama/provider.js.map +1 -1
  224. package/dist/index.d.ts +2 -2
  225. package/dist/index.d.ts.map +1 -1
  226. package/dist/index.js +1 -1
  227. package/dist/index.js.map +1 -1
  228. package/dist/main.d.ts.map +1 -1
  229. package/dist/main.js +37 -5
  230. package/dist/main.js.map +1 -1
  231. package/dist/modes/app-server/daemon/occupancy.d.ts +22 -0
  232. package/dist/modes/app-server/daemon/occupancy.d.ts.map +1 -0
  233. package/dist/modes/app-server/daemon/occupancy.js +67 -0
  234. package/dist/modes/app-server/daemon/occupancy.js.map +1 -0
  235. package/dist/modes/app-server/daemon/probe.d.ts +3 -3
  236. package/dist/modes/app-server/daemon/probe.d.ts.map +1 -1
  237. package/dist/modes/app-server/daemon/probe.js +33 -10
  238. package/dist/modes/app-server/daemon/probe.js.map +1 -1
  239. package/dist/modes/app-server/daemon.d.ts.map +1 -1
  240. package/dist/modes/app-server/daemon.js +58 -18
  241. package/dist/modes/app-server/daemon.js.map +1 -1
  242. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  243. package/dist/modes/interactive/components/compaction-summary-message.js +8 -1
  244. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  245. package/dist/modes/interactive/components/extension-editor.d.ts +1 -2
  246. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  247. package/dist/modes/interactive/components/extension-editor.js +16 -46
  248. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  249. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  250. package/dist/modes/interactive/components/footer.js.map +1 -1
  251. package/dist/modes/interactive/components/status-indicator.d.ts +4 -0
  252. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  253. package/dist/modes/interactive/components/status-indicator.js +13 -0
  254. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  255. package/dist/modes/interactive/external-editor.d.ts +12 -0
  256. package/dist/modes/interactive/external-editor.d.ts.map +1 -0
  257. package/dist/modes/interactive/external-editor.js +37 -0
  258. package/dist/modes/interactive/external-editor.js.map +1 -0
  259. package/dist/modes/interactive/interactive-mode.d.ts +3 -1
  260. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  261. package/dist/modes/interactive/interactive-mode.js +96 -78
  262. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  263. package/dist/modes/rpc/connection-handler.d.ts +6 -0
  264. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  265. package/dist/modes/rpc/connection-handler.js +34 -9
  266. package/dist/modes/rpc/connection-handler.js.map +1 -1
  267. package/dist/modes/rpc/multi-session-host.d.ts +15 -0
  268. package/dist/modes/rpc/multi-session-host.d.ts.map +1 -0
  269. package/dist/modes/rpc/multi-session-host.js +60 -0
  270. package/dist/modes/rpc/multi-session-host.js.map +1 -0
  271. package/dist/modes/rpc/neo-runtime-options.d.ts.map +1 -1
  272. package/dist/modes/rpc/neo-runtime-options.js +1 -0
  273. package/dist/modes/rpc/neo-runtime-options.js.map +1 -1
  274. package/dist/modes/rpc/rpc-client.d.ts +4 -0
  275. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  276. package/dist/modes/rpc/rpc-client.js +7 -0
  277. package/dist/modes/rpc/rpc-client.js.map +1 -1
  278. package/dist/modes/rpc/rpc-mode.d.ts +49 -0
  279. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  280. package/dist/modes/rpc/rpc-mode.js +49 -0
  281. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  282. package/dist/modes/rpc/rpc-types.d.ts +85 -1
  283. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  284. package/dist/modes/rpc/rpc-types.js +8 -1
  285. package/dist/modes/rpc/rpc-types.js.map +1 -1
  286. package/dist/modes/rpc/session-binding.d.ts +13 -0
  287. package/dist/modes/rpc/session-binding.d.ts.map +1 -0
  288. package/dist/modes/rpc/session-binding.js +33 -0
  289. package/dist/modes/rpc/session-binding.js.map +1 -0
  290. package/dist/modes/rpc/session-command-router.d.ts +19 -0
  291. package/dist/modes/rpc/session-command-router.d.ts.map +1 -0
  292. package/dist/modes/rpc/session-command-router.js +159 -0
  293. package/dist/modes/rpc/session-command-router.js.map +1 -0
  294. package/dist/modes/rpc/session-event-writer.d.ts +34 -0
  295. package/dist/modes/rpc/session-event-writer.d.ts.map +1 -0
  296. package/dist/modes/rpc/session-event-writer.js +92 -0
  297. package/dist/modes/rpc/session-event-writer.js.map +1 -0
  298. package/dist/modes/rpc/session-extension-ui-requests.d.ts +15 -0
  299. package/dist/modes/rpc/session-extension-ui-requests.d.ts.map +1 -0
  300. package/dist/modes/rpc/session-extension-ui-requests.js +27 -0
  301. package/dist/modes/rpc/session-extension-ui-requests.js.map +1 -0
  302. package/dist/modes/rpc/session-registry.d.ts +58 -0
  303. package/dist/modes/rpc/session-registry.d.ts.map +1 -0
  304. package/dist/modes/rpc/session-registry.js +162 -0
  305. package/dist/modes/rpc/session-registry.js.map +1 -0
  306. package/dist/utils/clipboard.d.ts.map +1 -1
  307. package/dist/utils/clipboard.js +19 -8
  308. package/dist/utils/clipboard.js.map +1 -1
  309. package/dist/utils/version-check.d.ts.map +1 -1
  310. package/dist/utils/version-check.js +3 -1
  311. package/dist/utils/version-check.js.map +1 -1
  312. package/docs/app-server-daemon.md +3 -2
  313. package/docs/compaction.md +9 -4
  314. package/docs/custom-provider.md +5 -2
  315. package/docs/environment-variables.md +88 -0
  316. package/docs/extensions.md +25 -7
  317. package/docs/index.md +1 -0
  318. package/docs/json.md +5 -1
  319. package/docs/models.md +6 -2
  320. package/docs/providers.md +12 -1
  321. package/docs/rpc.md +154 -8
  322. package/docs/sdk.md +3 -0
  323. package/docs/session-format.md +17 -3
  324. package/docs/settings.md +2 -2
  325. package/docs/usage.md +1 -14
  326. package/examples/extensions/custom-compaction.ts +4 -0
  327. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  328. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  329. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  330. package/examples/extensions/gondolin/package-lock.json +2 -2
  331. package/examples/extensions/gondolin/package.json +1 -1
  332. package/examples/extensions/handoff.ts +9 -1
  333. package/examples/extensions/sandbox/package-lock.json +2 -2
  334. package/examples/extensions/sandbox/package.json +1 -1
  335. package/examples/extensions/summarize.ts +3 -0
  336. package/examples/extensions/with-deps/package-lock.json +2 -2
  337. package/examples/extensions/with-deps/package.json +1 -1
  338. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +24 -0
  339. package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
  340. package/node_modules/@earendil-works/pi-agent-core/README.md +31 -12
  341. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts +4 -4
  342. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  343. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +8 -7
  344. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  345. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +10 -3
  346. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  347. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +61 -27
  348. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  349. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts +11 -12
  350. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  351. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +47 -22
  352. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
  353. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts +5 -1
  354. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
  355. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js +6 -8
  356. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
  357. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts +17 -5
  358. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
  359. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +82 -27
  360. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  361. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.d.ts +12 -1
  362. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.d.ts.map +1 -1
  363. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js +22 -17
  364. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js.map +1 -1
  365. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts +3 -9
  366. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  367. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +118 -11
  368. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  369. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts +11 -3
  370. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts.map +1 -1
  371. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js +56 -4
  372. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js.map +1 -1
  373. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.d.ts +11 -3
  374. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.d.ts.map +1 -1
  375. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js +56 -4
  376. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js.map +1 -1
  377. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.d.ts.map +1 -1
  378. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js +2 -2
  379. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js.map +1 -1
  380. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +6 -4
  381. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
  382. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +30 -14
  383. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
  384. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.d.ts +27 -0
  385. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.d.ts.map +1 -0
  386. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.js +132 -0
  387. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.js.map +1 -0
  388. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.d.ts +89 -0
  389. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.d.ts.map +1 -0
  390. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.js +386 -0
  391. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.js.map +1 -0
  392. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.d.ts +19 -0
  393. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.d.ts.map +1 -0
  394. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js +95 -0
  395. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js.map +1 -0
  396. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.d.ts +4 -0
  397. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.d.ts.map +1 -0
  398. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.js +46 -0
  399. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.js.map +1 -0
  400. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.d.ts +3 -0
  401. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.d.ts.map +1 -0
  402. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.js +106 -0
  403. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.js.map +1 -0
  404. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.d.ts +6 -0
  405. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.d.ts.map +1 -0
  406. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.js +5 -0
  407. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.js.map +1 -0
  408. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.d.ts +4 -0
  409. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.d.ts.map +1 -0
  410. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.js +26 -0
  411. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.js.map +1 -0
  412. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts +34 -0
  413. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts.map +1 -0
  414. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js +110 -0
  415. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js.map +1 -0
  416. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.d.ts +6 -0
  417. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.d.ts.map +1 -0
  418. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.js +2 -0
  419. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.js.map +1 -0
  420. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.d.ts +11 -0
  421. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.d.ts.map +1 -0
  422. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js +31 -0
  423. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js.map +1 -0
  424. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +80 -18
  425. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
  426. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
  427. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts +12 -4
  428. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -1
  429. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +90 -35
  430. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js.map +1 -1
  431. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.d.ts.map +1 -1
  432. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js +10 -4
  433. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js.map +1 -1
  434. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +4 -2
  435. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
  436. package/node_modules/@earendil-works/pi-agent-core/dist/index.js +5 -2
  437. package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
  438. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.d.ts +10 -0
  439. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.d.ts.map +1 -0
  440. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.js +17 -0
  441. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.js.map +1 -0
  442. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +8 -2
  443. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  444. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  445. package/node_modules/@earendil-works/pi-agent-core/package.json +4 -3
  446. package/node_modules/@earendil-works/pi-ai/README.md +44 -4
  447. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  448. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +45 -27
  449. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  450. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.d.ts.map +1 -1
  451. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +21 -8
  452. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
  453. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.d.ts.map +1 -1
  454. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +17 -10
  455. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js.map +1 -1
  456. package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.d.ts +17 -0
  457. package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.d.ts.map +1 -0
  458. package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js +104 -0
  459. package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js.map +1 -0
  460. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.d.ts.map +1 -1
  461. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js +7 -11
  462. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js.map +1 -1
  463. package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.d.ts +4 -3
  464. package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.d.ts.map +1 -1
  465. package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js +17 -3
  466. package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js.map +1 -1
  467. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.d.ts.map +1 -1
  468. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js +7 -11
  469. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js.map +1 -1
  470. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.d.ts.map +1 -1
  471. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +13 -9
  472. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js.map +1 -1
  473. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
  474. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +73 -47
  475. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
  476. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts +7 -9
  477. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  478. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +142 -33
  479. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  480. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts +7 -0
  481. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts.map +1 -1
  482. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +180 -80
  483. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
  484. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
  485. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +37 -15
  486. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  487. package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.d.ts.map +1 -1
  488. package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.js +8 -3
  489. package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.js.map +1 -1
  490. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.d.ts.map +1 -1
  491. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js +2 -4
  492. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js.map +1 -1
  493. package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts +15 -0
  494. package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts.map +1 -1
  495. package/node_modules/@earendil-works/pi-ai/dist/api-registry.js +52 -6
  496. package/node_modules/@earendil-works/pi-ai/dist/api-registry.js.map +1 -1
  497. package/node_modules/@earendil-works/pi-ai/dist/auth/helpers.d.ts.map +1 -1
  498. package/node_modules/@earendil-works/pi-ai/dist/auth/helpers.js +3 -2
  499. package/node_modules/@earendil-works/pi-ai/dist/auth/helpers.js.map +1 -1
  500. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.d.ts +10 -0
  501. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.d.ts.map +1 -0
  502. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.js +249 -0
  503. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.js.map +1 -0
  504. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts +4 -0
  505. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts.map +1 -1
  506. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js +10 -0
  507. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js.map +1 -1
  508. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.d.ts.map +1 -1
  509. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js +2 -18
  510. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js.map +1 -1
  511. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.d.ts +13 -0
  512. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.d.ts.map +1 -0
  513. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.js +222 -0
  514. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.js.map +1 -0
  515. package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.d.ts.map +1 -1
  516. package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js +4 -0
  517. package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js.map +1 -1
  518. package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts.map +1 -1
  519. package/node_modules/@earendil-works/pi-ai/dist/compat.js +2 -1
  520. package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
  521. package/node_modules/@earendil-works/pi-ai/dist/context-provenance.d.ts +16 -0
  522. package/node_modules/@earendil-works/pi-ai/dist/context-provenance.d.ts.map +1 -0
  523. package/node_modules/@earendil-works/pi-ai/dist/context-provenance.js +32 -0
  524. package/node_modules/@earendil-works/pi-ai/dist/context-provenance.js.map +1 -0
  525. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts +3 -0
  526. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  527. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +11 -3
  528. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
  529. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +15 -0
  530. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  531. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +15 -0
  532. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  533. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts +19 -2
  534. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts.map +1 -1
  535. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js +68 -3
  536. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js.map +1 -1
  537. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +5 -0
  538. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  539. package/node_modules/@earendil-works/pi-ai/dist/index.js +5 -0
  540. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  541. package/node_modules/@earendil-works/pi-ai/dist/model-catalog.d.ts +17 -0
  542. package/node_modules/@earendil-works/pi-ai/dist/model-catalog.d.ts.map +1 -0
  543. package/node_modules/@earendil-works/pi-ai/dist/model-catalog.js +4 -0
  544. package/node_modules/@earendil-works/pi-ai/dist/model-catalog.js.map +1 -0
  545. package/node_modules/@earendil-works/pi-ai/dist/model.d.ts +2 -2
  546. package/node_modules/@earendil-works/pi-ai/dist/model.d.ts.map +1 -1
  547. package/node_modules/@earendil-works/pi-ai/dist/model.js.map +1 -1
  548. package/node_modules/@earendil-works/pi-ai/dist/models-store.d.ts +2 -0
  549. package/node_modules/@earendil-works/pi-ai/dist/models-store.d.ts.map +1 -1
  550. package/node_modules/@earendil-works/pi-ai/dist/models-store.js.map +1 -1
  551. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +0 -6
  552. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  553. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +76 -4448
  554. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  555. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +4 -0
  556. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  557. package/node_modules/@earendil-works/pi-ai/dist/models.js +0 -53
  558. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  559. package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.d.ts +12 -0
  560. package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.d.ts.map +1 -0
  561. package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.js +34 -0
  562. package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.js.map +1 -0
  563. package/node_modules/@earendil-works/pi-ai/dist/providers/alibaba-token-plan.models.d.ts +3 -63
  564. package/node_modules/@earendil-works/pi-ai/dist/providers/alibaba-token-plan.models.d.ts.map +1 -1
  565. package/node_modules/@earendil-works/pi-ai/dist/providers/alibaba-token-plan.models.js +2 -1
  566. package/node_modules/@earendil-works/pi-ai/dist/providers/alibaba-token-plan.models.js.map +1 -1
  567. package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts +2 -0
  568. package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts.map +1 -1
  569. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +10 -0
  570. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js.map +1 -1
  571. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  572. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +3 -2
  573. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  574. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.d.ts +3 -439
  575. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
  576. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js +2 -1
  577. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js.map +1 -1
  578. package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.d.ts +3 -15
  579. package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.d.ts.map +1 -1
  580. package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js +2 -1
  581. package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js.map +1 -1
  582. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  583. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +30 -3
  584. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
  585. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.d.ts +3 -59
  586. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.d.ts.map +1 -1
  587. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js +2 -1
  588. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js.map +1 -1
  589. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts +3 -187
  590. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
  591. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js +2 -1
  592. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js.map +1 -1
  593. package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.d.ts +3 -15
  594. package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.d.ts.map +1 -1
  595. package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js +2 -1
  596. package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js.map +1 -1
  597. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.d.ts +3 -171
  598. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
  599. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js +2 -1
  600. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
  601. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.d.ts +3 -55
  602. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
  603. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js +2 -1
  604. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
  605. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -0
  606. package/node_modules/@earendil-works/pi-ai/dist/providers/data/alibaba-token-plan.json +1 -1
  607. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  608. package/node_modules/@earendil-works/pi-ai/dist/providers/data/ant-ling.json +1 -1
  609. package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
  610. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
  611. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +1 -1
  612. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  613. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
  614. package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +1 -1
  615. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  616. package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
  617. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google-vertex.json +1 -1
  618. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
  619. package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
  620. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  621. package/node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +1 -1
  622. package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -1
  623. package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -1
  624. package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -1
  625. package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +1 -1
  626. package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.json +1 -1
  627. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  628. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
  629. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  630. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  631. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  632. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  633. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -0
  634. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -0
  635. package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
  636. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  637. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +1 -1
  638. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
  639. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
  640. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
  641. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi.json +1 -1
  642. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
  643. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
  644. package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.d.ts +3 -11
  645. package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.d.ts.map +1 -1
  646. package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js +2 -1
  647. package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js.map +1 -1
  648. package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.d.ts +3 -67
  649. package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.d.ts.map +1 -1
  650. package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js +2 -1
  651. package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js.map +1 -1
  652. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.d.ts +3 -115
  653. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.d.ts.map +1 -1
  654. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +2 -1
  655. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js.map +1 -1
  656. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.d.ts +3 -51
  657. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.d.ts.map +1 -1
  658. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js +2 -1
  659. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js.map +1 -1
  660. package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.d.ts +3 -75
  661. package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.d.ts.map +1 -1
  662. package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.js +2 -1
  663. package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.js.map +1 -1
  664. package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.d.ts +3 -31
  665. package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.d.ts.map +1 -1
  666. package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js +2 -1
  667. package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js.map +1 -1
  668. package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.d.ts +3 -203
  669. package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.d.ts.map +1 -1
  670. package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js +2 -1
  671. package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js.map +1 -1
  672. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js +2 -2
  673. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js.map +1 -1
  674. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.d.ts.map +1 -1
  675. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.js +10 -2
  676. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.js.map +1 -1
  677. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.d.ts +3 -19
  678. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.d.ts.map +1 -1
  679. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js +2 -1
  680. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js.map +1 -1
  681. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.d.ts +3 -15
  682. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.d.ts.map +1 -1
  683. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js +2 -1
  684. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js.map +1 -1
  685. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.d.ts +3 -15
  686. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.d.ts.map +1 -1
  687. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js +2 -1
  688. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js.map +1 -1
  689. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.d.ts +3 -123
  690. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.d.ts.map +1 -1
  691. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js +2 -1
  692. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js.map +1 -1
  693. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.d.ts +3 -43
  694. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.d.ts.map +1 -1
  695. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js +2 -1
  696. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js.map +1 -1
  697. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.d.ts +3 -43
  698. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.d.ts.map +1 -1
  699. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js +2 -1
  700. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js.map +1 -1
  701. package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.d.ts +3 -79
  702. package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.d.ts.map +1 -1
  703. package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js +2 -1
  704. package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js.map +1 -1
  705. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts +3 -31
  706. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts.map +1 -1
  707. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +2 -1
  708. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js.map +1 -1
  709. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts +3 -187
  710. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts.map +1 -1
  711. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +2 -1
  712. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js.map +1 -1
  713. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.d.ts +3 -67
  714. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.d.ts.map +1 -1
  715. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js +2 -1
  716. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js.map +1 -1
  717. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.d.ts +3 -227
  718. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.d.ts.map +1 -1
  719. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js +2 -1
  720. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js.map +1 -1
  721. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.d.ts.map +1 -1
  722. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.js +10 -2
  723. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.js.map +1 -1
  724. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.d.ts.map +1 -1
  725. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js +10 -2
  726. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js.map +1 -1
  727. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts +3 -1095
  728. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts.map +1 -1
  729. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +2 -1
  730. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js.map +1 -1
  731. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.d.ts +3 -0
  732. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.d.ts.map +1 -0
  733. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.js +15 -0
  734. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.js.map +1 -0
  735. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.d.ts +4 -0
  736. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -0
  737. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js +6 -0
  738. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js.map +1 -0
  739. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.d.ts +3 -0
  740. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.d.ts.map +1 -0
  741. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.js +15 -0
  742. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.js.map +1 -0
  743. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.d.ts +4 -0
  744. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.d.ts.map +1 -0
  745. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js +6 -0
  746. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js.map +1 -0
  747. package/node_modules/@earendil-works/pi-ai/dist/providers/radius-config.d.ts.map +1 -1
  748. package/node_modules/@earendil-works/pi-ai/dist/providers/radius-config.js +18 -14
  749. package/node_modules/@earendil-works/pi-ai/dist/providers/radius-config.js.map +1 -1
  750. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.d.ts +3 -67
  751. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.d.ts.map +1 -1
  752. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js +2 -1
  753. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js.map +1 -1
  754. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts +3 -775
  755. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
  756. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +2 -1
  757. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js.map +1 -1
  758. package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.d.ts +3 -15
  759. package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.d.ts.map +1 -1
  760. package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js +2 -1
  761. package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js.map +1 -1
  762. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.d.ts +3 -15
  763. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
  764. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +2 -1
  765. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
  766. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.d.ts +3 -15
  767. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
  768. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +2 -1
  769. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
  770. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.d.ts +3 -15
  771. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
  772. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +2 -1
  773. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
  774. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.d.ts +3 -27
  775. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.d.ts.map +1 -1
  776. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js +2 -1
  777. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js.map +1 -1
  778. package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.d.ts +3 -27
  779. package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
  780. package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js +2 -1
  781. package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js.map +1 -1
  782. package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.d.ts +3 -27
  783. package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.d.ts.map +1 -1
  784. package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js +2 -1
  785. package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js.map +1 -1
  786. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +43 -3
  787. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  788. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  789. package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.d.ts +11 -0
  790. package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.d.ts.map +1 -0
  791. package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.js +30 -0
  792. package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.js.map +1 -0
  793. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +1 -0
  794. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  795. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +3 -0
  796. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  797. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.d.ts +16 -0
  798. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.d.ts.map +1 -0
  799. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js +94 -0
  800. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js.map +1 -0
  801. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts +41 -0
  802. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
  803. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +82 -0
  804. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  805. package/node_modules/@earendil-works/pi-ai/dist/utils/text.d.ts +6 -0
  806. package/node_modules/@earendil-works/pi-ai/dist/utils/text.d.ts.map +1 -0
  807. package/node_modules/@earendil-works/pi-ai/dist/utils/text.js +10 -0
  808. package/node_modules/@earendil-works/pi-ai/dist/utils/text.js.map +1 -0
  809. package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.d.ts +3 -0
  810. package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.d.ts.map +1 -0
  811. package/node_modules/@earendil-works/{pi-agent-core/dist/harness/session → pi-ai/dist/utils}/uuid.js +2 -2
  812. package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.js.map +1 -0
  813. package/node_modules/@earendil-works/pi-ai/package.json +11 -4
  814. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  815. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  816. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +31 -22
  817. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  818. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  819. package/node_modules/@earendil-works/pi-tui/dist/tui.js +2 -0
  820. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  821. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  822. package/package.json +7 -6
  823. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts +0 -2
  824. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts.map +0 -1
  825. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.js.map +0 -1
package/docs/index.md CHANGED
@@ -62,6 +62,7 @@ For the full first-run flow, see [Quickstart](quickstart.md).
62
62
 
63
63
  ## Reference
64
64
 
65
+ - [Environment variables](environment-variables.md) - Pi process configuration and session metadata available to bash tools.
65
66
  - [Session format](session-format.md) - JSONL session file format, entry types, and SessionManager API.
66
67
 
67
68
  ## Platform setup
package/docs/json.md CHANGED
@@ -23,7 +23,11 @@ type AgentSessionEvent =
23
23
  | SystemPromptChangeEvent // type: "system_prompt_change"
24
24
  | ExtensionToolHookLifecycleEvent // type: "tool_hook_status"
25
25
  | { type: "auto_retry_start"; attempt: number; maxAttempts: number; delayMs: number; errorMessage: string }
26
- | { type: "auto_retry_end"; success: boolean; attempt: number; finalError?: string };
26
+ | { type: "auto_retry_end"; success: boolean; attempt: number; finalError?: string }
27
+ | { type: "summarization_retry_scheduled"; attempt: number; maxAttempts: number; delayMs: number; errorMessage: string }
28
+ | { type: "summarization_retry_attempt_start"; source: "branchSummary" }
29
+ | { type: "summarization_retry_attempt_start"; source: "compaction"; reason: "manual" | "threshold" | "overflow" }
30
+ | { type: "summarization_retry_finished" };
27
31
  ```
28
32
 
29
33
  `queue_update` emits the full pending steering and follow-up queues whenever they change. `compaction_start`, `compaction_progress`, and `compaction_end` cover both manual and automatic compaction. `session_info_changed` fires when the session display name changes, `thinking_level_changed` when the thinking level changes, `system_prompt_change` (see `SystemPromptChangeEvent` in [`extensions/types.ts`](../src/core/extensions/types.ts)) when a model switch changes the active system prompt, and `tool_hook_status` (see `ExtensionToolHookLifecycleEvent` in [`extensions/runner.ts`](../src/core/extensions/runner.ts)) for extension tool hook start/end phases.
package/docs/models.md CHANGED
@@ -478,6 +478,8 @@ Some Anthropic models require adaptive thinking (`thinking.type: "adaptive"` plu
478
478
 
479
479
  Some Anthropic-compatible providers emit thinking blocks with empty signatures and still expect them on replay. Set `allowEmptySignature` to `true` only for those providers; real Anthropic rejects empty thinking signatures.
480
480
 
481
+ Built-in Anthropic models enable `supportsStrictTools` in their model metadata. Custom Anthropic-compatible models must set it to `true` when their endpoint accepts strict JSON-schema tool definitions.
482
+
481
483
  ```json
482
484
  {
483
485
  "providers": {
@@ -511,6 +513,7 @@ Some Anthropic-compatible providers emit thinking blocks with empty signatures a
511
513
  | `supportsCacheControlOnTools` | Whether the provider accepts Anthropic-style `cache_control` markers on tool definitions. Default: `true`. |
512
514
  | `forceAdaptiveThinking` | Whether to send adaptive thinking (`thinking.type: "adaptive"` plus `output_config.effort`) for this model. Built-in adaptive models set this automatically. Default: `false`. |
513
515
  | `allowEmptySignature` | Whether to replay empty thinking signatures as `signature: ""` instead of converting thinking to text. Default: `false`. |
516
+ | `supportsStrictTools` | Whether the provider accepts strict JSON-schema tool definitions. Default: `false`; built-in Anthropic models enable it in generated metadata. |
514
517
 
515
518
  ## OpenAI Compatibility
516
519
 
@@ -548,10 +551,11 @@ For providers with partial OpenAI compatibility, use the `compat` field.
548
551
  | `requiresReasoningContentOnAssistantMessages` | Include empty `reasoning_content` on all replayed assistant messages when reasoning is enabled |
549
552
  | `thinkingFormat` | Use `reasoning_effort`, `openrouter`, `deepseek`, `together`, `zai`, `qwen`, `chat-template`, or `qwen-chat-template` thinking parameters |
550
553
  | `chatTemplateKwargs` | `chat_template_kwargs` values for `thinkingFormat: "chat-template"`; use `{ "$var": "thinking.enabled" }` or `{ "$var": "thinking.effort" }` for pi-controlled thinking values |
551
- | `cacheControlFormat` | Use Anthropic-style `cache_control` markers on the system prompt, last tool definition, and last user/assistant text content. Currently only `anthropic` is supported. |
554
+ | `cacheControlFormat` | Use Anthropic-style `cache_control` markers on the system prompt, last tool definition, and last user, assistant, or tool-result text content. Currently only `anthropic` is supported. |
552
555
  | `sendSessionAffinityHeaders` | For `openai-completions`, send session-affinity headers from the session id when caching is enabled. Default: `false`. |
553
556
  | `sessionAffinityFormat` | For `openai-completions` and `openai-responses`, the session-affinity header format: `openai` sends `session_id`/`x-client-request-id` (completions also `x-session-affinity`), `openai-nosession` omits the underscore-containing `session_id` header, `openrouter` sends `x-session-id`. Does not affect the `prompt_cache_key` body param. Default: auto-detected. |
554
- | `supportsStrictMode` | Include the `strict` field in tool definitions |
557
+ | `supportsStrictMode` | Whether the provider accepts strict JSON-schema function tool definitions. Defaults depend on the API; built-in OpenAI models carry explicit capability metadata. |
558
+ | `supportsOpenAIGrammarTools` | Whether OpenAI-compatible APIs emit custom Lark/regex grammar tools. When `false`, grammar-constrained tools fall back to normal function tools. Default: `false`; the built-in model catalog enables it for GPT-5+ models on OpenAI, OpenAI Codex, Azure OpenAI, GitHub Copilot, opencode, and Cloudflare AI Gateway. |
555
559
  | `deferredToolsMode` | Use provider-specific deferred tool serialization. Currently only `"kimi"` is supported for Kimi's OpenAI-compatible Chat Completions format. |
556
560
  | `supportsLongCacheRetention` | Whether the provider accepts long cache retention when cache retention is `long`: `prompt_cache_retention: "24h"` for OpenAI prompt caching, or `cache_control.ttl: "1h"` when `cacheControlFormat` is `anthropic`. Default: `true`. |
557
561
  | `openRouterRouting` | OpenRouter provider routing preferences. This object is sent as-is in the `provider` field of the [OpenRouter API request](https://openrouter.ai/docs/guides/routing/provider-selection). |
package/docs/providers.md CHANGED
@@ -20,9 +20,10 @@ Use `/login` in interactive mode, then select a provider:
20
20
  - Claude Pro/Max
21
21
  - GitHub Copilot
22
22
  - xAI (Grok/X subscription)
23
+ - OpenRouter (OAuth-minted API key billed from OpenRouter credits)
23
24
  - Radius
24
25
 
25
- Use `/logout` to clear credentials. Tokens are stored in `~/.pi/agent/auth.json` and auto-refresh when expired.
26
+ Use `/logout` to clear credentials. Tokens are stored in `~/.pi/agent/auth.json` and auto-refresh when expired. OpenRouter instead mints a user-controlled API key that does not expire automatically.
26
27
 
27
28
  ### OpenAI Codex
28
29
 
@@ -43,6 +44,12 @@ Anthropic subscription auth is active for Claude Pro/Max accounts. Third-party h
43
44
  - Run `/login xai`, then select **Use a subscription**
44
45
  - `XAI_API_KEY` remains available through **Use an API key**
45
46
 
47
+ ### OpenRouter
48
+
49
+ - Run `/login openrouter`, then select **Sign in with OpenRouter** to open the OpenRouter PKCE authorization flow
50
+ - The authorization creates a user-controlled OpenRouter API key billed from your OpenRouter credits
51
+ - `OPENROUTER_API_KEY` remains available through **Use an API key**
52
+
46
53
  ### Radius
47
54
 
48
55
  Radius is a dynamic `pi-messages` gateway. `/login radius` stores OAuth tokens in `auth.json`; the gateway catalog is refreshed independently and cached in `models-store.json`. Custom Radius gateways can be declared in `models.json` with `"oauth": "radius"` and a gateway `baseUrl`.
@@ -87,6 +94,8 @@ pi
87
94
  | Kimi For Coding | `KIMI_API_KEY` | `kimi-coding` |
88
95
  | MiniMax | `MINIMAX_API_KEY` | `minimax` |
89
96
  | MiniMax (China) | `MINIMAX_CN_API_KEY` | `minimax-cn` |
97
+ | Qwen Token Plan | `QWEN_TOKEN_PLAN_API_KEY` | `qwen-token-plan` |
98
+ | Qwen Token Plan (China) | `QWEN_TOKEN_PLAN_CN_API_KEY` | `qwen-token-plan-cn` |
90
99
  | Xiaomi MiMo | `XIAOMI_API_KEY` | `xiaomi` |
91
100
  | Xiaomi MiMo Token Plan (China) | `XIAOMI_TOKEN_PLAN_CN_API_KEY` | `xiaomi-token-plan-cn` |
92
101
  | Xiaomi MiMo Token Plan (Amsterdam) | `XIAOMI_TOKEN_PLAN_AMS_API_KEY` | `xiaomi-token-plan-ams` |
@@ -110,6 +119,8 @@ Store credentials in `~/.pi/agent/auth.json`:
110
119
  "opencode": { "type": "api_key", "key": "..." },
111
120
  "opencode-go": { "type": "api_key", "key": "..." },
112
121
  "together": { "type": "api_key", "key": "..." },
122
+ "qwen-token-plan": { "type": "api_key", "key": "sk-sp-..." },
123
+ "qwen-token-plan-cn": { "type": "api_key", "key": "sk-sp-..." },
113
124
  "xiaomi": { "type": "api_key", "key": "..." },
114
125
  "xiaomi-token-plan-cn": { "type": "api_key", "key": "..." },
115
126
  "xiaomi-token-plan-ams": { "type": "api_key", "key": "..." },
package/docs/rpc.md CHANGED
@@ -17,13 +17,63 @@ Common options:
17
17
  - `--no-session`: Disable session persistence
18
18
  - `--session-dir <path>`: Custom session storage directory
19
19
 
20
+ ## Multi-session mode (D1 wire protocol)
21
+
22
+ Multi-session mode lets one `senpi --mode rpc` process serve several independent conversations concurrently over the same stdio JSONL stream. Classic single-session mode is byte-identical to today; the only additive classic-mode behavior is that `get_protocol_info` is answered.
23
+
24
+ ### Starting multi-session mode
25
+
26
+ ```bash
27
+ senpi --mode rpc --multi-session [options]
28
+ ```
29
+
30
+ Startup: `senpi --mode rpc --multi-session` → NO default session is constructed (no default `AgentSessionRuntime`, no default extension/watcher load). Classic `senpi --mode rpc` is byte-identical to today. Mode is fixed at process start; there is no runtime transition.
31
+
32
+ ### D1 normative table (multi-session mode)
33
+
34
+ | Command | Params | Success data | Notes |
35
+ | --- | --- | --- | --- |
36
+ | `get_protocol_info` | - | `{ protocolVersion: 1, capabilities: ["multi_session"], mode: "classic"\|"multi" }` | Answered in BOTH modes; side-effect-free; THE capability probe. |
37
+ | `open_session` | `sessionPath?`, `cwd?`, `provider?`, `modelId?`, `thinkingLevel?`, `permissionPreset?` (all optional; paths MUST be absolute) | `{ sessionId, state: RpcSessionState }` | `sessionPath` = today's `--session` semantics (open-if-exists else create persisting there, `session-manager.ts:926-940`); `provider`/`modelId` applied only on create (resume restores the session's model — mirrors `SenpiSessionRuntime.ts:198-200`); params form the immutable launch profile (D8). |
38
+ | `close_session` | `sessionId` | `{}` | Aborts active work, awaits agent idle + settled persistence, flushes queued events, detaches subscriptions; its response is the LAST record tagged with that handle — no events after (test-pinned). |
39
+ | `list_sessions` | - | `{ sessions: [{ sessionId, durableSessionId, sessionPath, cwd, name, status }] }` | Includes `opening`/`closing` entries with their status. |
40
+ | every existing command | + `sessionId` (REQUIRED in multi mode) | unchanged | Routed to that session. |
41
+
42
+ ### Identities (D6)
43
+
44
+ Response-level `sessionId` = opaque **routing handle**, unique per process epoch, ephemeral (dies with the child). `state.sessionId` = **durable** JSONL session identity (what a resume cursor stores today). `list_sessions` exposes both. Clients store both, discard routing handles on child exit, and verify only durable ids against cursors.
45
+
46
+ ### Stable error codes
47
+
48
+ In the response `error` field, machine-matchable:
49
+
50
+ - `unknown_session`
51
+ - `session_closing`
52
+ - `session_path_in_use`
53
+ - `missing_session_id` (session-scoped command without `sessionId` in multi mode)
54
+ - `multi_session_disabled` (`open_session` in classic mode)
55
+ - `invalid_path` (relative `sessionPath`/`cwd`)
56
+ - `open_failed: <detail>`
57
+
58
+ ### Tagging
59
+
60
+ Every response/event/`extension_ui_request` belonging to a session carries a top-level `sessionId` (routing handle). `get_protocol_info`/`list_sessions` responses are untagged. Classic mode: nothing tagged (byte-identical).
61
+
62
+ ### Ordering guarantee (D9)
63
+
64
+ Strict FIFO per session; one total stdout order; cross-session order unspecified; fair round-robin between sessions' queued complete records; NO cross-session batch coalescing (per-session event buffers; the process-wide single-array coalescer in `event-output-buffer.ts` must not merge records of different sessions into one write). Starvation freedom is NOT promised (single pipe); a giant tool record delays others — bounded only by record completion.
65
+
66
+ ### Duplicate/idempotency
67
+
68
+ Duplicate `open_session` while a path reservation is held → `session_path_in_use`. `close_session` on unknown/already-closed → `unknown_session` error. Request `id`s are client-owned; the server echoes them without dedup.
69
+
20
70
  ## Protocol Overview
21
71
 
22
72
  - **Commands**: JSON objects sent to stdin, one per line
23
73
  - **Responses**: JSON objects with `type: "response"` indicating command success/failure
24
74
  - **Events**: Agent events streamed to stdout as JSON lines
25
75
 
26
- All commands support an optional `id` field for request/response correlation. If provided, the corresponding response will include the same `id`.
76
+ All commands support an optional `id` field for request/response correlation. If provided, the corresponding response will include the same `id`. `bash_execution_update` events also include the `id` of their originating `bash` command.
27
77
 
28
78
  ### Framing
29
79
 
@@ -322,6 +372,26 @@ Response:
322
372
  }
323
373
  ```
324
374
 
375
+ #### get_available_thinking_levels
376
+
377
+ List the thinking levels supported by the current model. Returns `["off"]` for a model without reasoning support.
378
+
379
+ ```json
380
+ {"type": "get_available_thinking_levels"}
381
+ ```
382
+
383
+ Response:
384
+ ```json
385
+ {
386
+ "type": "response",
387
+ "command": "get_available_thinking_levels",
388
+ "success": true,
389
+ "data": {
390
+ "levels": ["off", "minimal", "low", "medium", "high"]
391
+ }
392
+ }
393
+ ```
394
+
325
395
  ### Queue Modes
326
396
 
327
397
  #### set_steering_mode
@@ -384,12 +454,20 @@ Response:
384
454
  "firstKeptEntryId": "abc123",
385
455
  "tokensBefore": 150000,
386
456
  "estimatedTokensAfter": 32000,
457
+ "usage": {
458
+ "input": 32000,
459
+ "output": 1200,
460
+ "cacheRead": 0,
461
+ "cacheWrite": 0,
462
+ "totalTokens": 33200,
463
+ "cost": {"input": 0.01, "output": 0.02, "cacheRead": 0, "cacheWrite": 0, "total": 0.03}
464
+ },
387
465
  "details": {}
388
466
  }
389
467
  }
390
468
  ```
391
469
 
392
- `estimatedTokensAfter` is a heuristic estimate over the rebuilt message context immediately after compaction, not a provider-exact token count.
470
+ `estimatedTokensAfter` is a heuristic estimate over the rebuilt message context immediately after compaction, not a provider-exact token count. `usage` reports the LLM call or calls that generated the summary and may be omitted by custom compaction handlers.
393
471
 
394
472
  #### set_auto_compaction
395
473
 
@@ -436,15 +514,18 @@ Response:
436
514
 
437
515
  #### bash
438
516
 
439
- Execute a shell command and add output to conversation context.
517
+ Execute a shell command and add output to conversation context. Output streams as `bash_execution_update` events while the command runs; the response contains the final result.
440
518
 
441
519
  ```json
442
- {"type": "bash", "command": "ls -la"}
520
+ {"id": "req-1", "type": "bash", "command": "ls -la"}
443
521
  ```
444
522
 
523
+ Include an `id` to associate streamed `bash_execution_update` events with this command.
524
+
445
525
  Response:
446
526
  ```json
447
527
  {
528
+ "id": "req-1",
448
529
  "type": "response",
449
530
  "command": "bash",
450
531
  "success": true,
@@ -475,7 +556,7 @@ If output was truncated, includes `fullOutputPath`:
475
556
 
476
557
  **How bash results reach the LLM:**
477
558
 
478
- The `bash` command executes immediately and returns a `BashResult`. Internally, a `BashExecutionMessage` is created and stored in the agent's message state. This message does NOT emit an event.
559
+ The `bash` command executes immediately and returns a `BashResult`. Internally, a `BashExecutionMessage` is created and stored in the agent's message state.
479
560
 
480
561
  When the next `prompt` command is sent, all messages (including `BashExecutionMessage`) are transformed before being sent to the LLM. The `BashExecutionMessage` is converted to a `UserMessage` with this format:
481
562
 
@@ -490,7 +571,6 @@ drwxr-xr-x ...
490
571
  This means:
491
572
  1. Bash output is included in the LLM context on the **next prompt**, not immediately
492
573
  2. Multiple bash commands can be executed before a prompt; all outputs will be included
493
- 3. No event is emitted for the `BashExecutionMessage` itself
494
574
 
495
575
  #### abort_bash
496
576
 
@@ -546,7 +626,7 @@ Response:
546
626
  }
547
627
  ```
548
628
 
549
- `tokens` contains assistant usage totals for the current session state. `contextUsage` contains the actual current context-window estimate used for compaction and footer display.
629
+ `tokens` and `cost` include assistant messages, usage reported by tools, and compaction/branch-summary generation across the full session. `contextUsage` contains the actual current context-window estimate used for compaction and footer display.
550
630
 
551
631
  `contextUsage` is omitted when no model or context window is available. `contextUsage.tokens` and `contextUsage.percent` are `null` immediately after compaction until a fresh post-compaction assistant response provides valid usage data.
552
632
 
@@ -811,7 +891,7 @@ Each command has:
811
891
 
812
892
  ## Events
813
893
 
814
- Events are streamed to stdout as JSON lines during agent operation. Events do NOT include an `id` field (only responses do).
894
+ Events are streamed to stdout as JSON lines during agent operation. Events do not generally include an `id` field; `bash_execution_update` includes the `id` of its originating `bash` command when one was provided.
815
895
 
816
896
  ### Event Types
817
897
 
@@ -825,6 +905,7 @@ Events are streamed to stdout as JSON lines during agent operation. Events do NO
825
905
  | `message_start` | Message begins |
826
906
  | `message_update` | Streaming update (text/thinking/toolcall deltas) |
827
907
  | `message_end` | Message completes |
908
+ | `bash_execution_update` | Direct RPC bash command output chunk |
828
909
  | `tool_execution_start` | Tool begins execution |
829
910
  | `tool_execution_update` | Tool execution progress (streaming output) |
830
911
  | `tool_execution_end` | Tool completes |
@@ -833,6 +914,9 @@ Events are streamed to stdout as JSON lines during agent operation. Events do NO
833
914
  | `compaction_end` | Compaction completes |
834
915
  | `auto_retry_start` | Auto-retry begins (after transient error) |
835
916
  | `auto_retry_end` | Auto-retry completes (success or final failure) |
917
+ | `summarization_retry_scheduled` | Retry scheduled for a transient compaction or branch-summary summarization error |
918
+ | `summarization_retry_attempt_start` | Retried summarization request starts |
919
+ | `summarization_retry_finished` | Summarization retry loop completes |
836
920
  | `extension_error` | Extension threw an error |
837
921
 
838
922
  ### agent_start
@@ -930,6 +1014,20 @@ Example streaming a text response:
930
1014
  {"type":"message_update","message":{...},"assistantMessageEvent":{"type":"text_end","contentIndex":0,"content":"Hello world","partial":{...}}}
931
1015
  ```
932
1016
 
1017
+ ### bash_execution_update
1018
+
1019
+ Emitted once for each output chunk from a direct `bash` command. `id` matches the command's `id`, allowing clients to associate output with the correct command.
1020
+
1021
+ Events stream all output while the command runs, even if the final `bash` response's `output` is truncated.
1022
+
1023
+ ```json
1024
+ {
1025
+ "type": "bash_execution_update",
1026
+ "id": "req-1",
1027
+ "delta": "total 48\n"
1028
+ }
1029
+ ```
1030
+
933
1031
  ### tool_execution_start / tool_execution_update / tool_execution_end
934
1032
 
935
1033
  Emitted when a tool begins, streams progress, and completes execution.
@@ -1006,6 +1104,14 @@ The `reason` field is `"manual"`, `"threshold"`, or `"overflow"`.
1006
1104
  "firstKeptEntryId": "abc123",
1007
1105
  "tokensBefore": 150000,
1008
1106
  "estimatedTokensAfter": 32000,
1107
+ "usage": {
1108
+ "input": 32000,
1109
+ "output": 1200,
1110
+ "cacheRead": 0,
1111
+ "cacheWrite": 0,
1112
+ "totalTokens": 33200,
1113
+ "cost": {"input": 0.01, "output": 0.02, "cacheRead": 0, "cacheWrite": 0, "total": 0.03}
1114
+ },
1009
1115
  "details": {}
1010
1116
  },
1011
1117
  "aborted": false,
@@ -1051,6 +1157,36 @@ On final failure (max retries exceeded):
1051
1157
  }
1052
1158
  ```
1053
1159
 
1160
+ ### summarization_retry_scheduled / summarization_retry_attempt_start / summarization_retry_finished
1161
+
1162
+ Emitted when compaction or branch-summary summarization retries after a transient provider error. These events use the same retry settings as automatic assistant-turn retries.
1163
+
1164
+ ```json
1165
+ {
1166
+ "type": "summarization_retry_scheduled",
1167
+ "attempt": 1,
1168
+ "maxAttempts": 3,
1169
+ "delayMs": 2000,
1170
+ "errorMessage": "terminated"
1171
+ }
1172
+ ```
1173
+
1174
+ ```json
1175
+ {
1176
+ "type": "summarization_retry_attempt_start",
1177
+ "source": "compaction",
1178
+ "reason": "threshold"
1179
+ }
1180
+ ```
1181
+
1182
+ For branch summaries, `source` is `"branchSummary"` and no `reason` is present.
1183
+
1184
+ ```json
1185
+ {
1186
+ "type": "summarization_retry_finished"
1187
+ }
1188
+ ```
1189
+
1054
1190
  ### extension_error
1055
1191
 
1056
1192
  Emitted when an extension throws an error.
@@ -1363,11 +1499,21 @@ Stop reasons: `"stop"`, `"length"`, `"toolUse"`, `"error"`, `"aborted"`
1363
1499
  "toolCallId": "call_123",
1364
1500
  "toolName": "bash",
1365
1501
  "content": [{"type": "text", "text": "total 48\ndrwxr-xr-x ..."}],
1502
+ "usage": {
1503
+ "input": 100,
1504
+ "output": 50,
1505
+ "cacheRead": 0,
1506
+ "cacheWrite": 0,
1507
+ "totalTokens": 150,
1508
+ "cost": {"input": 0.0003, "output": 0.00075, "cacheRead": 0, "cacheWrite": 0, "total": 0.00105}
1509
+ },
1366
1510
  "isError": false,
1367
1511
  "timestamp": 1733234567890
1368
1512
  }
1369
1513
  ```
1370
1514
 
1515
+ `usage` is optional and reports nested LLM work performed by the tool. When present, it contributes to session token and cost totals.
1516
+
1371
1517
  ### BashExecutionMessage
1372
1518
 
1373
1519
  Created by the `bash` RPC command (not by LLM tool calls):
package/docs/sdk.md CHANGED
@@ -319,6 +319,9 @@ session.subscribe((event) => {
319
319
  case "compaction_end":
320
320
  case "auto_retry_start":
321
321
  case "auto_retry_end":
322
+ case "summarization_retry_scheduled":
323
+ case "summarization_retry_attempt_start":
324
+ case "summarization_retry_finished":
322
325
  break;
323
326
  }
324
327
  });
@@ -100,6 +100,7 @@ interface ToolResultMessage {
100
100
  toolName: string;
101
101
  content: (TextContent | ImageContent)[];
102
102
  details?: any; // Tool-specific metadata
103
+ usage?: Usage; // Nested LLM work performed by the tool
103
104
  isError: boolean;
104
105
  timestamp: number;
105
106
  }
@@ -235,9 +236,18 @@ Created when context is compacted. Stores a summary of earlier messages.
235
236
  {"type":"compaction","id":"f6g7h8i9","parentId":"e5f6g7h8","timestamp":"2024-12-03T14:10:00.000Z","summary":"User discussed X, Y, Z...","firstKeptEntryId":"c3d4e5f6","tokensBefore":50000}
236
237
  ```
237
238
 
239
+ Newer harness-generated compactions embed the retained post-compaction context directly on the entry, instead of `firstKeptEntryId`:
240
+
241
+ ```json
242
+ {"type":"compaction","id":"f6g7h8i9","parentId":"e5f6g7h8","timestamp":"2024-12-03T14:10:00.000Z","summary":"User discussed X, Y, Z...","tokensBefore":50000,"retainedTail":[{"role":"user","content":"latest request"},{"role":"assistant","content":[{"type":"text","text":"latest reply"}],"provider":"anthropic","model":"claude-sonnet-4-5","usage":{...},"stopReason":"stop"}]}
243
+ ```
244
+
238
245
  Optional fields:
246
+ - `usage`: LLM usage from generating the summary; included in session token and cost totals
247
+ - `retainedTail`: Materialized `AgentMessage[]` kept after compaction. This is optional only for backward compatibility with older sessions. Newer harness-generated compactions include it so we can rebuild context from this checkpoint without walking older entries before the compaction entry.
239
248
  - `details`: Implementation-specific data (e.g., `{ readFiles: string[], modifiedFiles: string[] }` for default, or custom data for extensions)
240
249
  - `fromHook`: `true` if generated by an extension, `false`/`undefined` if senpi-generated (legacy field name)
250
+ - `firstKeptEntryId`: for compatibility with old entry format.
241
251
 
242
252
  ### BranchSummaryEntry
243
253
 
@@ -248,6 +258,7 @@ Created when switching branches via `/tree` with an LLM generated summary of the
248
258
  ```
249
259
 
250
260
  Optional fields:
261
+ - `usage`: LLM usage from generating the summary; included in session token and cost totals
251
262
  - `details`: File tracking data (`{ readFiles: string[], modifiedFiles: string[] }`) for default, or custom data for extensions
252
263
  - `fromHook`: `true` if generated by an extension, `false`/`undefined` if senpi-generated (legacy field name)
253
264
 
@@ -315,8 +326,9 @@ Entries form a tree:
315
326
  1. Collects all entries on the path
316
327
  2. If a `CompactionEntry` is on the path:
317
328
  - Includes the compaction entry first
318
- - Then entries from `firstKeptEntryId` to compaction
319
- - Then entries after compaction
329
+ - If `retainedTail` is present, it acts as a self-contained checkpoint and entries after the compaction are included
330
+ - Otherwise entries from `firstKeptEntryId` to the compaction are included
331
+ - Then entries after compaction are included
320
332
  3. Preserves non-message entries in the selected range so interactive mode can render them
321
333
 
322
334
  `buildSessionContext()` builds on that entry list to produce the message list for the LLM:
@@ -324,11 +336,13 @@ Entries form a tree:
324
336
  1. Extracts current model and thinking level settings from the full path
325
337
  2. Converts selected entries to messages:
326
338
  - `message` -> stored `AgentMessage`
327
- - `compaction` -> `compactionSummary`
339
+ - `compaction` -> `compactionSummary` plus `retainedTail` when present
328
340
  - `branch_summary` -> `branchSummary`
329
341
  - `custom_message` -> `CustomMessage`
330
342
  - `custom` -> no context message
331
343
 
344
+ This makes newer compactions act like self-contained checkpoints. `retainedTail` is optional only so older sessions that only store `firstKeptEntryId` continue to load correctly.
345
+
332
346
  ## Parsing Example
333
347
 
334
348
  ```typescript
package/docs/settings.md CHANGED
@@ -84,7 +84,7 @@ Permission rules are a confirmation policy, not a sandbox. Senpi, extensions, pa
84
84
  | `defaultProvider` | string | - | Default provider (e.g., `"anthropic"`, `"openai"`) |
85
85
  | `defaultModel` | string | - | Default model ID |
86
86
  | `defaultThinkingLevel` | string | - | `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"`, `"max"` |
87
- | `promptPreset` | string | `"auto"` | Force a system prompt preset: `"auto"`, `"kimi-k2-6"`, `"kimi-k2-7"`, `"kimi-k3"`, `"glm-5.2"`, `"claude-fable-5"`, `"claude-opus-4-5"`, `"claude-opus-4-6"`, `"claude-opus-4-7"`, `"claude-opus-4-8"`, `"gpt-5"`, `"gpt-5.2"`, `"gpt-5.3-codex"`, `"gpt-5.4"`, `"gpt-5.5"`, or `"gpt-5.6"` |
87
+ | `promptPreset` | string | `"auto"` | Force a system prompt preset: `"auto"`, `"kimi-k2-6"`, `"kimi-k2-7"`, `"kimi-k3"`, `"glm-5.2"`, `"claude-fable-5"`, `"claude-opus-5"`, `"claude-opus-4-5"`, `"claude-opus-4-6"`, `"claude-opus-4-7"`, `"claude-opus-4-8"`, `"gpt-5"`, `"gpt-5.2"`, `"gpt-5.3-codex"`, `"gpt-5.4"`, `"gpt-5.5"`, or `"gpt-5.6"` |
88
88
  | `hideThinkingBlock` | boolean | `false` | Hide thinking blocks in output |
89
89
  | `showCacheMissNotices` | boolean | `false` | Show transcript notices for significant prompt-cache misses |
90
90
  | `thinkingBudgets` | object | - | Custom token budgets per thinking level |
@@ -213,7 +213,7 @@ Set `PI_SKIP_VERSION_CHECK=1` to disable the senpi version update check. Use `--
213
213
  | `retry.provider.maxRetries` | number | `0` | Provider/SDK retry attempts |
214
214
  | `retry.provider.maxRetryDelayMs` | number | `60000` | Max server-requested delay before failing (60s) |
215
215
 
216
- When a provider requests a retry delay longer than `retry.provider.maxRetryDelayMs` (e.g., Google's "quota will reset after 5h"), the request fails immediately with an informative error instead of waiting silently. Set to `0` to disable the cap.
216
+ When a provider requests a retry delay longer than `retry.provider.maxRetryDelayMs`, the request fails immediately with an informative error instead of waiting silently. Set it to `0` to disable the limit.
217
217
 
218
218
  Keep `retry.provider.maxRetries` at `0` unless provider-level retries are explicitly needed. Setting it above `0` can make SDK/provider retries handle out-of-usage-limit errors before senpi sees them, which may block the agent until the provider quota resets in some circumstances.
219
219
 
package/docs/usage.md CHANGED
@@ -11,7 +11,7 @@ The interface has four main areas:
11
11
  - **Startup header** - shortcuts, loaded context files, prompt templates, skills, and extensions
12
12
  - **Messages** - user messages, assistant responses, tool calls, tool results, notifications, errors, and extension UI
13
13
  - **Editor** - where you type; border color indicates the current thinking level
14
- - **Footer** - working directory, session name, token/cache usage, cost, context usage, and current model
14
+ - **Footer** - working directory, session name, token/cache usage, cost, context usage, and current model. Totals include assistant responses, usage reported by tools, and summary generation.
15
15
 
16
16
  The editor can be replaced temporarily by built-in UI such as `/settings` or by custom extension UI.
17
17
 
@@ -289,19 +289,6 @@ pi --tools read,grep,find,ls -p "Review the code"
289
289
  pi --exclude-tools ask_question
290
290
  ```
291
291
 
292
- ### Environment Variables
293
-
294
- | Variable | Description |
295
- |----------|-------------|
296
- | `PI_CODING_AGENT_DIR` | Override config directory; default is `~/.pi/agent` |
297
- | `PI_CODING_AGENT_SESSION_DIR` | Override session storage directory; overridden by `--session-dir` |
298
- | `PI_PACKAGE_DIR` | Override package directory, useful for Nix/Guix store paths |
299
- | `PI_OFFLINE` | Disable startup network operations, including update checks, package update checks, and install/update telemetry |
300
- | `PI_SKIP_VERSION_CHECK` | Skip the Pi version update check at startup. This prevents the `pi.dev` latest-version request |
301
- | `PI_TELEMETRY` | Override install/update telemetry and provider attribution headers: `1`/`true`/`yes` or `0`/`false`/`no`. This does not disable update checks |
302
- | `PI_CACHE_RETENTION` | Set to `long` for extended prompt cache where supported |
303
- | `VISUAL`, `EDITOR` | Fallback external editor for Ctrl+G when `externalEditor` is unset; defaults to Notepad on Windows and `nano` elsewhere |
304
-
305
292
  ## Design Principles
306
293
 
307
294
  Pi keeps the core small and pushes workflow-specific behavior into extensions, skills, prompt templates, and packages.
@@ -13,6 +13,7 @@
13
13
  * pi --extension examples/extensions/custom-compaction.ts
14
14
  */
15
15
 
16
+ import { uuidv7 } from "@earendil-works/pi-ai";
16
17
  import { complete } from "@earendil-works/pi-ai/compat";
17
18
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
18
19
  import { convertToLlm, serializeConversation } from "@earendil-works/pi-coding-agent";
@@ -96,6 +97,8 @@ ${conversationText}
96
97
  env: auth.env,
97
98
  maxTokens: 8192,
98
99
  signal,
100
+ cacheRetention: "none",
101
+ sessionId: uuidv7(),
99
102
  },
100
103
  );
101
104
 
@@ -116,6 +119,7 @@ ${conversationText}
116
119
  summary,
117
120
  firstKeptEntryId,
118
121
  tokensBefore,
122
+ usage: response.usage,
119
123
  },
120
124
  };
121
125
  } catch (error) {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider",
3
- "version": "0.80.10",
3
+ "version": "0.82.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-custom-provider",
9
- "version": "0.80.10",
9
+ "version": "0.82.0",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sdk": "^0.52.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-anthropic",
3
3
  "private": true,
4
- "version": "0.80.10",
4
+ "version": "0.82.0",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-gitlab-duo",
3
3
  "private": true,
4
- "version": "0.80.10",
4
+ "version": "0.82.0",
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-gondolin",
3
- "version": "0.80.10",
3
+ "version": "0.82.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-gondolin",
9
- "version": "0.80.10",
9
+ "version": "0.82.0",
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.10",
4
+ "version": "0.82.0",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -13,6 +13,7 @@
13
13
  */
14
14
 
15
15
  import type { AgentMessage } from "@earendil-works/pi-agent-core";
16
+ import { uuidv7 } from "@earendil-works/pi-ai";
16
17
  import { complete, type Message } from "@earendil-works/pi-ai/compat";
17
18
  import type { ExtensionAPI, SessionEntry } from "@earendil-works/pi-coding-agent";
18
19
  import { BorderedLoader, convertToLlm, serializeConversation } from "@earendil-works/pi-coding-agent";
@@ -136,7 +137,14 @@ export default function (pi: ExtensionAPI) {
136
137
  const response = await complete(
137
138
  ctx.model!,
138
139
  { systemPrompt: SYSTEM_PROMPT, messages: [userMessage] },
139
- { apiKey: auth.apiKey, headers: auth.headers, env: auth.env, signal: loader.signal },
140
+ {
141
+ apiKey: auth.apiKey,
142
+ headers: auth.headers,
143
+ env: auth.env,
144
+ signal: loader.signal,
145
+ cacheRetention: "none",
146
+ sessionId: uuidv7(),
147
+ },
140
148
  );
141
149
 
142
150
  if (response.stopReason === "aborted") {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
- "version": "1.10.10",
3
+ "version": "1.12.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-sandbox",
9
- "version": "1.10.10",
9
+ "version": "1.12.0",
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.10",
4
+ "version": "1.12.0",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",