@code-yeongyu/senpi 2026.7.17 → 2026.7.20-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (738) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/README.md +5 -2
  3. package/dist/cli/neo/build-argv.d.ts.map +1 -1
  4. package/dist/cli/neo/build-argv.js +2 -0
  5. package/dist/cli/neo/build-argv.js.map +1 -1
  6. package/dist/core/agent-session-services.d.ts.map +1 -1
  7. package/dist/core/agent-session-services.js +11 -4
  8. package/dist/core/agent-session-services.js.map +1 -1
  9. package/dist/core/agent-session.d.ts +37 -0
  10. package/dist/core/agent-session.d.ts.map +1 -1
  11. package/dist/core/agent-session.js +395 -73
  12. package/dist/core/agent-session.js.map +1 -1
  13. package/dist/core/compaction/compaction.d.ts +2 -2
  14. package/dist/core/compaction/compaction.d.ts.map +1 -1
  15. package/dist/core/compaction/compaction.js +59 -15
  16. package/dist/core/compaction/compaction.js.map +1 -1
  17. package/dist/core/dynamic-prompt/build.d.ts +7 -0
  18. package/dist/core/dynamic-prompt/build.d.ts.map +1 -1
  19. package/dist/core/dynamic-prompt/build.js +5 -0
  20. package/dist/core/dynamic-prompt/build.js.map +1 -1
  21. package/dist/core/dynamic-prompt/workstation.d.ts +35 -0
  22. package/dist/core/dynamic-prompt/workstation.d.ts.map +1 -0
  23. package/dist/core/dynamic-prompt/workstation.js +81 -0
  24. package/dist/core/dynamic-prompt/workstation.js.map +1 -0
  25. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  26. package/dist/core/extensions/builtin/compaction/index.js +68 -10
  27. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  28. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.d.ts +1 -0
  29. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.d.ts.map +1 -1
  30. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.js +20 -2
  31. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.js.map +1 -1
  32. package/dist/core/extensions/builtin/compaction/speculative.d.ts +7 -1
  33. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  34. package/dist/core/extensions/builtin/compaction/speculative.js +29 -11
  35. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  36. package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts +9 -7
  37. package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts.map +1 -1
  38. package/dist/core/extensions/builtin/compaction/todo-bridge.js +34 -9
  39. package/dist/core/extensions/builtin/compaction/todo-bridge.js.map +1 -1
  40. package/dist/core/extensions/builtin/goal/command-registration.d.ts +2 -2
  41. package/dist/core/extensions/builtin/goal/command-registration.d.ts.map +1 -1
  42. package/dist/core/extensions/builtin/goal/command-registration.js +3 -4
  43. package/dist/core/extensions/builtin/goal/command-registration.js.map +1 -1
  44. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  45. package/dist/core/extensions/builtin/goal/index.js +11 -27
  46. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  47. package/dist/core/extensions/builtin/goal/tool-registration.d.ts +2 -2
  48. package/dist/core/extensions/builtin/goal/tool-registration.d.ts.map +1 -1
  49. package/dist/core/extensions/builtin/goal/tool-registration.js +2 -3
  50. package/dist/core/extensions/builtin/goal/tool-registration.js.map +1 -1
  51. package/dist/core/extensions/builtin/goal/turn-usage.d.ts +20 -0
  52. package/dist/core/extensions/builtin/goal/turn-usage.d.ts.map +1 -0
  53. package/dist/core/extensions/builtin/goal/turn-usage.js +61 -0
  54. package/dist/core/extensions/builtin/goal/turn-usage.js.map +1 -0
  55. package/dist/core/extensions/builtin/gpt-apply-patch/constants.d.ts +1 -0
  56. package/dist/core/extensions/builtin/gpt-apply-patch/constants.d.ts.map +1 -1
  57. package/dist/core/extensions/builtin/gpt-apply-patch/constants.js +5 -1
  58. package/dist/core/extensions/builtin/gpt-apply-patch/constants.js.map +1 -1
  59. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts +2 -1
  60. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
  61. package/dist/core/extensions/builtin/gpt-apply-patch/extension.js +48 -29
  62. package/dist/core/extensions/builtin/gpt-apply-patch/extension.js.map +1 -1
  63. package/dist/core/extensions/builtin/gpt-apply-patch/index.d.ts +2 -2
  64. package/dist/core/extensions/builtin/gpt-apply-patch/index.d.ts.map +1 -1
  65. package/dist/core/extensions/builtin/gpt-apply-patch/index.js +2 -2
  66. package/dist/core/extensions/builtin/gpt-apply-patch/index.js.map +1 -1
  67. package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts +1 -1
  68. package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts.map +1 -1
  69. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js +5 -3
  70. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
  71. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts +7 -6
  72. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts.map +1 -1
  73. package/dist/core/extensions/builtin/gpt-apply-patch/types.js.map +1 -1
  74. package/dist/core/extensions/builtin/hooks/matcher.d.ts.map +1 -1
  75. package/dist/core/extensions/builtin/hooks/matcher.js +1 -0
  76. package/dist/core/extensions/builtin/hooks/matcher.js.map +1 -1
  77. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  78. package/dist/core/extensions/builtin/index.js +4 -0
  79. package/dist/core/extensions/builtin/index.js.map +1 -1
  80. package/dist/core/extensions/builtin/mcp/config-schema.d.ts +8 -1
  81. package/dist/core/extensions/builtin/mcp/config-schema.d.ts.map +1 -1
  82. package/dist/core/extensions/builtin/mcp/config-schema.js +23 -0
  83. package/dist/core/extensions/builtin/mcp/config-schema.js.map +1 -1
  84. package/dist/core/extensions/builtin/mcp/config.d.ts +13 -0
  85. package/dist/core/extensions/builtin/mcp/config.d.ts.map +1 -1
  86. package/dist/core/extensions/builtin/mcp/config.js +36 -0
  87. package/dist/core/extensions/builtin/mcp/config.js.map +1 -1
  88. package/dist/core/extensions/builtin/mcp/expose/native-search.d.ts +1 -1
  89. package/dist/core/extensions/builtin/mcp/expose/native-search.d.ts.map +1 -1
  90. package/dist/core/extensions/builtin/mcp/expose/native-search.js +1 -1
  91. package/dist/core/extensions/builtin/mcp/expose/native-search.js.map +1 -1
  92. package/dist/core/extensions/builtin/mcp/expose/policy.js +1 -1
  93. package/dist/core/extensions/builtin/mcp/expose/policy.js.map +1 -1
  94. package/dist/core/extensions/builtin/mcp/expose/status.js +1 -1
  95. package/dist/core/extensions/builtin/mcp/expose/status.js.map +1 -1
  96. package/dist/core/extensions/builtin/mcp/expose/tier-b.d.ts +3 -3
  97. package/dist/core/extensions/builtin/mcp/expose/tier-b.d.ts.map +1 -1
  98. package/dist/core/extensions/builtin/mcp/expose/tier-b.js +10 -10
  99. package/dist/core/extensions/builtin/mcp/expose/tier-b.js.map +1 -1
  100. package/dist/core/extensions/builtin/mcp/expose/tool-search.d.ts +3 -3
  101. package/dist/core/extensions/builtin/mcp/expose/tool-search.d.ts.map +1 -1
  102. package/dist/core/extensions/builtin/mcp/expose/tool-search.js +14 -14
  103. package/dist/core/extensions/builtin/mcp/expose/tool-search.js.map +1 -1
  104. package/dist/core/extensions/builtin/mcp/index.js +5 -5
  105. package/dist/core/extensions/builtin/mcp/index.js.map +1 -1
  106. package/dist/core/extensions/builtin/mcp/service-snapshot.d.ts.map +1 -1
  107. package/dist/core/extensions/builtin/mcp/service-snapshot.js +1 -0
  108. package/dist/core/extensions/builtin/mcp/service-snapshot.js.map +1 -1
  109. package/dist/core/extensions/builtin/mcp/service-types.d.ts +12 -0
  110. package/dist/core/extensions/builtin/mcp/service-types.d.ts.map +1 -1
  111. package/dist/core/extensions/builtin/mcp/service-types.js.map +1 -1
  112. package/dist/core/extensions/builtin/mcp/service.d.ts +2 -2
  113. package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
  114. package/dist/core/extensions/builtin/mcp/service.js +4 -3
  115. package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
  116. package/dist/core/extensions/builtin/mcp/status.js +1 -0
  117. package/dist/core/extensions/builtin/mcp/status.js.map +1 -1
  118. package/dist/core/extensions/builtin/model-fallback/index.d.ts +4 -0
  119. package/dist/core/extensions/builtin/model-fallback/index.d.ts.map +1 -0
  120. package/dist/core/extensions/builtin/model-fallback/index.js +55 -0
  121. package/dist/core/extensions/builtin/model-fallback/index.js.map +1 -0
  122. package/dist/core/extensions/builtin/model-fallback/settings.d.ts +6 -0
  123. package/dist/core/extensions/builtin/model-fallback/settings.d.ts.map +1 -0
  124. package/dist/core/extensions/builtin/model-fallback/settings.js +11 -0
  125. package/dist/core/extensions/builtin/model-fallback/settings.js.map +1 -0
  126. package/dist/core/extensions/builtin/model-fallback/ui.d.ts +12 -0
  127. package/dist/core/extensions/builtin/model-fallback/ui.d.ts.map +1 -0
  128. package/dist/core/extensions/builtin/model-fallback/ui.js +72 -0
  129. package/dist/core/extensions/builtin/model-fallback/ui.js.map +1 -0
  130. package/dist/core/extensions/builtin/nested-agents-md/index.d.ts.map +1 -1
  131. package/dist/core/extensions/builtin/nested-agents-md/index.js +4 -1
  132. package/dist/core/extensions/builtin/nested-agents-md/index.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 +5 -1
  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-4-5.d.ts.map +1 -1
  137. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.js +5 -1
  138. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.js.map +1 -1
  139. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.d.ts.map +1 -1
  140. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.js +5 -1
  141. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.js.map +1 -1
  142. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.d.ts.map +1 -1
  143. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.js +5 -1
  144. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.js.map +1 -1
  145. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-8.d.ts.map +1 -1
  146. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-8.js +5 -1
  147. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-8.js.map +1 -1
  148. package/dist/core/extensions/builtin/prompt-preset/glm-5-2.js +2 -2
  149. package/dist/core/extensions/builtin/prompt-preset/glm-5-2.js.map +1 -1
  150. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.js +1 -1
  151. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.js.map +1 -1
  152. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.js +1 -1
  153. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.js.map +1 -1
  154. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.js +1 -1
  155. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.js.map +1 -1
  156. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js +3 -3
  157. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js.map +1 -1
  158. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +3 -3
  159. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
  160. package/dist/core/extensions/builtin/prompt-preset/gpt-5.js +1 -1
  161. package/dist/core/extensions/builtin/prompt-preset/gpt-5.js.map +1 -1
  162. package/dist/core/extensions/builtin/prompt-preset/grok-4.5.d.ts +3 -0
  163. package/dist/core/extensions/builtin/prompt-preset/grok-4.5.d.ts.map +1 -0
  164. package/dist/core/extensions/builtin/prompt-preset/grok-4.5.js +80 -0
  165. package/dist/core/extensions/builtin/prompt-preset/grok-4.5.js.map +1 -0
  166. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.js +1 -1
  167. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.js.map +1 -1
  168. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-7.js +1 -1
  169. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-7.js.map +1 -1
  170. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.d.ts.map +1 -1
  171. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +5 -7
  172. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
  173. package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
  174. package/dist/core/extensions/builtin/prompt-preset/presets.js +14 -0
  175. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  176. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
  177. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
  178. package/dist/core/extensions/builtin/prompt-preset/settings.js +1 -0
  179. package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
  180. package/dist/core/extensions/builtin/rules/index.d.ts.map +1 -1
  181. package/dist/core/extensions/builtin/rules/index.js +4 -1
  182. package/dist/core/extensions/builtin/rules/index.js.map +1 -1
  183. package/dist/core/extensions/builtin/terminal/shared.d.ts +7 -0
  184. package/dist/core/extensions/builtin/terminal/shared.d.ts.map +1 -1
  185. package/dist/core/extensions/builtin/terminal/shared.js +7 -0
  186. package/dist/core/extensions/builtin/terminal/shared.js.map +1 -1
  187. package/dist/core/extensions/builtin/terminal/tools/bash.d.ts.map +1 -1
  188. package/dist/core/extensions/builtin/terminal/tools/bash.js +68 -6
  189. package/dist/core/extensions/builtin/terminal/tools/bash.js.map +1 -1
  190. package/dist/core/extensions/builtin/todotools/commands.d.ts +18 -0
  191. package/dist/core/extensions/builtin/todotools/commands.d.ts.map +1 -0
  192. package/dist/core/extensions/builtin/todotools/commands.js +395 -0
  193. package/dist/core/extensions/builtin/todotools/commands.js.map +1 -0
  194. package/dist/core/extensions/builtin/todotools/index.d.ts +4 -1
  195. package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
  196. package/dist/core/extensions/builtin/todotools/index.js +17 -14
  197. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  198. package/dist/core/extensions/builtin/todotools/markdown.d.ts +13 -0
  199. package/dist/core/extensions/builtin/todotools/markdown.d.ts.map +1 -0
  200. package/dist/core/extensions/builtin/todotools/markdown.js +82 -0
  201. package/dist/core/extensions/builtin/todotools/markdown.js.map +1 -0
  202. package/dist/core/extensions/builtin/todotools/prompt.d.ts +2 -1
  203. package/dist/core/extensions/builtin/todotools/prompt.d.ts.map +1 -1
  204. package/dist/core/extensions/builtin/todotools/prompt.js +50 -153
  205. package/dist/core/extensions/builtin/todotools/prompt.js.map +1 -1
  206. package/dist/core/extensions/builtin/todotools/state.d.ts +67 -14
  207. package/dist/core/extensions/builtin/todotools/state.d.ts.map +1 -1
  208. package/dist/core/extensions/builtin/todotools/state.js +400 -35
  209. package/dist/core/extensions/builtin/todotools/state.js.map +1 -1
  210. package/dist/core/extensions/builtin/todotools/tools/todo.d.ts +22 -0
  211. package/dist/core/extensions/builtin/todotools/tools/todo.d.ts.map +1 -0
  212. package/dist/core/extensions/builtin/todotools/tools/todo.js +229 -0
  213. package/dist/core/extensions/builtin/todotools/tools/todo.js.map +1 -0
  214. package/dist/core/extensions/builtin/video-in/index.d.ts +3 -0
  215. package/dist/core/extensions/builtin/video-in/index.d.ts.map +1 -0
  216. package/dist/core/extensions/builtin/video-in/index.js +111 -0
  217. package/dist/core/extensions/builtin/video-in/index.js.map +1 -0
  218. package/dist/core/extensions/builtin/websearch/index.d.ts.map +1 -1
  219. package/dist/core/extensions/builtin/websearch/index.js +20 -3
  220. package/dist/core/extensions/builtin/websearch/index.js.map +1 -1
  221. package/dist/core/extensions/builtin/websearch/websearch/renderers.d.ts.map +1 -1
  222. package/dist/core/extensions/builtin/websearch/websearch/renderers.js +13 -4
  223. package/dist/core/extensions/builtin/websearch/websearch/renderers.js.map +1 -1
  224. package/dist/core/extensions/builtin/websearch/websearch/search.d.ts +3 -2
  225. package/dist/core/extensions/builtin/websearch/websearch/search.d.ts.map +1 -1
  226. package/dist/core/extensions/builtin/websearch/websearch/search.js +2 -1
  227. package/dist/core/extensions/builtin/websearch/websearch/search.js.map +1 -1
  228. package/dist/core/extensions/builtin/websearch/websearch/tool.d.ts.map +1 -1
  229. package/dist/core/extensions/builtin/websearch/websearch/tool.js +17 -1
  230. package/dist/core/extensions/builtin/websearch/websearch/tool.js.map +1 -1
  231. package/dist/core/extensions/builtin/websearch/websearch/types.d.ts +2 -0
  232. package/dist/core/extensions/builtin/websearch/websearch/types.d.ts.map +1 -1
  233. package/dist/core/extensions/builtin/websearch/websearch/types.js.map +1 -1
  234. package/dist/core/extensions/index.d.ts +1 -0
  235. package/dist/core/extensions/index.d.ts.map +1 -1
  236. package/dist/core/extensions/index.js.map +1 -1
  237. package/dist/core/extensions/loader.d.ts +10 -1
  238. package/dist/core/extensions/loader.d.ts.map +1 -1
  239. package/dist/core/extensions/loader.js +64 -7
  240. package/dist/core/extensions/loader.js.map +1 -1
  241. package/dist/core/extensions/runner.d.ts +6 -2
  242. package/dist/core/extensions/runner.d.ts.map +1 -1
  243. package/dist/core/extensions/runner.js +80 -8
  244. package/dist/core/extensions/runner.js.map +1 -1
  245. package/dist/core/extensions/types.d.ts +116 -18
  246. package/dist/core/extensions/types.d.ts.map +1 -1
  247. package/dist/core/extensions/types.js.map +1 -1
  248. package/dist/core/model-registry.d.ts +5 -1
  249. package/dist/core/model-registry.d.ts.map +1 -1
  250. package/dist/core/model-registry.js +17 -2
  251. package/dist/core/model-registry.js.map +1 -1
  252. package/dist/core/model-runtime.d.ts +12 -1
  253. package/dist/core/model-runtime.d.ts.map +1 -1
  254. package/dist/core/model-runtime.js +51 -9
  255. package/dist/core/model-runtime.js.map +1 -1
  256. package/dist/core/prompt-templates.d.ts +1 -0
  257. package/dist/core/prompt-templates.d.ts.map +1 -1
  258. package/dist/core/prompt-templates.js +4 -4
  259. package/dist/core/prompt-templates.js.map +1 -1
  260. package/dist/core/provider-composer.d.ts +1 -1
  261. package/dist/core/provider-composer.d.ts.map +1 -1
  262. package/dist/core/provider-composer.js +8 -1
  263. package/dist/core/provider-composer.js.map +1 -1
  264. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  265. package/dist/core/remote-catalog-provider.js +16 -3
  266. package/dist/core/remote-catalog-provider.js.map +1 -1
  267. package/dist/core/resource-loader.d.ts +6 -0
  268. package/dist/core/resource-loader.d.ts.map +1 -1
  269. package/dist/core/resource-loader.js +27 -2
  270. package/dist/core/resource-loader.js.map +1 -1
  271. package/dist/core/retry-fallback/chains.d.ts +29 -0
  272. package/dist/core/retry-fallback/chains.d.ts.map +1 -0
  273. package/dist/core/retry-fallback/chains.js +109 -0
  274. package/dist/core/retry-fallback/chains.js.map +1 -0
  275. package/dist/core/retry-fallback/controller.d.ts +77 -0
  276. package/dist/core/retry-fallback/controller.d.ts.map +1 -0
  277. package/dist/core/retry-fallback/controller.js +157 -0
  278. package/dist/core/retry-fallback/controller.js.map +1 -0
  279. package/dist/core/retry-fallback/cooldown.d.ts +21 -0
  280. package/dist/core/retry-fallback/cooldown.d.ts.map +1 -0
  281. package/dist/core/retry-fallback/cooldown.js +49 -0
  282. package/dist/core/retry-fallback/cooldown.js.map +1 -0
  283. package/dist/core/retry-fallback/log.d.ts +10 -0
  284. package/dist/core/retry-fallback/log.d.ts.map +1 -0
  285. package/dist/core/retry-fallback/log.js +128 -0
  286. package/dist/core/retry-fallback/log.js.map +1 -0
  287. package/dist/core/retry-fallback/validate.d.ts +8 -0
  288. package/dist/core/retry-fallback/validate.d.ts.map +1 -0
  289. package/dist/core/retry-fallback/validate.js +63 -0
  290. package/dist/core/retry-fallback/validate.js.map +1 -0
  291. package/dist/core/sdk.d.ts.map +1 -1
  292. package/dist/core/sdk.js +1 -0
  293. package/dist/core/sdk.js.map +1 -1
  294. package/dist/core/session-manager.d.ts +6 -1
  295. package/dist/core/session-manager.d.ts.map +1 -1
  296. package/dist/core/session-manager.js +19 -3
  297. package/dist/core/session-manager.js.map +1 -1
  298. package/dist/core/settings-manager.d.ts +21 -0
  299. package/dist/core/settings-manager.d.ts.map +1 -1
  300. package/dist/core/settings-manager.js +100 -1
  301. package/dist/core/settings-manager.js.map +1 -1
  302. package/dist/core/tools/bash.d.ts.map +1 -1
  303. package/dist/core/tools/bash.js +20 -5
  304. package/dist/core/tools/bash.js.map +1 -1
  305. package/dist/core/tools/read.js +1 -1
  306. package/dist/core/tools/read.js.map +1 -1
  307. package/dist/extensions/index.d.ts +3 -0
  308. package/dist/extensions/index.d.ts.map +1 -0
  309. package/dist/extensions/index.js +3 -0
  310. package/dist/extensions/index.js.map +1 -0
  311. package/dist/extensions/llama/client.d.ts +61 -0
  312. package/dist/extensions/llama/client.d.ts.map +1 -0
  313. package/dist/extensions/llama/client.js +298 -0
  314. package/dist/extensions/llama/client.js.map +1 -0
  315. package/dist/extensions/llama/huggingface.d.ts +23 -0
  316. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  317. package/dist/extensions/llama/huggingface.js +139 -0
  318. package/dist/extensions/llama/huggingface.js.map +1 -0
  319. package/dist/extensions/llama/index.d.ts +3 -0
  320. package/dist/extensions/llama/index.d.ts.map +1 -0
  321. package/dist/extensions/llama/index.js +208 -0
  322. package/dist/extensions/llama/index.js.map +1 -0
  323. package/dist/extensions/llama/provider.d.ts +10 -0
  324. package/dist/extensions/llama/provider.d.ts.map +1 -0
  325. package/dist/extensions/llama/provider.js +106 -0
  326. package/dist/extensions/llama/provider.js.map +1 -0
  327. package/dist/extensions/llama/ui.d.ts +42 -0
  328. package/dist/extensions/llama/ui.d.ts.map +1 -0
  329. package/dist/extensions/llama/ui.js +400 -0
  330. package/dist/extensions/llama/ui.js.map +1 -0
  331. package/dist/index.d.ts +2 -2
  332. package/dist/index.d.ts.map +1 -1
  333. package/dist/index.js.map +1 -1
  334. package/dist/main.d.ts.map +1 -1
  335. package/dist/main.js +6 -4
  336. package/dist/main.js.map +1 -1
  337. package/dist/modes/interactive/components/assistant-message.d.ts +6 -7
  338. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  339. package/dist/modes/interactive/components/assistant-message.js +154 -114
  340. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  341. package/dist/modes/interactive/components/footer.d.ts +2 -1
  342. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  343. package/dist/modes/interactive/components/footer.js +25 -4
  344. package/dist/modes/interactive/components/footer.js.map +1 -1
  345. package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
  346. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  347. package/dist/modes/interactive/components/settings-selector.js +20 -0
  348. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  349. package/dist/modes/interactive/interactive-mode.d.ts +7 -0
  350. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  351. package/dist/modes/interactive/interactive-mode.js +165 -13
  352. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  353. package/dist/modes/interactive/streaming-reveal.d.ts +35 -0
  354. package/dist/modes/interactive/streaming-reveal.d.ts.map +1 -0
  355. package/dist/modes/interactive/streaming-reveal.js +268 -0
  356. package/dist/modes/interactive/streaming-reveal.js.map +1 -0
  357. package/dist/modes/interactive/tool-args-reveal.d.ts +20 -0
  358. package/dist/modes/interactive/tool-args-reveal.d.ts.map +1 -0
  359. package/dist/modes/interactive/tool-args-reveal.js +153 -0
  360. package/dist/modes/interactive/tool-args-reveal.js.map +1 -0
  361. package/dist/utils/child-process.d.ts +17 -1
  362. package/dist/utils/child-process.d.ts.map +1 -1
  363. package/dist/utils/child-process.js +41 -1
  364. package/dist/utils/child-process.js.map +1 -1
  365. package/docs/AGENTS.md +70 -0
  366. package/docs/custom-provider.md +28 -0
  367. package/docs/extensions.md +111 -5
  368. package/docs/index.md +1 -0
  369. package/docs/llama-cpp.md +99 -0
  370. package/docs/mcp.md +21 -5
  371. package/docs/neo.md +2 -1
  372. package/docs/prompt-templates.md +1 -0
  373. package/docs/providers.md +7 -0
  374. package/docs/settings.md +35 -0
  375. package/docs/tui.md +41 -26
  376. package/docs/usage.md +1 -0
  377. package/examples/AGENTS.md +3 -0
  378. package/examples/extensions/README.md +1 -1
  379. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +74 -0
  380. package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
  381. package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +59 -19
  382. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/prelude.py +0 -1
  383. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +69 -2
  384. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +6 -0
  385. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  386. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +95 -12
  387. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  388. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  389. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +26 -1
  390. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  391. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  392. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +24 -2
  393. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
  394. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts +3 -1
  395. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -1
  396. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js +4 -2
  397. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -1
  398. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +5 -0
  399. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  400. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  401. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  402. package/node_modules/@earendil-works/pi-ai/README.md +1 -1
  403. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  404. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +92 -29
  405. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  406. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts +2 -1
  407. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  408. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +25 -1
  409. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  410. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.d.ts.map +1 -1
  411. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js +105 -61
  412. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js.map +1 -1
  413. package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts +1 -0
  414. package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts.map +1 -1
  415. package/node_modules/@earendil-works/pi-ai/dist/compat.js +1 -0
  416. package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
  417. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +15 -0
  418. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  419. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +15 -0
  420. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  421. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -0
  422. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  423. package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -0
  424. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  425. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +4263 -22314
  426. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  427. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.d.ts +436 -1988
  428. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
  429. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js +2 -1892
  430. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js.map +1 -1
  431. package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.d.ts +10 -80
  432. package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.d.ts.map +1 -1
  433. package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js +2 -57
  434. package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js.map +1 -1
  435. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.d.ts +43 -267
  436. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.d.ts.map +1 -1
  437. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js +2 -252
  438. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js.map +1 -1
  439. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts +184 -883
  440. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
  441. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js +2 -811
  442. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js.map +1 -1
  443. package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.d.ts +10 -60
  444. package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.d.ts.map +1 -1
  445. package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js +2 -56
  446. package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js.map +1 -1
  447. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.d.ts +168 -884
  448. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
  449. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js +2 -755
  450. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
  451. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.d.ts +40 -286
  452. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
  453. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js +2 -236
  454. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
  455. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -0
  456. package/node_modules/@earendil-works/pi-ai/dist/providers/data/ant-ling.json +1 -0
  457. package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -0
  458. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -0
  459. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +1 -0
  460. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -0
  461. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -0
  462. package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +1 -0
  463. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -0
  464. package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -0
  465. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google-vertex.json +1 -0
  466. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -0
  467. package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -0
  468. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -0
  469. package/node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +1 -0
  470. package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -0
  471. package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -0
  472. package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -0
  473. package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +1 -0
  474. package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.json +1 -0
  475. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -0
  476. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -0
  477. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -0
  478. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -0
  479. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -0
  480. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -0
  481. package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -0
  482. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -0
  483. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +1 -0
  484. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-ams.json +1 -0
  485. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-cn.json +1 -0
  486. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-sgp.json +1 -0
  487. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi.json +1 -0
  488. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -0
  489. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -0
  490. package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.d.ts +7 -58
  491. package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.d.ts.map +1 -1
  492. package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js +2 -40
  493. package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js.map +1 -1
  494. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts +1 -0
  495. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts.map +1 -1
  496. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js +1 -0
  497. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  498. package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.d.ts +49 -362
  499. package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.d.ts.map +1 -1
  500. package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js +2 -292
  501. package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js.map +1 -1
  502. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.d.ts +85 -760
  503. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.d.ts.map +1 -1
  504. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +2 -538
  505. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js.map +1 -1
  506. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.d.ts +31 -189
  507. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.d.ts.map +1 -1
  508. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js +2 -179
  509. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js.map +1 -1
  510. package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.d.ts +49 -309
  511. package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.d.ts.map +1 -1
  512. package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.js +2 -285
  513. package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.js.map +1 -1
  514. package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.d.ts +22 -118
  515. package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.d.ts.map +1 -1
  516. package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js +2 -122
  517. package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js.map +1 -1
  518. package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.d.ts +196 -979
  519. package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.d.ts.map +1 -1
  520. package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js +2 -884
  521. package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js.map +1 -1
  522. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.d.ts +13 -122
  523. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.d.ts.map +1 -1
  524. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js +2 -98
  525. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js.map +1 -1
  526. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.d.ts +10 -48
  527. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.d.ts.map +1 -1
  528. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js +2 -53
  529. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js.map +1 -1
  530. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.d.ts +10 -48
  531. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.d.ts.map +1 -1
  532. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js +2 -53
  533. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js.map +1 -1
  534. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.d.ts +91 -480
  535. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.d.ts.map +1 -1
  536. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js +2 -512
  537. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js.map +1 -1
  538. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.d.ts +31 -257
  539. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.d.ts.map +1 -1
  540. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js +2 -185
  541. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js.map +1 -1
  542. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.d.ts +31 -257
  543. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.d.ts.map +1 -1
  544. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js +2 -185
  545. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js.map +1 -1
  546. package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.d.ts +58 -541
  547. package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.d.ts.map +1 -1
  548. package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js +2 -382
  549. package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js.map +1 -1
  550. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts +22 -196
  551. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts.map +1 -1
  552. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +2 -139
  553. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js.map +1 -1
  554. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts +184 -954
  555. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts.map +1 -1
  556. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +2 -825
  557. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js.map +1 -1
  558. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.d.ts +1 -1
  559. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.d.ts.map +1 -1
  560. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.js +2 -0
  561. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.js.map +1 -1
  562. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.d.ts +46 -335
  563. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.d.ts.map +1 -1
  564. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js +2 -273
  565. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js.map +1 -1
  566. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.d.ts +163 -1185
  567. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.d.ts.map +1 -1
  568. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js +2 -996
  569. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js.map +1 -1
  570. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts +1076 -5750
  571. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts.map +1 -1
  572. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +2 -4910
  573. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js.map +1 -1
  574. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.d.ts +49 -579
  575. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.d.ts.map +1 -1
  576. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js +2 -377
  577. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js.map +1 -1
  578. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts +752 -3336
  579. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
  580. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +2 -3263
  581. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js.map +1 -1
  582. package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.d.ts +10 -65
  583. package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.d.ts.map +1 -1
  584. package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js +2 -57
  585. package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js.map +1 -1
  586. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.d.ts +10 -63
  587. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
  588. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +2 -56
  589. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
  590. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.d.ts +10 -63
  591. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
  592. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +2 -56
  593. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
  594. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.d.ts +10 -63
  595. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
  596. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +2 -56
  597. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
  598. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.d.ts +19 -126
  599. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.d.ts.map +1 -1
  600. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js +2 -110
  601. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js.map +1 -1
  602. package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.d.ts +19 -144
  603. package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
  604. package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js +2 -111
  605. package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js.map +1 -1
  606. package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.d.ts +19 -144
  607. package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.d.ts.map +1 -1
  608. package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js +2 -111
  609. package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js.map +1 -1
  610. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.d.ts.map +1 -1
  611. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.js +12 -0
  612. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.js.map +1 -1
  613. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.d.ts +1 -1
  614. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.d.ts.map +1 -1
  615. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js +4 -2
  616. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js.map +1 -1
  617. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.d.ts +1 -0
  618. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.d.ts.map +1 -1
  619. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.js +1 -1
  620. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.js.map +1 -1
  621. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/format.d.ts +1 -0
  622. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/format.d.ts.map +1 -1
  623. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/format.js +1 -1
  624. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/format.js.map +1 -1
  625. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.d.ts +19 -0
  626. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.d.ts.map +1 -0
  627. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.js +8 -0
  628. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.js.map +1 -0
  629. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.d.ts +11 -0
  630. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.d.ts.map +1 -1
  631. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.js +40 -1
  632. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.js.map +1 -1
  633. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/parse.d.ts +2 -0
  634. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/parse.d.ts.map +1 -1
  635. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/parse.js +7 -4
  636. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/parse.js.map +1 -1
  637. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/stream.d.ts +2 -0
  638. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/stream.d.ts.map +1 -1
  639. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/stream.js +104 -15
  640. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/stream.js.map +1 -1
  641. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/coerce-parameters.d.ts +15 -0
  642. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/coerce-parameters.d.ts.map +1 -0
  643. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/coerce-parameters.js +198 -0
  644. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/coerce-parameters.js.map +1 -0
  645. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/config.d.ts +3 -0
  646. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/config.d.ts.map +1 -0
  647. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/config.js +8 -0
  648. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/config.js.map +1 -0
  649. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/format.d.ts +6 -0
  650. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/format.d.ts.map +1 -0
  651. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/format.js +33 -0
  652. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/format.js.map +1 -0
  653. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/index.d.ts +6 -0
  654. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/index.d.ts.map +1 -0
  655. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/index.js +6 -0
  656. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/index.js.map +1 -0
  657. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/parse.d.ts +4 -0
  658. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/parse.d.ts.map +1 -0
  659. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/parse.js +6 -0
  660. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/parse.js.map +1 -0
  661. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/repair.d.ts +12 -0
  662. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/repair.d.ts.map +1 -0
  663. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/repair.js +46 -0
  664. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/repair.js.map +1 -0
  665. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/stream.d.ts +4 -0
  666. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/stream.d.ts.map +1 -0
  667. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/stream.js +6 -0
  668. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/stream.js.map +1 -0
  669. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.d.ts +8 -1
  670. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.d.ts.map +1 -1
  671. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.js +129 -27
  672. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.js.map +1 -1
  673. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/json-mix.d.ts.map +1 -1
  674. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/json-mix.js +140 -6
  675. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/json-mix.js.map +1 -1
  676. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/morph-xml.d.ts.map +1 -1
  677. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/morph-xml.js +28 -6
  678. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/morph-xml.js.map +1 -1
  679. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/yaml-xml.d.ts.map +1 -1
  680. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/yaml-xml.js +51 -18
  681. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/yaml-xml.js.map +1 -1
  682. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.d.ts.map +1 -1
  683. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.js +70 -9
  684. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.js.map +1 -1
  685. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/types.d.ts +6 -2
  686. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/types.d.ts.map +1 -1
  687. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/types.js.map +1 -1
  688. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +31 -3
  689. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  690. package/node_modules/@earendil-works/pi-ai/dist/types.js +4 -1
  691. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  692. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
  693. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +6 -1
  694. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  695. package/node_modules/@earendil-works/pi-ai/dist/utils/stop-details.d.ts +4 -0
  696. package/node_modules/@earendil-works/pi-ai/dist/utils/stop-details.d.ts.map +1 -0
  697. package/node_modules/@earendil-works/pi-ai/dist/utils/stop-details.js +6 -0
  698. package/node_modules/@earendil-works/pi-ai/dist/utils/stop-details.js.map +1 -0
  699. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-pair-repair.d.ts.map +1 -1
  700. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-pair-repair.js +19 -2
  701. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-pair-repair.js.map +1 -1
  702. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-schema-compat.d.ts +19 -0
  703. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-schema-compat.d.ts.map +1 -0
  704. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-schema-compat.js +215 -0
  705. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-schema-compat.js.map +1 -0
  706. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  707. package/node_modules/@earendil-works/pi-pty/dist/registry-session.d.ts +1 -1
  708. package/node_modules/@earendil-works/pi-pty/dist/registry-session.d.ts.map +1 -1
  709. package/node_modules/@earendil-works/pi-pty/dist/registry-session.js +25 -6
  710. package/node_modules/@earendil-works/pi-pty/dist/registry-session.js.map +1 -1
  711. package/node_modules/@earendil-works/pi-pty/dist/registry-types.d.ts +6 -0
  712. package/node_modules/@earendil-works/pi-pty/dist/registry-types.d.ts.map +1 -1
  713. package/node_modules/@earendil-works/pi-pty/dist/registry-types.js.map +1 -1
  714. package/node_modules/@earendil-works/pi-pty/dist/registry.d.ts +1 -0
  715. package/node_modules/@earendil-works/pi-pty/dist/registry.d.ts.map +1 -1
  716. package/node_modules/@earendil-works/pi-pty/dist/registry.js +9 -1
  717. package/node_modules/@earendil-works/pi-pty/dist/registry.js.map +1 -1
  718. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  719. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
  720. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
  721. package/node_modules/@earendil-works/pi-tui/dist/index.js +1 -1
  722. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  723. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts +6 -1
  724. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  725. package/node_modules/@earendil-works/pi-tui/dist/tui.js +14 -2
  726. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  727. package/node_modules/@earendil-works/pi-tui/dist/utils.js +1 -1
  728. package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
  729. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  730. package/package.json +6 -6
  731. package/dist/core/extensions/builtin/todotools/tools/todoread.d.ts +0 -4
  732. package/dist/core/extensions/builtin/todotools/tools/todoread.d.ts.map +0 -1
  733. package/dist/core/extensions/builtin/todotools/tools/todoread.js +0 -37
  734. package/dist/core/extensions/builtin/todotools/tools/todoread.js.map +0 -1
  735. package/dist/core/extensions/builtin/todotools/tools/todowrite.d.ts +0 -10
  736. package/dist/core/extensions/builtin/todotools/tools/todowrite.d.ts.map +0 -1
  737. package/dist/core/extensions/builtin/todotools/tools/todowrite.js +0 -95
  738. package/dist/core/extensions/builtin/todotools/tools/todowrite.js.map +0 -1
@@ -5,6 +5,6 @@ function buildKimiK26Tuning() {
5
5
  The intent gate routing line is required every turn. On confirmation turns where the user already chose an option in plain words, acknowledge that choice and execute, not re-litigate alternatives the user already eliminated.`;
6
6
  }
7
7
  export function buildKimiK26Prompt(options) {
8
- return buildDynamicSystemPrompt({ ...options, tuningSection: buildKimiK26Tuning() });
8
+ return buildDynamicSystemPrompt({ ...options, tuningSection: buildKimiK26Tuning(), workstationDialect: "kimi" });
9
9
  }
10
10
  //# sourceMappingURL=kimi-k2-6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kimi-k2-6.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/kimi-k2-6.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAElH,SAAS,kBAAkB;IAC1B,OAAO;;iOAEyN,CAAC;AAClO,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAwC;IAC1E,OAAO,wBAAwB,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;AACtF,CAAC","sourcesContent":["import { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\n\nfunction buildKimiK26Tuning(): string {\n\treturn `Avoid restating the user's request, do not re-derive facts you already established this turn, and skip filler verification language (\"let me confirm again\", \"to be sure\", \"just to double-check\").\n\nThe intent gate routing line is required every turn. On confirmation turns where the user already chose an option in plain words, acknowledge that choice and execute, not re-litigate alternatives the user already eliminated.`;\n}\n\nexport function buildKimiK26Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({ ...options, tuningSection: buildKimiK26Tuning() });\n}\n"]}
1
+ {"version":3,"file":"kimi-k2-6.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/kimi-k2-6.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAElH,SAAS,kBAAkB;IAC1B,OAAO;;iOAEyN,CAAC;AAClO,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAwC;IAC1E,OAAO,wBAAwB,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC;AAClH,CAAC","sourcesContent":["import { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\n\nfunction buildKimiK26Tuning(): string {\n\treturn `Avoid restating the user's request, do not re-derive facts you already established this turn, and skip filler verification language (\"let me confirm again\", \"to be sure\", \"just to double-check\").\n\nThe intent gate routing line is required every turn. On confirmation turns where the user already chose an option in plain words, acknowledge that choice and execute, not re-litigate alternatives the user already eliminated.`;\n}\n\nexport function buildKimiK26Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({ ...options, tuningSection: buildKimiK26Tuning(), workstationDialect: \"kimi\" });\n}\n"]}
@@ -5,6 +5,6 @@ function buildKimiK27Tuning() {
5
5
  The intent gate routing line is required every turn. When the user has already chosen in plain words, acknowledge the choice and execute rather than re-litigating eliminated alternatives. Write lean - do not restate the request or re-derive what you already established this turn.`;
6
6
  }
7
7
  export function buildKimiK27Prompt(options) {
8
- return buildDynamicSystemPrompt({ ...options, tuningSection: buildKimiK27Tuning() });
8
+ return buildDynamicSystemPrompt({ ...options, tuningSection: buildKimiK27Tuning(), workstationDialect: "kimi" });
9
9
  }
10
10
  //# sourceMappingURL=kimi-k2-7.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kimi-k2-7.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/kimi-k2-7.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAElH,SAAS,kBAAkB;IAC1B,OAAO;;yRAEiR,CAAC;AAC1R,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAwC;IAC1E,OAAO,wBAAwB,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;AACtF,CAAC","sourcesContent":["import { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\n\nfunction buildKimiK27Tuning(): string {\n\treturn `You are running on Kimi K2.7 - restrained and outcome-first. Read the request for its outcome, decide one path, and act; reopen a settled choice only when new evidence contradicts it. Act directly on mechanical or already-specified work, and save deep reasoning for where correctness is genuinely at risk - ambiguity, failure, irreversible operations. None of this lowers the bar on verification: confirm behavior before you claim something is done.\n\nThe intent gate routing line is required every turn. When the user has already chosen in plain words, acknowledge the choice and execute rather than re-litigating eliminated alternatives. Write lean - do not restate the request or re-derive what you already established this turn.`;\n}\n\nexport function buildKimiK27Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({ ...options, tuningSection: buildKimiK27Tuning() });\n}\n"]}
1
+ {"version":3,"file":"kimi-k2-7.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/kimi-k2-7.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAElH,SAAS,kBAAkB;IAC1B,OAAO;;yRAEiR,CAAC;AAC1R,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAwC;IAC1E,OAAO,wBAAwB,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC;AAClH,CAAC","sourcesContent":["import { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\n\nfunction buildKimiK27Tuning(): string {\n\treturn `You are running on Kimi K2.7 - restrained and outcome-first. Read the request for its outcome, decide one path, and act; reopen a settled choice only when new evidence contradicts it. Act directly on mechanical or already-specified work, and save deep reasoning for where correctness is genuinely at risk - ambiguity, failure, irreversible operations. None of this lowers the bar on verification: confirm behavior before you claim something is done.\n\nThe intent gate routing line is required every turn. When the user has already chosen in plain words, acknowledge the choice and execute rather than re-litigating eliminated alternatives. Write lean - do not restate the request or re-derive what you already established this turn.`;\n}\n\nexport function buildKimiK27Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({ ...options, tuningSection: buildKimiK27Tuning(), workstationDialect: \"kimi\" });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"kimi-k3.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/kimi-k3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,+BAA+B,EAA4B,MAAM,kCAAkC,CAAC;AAclH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,+BAA+B,GAAG,MAAM,CAElF"}
1
+ {"version":3,"file":"kimi-k3.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/kimi-k3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,+BAA+B,EAA4B,MAAM,kCAAkC,CAAC;AAYlH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,+BAA+B,GAAG,MAAM,CAElF"}
@@ -1,16 +1,14 @@
1
1
  import { buildDynamicSystemPrompt } from "../../../dynamic-prompt/build.js";
2
2
  function buildKimiK3Tuning() {
3
- return `You are running on Kimi K3 - decisive and evidence-first. When you have enough information to act, act: decide one path, execute it, and reopen it only when new evidence contradicts it. Act directly on mechanical or already-specified work; save deep reasoning for where correctness is genuinely at risk - ambiguity, failure, irreversible operations. When weighing a choice for the user, give a recommendation, not a survey.
3
+ return `You are running on Kimi K3 - decisive and evidence-first. Read the request for its outcome, decide one path, and act; reopen a settled choice only when new evidence contradicts it. Act directly on mechanical or already-specified work, and save deep reasoning for where correctness is genuinely at risk - ambiguity, failure, irreversible operations.
4
4
 
5
- Prefer a tool call over reasoning when a tool can resolve the question directly; do not reason past a fact you can look up, and do not re-derive facts already established in the conversation. Apply instructions at the scope the user evidently intends: "every", "all", and "each" mean the full set rather than the first item, and a fix that plainly recurs covers every occurrence. State the scope you applied.
5
+ Do not restate the user's request, do not re-derive facts you already established this turn, and skip filler verification language ("let me confirm again", "to be sure", "just to double-check"). When weighing a choice for the user, give a recommendation, not a survey.
6
6
 
7
- Before reporting progress, audit each claim against a tool result from this session. Only report work you can point to evidence for; if something is not yet verified, say so explicitly, and if tests fail, say so with the output. Before ending your turn, check your last paragraph: if it is a plan, a question, or a promise about work you have not done, do that work now with tool calls.
7
+ The intent gate routing line is required every turn. On confirmation turns where the user already chose an option in plain words, acknowledge that choice and execute, not re-litigate alternatives the user already eliminated.
8
8
 
9
- The intent gate routing line is required every turn. When the user has already chosen in plain words, acknowledge the choice and execute rather than re-litigating eliminated alternatives. Terse shorthand between tool calls is fine; your final summary is for a reader who did not see it - lead with the outcome in complete sentences, then supporting detail.
10
-
11
- Do not stop, summarize, or suggest a new session on account of context limits; the harness auto-compacts context. Keep working until the task is complete.`;
9
+ Do not stop for context limits; the harness auto-compacts. Keep working until the task is complete.`;
12
10
  }
13
11
  export function buildKimiK3Prompt(options) {
14
- return buildDynamicSystemPrompt({ ...options, tuningSection: buildKimiK3Tuning() });
12
+ return buildDynamicSystemPrompt({ ...options, tuningSection: buildKimiK3Tuning(), workstationDialect: "kimi" });
15
13
  }
16
14
  //# sourceMappingURL=kimi-k3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kimi-k3.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/kimi-k3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAElH,SAAS,iBAAiB;IACzB,OAAO;;;;;;;;2JAQmJ,CAAC;AAC5J,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAwC;IACzE,OAAO,wBAAwB,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;AACrF,CAAC","sourcesContent":["import { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\n\nfunction buildKimiK3Tuning(): string {\n\treturn `You are running on Kimi K3 - decisive and evidence-first. When you have enough information to act, act: decide one path, execute it, and reopen it only when new evidence contradicts it. Act directly on mechanical or already-specified work; save deep reasoning for where correctness is genuinely at risk - ambiguity, failure, irreversible operations. When weighing a choice for the user, give a recommendation, not a survey.\n\nPrefer a tool call over reasoning when a tool can resolve the question directly; do not reason past a fact you can look up, and do not re-derive facts already established in the conversation. Apply instructions at the scope the user evidently intends: \"every\", \"all\", and \"each\" mean the full set rather than the first item, and a fix that plainly recurs covers every occurrence. State the scope you applied.\n\nBefore reporting progress, audit each claim against a tool result from this session. Only report work you can point to evidence for; if something is not yet verified, say so explicitly, and if tests fail, say so with the output. Before ending your turn, check your last paragraph: if it is a plan, a question, or a promise about work you have not done, do that work now with tool calls.\n\nThe intent gate routing line is required every turn. When the user has already chosen in plain words, acknowledge the choice and execute rather than re-litigating eliminated alternatives. Terse shorthand between tool calls is fine; your final summary is for a reader who did not see it - lead with the outcome in complete sentences, then supporting detail.\n\nDo not stop, summarize, or suggest a new session on account of context limits; the harness auto-compacts context. Keep working until the task is complete.`;\n}\n\nexport function buildKimiK3Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({ ...options, tuningSection: buildKimiK3Tuning() });\n}\n"]}
1
+ {"version":3,"file":"kimi-k3.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/kimi-k3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAElH,SAAS,iBAAiB;IACzB,OAAO;;;;;;oGAM4F,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAwC;IACzE,OAAO,wBAAwB,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC;AACjH,CAAC","sourcesContent":["import { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\n\nfunction buildKimiK3Tuning(): string {\n\treturn `You are running on Kimi K3 - decisive and evidence-first. Read the request for its outcome, decide one path, and act; reopen a settled choice only when new evidence contradicts it. Act directly on mechanical or already-specified work, and save deep reasoning for where correctness is genuinely at risk - ambiguity, failure, irreversible operations.\n\nDo not restate the user's request, do not re-derive facts you already established this turn, and skip filler verification language (\"let me confirm again\", \"to be sure\", \"just to double-check\"). When weighing a choice for the user, give a recommendation, not a survey.\n\nThe intent gate routing line is required every turn. On confirmation turns where the user already chose an option in plain words, acknowledge that choice and execute, not re-litigate alternatives the user already eliminated.\n\nDo not stop for context limits; the harness auto-compacts. Keep working until the task is complete.`;\n}\n\nexport function buildKimiK3Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({ ...options, tuningSection: buildKimiK3Tuning(), workstationDialect: \"kimi\" });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAgBxF,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAqB,MAAM,eAAe,CAAC;AAEpG,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE1D,KAAK,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAC5D,KAAK,6BAA6B,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC,GAAG;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CACf;AAoFD,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,6BAA6B,EACpC,QAAQ,EAAE,oBAAoB,GAC5B,kBAAkB,GAAG,SAAS,CAkChC;AAgDD,wBAAgB,aAAa,CAC5B,KAAK,EAAE,6BAA6B,EACpC,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,CAAC,EAAE,OAAO,CAAC,+BAA+B,CAAC,GAChD,oBAAoB,GAAG,SAAS,CAMlC"}
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAiBxF,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAqB,MAAM,eAAe,CAAC;AAEpG,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE1D,KAAK,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAC5D,KAAK,6BAA6B,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC,GAAG;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CACf;AA8FD,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,6BAA6B,EACpC,QAAQ,EAAE,oBAAoB,GAC5B,kBAAkB,GAAG,SAAS,CAqChC;AAkDD,wBAAgB,aAAa,CAC5B,KAAK,EAAE,6BAA6B,EACpC,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,CAAC,EAAE,OAAO,CAAC,+BAA+B,CAAC,GAChD,oBAAoB,GAAG,SAAS,CAMlC"}
@@ -10,6 +10,7 @@ import { buildGpt54Prompt } from "./gpt-5.4.js";
10
10
  import { buildGpt55Prompt } from "./gpt-5.5.js";
11
11
  import { buildGpt56Prompt } from "./gpt-5.6.js";
12
12
  import { buildGpt5Prompt } from "./gpt-5.js";
13
+ import { buildGrok45Prompt } from "./grok-4.5.js";
13
14
  import { buildKimiK26Prompt } from "./kimi-k2-6.js";
14
15
  import { buildKimiK27Prompt } from "./kimi-k2-7.js";
15
16
  import { buildKimiK3Prompt } from "./kimi-k3.js";
@@ -61,6 +62,14 @@ function hasGlm52Signal(value) {
61
62
  function isGlm52Model(model) {
62
63
  return hasGlm52Signal(model.id) || (model.name !== undefined && hasGlm52Signal(model.name));
63
64
  }
65
+ function hasGrok45Signal(value) {
66
+ // Match any Grok 4.5 id shape: grok-4.5, grok4.5, grok45, grok-4p5, provider:model,
67
+ // path/prefix ids, and trailing tags (:thinking, -latest). Keep 4.3 / 4.20 / 3 out.
68
+ return /(?:^|[/@:._-])grok(?:[._-]|p)?4(?:[._-]|p)?5(?:$|[/@._:-])/.test(normalizeModelId(value));
69
+ }
70
+ function isGrok45Model(model) {
71
+ return hasGrok45Signal(model.id) || (model.name !== undefined && hasGrok45Signal(model.name));
72
+ }
64
73
  function isClaudeFable5Model(modelId) {
65
74
  return normalizeModelId(modelId).includes("fable-5");
66
75
  }
@@ -111,6 +120,9 @@ export function resolvePresetName(model, settings) {
111
120
  if (isGlm52Model(model)) {
112
121
  return "glm-5.2";
113
122
  }
123
+ if (isGrok45Model(model)) {
124
+ return "grok-4.5";
125
+ }
114
126
  return undefined;
115
127
  }
116
128
  function buildPreset(name, options) {
@@ -129,6 +141,8 @@ function buildPreset(name, options) {
129
141
  return { name, prompt: buildGpt5Prompt(options) };
130
142
  case "glm-5.2":
131
143
  return { name, prompt: buildGlm52Prompt(options) };
144
+ case "grok-4.5":
145
+ return { name, prompt: buildGrok45Prompt(options) };
132
146
  case "kimi-k3":
133
147
  return { name, prompt: buildKimiK3Prompt(options) };
134
148
  case "kimi-k2-7":
@@ -1 +1 @@
1
- {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/presets.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model } from \"@earendil-works/pi-ai\";\nimport type { BuildDynamicSystemPromptOptions } from \"../../../dynamic-prompt/build.ts\";\nimport { buildClaudeFable5Prompt } from \"./claude-fable-5.ts\";\nimport { buildClaudeOpus45Prompt } from \"./claude-opus-4-5.ts\";\nimport { buildClaudeOpus46Prompt } from \"./claude-opus-4-6.ts\";\nimport { buildClaudeOpus47Prompt } from \"./claude-opus-4-7.ts\";\nimport { buildClaudeOpus48Prompt } from \"./claude-opus-4-8.ts\";\nimport { buildGlm52Prompt } from \"./glm-5-2.ts\";\nimport { buildGpt52Prompt } from \"./gpt-5.2.ts\";\nimport { buildGpt53CodexPrompt } from \"./gpt-5.3-codex.ts\";\nimport { buildGpt54Prompt } from \"./gpt-5.4.ts\";\nimport { buildGpt55Prompt } from \"./gpt-5.5.ts\";\nimport { buildGpt56Prompt } from \"./gpt-5.6.ts\";\nimport { buildGpt5Prompt } from \"./gpt-5.ts\";\nimport { buildKimiK26Prompt } from \"./kimi-k2-6.ts\";\nimport { buildKimiK27Prompt } from \"./kimi-k2-7.ts\";\nimport { buildKimiK3Prompt } from \"./kimi-k3.ts\";\nimport { type PromptPresetName, type PromptPresetSettings, parsePromptPreset } from \"./settings.ts\";\n\nexport type { PromptPresetSettings } from \"./settings.ts\";\n\ntype ResolvedPresetName = Exclude<PromptPresetName, \"auto\">;\ntype ModelWithPromptPresetMetadata = Pick<Model<Api>, \"id\" | \"provider\"> & {\n\tname?: string;\n\tpromptPreset?: string;\n};\n\nexport interface ResolvedPromptPreset {\n\tname: ResolvedPresetName;\n\tprompt: string;\n}\n\nfunction normalizeModelId(modelId: string): string {\n\treturn modelId.toLowerCase().replace(/\\s+/g, \"-\");\n}\n\ntype Gpt5Version = \"gpt-5.2\" | \"gpt-5.3-codex\" | \"gpt-5.4\" | \"gpt-5.5\" | \"gpt-5.6\";\n\nfunction extractGpt5Version(modelId: string): Gpt5Version | undefined {\n\tconst normalized = normalizeModelId(modelId);\n\tif (normalized.includes(\"gpt-5.6\")) {\n\t\treturn \"gpt-5.6\";\n\t}\n\tif (normalized.includes(\"gpt-5.5\")) {\n\t\treturn \"gpt-5.5\";\n\t}\n\tif (normalized.includes(\"gpt-5.4\")) {\n\t\treturn \"gpt-5.4\";\n\t}\n\tif (normalized.includes(\"gpt-5.3\")) {\n\t\treturn \"gpt-5.3-codex\";\n\t}\n\tif (normalized.includes(\"gpt-5.2\")) {\n\t\treturn \"gpt-5.2\";\n\t}\n\treturn undefined;\n}\n\nfunction hasKimiK26Signal(value: string): boolean {\n\treturn /(?:^|[/@._-])kimi-k2(?:[._-]|p)6(?:$|[/@._:-])/.test(normalizeModelId(value));\n}\n\nfunction isKimiK26Model(model: ModelWithPromptPresetMetadata): boolean {\n\treturn hasKimiK26Signal(model.id) || (model.name !== undefined && hasKimiK26Signal(model.name));\n}\n\nfunction hasKimiK27Signal(value: string): boolean {\n\treturn /(?:^|[/@._-])kimi-k2(?:[._-]|p)7(?:$|[/@._:-])/.test(normalizeModelId(value));\n}\n\nfunction isKimiK27Model(model: ModelWithPromptPresetMetadata): boolean {\n\treturn hasKimiK27Signal(model.id) || (model.name !== undefined && hasKimiK27Signal(model.name));\n}\n\nfunction hasKimiK3Signal(value: string): boolean {\n\tconst normalized = normalizeModelId(value);\n\treturn normalized === \"k3\" || /(?:^|[/@._-])kimi-k3(?:$|[/@._:-])/.test(normalized);\n}\n\nfunction isKimiK3Model(model: ModelWithPromptPresetMetadata): boolean {\n\treturn hasKimiK3Signal(model.id) || (model.name !== undefined && hasKimiK3Signal(model.name));\n}\n\nfunction hasGlm52Signal(value: string): boolean {\n\treturn /(?:^|[/@._-])glm(?:[._-]|p)5(?:[._-]|p)2(?:$|[/@._:-])/.test(normalizeModelId(value));\n}\n\nfunction isGlm52Model(model: ModelWithPromptPresetMetadata): boolean {\n\treturn hasGlm52Signal(model.id) || (model.name !== undefined && hasGlm52Signal(model.name));\n}\n\nfunction isClaudeFable5Model(modelId: string): boolean {\n\treturn normalizeModelId(modelId).includes(\"fable-5\");\n}\n\ntype ClaudeOpusVersion = \"claude-opus-4-8\" | \"claude-opus-4-7\" | \"claude-opus-4-6\" | \"claude-opus-4-5\";\n\nfunction extractClaudeOpusVersion(modelId: string): ClaudeOpusVersion | undefined {\n\tconst normalized = normalizeModelId(modelId);\n\tif (normalized.includes(\"opus-4-8\")) {\n\t\treturn \"claude-opus-4-8\";\n\t}\n\tif (normalized.includes(\"opus-4-7\")) {\n\t\treturn \"claude-opus-4-7\";\n\t}\n\tif (normalized.includes(\"opus-4-6\")) {\n\t\treturn \"claude-opus-4-6\";\n\t}\n\tif (normalized.includes(\"opus-4-5\") || normalized.includes(\"opus-4.5\")) {\n\t\treturn \"claude-opus-4-5\";\n\t}\n\treturn undefined;\n}\n\nexport function resolvePresetName(\n\tmodel: ModelWithPromptPresetMetadata,\n\tsettings: PromptPresetSettings,\n): ResolvedPresetName | undefined {\n\tif (settings.promptPreset !== \"auto\") {\n\t\treturn settings.promptPreset;\n\t}\n\n\tconst modelPromptPreset = parsePromptPreset(model.promptPreset);\n\tif (modelPromptPreset && modelPromptPreset !== \"auto\") {\n\t\treturn modelPromptPreset;\n\t}\n\n\tconst gpt5Version = extractGpt5Version(model.id);\n\tif (gpt5Version) {\n\t\treturn gpt5Version;\n\t}\n\tif (isKimiK3Model(model)) {\n\t\treturn \"kimi-k3\";\n\t}\n\tif (isKimiK27Model(model)) {\n\t\treturn \"kimi-k2-7\";\n\t}\n\tif (isKimiK26Model(model)) {\n\t\treturn \"kimi-k2-6\";\n\t}\n\tif (isClaudeFable5Model(model.id)) {\n\t\treturn \"claude-fable-5\";\n\t}\n\tconst claudeVersion = extractClaudeOpusVersion(model.id);\n\tif (claudeVersion) {\n\t\treturn claudeVersion;\n\t}\n\tif (isGlm52Model(model)) {\n\t\treturn \"glm-5.2\";\n\t}\n\treturn undefined;\n}\n\nfunction buildPreset(name: ResolvedPresetName, options: BuildDynamicSystemPromptOptions): ResolvedPromptPreset {\n\tswitch (name) {\n\t\tcase \"gpt-5.6\":\n\t\t\treturn { name, prompt: buildGpt56Prompt(options) };\n\t\tcase \"gpt-5.5\":\n\t\t\treturn { name, prompt: buildGpt55Prompt(options) };\n\t\tcase \"gpt-5.4\":\n\t\t\treturn { name, prompt: buildGpt54Prompt(options) };\n\t\tcase \"gpt-5.3-codex\":\n\t\t\treturn { name, prompt: buildGpt53CodexPrompt(options) };\n\t\tcase \"gpt-5.2\":\n\t\t\treturn { name, prompt: buildGpt52Prompt(options) };\n\t\tcase \"gpt-5\":\n\t\t\treturn { name, prompt: buildGpt5Prompt(options) };\n\t\tcase \"glm-5.2\":\n\t\t\treturn { name, prompt: buildGlm52Prompt(options) };\n\t\tcase \"kimi-k3\":\n\t\t\treturn { name, prompt: buildKimiK3Prompt(options) };\n\t\tcase \"kimi-k2-7\":\n\t\t\treturn { name, prompt: buildKimiK27Prompt(options) };\n\t\tcase \"kimi-k2-6\":\n\t\t\treturn { name, prompt: buildKimiK26Prompt(options) };\n\t\tcase \"claude-fable-5\":\n\t\t\treturn { name, prompt: buildClaudeFable5Prompt(options) };\n\t\tcase \"claude-opus-4-8\":\n\t\t\treturn { name, prompt: buildClaudeOpus48Prompt(options) };\n\t\tcase \"claude-opus-4-7\":\n\t\t\treturn { name, prompt: buildClaudeOpus47Prompt(options) };\n\t\tcase \"claude-opus-4-6\":\n\t\t\treturn { name, prompt: buildClaudeOpus46Prompt(options) };\n\t\tcase \"claude-opus-4-5\":\n\t\t\treturn { name, prompt: buildClaudeOpus45Prompt(options) };\n\t}\n}\n\nfunction withDefaults(options: Partial<BuildDynamicSystemPromptOptions> = {}): BuildDynamicSystemPromptOptions {\n\treturn {\n\t\tcwd: options.cwd ?? \"\",\n\t\tselectedTools: options.selectedTools ?? [],\n\t\ttoolSnippets: options.toolSnippets ?? {},\n\t\tpromptGuidelines: options.promptGuidelines ?? [],\n\t\tcontextFiles: options.contextFiles ?? [],\n\t\tskills: options.skills ?? [],\n\t};\n}\n\nexport function resolvePreset(\n\tmodel: ModelWithPromptPresetMetadata,\n\tsettings: PromptPresetSettings,\n\toptions?: Partial<BuildDynamicSystemPromptOptions>,\n): ResolvedPromptPreset | undefined {\n\tconst name = resolvePresetName(model, settings);\n\tif (!name) {\n\t\treturn undefined;\n\t}\n\treturn buildPreset(name, withDefaults(options));\n}\n"]}
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/presets.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model } from \"@earendil-works/pi-ai\";\nimport type { BuildDynamicSystemPromptOptions } from \"../../../dynamic-prompt/build.ts\";\nimport { buildClaudeFable5Prompt } from \"./claude-fable-5.ts\";\nimport { buildClaudeOpus45Prompt } from \"./claude-opus-4-5.ts\";\nimport { buildClaudeOpus46Prompt } from \"./claude-opus-4-6.ts\";\nimport { buildClaudeOpus47Prompt } from \"./claude-opus-4-7.ts\";\nimport { buildClaudeOpus48Prompt } from \"./claude-opus-4-8.ts\";\nimport { buildGlm52Prompt } from \"./glm-5-2.ts\";\nimport { buildGpt52Prompt } from \"./gpt-5.2.ts\";\nimport { buildGpt53CodexPrompt } from \"./gpt-5.3-codex.ts\";\nimport { buildGpt54Prompt } from \"./gpt-5.4.ts\";\nimport { buildGpt55Prompt } from \"./gpt-5.5.ts\";\nimport { buildGpt56Prompt } from \"./gpt-5.6.ts\";\nimport { buildGpt5Prompt } from \"./gpt-5.ts\";\nimport { buildGrok45Prompt } from \"./grok-4.5.ts\";\nimport { buildKimiK26Prompt } from \"./kimi-k2-6.ts\";\nimport { buildKimiK27Prompt } from \"./kimi-k2-7.ts\";\nimport { buildKimiK3Prompt } from \"./kimi-k3.ts\";\nimport { type PromptPresetName, type PromptPresetSettings, parsePromptPreset } from \"./settings.ts\";\n\nexport type { PromptPresetSettings } from \"./settings.ts\";\n\ntype ResolvedPresetName = Exclude<PromptPresetName, \"auto\">;\ntype ModelWithPromptPresetMetadata = Pick<Model<Api>, \"id\" | \"provider\"> & {\n\tname?: string;\n\tpromptPreset?: string;\n};\n\nexport interface ResolvedPromptPreset {\n\tname: ResolvedPresetName;\n\tprompt: string;\n}\n\nfunction normalizeModelId(modelId: string): string {\n\treturn modelId.toLowerCase().replace(/\\s+/g, \"-\");\n}\n\ntype Gpt5Version = \"gpt-5.2\" | \"gpt-5.3-codex\" | \"gpt-5.4\" | \"gpt-5.5\" | \"gpt-5.6\";\n\nfunction extractGpt5Version(modelId: string): Gpt5Version | undefined {\n\tconst normalized = normalizeModelId(modelId);\n\tif (normalized.includes(\"gpt-5.6\")) {\n\t\treturn \"gpt-5.6\";\n\t}\n\tif (normalized.includes(\"gpt-5.5\")) {\n\t\treturn \"gpt-5.5\";\n\t}\n\tif (normalized.includes(\"gpt-5.4\")) {\n\t\treturn \"gpt-5.4\";\n\t}\n\tif (normalized.includes(\"gpt-5.3\")) {\n\t\treturn \"gpt-5.3-codex\";\n\t}\n\tif (normalized.includes(\"gpt-5.2\")) {\n\t\treturn \"gpt-5.2\";\n\t}\n\treturn undefined;\n}\n\nfunction hasKimiK26Signal(value: string): boolean {\n\treturn /(?:^|[/@._-])kimi-k2(?:[._-]|p)6(?:$|[/@._:-])/.test(normalizeModelId(value));\n}\n\nfunction isKimiK26Model(model: ModelWithPromptPresetMetadata): boolean {\n\treturn hasKimiK26Signal(model.id) || (model.name !== undefined && hasKimiK26Signal(model.name));\n}\n\nfunction hasKimiK27Signal(value: string): boolean {\n\treturn /(?:^|[/@._-])kimi-k2(?:[._-]|p)7(?:$|[/@._:-])/.test(normalizeModelId(value));\n}\n\nfunction isKimiK27Model(model: ModelWithPromptPresetMetadata): boolean {\n\treturn hasKimiK27Signal(model.id) || (model.name !== undefined && hasKimiK27Signal(model.name));\n}\n\nfunction hasKimiK3Signal(value: string): boolean {\n\tconst normalized = normalizeModelId(value);\n\treturn normalized === \"k3\" || /(?:^|[/@._-])kimi-k3(?:$|[/@._:-])/.test(normalized);\n}\n\nfunction isKimiK3Model(model: ModelWithPromptPresetMetadata): boolean {\n\treturn hasKimiK3Signal(model.id) || (model.name !== undefined && hasKimiK3Signal(model.name));\n}\n\nfunction hasGlm52Signal(value: string): boolean {\n\treturn /(?:^|[/@._-])glm(?:[._-]|p)5(?:[._-]|p)2(?:$|[/@._:-])/.test(normalizeModelId(value));\n}\n\nfunction isGlm52Model(model: ModelWithPromptPresetMetadata): boolean {\n\treturn hasGlm52Signal(model.id) || (model.name !== undefined && hasGlm52Signal(model.name));\n}\n\nfunction hasGrok45Signal(value: string): boolean {\n\t// Match any Grok 4.5 id shape: grok-4.5, grok4.5, grok45, grok-4p5, provider:model,\n\t// path/prefix ids, and trailing tags (:thinking, -latest). Keep 4.3 / 4.20 / 3 out.\n\treturn /(?:^|[/@:._-])grok(?:[._-]|p)?4(?:[._-]|p)?5(?:$|[/@._:-])/.test(normalizeModelId(value));\n}\n\nfunction isGrok45Model(model: ModelWithPromptPresetMetadata): boolean {\n\treturn hasGrok45Signal(model.id) || (model.name !== undefined && hasGrok45Signal(model.name));\n}\n\nfunction isClaudeFable5Model(modelId: string): boolean {\n\treturn normalizeModelId(modelId).includes(\"fable-5\");\n}\n\ntype ClaudeOpusVersion = \"claude-opus-4-8\" | \"claude-opus-4-7\" | \"claude-opus-4-6\" | \"claude-opus-4-5\";\n\nfunction extractClaudeOpusVersion(modelId: string): ClaudeOpusVersion | undefined {\n\tconst normalized = normalizeModelId(modelId);\n\tif (normalized.includes(\"opus-4-8\")) {\n\t\treturn \"claude-opus-4-8\";\n\t}\n\tif (normalized.includes(\"opus-4-7\")) {\n\t\treturn \"claude-opus-4-7\";\n\t}\n\tif (normalized.includes(\"opus-4-6\")) {\n\t\treturn \"claude-opus-4-6\";\n\t}\n\tif (normalized.includes(\"opus-4-5\") || normalized.includes(\"opus-4.5\")) {\n\t\treturn \"claude-opus-4-5\";\n\t}\n\treturn undefined;\n}\n\nexport function resolvePresetName(\n\tmodel: ModelWithPromptPresetMetadata,\n\tsettings: PromptPresetSettings,\n): ResolvedPresetName | undefined {\n\tif (settings.promptPreset !== \"auto\") {\n\t\treturn settings.promptPreset;\n\t}\n\n\tconst modelPromptPreset = parsePromptPreset(model.promptPreset);\n\tif (modelPromptPreset && modelPromptPreset !== \"auto\") {\n\t\treturn modelPromptPreset;\n\t}\n\n\tconst gpt5Version = extractGpt5Version(model.id);\n\tif (gpt5Version) {\n\t\treturn gpt5Version;\n\t}\n\tif (isKimiK3Model(model)) {\n\t\treturn \"kimi-k3\";\n\t}\n\tif (isKimiK27Model(model)) {\n\t\treturn \"kimi-k2-7\";\n\t}\n\tif (isKimiK26Model(model)) {\n\t\treturn \"kimi-k2-6\";\n\t}\n\tif (isClaudeFable5Model(model.id)) {\n\t\treturn \"claude-fable-5\";\n\t}\n\tconst claudeVersion = extractClaudeOpusVersion(model.id);\n\tif (claudeVersion) {\n\t\treturn claudeVersion;\n\t}\n\tif (isGlm52Model(model)) {\n\t\treturn \"glm-5.2\";\n\t}\n\tif (isGrok45Model(model)) {\n\t\treturn \"grok-4.5\";\n\t}\n\treturn undefined;\n}\n\nfunction buildPreset(name: ResolvedPresetName, options: BuildDynamicSystemPromptOptions): ResolvedPromptPreset {\n\tswitch (name) {\n\t\tcase \"gpt-5.6\":\n\t\t\treturn { name, prompt: buildGpt56Prompt(options) };\n\t\tcase \"gpt-5.5\":\n\t\t\treturn { name, prompt: buildGpt55Prompt(options) };\n\t\tcase \"gpt-5.4\":\n\t\t\treturn { name, prompt: buildGpt54Prompt(options) };\n\t\tcase \"gpt-5.3-codex\":\n\t\t\treturn { name, prompt: buildGpt53CodexPrompt(options) };\n\t\tcase \"gpt-5.2\":\n\t\t\treturn { name, prompt: buildGpt52Prompt(options) };\n\t\tcase \"gpt-5\":\n\t\t\treturn { name, prompt: buildGpt5Prompt(options) };\n\t\tcase \"glm-5.2\":\n\t\t\treturn { name, prompt: buildGlm52Prompt(options) };\n\t\tcase \"grok-4.5\":\n\t\t\treturn { name, prompt: buildGrok45Prompt(options) };\n\t\tcase \"kimi-k3\":\n\t\t\treturn { name, prompt: buildKimiK3Prompt(options) };\n\t\tcase \"kimi-k2-7\":\n\t\t\treturn { name, prompt: buildKimiK27Prompt(options) };\n\t\tcase \"kimi-k2-6\":\n\t\t\treturn { name, prompt: buildKimiK26Prompt(options) };\n\t\tcase \"claude-fable-5\":\n\t\t\treturn { name, prompt: buildClaudeFable5Prompt(options) };\n\t\tcase \"claude-opus-4-8\":\n\t\t\treturn { name, prompt: buildClaudeOpus48Prompt(options) };\n\t\tcase \"claude-opus-4-7\":\n\t\t\treturn { name, prompt: buildClaudeOpus47Prompt(options) };\n\t\tcase \"claude-opus-4-6\":\n\t\t\treturn { name, prompt: buildClaudeOpus46Prompt(options) };\n\t\tcase \"claude-opus-4-5\":\n\t\t\treturn { name, prompt: buildClaudeOpus45Prompt(options) };\n\t}\n}\n\nfunction withDefaults(options: Partial<BuildDynamicSystemPromptOptions> = {}): BuildDynamicSystemPromptOptions {\n\treturn {\n\t\tcwd: options.cwd ?? \"\",\n\t\tselectedTools: options.selectedTools ?? [],\n\t\ttoolSnippets: options.toolSnippets ?? {},\n\t\tpromptGuidelines: options.promptGuidelines ?? [],\n\t\tcontextFiles: options.contextFiles ?? [],\n\t\tskills: options.skills ?? [],\n\t};\n}\n\nexport function resolvePreset(\n\tmodel: ModelWithPromptPresetMetadata,\n\tsettings: PromptPresetSettings,\n\toptions?: Partial<BuildDynamicSystemPromptOptions>,\n): ResolvedPromptPreset | undefined {\n\tconst name = resolvePresetName(model, settings);\n\tif (!name) {\n\t\treturn undefined;\n\t}\n\treturn buildPreset(name, withDefaults(options));\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { SettingsManager } from "../../../settings-manager.ts";
2
- export type PromptPresetName = "auto" | "claude-fable-5" | "claude-opus-4-8" | "claude-opus-4-7" | "claude-opus-4-6" | "claude-opus-4-5" | "glm-5.2" | "kimi-k3" | "kimi-k2-7" | "kimi-k2-6" | "gpt-5" | "gpt-5.2" | "gpt-5.3-codex" | "gpt-5.4" | "gpt-5.5" | "gpt-5.6";
2
+ export type PromptPresetName = "auto" | "claude-fable-5" | "claude-opus-4-8" | "claude-opus-4-7" | "claude-opus-4-6" | "claude-opus-4-5" | "glm-5.2" | "grok-4.5" | "kimi-k3" | "kimi-k2-7" | "kimi-k2-6" | "gpt-5" | "gpt-5.2" | "gpt-5.3-codex" | "gpt-5.4" | "gpt-5.5" | "gpt-5.6";
3
3
  export interface PromptPresetSettings {
4
4
  promptPreset: PromptPresetName;
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GACzB,MAAM,GACN,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,SAAS,GACT,SAAS,GACT,WAAW,GACX,WAAW,GACX,OAAO,GACP,SAAS,GACT,eAAe,GACf,SAAS,GACT,SAAS,GACT,SAAS,CAAC;AAEb,MAAM,WAAW,oBAAoB;IACpC,YAAY,EAAE,gBAAgB,CAAC;CAC/B;AAuBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAKzF;AAED,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,eAAe,GAAG,oBAAoB,CAQ/F"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GACzB,MAAM,GACN,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,SAAS,GACT,UAAU,GACV,SAAS,GACT,WAAW,GACX,WAAW,GACX,OAAO,GACP,SAAS,GACT,eAAe,GACf,SAAS,GACT,SAAS,GACT,SAAS,CAAC;AAEb,MAAM,WAAW,oBAAoB;IACpC,YAAY,EAAE,gBAAgB,CAAC;CAC/B;AAwBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAKzF;AAED,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,eAAe,GAAG,oBAAoB,CAQ/F"}
@@ -6,6 +6,7 @@ const VALID_PRESETS = new Set([
6
6
  "claude-opus-4-6",
7
7
  "claude-opus-4-5",
8
8
  "glm-5.2",
9
+ "grok-4.5",
9
10
  "kimi-k3",
10
11
  "kimi-k2-7",
11
12
  "kimi-k2-6",
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/settings.ts"],"names":[],"mappings":"AA0BA,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAmB;IACpE,MAAM;IACN,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,SAAS;IACT,SAAS;IACT,WAAW;IACX,WAAW;IACX,OAAO;IACP,SAAS;IACT,eAAe;IACf,SAAS;IACT,SAAS;IACT,SAAS;CACT,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IAC1D,IAAI,KAAK,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,KAAyB,CAAC;IAClC,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,eAAgC;IACxE,MAAM,cAAc,GAAG,eAAe,CAAC,iBAAiB,EAA8B,CAAC;IACvF,MAAM,eAAe,GAAG,eAAe,CAAC,kBAAkB,EAA8B,CAAC;IAEzF,OAAO;QACN,YAAY,EACX,iBAAiB,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,iBAAiB,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,MAAM;KAC5G,CAAC;AACH,CAAC","sourcesContent":["import type { Settings, SettingsManager } from \"../../../settings-manager.ts\";\n\nexport type PromptPresetName =\n\t| \"auto\"\n\t| \"claude-fable-5\"\n\t| \"claude-opus-4-8\"\n\t| \"claude-opus-4-7\"\n\t| \"claude-opus-4-6\"\n\t| \"claude-opus-4-5\"\n\t| \"glm-5.2\"\n\t| \"kimi-k3\"\n\t| \"kimi-k2-7\"\n\t| \"kimi-k2-6\"\n\t| \"gpt-5\"\n\t| \"gpt-5.2\"\n\t| \"gpt-5.3-codex\"\n\t| \"gpt-5.4\"\n\t| \"gpt-5.5\"\n\t| \"gpt-5.6\";\n\nexport interface PromptPresetSettings {\n\tpromptPreset: PromptPresetName;\n}\n\ntype SettingsWithPromptPreset = Settings & { promptPreset?: string };\n\nconst VALID_PRESETS: ReadonlySet<string> = new Set<PromptPresetName>([\n\t\"auto\",\n\t\"claude-fable-5\",\n\t\"claude-opus-4-8\",\n\t\"claude-opus-4-7\",\n\t\"claude-opus-4-6\",\n\t\"claude-opus-4-5\",\n\t\"glm-5.2\",\n\t\"kimi-k3\",\n\t\"kimi-k2-7\",\n\t\"kimi-k2-6\",\n\t\"gpt-5\",\n\t\"gpt-5.2\",\n\t\"gpt-5.3-codex\",\n\t\"gpt-5.4\",\n\t\"gpt-5.5\",\n\t\"gpt-5.6\",\n]);\n\nexport function parsePromptPreset(value: string | undefined): PromptPresetName | undefined {\n\tif (value && VALID_PRESETS.has(value)) {\n\t\treturn value as PromptPresetName;\n\t}\n\treturn undefined;\n}\n\nexport function loadPromptPresetSettings(settingsManager: SettingsManager): PromptPresetSettings {\n\tconst globalSettings = settingsManager.getGlobalSettings() as SettingsWithPromptPreset;\n\tconst projectSettings = settingsManager.getProjectSettings() as SettingsWithPromptPreset;\n\n\treturn {\n\t\tpromptPreset:\n\t\t\tparsePromptPreset(projectSettings.promptPreset) ?? parsePromptPreset(globalSettings.promptPreset) ?? \"auto\",\n\t};\n}\n"]}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/settings.ts"],"names":[],"mappings":"AA2BA,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAmB;IACpE,MAAM;IACN,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,SAAS;IACT,UAAU;IACV,SAAS;IACT,WAAW;IACX,WAAW;IACX,OAAO;IACP,SAAS;IACT,eAAe;IACf,SAAS;IACT,SAAS;IACT,SAAS;CACT,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IAC1D,IAAI,KAAK,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,KAAyB,CAAC;IAClC,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,eAAgC;IACxE,MAAM,cAAc,GAAG,eAAe,CAAC,iBAAiB,EAA8B,CAAC;IACvF,MAAM,eAAe,GAAG,eAAe,CAAC,kBAAkB,EAA8B,CAAC;IAEzF,OAAO;QACN,YAAY,EACX,iBAAiB,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,iBAAiB,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,MAAM;KAC5G,CAAC;AACH,CAAC","sourcesContent":["import type { Settings, SettingsManager } from \"../../../settings-manager.ts\";\n\nexport type PromptPresetName =\n\t| \"auto\"\n\t| \"claude-fable-5\"\n\t| \"claude-opus-4-8\"\n\t| \"claude-opus-4-7\"\n\t| \"claude-opus-4-6\"\n\t| \"claude-opus-4-5\"\n\t| \"glm-5.2\"\n\t| \"grok-4.5\"\n\t| \"kimi-k3\"\n\t| \"kimi-k2-7\"\n\t| \"kimi-k2-6\"\n\t| \"gpt-5\"\n\t| \"gpt-5.2\"\n\t| \"gpt-5.3-codex\"\n\t| \"gpt-5.4\"\n\t| \"gpt-5.5\"\n\t| \"gpt-5.6\";\n\nexport interface PromptPresetSettings {\n\tpromptPreset: PromptPresetName;\n}\n\ntype SettingsWithPromptPreset = Settings & { promptPreset?: string };\n\nconst VALID_PRESETS: ReadonlySet<string> = new Set<PromptPresetName>([\n\t\"auto\",\n\t\"claude-fable-5\",\n\t\"claude-opus-4-8\",\n\t\"claude-opus-4-7\",\n\t\"claude-opus-4-6\",\n\t\"claude-opus-4-5\",\n\t\"glm-5.2\",\n\t\"grok-4.5\",\n\t\"kimi-k3\",\n\t\"kimi-k2-7\",\n\t\"kimi-k2-6\",\n\t\"gpt-5\",\n\t\"gpt-5.2\",\n\t\"gpt-5.3-codex\",\n\t\"gpt-5.4\",\n\t\"gpt-5.5\",\n\t\"gpt-5.6\",\n]);\n\nexport function parsePromptPreset(value: string | undefined): PromptPresetName | undefined {\n\tif (value && VALID_PRESETS.has(value)) {\n\t\treturn value as PromptPresetName;\n\t}\n\treturn undefined;\n}\n\nexport function loadPromptPresetSettings(settingsManager: SettingsManager): PromptPresetSettings {\n\tconst globalSettings = settingsManager.getGlobalSettings() as SettingsWithPromptPreset;\n\tconst projectSettings = settingsManager.getProjectSettings() as SettingsWithPromptPreset;\n\n\treturn {\n\t\tpromptPreset:\n\t\t\tparsePromptPreset(projectSettings.promptPreset) ?? parsePromptPreset(globalSettings.promptPreset) ?? \"auto\",\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/rules/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAanD,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAgI/D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/rules/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAanD,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAkI/D"}
@@ -51,7 +51,10 @@ export default function piRulesExtension(pi) {
51
51
  pi.appendEntry("pi-rules.scan", { cwd: ctx.cwd, reason: event.reason });
52
52
  return undefined;
53
53
  });
54
- pi.on("session_compact", async (_event, ctx) => {
54
+ pi.on("session_compact", async (event, ctx) => {
55
+ // Rejected compactions do not mutate session state; do not reset rules.
56
+ if (!event.accepted)
57
+ return undefined;
55
58
  engine.resetSession(ctx.cwd);
56
59
  pi.appendEntry("pi-rules.scan", { cwd: ctx.cwd, reason: "compact" });
57
60
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/rules/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync, realpathSync } from \"node:fs\";\nimport { isAbsolute, relative } from \"node:path\";\n\nimport type { ExtensionAPI } from \"../../types.ts\";\n\nimport { registerSlashCommands } from \"./commands.ts\";\nimport { createEngine, defaultConfig } from \"./rules/engine.ts\";\nimport { findRuleCandidates } from \"./rules/finder.ts\";\nimport { findProjectRoot } from \"./rules/project-root.ts\";\nimport { extractToolPaths } from \"./rules/tool-paths.ts\";\nimport type { PiRulesConfig } from \"./rules/types.ts\";\n\ntype PiRulesMode = PiRulesConfig[\"mode\"];\n\nconst MODE_VALUES = new Set<string>([\"static\", \"dynamic\", \"both\", \"off\"]);\n\nexport default function piRulesExtension(pi: ExtensionAPI): void {\n\tpi.registerFlag(\"pi-rules-disabled\", {\n\t\ttype: \"boolean\",\n\t\tdefault: false,\n\t\tdescription: \"Disable pi-rules hooks.\",\n\t});\n\tpi.registerFlag(\"pi-rules-mode\", {\n\t\ttype: \"string\",\n\t\tdefault: \"both\",\n\t\tdescription: \"Rule injection mode: static, dynamic, both, or off.\",\n\t});\n\tconst config = defaultConfig();\n\tconst engine = createEngine(config, {\n\t\tfindCandidates: findRuleCandidates,\n\t\treadFile: (path) => {\n\t\t\ttry {\n\t\t\t\treturn readFileSync(path, \"utf-8\");\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tfindProjectRoot,\n\t\textractToolPaths,\n\t});\n\tregisterSlashCommands(pi, engine);\n\n\tfunction syncConfigFromFlags(): void {\n\t\tconst disabled = pi.getFlag(\"pi-rules-disabled\");\n\t\tconst mode = pi.getFlag(\"pi-rules-mode\");\n\n\t\tif (typeof disabled === \"boolean\") {\n\t\t\tengine.config.disabled = disabled;\n\t\t}\n\t\tif (typeof mode === \"string\" && isPiRulesMode(mode)) {\n\t\t\tengine.config.mode = mode;\n\t\t}\n\t}\n\n\tpi.on(\"session_start\", async (event, ctx) => {\n\t\tsyncConfigFromFlags();\n\t\tif (engine.config.disabled) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tengine.resetSession(ctx.cwd);\n\t\tpi.appendEntry(\"pi-rules.scan\", { cwd: ctx.cwd, reason: event.reason });\n\t\treturn undefined;\n\t});\n\n\tpi.on(\"session_compact\", async (_event, ctx) => {\n\t\tengine.resetSession(ctx.cwd);\n\t\tpi.appendEntry(\"pi-rules.scan\", { cwd: ctx.cwd, reason: \"compact\" });\n\t\treturn undefined;\n\t});\n\n\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\tsyncConfigFromFlags();\n\t\tif (engine.config.disabled || engine.config.mode === \"off\" || engine.config.mode === \"dynamic\") {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst loaded = engine.loadStaticRules(ctx.cwd);\n\t\tconst nativeContextPaths = new Set(\n\t\t\tevent.systemPromptOptions.contextFiles?.flatMap((contextFile) => pathKeys(contextFile.path)) ?? [],\n\t\t);\n\t\tfor (const rule of loaded.rules) {\n\t\t\tif (nativeContextPaths.has(rule.path) || nativeContextPaths.has(rule.realPath)) {\n\t\t\t\tengine.markStaticInjected(rule);\n\t\t\t}\n\t\t}\n\t\tconst rules = loaded.rules.filter(\n\t\t\t(rule) =>\n\t\t\t\t!nativeContextPaths.has(rule.path) &&\n\t\t\t\t!nativeContextPaths.has(rule.realPath) &&\n\t\t\t\t!engine.isStaticInjected(rule),\n\t\t);\n\n\t\tif (rules.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst block = engine.formatStatic(rules);\n\t\tfor (const rule of rules) {\n\t\t\tengine.markStaticInjected(rule);\n\t\t}\n\n\t\treturn { systemPrompt: event.systemPrompt + block };\n\t});\n\n\tpi.on(\"tool_result\", async (event, ctx) => {\n\t\tsyncConfigFromFlags();\n\t\tif (engine.config.disabled || engine.config.mode === \"off\" || engine.config.mode === \"static\" || event.isError) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst targetPaths = extractToolPaths(event, ctx.cwd);\n\t\tconst firstTargetPath = targetPaths[0];\n\t\tif (firstTargetPath === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst fingerprints = engine.fingerprintDynamicTargets(ctx.cwd, targetPaths);\n\t\tconst pendingFingerprints = fingerprints.filter((target) => !engine.isDynamicTargetFingerprintCurrent(target));\n\t\tif (pendingFingerprints.length === 0) {\n\t\t\tengine.commitDynamicTargetFingerprints(fingerprints);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst loaded = engine.loadDynamicRules(\n\t\t\tctx.cwd,\n\t\t\tpendingFingerprints.map((target) => target.targetPath),\n\t\t);\n\t\tengine.commitDynamicTargetFingerprints(fingerprints);\n\t\tconst rules = loaded.rules.filter(\n\t\t\t(rule) => !engine.isStaticInjected(rule) && !engine.isDynamicInjected(firstTargetPath, rule),\n\t\t);\n\t\tif (rules.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst firstPendingTarget = pendingFingerprints[0]?.targetPath ?? firstTargetPath;\n\t\tconst block = engine.formatDynamic(rules, displayPath(ctx.cwd, firstPendingTarget));\n\t\tfor (const rule of rules) {\n\t\t\tengine.markDynamicInjected(firstTargetPath, rule);\n\t\t}\n\n\t\treturn { content: [...event.content, { type: \"text\", text: block }] };\n\t});\n}\n\nfunction isPiRulesMode(value: string): value is PiRulesMode {\n\treturn MODE_VALUES.has(value);\n}\n\nfunction pathKeys(filePath: string): string[] {\n\ttry {\n\t\treturn [filePath, realpathSync.native(filePath)];\n\t} catch {\n\t\treturn [filePath];\n\t}\n}\n\nfunction displayPath(cwd: string, filePath: string): string {\n\treturn isAbsolute(filePath) ? relative(cwd, filePath) : filePath;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/rules/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync, realpathSync } from \"node:fs\";\nimport { isAbsolute, relative } from \"node:path\";\n\nimport type { ExtensionAPI } from \"../../types.ts\";\n\nimport { registerSlashCommands } from \"./commands.ts\";\nimport { createEngine, defaultConfig } from \"./rules/engine.ts\";\nimport { findRuleCandidates } from \"./rules/finder.ts\";\nimport { findProjectRoot } from \"./rules/project-root.ts\";\nimport { extractToolPaths } from \"./rules/tool-paths.ts\";\nimport type { PiRulesConfig } from \"./rules/types.ts\";\n\ntype PiRulesMode = PiRulesConfig[\"mode\"];\n\nconst MODE_VALUES = new Set<string>([\"static\", \"dynamic\", \"both\", \"off\"]);\n\nexport default function piRulesExtension(pi: ExtensionAPI): void {\n\tpi.registerFlag(\"pi-rules-disabled\", {\n\t\ttype: \"boolean\",\n\t\tdefault: false,\n\t\tdescription: \"Disable pi-rules hooks.\",\n\t});\n\tpi.registerFlag(\"pi-rules-mode\", {\n\t\ttype: \"string\",\n\t\tdefault: \"both\",\n\t\tdescription: \"Rule injection mode: static, dynamic, both, or off.\",\n\t});\n\tconst config = defaultConfig();\n\tconst engine = createEngine(config, {\n\t\tfindCandidates: findRuleCandidates,\n\t\treadFile: (path) => {\n\t\t\ttry {\n\t\t\t\treturn readFileSync(path, \"utf-8\");\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tfindProjectRoot,\n\t\textractToolPaths,\n\t});\n\tregisterSlashCommands(pi, engine);\n\n\tfunction syncConfigFromFlags(): void {\n\t\tconst disabled = pi.getFlag(\"pi-rules-disabled\");\n\t\tconst mode = pi.getFlag(\"pi-rules-mode\");\n\n\t\tif (typeof disabled === \"boolean\") {\n\t\t\tengine.config.disabled = disabled;\n\t\t}\n\t\tif (typeof mode === \"string\" && isPiRulesMode(mode)) {\n\t\t\tengine.config.mode = mode;\n\t\t}\n\t}\n\n\tpi.on(\"session_start\", async (event, ctx) => {\n\t\tsyncConfigFromFlags();\n\t\tif (engine.config.disabled) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tengine.resetSession(ctx.cwd);\n\t\tpi.appendEntry(\"pi-rules.scan\", { cwd: ctx.cwd, reason: event.reason });\n\t\treturn undefined;\n\t});\n\n\tpi.on(\"session_compact\", async (event, ctx) => {\n\t\t// Rejected compactions do not mutate session state; do not reset rules.\n\t\tif (!event.accepted) return undefined;\n\t\tengine.resetSession(ctx.cwd);\n\t\tpi.appendEntry(\"pi-rules.scan\", { cwd: ctx.cwd, reason: \"compact\" });\n\t\treturn undefined;\n\t});\n\n\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\tsyncConfigFromFlags();\n\t\tif (engine.config.disabled || engine.config.mode === \"off\" || engine.config.mode === \"dynamic\") {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst loaded = engine.loadStaticRules(ctx.cwd);\n\t\tconst nativeContextPaths = new Set(\n\t\t\tevent.systemPromptOptions.contextFiles?.flatMap((contextFile) => pathKeys(contextFile.path)) ?? [],\n\t\t);\n\t\tfor (const rule of loaded.rules) {\n\t\t\tif (nativeContextPaths.has(rule.path) || nativeContextPaths.has(rule.realPath)) {\n\t\t\t\tengine.markStaticInjected(rule);\n\t\t\t}\n\t\t}\n\t\tconst rules = loaded.rules.filter(\n\t\t\t(rule) =>\n\t\t\t\t!nativeContextPaths.has(rule.path) &&\n\t\t\t\t!nativeContextPaths.has(rule.realPath) &&\n\t\t\t\t!engine.isStaticInjected(rule),\n\t\t);\n\n\t\tif (rules.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst block = engine.formatStatic(rules);\n\t\tfor (const rule of rules) {\n\t\t\tengine.markStaticInjected(rule);\n\t\t}\n\n\t\treturn { systemPrompt: event.systemPrompt + block };\n\t});\n\n\tpi.on(\"tool_result\", async (event, ctx) => {\n\t\tsyncConfigFromFlags();\n\t\tif (engine.config.disabled || engine.config.mode === \"off\" || engine.config.mode === \"static\" || event.isError) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst targetPaths = extractToolPaths(event, ctx.cwd);\n\t\tconst firstTargetPath = targetPaths[0];\n\t\tif (firstTargetPath === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst fingerprints = engine.fingerprintDynamicTargets(ctx.cwd, targetPaths);\n\t\tconst pendingFingerprints = fingerprints.filter((target) => !engine.isDynamicTargetFingerprintCurrent(target));\n\t\tif (pendingFingerprints.length === 0) {\n\t\t\tengine.commitDynamicTargetFingerprints(fingerprints);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst loaded = engine.loadDynamicRules(\n\t\t\tctx.cwd,\n\t\t\tpendingFingerprints.map((target) => target.targetPath),\n\t\t);\n\t\tengine.commitDynamicTargetFingerprints(fingerprints);\n\t\tconst rules = loaded.rules.filter(\n\t\t\t(rule) => !engine.isStaticInjected(rule) && !engine.isDynamicInjected(firstTargetPath, rule),\n\t\t);\n\t\tif (rules.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst firstPendingTarget = pendingFingerprints[0]?.targetPath ?? firstTargetPath;\n\t\tconst block = engine.formatDynamic(rules, displayPath(ctx.cwd, firstPendingTarget));\n\t\tfor (const rule of rules) {\n\t\t\tengine.markDynamicInjected(firstTargetPath, rule);\n\t\t}\n\n\t\treturn { content: [...event.content, { type: \"text\", text: block }] };\n\t});\n}\n\nfunction isPiRulesMode(value: string): value is PiRulesMode {\n\treturn MODE_VALUES.has(value);\n}\n\nfunction pathKeys(filePath: string): string[] {\n\ttry {\n\t\treturn [filePath, realpathSync.native(filePath)];\n\t} catch {\n\t\treturn [filePath];\n\t}\n}\n\nfunction displayPath(cwd: string, filePath: string): string {\n\treturn isAbsolute(filePath) ? relative(cwd, filePath) : filePath;\n}\n"]}
@@ -16,6 +16,13 @@ export declare const DEFAULT_MAX_SESSIONS = 32;
16
16
  export declare const MAX_SESSION_OUTPUT_CHARS = 1000000;
17
17
  /** Grace window used to capture a background command's early output before returning its id. */
18
18
  export declare const BACKGROUND_START_GRACE_MS = 250;
19
+ /**
20
+ * After a foreground session has been killed (abort or timeout), how long to keep
21
+ * waiting for its exit to settle before releasing the tool anyway. A surviving
22
+ * descendant that holds the PTY open (or a kill that never lands) must not keep
23
+ * the agent blocked forever.
24
+ */
25
+ export declare const KILLED_SESSION_EXIT_GRACE_MS = 5000;
19
26
  export declare const DEFAULT_OUTPUT_WAIT_TIMEOUT_SECONDS = 30;
20
27
  /** Resolve a single named key to its PTY byte sequence, or null when unknown. */
21
28
  export declare function resolveKeySequence(key: string): string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/terminal/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,kBAAkB,SAAS,CAAC;AACzC,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAClD,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAC9C,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAChD,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAElD,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,oEAK3B,CAAC;AAEX,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,2FAA2F;AAC3F,eAAO,MAAM,wBAAwB,UAAY,CAAC;AAClD,gGAAgG;AAChG,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,mCAAmC,KAAK,CAAC;AAiCtD,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ7D;AAED,2FAA2F;AAC3F,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CASvF;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzD"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/terminal/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,kBAAkB,SAAS,CAAC;AACzC,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAClD,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAC9C,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAChD,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAElD,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,oEAK3B,CAAC;AAEX,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,2FAA2F;AAC3F,eAAO,MAAM,wBAAwB,UAAY,CAAC;AAClD,gGAAgG;AAChG,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,OAAO,CAAC;AACjD,eAAO,MAAM,mCAAmC,KAAK,CAAC;AAiCtD,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ7D;AAED,2FAA2F;AAC3F,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CASvF;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzD"}
@@ -21,6 +21,13 @@ export const DEFAULT_MAX_SESSIONS = 32;
21
21
  export const MAX_SESSION_OUTPUT_CHARS = 1_000_000;
22
22
  /** Grace window used to capture a background command's early output before returning its id. */
23
23
  export const BACKGROUND_START_GRACE_MS = 250;
24
+ /**
25
+ * After a foreground session has been killed (abort or timeout), how long to keep
26
+ * waiting for its exit to settle before releasing the tool anyway. A surviving
27
+ * descendant that holds the PTY open (or a kill that never lands) must not keep
28
+ * the agent blocked forever.
29
+ */
30
+ export const KILLED_SESSION_EXIT_GRACE_MS = 5000;
24
31
  export const DEFAULT_OUTPUT_WAIT_TIMEOUT_SECONDS = 30;
25
32
  /**
26
33
  * Named-key aliases the model can send via `bash_input {keys:[...]}`. Values are the
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/terminal/shared.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared constants and helpers for the persistent-terminal builtin extension.\n */\n\nexport const TERMINAL_BASH_TOOL = \"bash\";\nexport const TERMINAL_OUTPUT_TOOL = \"bash_output\";\nexport const TERMINAL_KILL_TOOL = \"kill_bash\";\nexport const TERMINAL_INPUT_TOOL = \"bash_input\";\nexport const TERMINAL_RESIZE_TOOL = \"bash_resize\";\n\n/** Companion tools that must never dangle without a live PTY `bash`. */\nexport const TERMINAL_COMPANION_TOOLS = [\n\tTERMINAL_OUTPUT_TOOL,\n\tTERMINAL_KILL_TOOL,\n\tTERMINAL_INPUT_TOOL,\n\tTERMINAL_RESIZE_TOOL,\n] as const;\n\nexport const DEFAULT_COLS = 120;\nexport const DEFAULT_ROWS = 40;\nexport const DEFAULT_SCROLLBACK = 10_000;\nexport const DEFAULT_MAX_SESSIONS = 32;\n/** Upper bound on decoded output retained per session for delta reads and `view:\"log\"`. */\nexport const MAX_SESSION_OUTPUT_CHARS = 1_000_000;\n/** Grace window used to capture a background command's early output before returning its id. */\nexport const BACKGROUND_START_GRACE_MS = 250;\nexport const DEFAULT_OUTPUT_WAIT_TIMEOUT_SECONDS = 30;\n\n/**\n * Named-key aliases the model can send via `bash_input {keys:[...]}`. Values are the\n * raw byte sequences a PTY expects (control chars + xterm cursor/function escapes).\n */\nconst KEY_SEQUENCES: Record<string, string> = {\n\tenter: \"\\r\",\n\treturn: \"\\r\",\n\ttab: \"\\t\",\n\tescape: \"\\x1b\",\n\tesc: \"\\x1b\",\n\tspace: \" \",\n\tbackspace: \"\\x7f\",\n\tdelete: \"\\x1b[3~\",\n\tup: \"\\x1b[A\",\n\tdown: \"\\x1b[B\",\n\tright: \"\\x1b[C\",\n\tleft: \"\\x1b[D\",\n\thome: \"\\x1b[H\",\n\tend: \"\\x1b[F\",\n\tpageup: \"\\x1b[5~\",\n\tpagedown: \"\\x1b[6~\",\n\t\"ctrl+c\": \"\\x03\",\n\t\"ctrl+d\": \"\\x04\",\n\t\"ctrl+z\": \"\\x1a\",\n\t\"ctrl+l\": \"\\x0c\",\n\t\"ctrl+u\": \"\\x15\",\n\t\"ctrl+a\": \"\\x01\",\n\t\"ctrl+e\": \"\\x05\",\n\t\"ctrl+\\\\\": \"\\x1c\",\n};\n\n/** Resolve a single named key to its PTY byte sequence, or null when unknown. */\nexport function resolveKeySequence(key: string): string | null {\n\tconst normalized = key.trim().toLowerCase();\n\tif (normalized.length === 0) return null;\n\tconst mapped = KEY_SEQUENCES[normalized];\n\tif (mapped !== undefined) return mapped;\n\t// Single printable character passes through verbatim.\n\tif ([...normalized].length === 1) return key;\n\treturn null;\n}\n\n/** Build a PTY-ready payload from a list of named keys, returning the unknown keys too. */\nexport function encodeKeys(keys: readonly string[]): { data: string; unknown: string[] } {\n\tlet data = \"\";\n\tconst unknown: string[] = [];\n\tfor (const key of keys) {\n\t\tconst sequence = resolveKeySequence(key);\n\t\tif (sequence === null) unknown.push(key);\n\t\telse data += sequence;\n\t}\n\treturn { data, unknown };\n}\n\n/** Compile a user-supplied regex, tolerating invalid patterns by returning null. */\nexport function safeRegExp(pattern: string): RegExp | null {\n\ttry {\n\t\treturn new RegExp(pattern);\n\t} catch {\n\t\treturn null;\n\t}\n}\n"]}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/terminal/shared.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared constants and helpers for the persistent-terminal builtin extension.\n */\n\nexport const TERMINAL_BASH_TOOL = \"bash\";\nexport const TERMINAL_OUTPUT_TOOL = \"bash_output\";\nexport const TERMINAL_KILL_TOOL = \"kill_bash\";\nexport const TERMINAL_INPUT_TOOL = \"bash_input\";\nexport const TERMINAL_RESIZE_TOOL = \"bash_resize\";\n\n/** Companion tools that must never dangle without a live PTY `bash`. */\nexport const TERMINAL_COMPANION_TOOLS = [\n\tTERMINAL_OUTPUT_TOOL,\n\tTERMINAL_KILL_TOOL,\n\tTERMINAL_INPUT_TOOL,\n\tTERMINAL_RESIZE_TOOL,\n] as const;\n\nexport const DEFAULT_COLS = 120;\nexport const DEFAULT_ROWS = 40;\nexport const DEFAULT_SCROLLBACK = 10_000;\nexport const DEFAULT_MAX_SESSIONS = 32;\n/** Upper bound on decoded output retained per session for delta reads and `view:\"log\"`. */\nexport const MAX_SESSION_OUTPUT_CHARS = 1_000_000;\n/** Grace window used to capture a background command's early output before returning its id. */\nexport const BACKGROUND_START_GRACE_MS = 250;\n/**\n * After a foreground session has been killed (abort or timeout), how long to keep\n * waiting for its exit to settle before releasing the tool anyway. A surviving\n * descendant that holds the PTY open (or a kill that never lands) must not keep\n * the agent blocked forever.\n */\nexport const KILLED_SESSION_EXIT_GRACE_MS = 5000;\nexport const DEFAULT_OUTPUT_WAIT_TIMEOUT_SECONDS = 30;\n\n/**\n * Named-key aliases the model can send via `bash_input {keys:[...]}`. Values are the\n * raw byte sequences a PTY expects (control chars + xterm cursor/function escapes).\n */\nconst KEY_SEQUENCES: Record<string, string> = {\n\tenter: \"\\r\",\n\treturn: \"\\r\",\n\ttab: \"\\t\",\n\tescape: \"\\x1b\",\n\tesc: \"\\x1b\",\n\tspace: \" \",\n\tbackspace: \"\\x7f\",\n\tdelete: \"\\x1b[3~\",\n\tup: \"\\x1b[A\",\n\tdown: \"\\x1b[B\",\n\tright: \"\\x1b[C\",\n\tleft: \"\\x1b[D\",\n\thome: \"\\x1b[H\",\n\tend: \"\\x1b[F\",\n\tpageup: \"\\x1b[5~\",\n\tpagedown: \"\\x1b[6~\",\n\t\"ctrl+c\": \"\\x03\",\n\t\"ctrl+d\": \"\\x04\",\n\t\"ctrl+z\": \"\\x1a\",\n\t\"ctrl+l\": \"\\x0c\",\n\t\"ctrl+u\": \"\\x15\",\n\t\"ctrl+a\": \"\\x01\",\n\t\"ctrl+e\": \"\\x05\",\n\t\"ctrl+\\\\\": \"\\x1c\",\n};\n\n/** Resolve a single named key to its PTY byte sequence, or null when unknown. */\nexport function resolveKeySequence(key: string): string | null {\n\tconst normalized = key.trim().toLowerCase();\n\tif (normalized.length === 0) return null;\n\tconst mapped = KEY_SEQUENCES[normalized];\n\tif (mapped !== undefined) return mapped;\n\t// Single printable character passes through verbatim.\n\tif ([...normalized].length === 1) return key;\n\treturn null;\n}\n\n/** Build a PTY-ready payload from a list of named keys, returning the unknown keys too. */\nexport function encodeKeys(keys: readonly string[]): { data: string; unknown: string[] } {\n\tlet data = \"\";\n\tconst unknown: string[] = [];\n\tfor (const key of keys) {\n\t\tconst sequence = resolveKeySequence(key);\n\t\tif (sequence === null) unknown.push(key);\n\t\telse data += sequence;\n\t}\n\treturn { data, unknown };\n}\n\n/** Compile a user-supplied regex, tolerating invalid patterns by returning null. */\nexport function safeRegExp(pattern: string): RegExp | null {\n\ttry {\n\t\treturn new RegExp(pattern);\n\t} catch {\n\t\treturn null;\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/terminal/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,EAAe,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAc,MAAM,cAAc,CAAC;AAG1G,eAAO,MAAM,aAAa;;;;;;;EAiBxB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AAoExD,mDAAmD;AACnD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB;;;;;;;;;;;;;yBAS1C,MAAM,SACZ,YAAY,WACV,WAAW,cACR,OAAO,YACT;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACxB,OAAO,CAAC,kBAAkB,CAAC;EAQ/B"}
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/terminal/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAS5C,OAAO,EAAe,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAc,MAAM,cAAc,CAAC;AAG1G,eAAO,MAAM,aAAa;;;;;;;EAiBxB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AAsIxD,mDAAmD;AACnD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB;;;;;;;;;;;;;yBAS1C,MAAM,SACZ,YAAY,WACV,WAAW,cACR,OAAO,YACT;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACxB,OAAO,CAAC,kBAAkB,CAAC;EAQ/B"}
@@ -1,5 +1,5 @@
1
1
  import { Type } from "typebox";
2
- import { BACKGROUND_START_GRACE_MS, DEFAULT_COLS, DEFAULT_ROWS, TERMINAL_BASH_TOOL } from "../shared.js";
2
+ import { BACKGROUND_START_GRACE_MS, DEFAULT_COLS, DEFAULT_ROWS, KILLED_SESSION_EXIT_GRACE_MS, TERMINAL_BASH_TOOL, } from "../shared.js";
3
3
  import { errorResult, textResult } from "./context.js";
4
4
  import { describeExit, spawnCommandSession } from "./spawn.js";
5
5
  export const ptyBashSchema = Type.Object({
@@ -22,28 +22,90 @@ function resolveDimension(value, fallback) {
22
22
  function delay(ms) {
23
23
  return new Promise((resolve) => setTimeout(resolve, ms));
24
24
  }
25
+ const MAX_TIMEOUT_MS = 2_147_483_647;
26
+ /**
27
+ * Wait for the session's exit to settle, but stop waiting a bounded grace after
28
+ * the session has been killed. The native wait joins the PTY reader thread,
29
+ * which blocks while any surviving descendant holds the PTY open — without the
30
+ * grace, an aborted or timed-out command can pin the agent forever.
31
+ */
32
+ function raceExitWithKillGrace(runtime, signal, timeoutMs) {
33
+ return new Promise((resolve, reject) => {
34
+ let settled = false;
35
+ let abortGraceTimer;
36
+ let timeoutGraceTimer;
37
+ let armAbortGrace;
38
+ const settle = (finish) => {
39
+ if (settled)
40
+ return;
41
+ settled = true;
42
+ if (abortGraceTimer)
43
+ clearTimeout(abortGraceTimer);
44
+ if (timeoutGraceTimer)
45
+ clearTimeout(timeoutGraceTimer);
46
+ if (signal && armAbortGrace)
47
+ signal.removeEventListener("abort", armAbortGrace);
48
+ finish();
49
+ };
50
+ runtime.session.waitExit().then(() => settle(() => resolve("exited")), (error) => settle(() => reject(error instanceof Error ? error : new Error(String(error)))));
51
+ if (timeoutMs !== undefined) {
52
+ const timeoutGraceDeadlineMs = timeoutMs + KILLED_SESSION_EXIT_GRACE_MS;
53
+ // Beyond the 32-bit setTimeout range the deadline cannot be represented;
54
+ // keep the unbounded wait rather than firing a false early timeout.
55
+ if (timeoutGraceDeadlineMs <= MAX_TIMEOUT_MS) {
56
+ timeoutGraceTimer = setTimeout(() => settle(() => resolve("timeout_grace")), timeoutGraceDeadlineMs);
57
+ }
58
+ }
59
+ if (signal) {
60
+ armAbortGrace = () => {
61
+ abortGraceTimer ??= setTimeout(() => settle(() => resolve("abort_grace")), KILLED_SESSION_EXIT_GRACE_MS);
62
+ };
63
+ if (signal.aborted)
64
+ armAbortGrace();
65
+ else
66
+ signal.addEventListener("abort", armAbortGrace, { once: true });
67
+ }
68
+ });
69
+ }
25
70
  async function runForeground(ctx, input, cols, rows, signal, cwd) {
71
+ if (signal?.aborted)
72
+ return errorResult("Command aborted");
26
73
  const timeoutMs = input.timeout !== undefined ? Math.trunc(input.timeout * 1000) : undefined;
27
- const { runtime } = await spawnCommandSession(ctx, { command: input.command, cols, rows, timeoutMs, cwd });
28
- const onAbort = () => runtime.session.kill();
74
+ const { id, runtime } = await spawnCommandSession(ctx, { command: input.command, cols, rows, timeoutMs, cwd });
75
+ // Interrupt means "stop now": SIGKILL the whole process group in one shot.
76
+ // kill() is one-shot idempotent, so a gentle SIGTERM first would block any
77
+ // escalation, and a SIGTERM-ignoring command would pin the agent forever.
78
+ const onAbort = () => runtime.session.kill("SIGKILL");
29
79
  if (signal) {
30
80
  if (signal.aborted)
31
81
  onAbort();
32
82
  else
33
83
  signal.addEventListener("abort", onAbort, { once: true });
34
84
  }
85
+ let outcome;
35
86
  try {
36
- await runtime.session.waitExit();
87
+ outcome = await raceExitWithKillGrace(runtime, signal, timeoutMs);
37
88
  }
38
89
  finally {
39
90
  signal?.removeEventListener("abort", onAbort);
40
91
  }
92
+ if (outcome !== "exited") {
93
+ // Sweep the never-settling session: the bounded registry stop marks it
94
+ // `stopping`, so later /exit teardown cannot hang on its exit wait.
95
+ void ctx.manager.stop(id).catch(() => { });
96
+ }
41
97
  const output = runtime.fullOutput().trimEnd();
42
- const status = describeExit(runtime);
98
+ // Aborted runs report "Command aborted" (core bash parity) whether the exit
99
+ // settled normally or the kill grace released the wait. `outcome` matters
100
+ // beyond that only for the timeout grace, where exitResult is still null.
101
+ if (signal?.aborted) {
102
+ return errorResult(`${output ? `${output}\n\n` : ""}Command aborted`);
103
+ }
43
104
  const exit = runtime.exitResult;
44
- if (exit?.timedOut) {
105
+ if (outcome === "timeout_grace" || exit?.timedOut) {
45
106
  return errorResult(`${output ? `${output}\n\n` : ""}Command timed out after ${input.timeout} seconds`);
46
107
  }
108
+ const status = describeExit(runtime);
47
109
  if (exit && exit.exitCode !== 0 && exit.exitCode !== null) {
48
110
  return errorResult(`${output ? `${output}\n\n` : ""}Command exited with code ${exit.exitCode}`);
49
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/terminal/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,IAAI,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACzG,OAAO,EAAE,WAAW,EAAqD,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mDAAmD,EAAE,CAAC;IAC1F,OAAO,EAAE,IAAI,CAAC,QAAQ,CACrB,IAAI,CAAC,MAAM,CAAC;QACX,WAAW,EACV,kHAAkH;KACnH,CAAC,CACF;IACD,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,8CAA8C,EAAE,CAAC,CAAC;IACxG,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAC/B,IAAI,CAAC,OAAO,CAAC;QACZ,WAAW,EACV,oJAAoJ;KACrJ,CAAC,CACF;IACD,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC,CAAC;IACxF,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC,CAAC;CACrF,CAAC,CAAC;AAIH,SAAS,gBAAgB,CAAC,KAAyB,EAAE,QAAgB;IACpE,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IACjF,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,aAAa,CAC3B,GAAwB,EACxB,KAAmB,EACnB,IAAY,EACZ,IAAY,EACZ,MAA+B,EAC/B,GAAuB;IAEvB,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3G,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC7C,IAAI,MAAM,EAAE,CAAC;QACZ,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;;YACzB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAClC,CAAC;YAAS,CAAC;QACV,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;IAChC,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,2BAA2B,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;IACxG,CAAC;IACD,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC3D,OAAO,WAAW,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,4BAA4B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,IAAI,aAAa,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,aAAa,CAC3B,GAAwB,EACxB,KAAmB,EACnB,IAAY,EACZ,IAAY,EACZ,GAAuB;IAEvB,yFAAyF;IACzF,kFAAkF;IAClF,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACpG,IAAI,GAAG,CAAC,gBAAgB;QAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5F,kFAAkF;IAClF,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACnF,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,0CAA0C,EAAE,EAAE,CAAC;IAC9D,MAAM,WAAW,GAChB,OAAO,CAAC,OAAO,KAAK,eAAe;QAClC,CAAC,CAAC,6FAA6F;QAC/F,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,OAAO,UAAU,CAAC,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3G,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,iBAAiB,CAAC,GAAwB;IACzD,OAAO;QACN,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,MAAM;QACb,WAAW,EACV,mQAAmQ;QACpQ,aAAa,EAAE,oFAAoF;QACnG,UAAU,EAAE,aAAa;QACzB,KAAK,CAAC,OAAO,CACZ,WAAmB,EACnB,KAAmB,EACnB,MAAoB,EACpB,SAAmB,EACnB,OAA0B;YAE1B,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,IAAI,YAAY,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,IAAI,YAAY,CAAC,CAAC;YAC3E,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,CAAC;YACzB,IAAI,KAAK,CAAC,iBAAiB;gBAAE,OAAO,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAC/E,OAAO,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;KACD,CAAC;AACH,CAAC","sourcesContent":["import { type Static, Type } from \"typebox\";\nimport { BACKGROUND_START_GRACE_MS, DEFAULT_COLS, DEFAULT_ROWS, TERMINAL_BASH_TOOL } from \"../shared.ts\";\nimport { errorResult, type TerminalToolContext, type TerminalToolResult, textResult } from \"./context.ts\";\nimport { describeExit, spawnCommandSession } from \"./spawn.ts\";\n\nexport const ptyBashSchema = Type.Object({\n\tcommand: Type.String({ description: \"Shell command to execute in a PTY-backed session.\" }),\n\ttimeout: Type.Optional(\n\t\tType.Number({\n\t\t\tdescription:\n\t\t\t\t\"Foreground kill deadline in seconds. Ignored for run_in_background sessions (they live until exit or kill_bash).\",\n\t\t}),\n\t),\n\tdescription: Type.Optional(Type.String({ description: \"Short human-readable label for this command.\" })),\n\trun_in_background: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription:\n\t\t\t\t\"Run as a persistent background session. Returns a bash_id immediately; query it with bash_output, steer with bash_input, tear down with kill_bash.\",\n\t\t}),\n\t),\n\tcols: Type.Optional(Type.Number({ description: \"PTY width in columns (default 120).\" })),\n\trows: Type.Optional(Type.Number({ description: \"PTY height in rows (default 40).\" })),\n});\n\nexport type PtyBashInput = Static<typeof ptyBashSchema>;\n\nfunction resolveDimension(value: number | undefined, fallback: number): number {\n\tif (value === undefined || !Number.isFinite(value) || value < 1) return fallback;\n\treturn Math.trunc(value);\n}\n\nfunction delay(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function runForeground(\n\tctx: TerminalToolContext,\n\tinput: PtyBashInput,\n\tcols: number,\n\trows: number,\n\tsignal: AbortSignal | undefined,\n\tcwd: string | undefined,\n): Promise<TerminalToolResult> {\n\tconst timeoutMs = input.timeout !== undefined ? Math.trunc(input.timeout * 1000) : undefined;\n\tconst { runtime } = await spawnCommandSession(ctx, { command: input.command, cols, rows, timeoutMs, cwd });\n\tconst onAbort = () => runtime.session.kill();\n\tif (signal) {\n\t\tif (signal.aborted) onAbort();\n\t\telse signal.addEventListener(\"abort\", onAbort, { once: true });\n\t}\n\ttry {\n\t\tawait runtime.session.waitExit();\n\t} finally {\n\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t}\n\n\tconst output = runtime.fullOutput().trimEnd();\n\tconst status = describeExit(runtime);\n\tconst exit = runtime.exitResult;\n\tif (exit?.timedOut) {\n\t\treturn errorResult(`${output ? `${output}\\n\\n` : \"\"}Command timed out after ${input.timeout} seconds`);\n\t}\n\tif (exit && exit.exitCode !== 0 && exit.exitCode !== null) {\n\t\treturn errorResult(`${output ? `${output}\\n\\n` : \"\"}Command exited with code ${exit.exitCode}`);\n\t}\n\treturn textResult(output || \"(no output)\", { details: { status } });\n}\n\nasync function runBackground(\n\tctx: TerminalToolContext,\n\tinput: PtyBashInput,\n\tcols: number,\n\trows: number,\n\tcwd: string | undefined,\n): Promise<TerminalToolResult> {\n\t// Background sessions are NEVER killed by `timeout` (bash-timeout injects a default into\n\t// every bash call); they live until exit or kill_bash, so no timeoutMs is passed.\n\tconst { id, runtime } = await spawnCommandSession(ctx, { command: input.command, cols, rows, cwd });\n\tif (ctx.onBackgroundExit) runtime.session.onExit(() => ctx.onBackgroundExit?.(id, runtime));\n\n\t// Capture any output the command emits within a short grace window (or its exit).\n\tawait Promise.race([delay(BACKGROUND_START_GRACE_MS), runtime.session.waitExit()]);\n\tconst early = runtime.readDelta().text.trimEnd();\n\tconst header = `Command running in background with ID: ${id}`;\n\tconst backendNote =\n\t\truntime.backend === \"pipe-fallback\"\n\t\t\t? \"\\n(native PTY unavailable — running via pipe fallback; bash_input/bash_resize are limited.)\"\n\t\t\t: \"\";\n\tconst earlyBlock = early ? `\\n\\n${early}` : \"\";\n\treturn textResult(`${header}${backendNote}${earlyBlock}`, { details: { bash_id: id, background: true } });\n}\n\n/** Build the PTY-backed `bash` tool definition. */\nexport function createPtyBashTool(ctx: TerminalToolContext) {\n\treturn {\n\t\tname: TERMINAL_BASH_TOOL,\n\t\tlabel: \"bash\",\n\t\tdescription:\n\t\t\t\"Execute a shell command in a persistent PTY-backed session. Set run_in_background:true for long-lived or interactive sessions; steer them with bash_input, snapshot with bash_output, tear down with kill_bash. Foreground timeout is a kill deadline in seconds.\",\n\t\tpromptSnippet: \"Run shell commands; run_in_background:true for long-lived/interactive PTY sessions\",\n\t\tparameters: ptyBashSchema,\n\t\tasync execute(\n\t\t\t_toolCallId: string,\n\t\t\tinput: PtyBashInput,\n\t\t\tsignal?: AbortSignal,\n\t\t\t_onUpdate?: unknown,\n\t\t\texecCtx?: { cwd?: string },\n\t\t): Promise<TerminalToolResult> {\n\t\t\tconst cols = resolveDimension(input.cols, ctx.defaultCols || DEFAULT_COLS);\n\t\t\tconst rows = resolveDimension(input.rows, ctx.defaultRows || DEFAULT_ROWS);\n\t\t\tconst cwd = execCtx?.cwd;\n\t\t\tif (input.run_in_background) return runBackground(ctx, input, cols, rows, cwd);\n\t\t\treturn runForeground(ctx, input, cols, rows, signal, cwd);\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/terminal/tools/bash.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Static, Type } from \"typebox\";\nimport type { TerminalRuntimeSession } from \"../runtime-session.ts\";\nimport {\n\tBACKGROUND_START_GRACE_MS,\n\tDEFAULT_COLS,\n\tDEFAULT_ROWS,\n\tKILLED_SESSION_EXIT_GRACE_MS,\n\tTERMINAL_BASH_TOOL,\n} from \"../shared.ts\";\nimport { errorResult, type TerminalToolContext, type TerminalToolResult, textResult } from \"./context.ts\";\nimport { describeExit, spawnCommandSession } from \"./spawn.ts\";\n\nexport const ptyBashSchema = Type.Object({\n\tcommand: Type.String({ description: \"Shell command to execute in a PTY-backed session.\" }),\n\ttimeout: Type.Optional(\n\t\tType.Number({\n\t\t\tdescription:\n\t\t\t\t\"Foreground kill deadline in seconds. Ignored for run_in_background sessions (they live until exit or kill_bash).\",\n\t\t}),\n\t),\n\tdescription: Type.Optional(Type.String({ description: \"Short human-readable label for this command.\" })),\n\trun_in_background: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription:\n\t\t\t\t\"Run as a persistent background session. Returns a bash_id immediately; query it with bash_output, steer with bash_input, tear down with kill_bash.\",\n\t\t}),\n\t),\n\tcols: Type.Optional(Type.Number({ description: \"PTY width in columns (default 120).\" })),\n\trows: Type.Optional(Type.Number({ description: \"PTY height in rows (default 40).\" })),\n});\n\nexport type PtyBashInput = Static<typeof ptyBashSchema>;\n\nfunction resolveDimension(value: number | undefined, fallback: number): number {\n\tif (value === undefined || !Number.isFinite(value) || value < 1) return fallback;\n\treturn Math.trunc(value);\n}\n\nfunction delay(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nconst MAX_TIMEOUT_MS = 2_147_483_647;\n\ntype ForegroundWaitOutcome = \"exited\" | \"abort_grace\" | \"timeout_grace\";\n\n/**\n * Wait for the session's exit to settle, but stop waiting a bounded grace after\n * the session has been killed. The native wait joins the PTY reader thread,\n * which blocks while any surviving descendant holds the PTY open — without the\n * grace, an aborted or timed-out command can pin the agent forever.\n */\nfunction raceExitWithKillGrace(\n\truntime: TerminalRuntimeSession,\n\tsignal: AbortSignal | undefined,\n\ttimeoutMs: number | undefined,\n): Promise<ForegroundWaitOutcome> {\n\treturn new Promise((resolve, reject) => {\n\t\tlet settled = false;\n\t\tlet abortGraceTimer: ReturnType<typeof setTimeout> | undefined;\n\t\tlet timeoutGraceTimer: ReturnType<typeof setTimeout> | undefined;\n\t\tlet armAbortGrace: (() => void) | undefined;\n\t\tconst settle = (finish: () => void) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tif (abortGraceTimer) clearTimeout(abortGraceTimer);\n\t\t\tif (timeoutGraceTimer) clearTimeout(timeoutGraceTimer);\n\t\t\tif (signal && armAbortGrace) signal.removeEventListener(\"abort\", armAbortGrace);\n\t\t\tfinish();\n\t\t};\n\t\truntime.session.waitExit().then(\n\t\t\t() => settle(() => resolve(\"exited\")),\n\t\t\t(error: unknown) => settle(() => reject(error instanceof Error ? error : new Error(String(error)))),\n\t\t);\n\t\tif (timeoutMs !== undefined) {\n\t\t\tconst timeoutGraceDeadlineMs = timeoutMs + KILLED_SESSION_EXIT_GRACE_MS;\n\t\t\t// Beyond the 32-bit setTimeout range the deadline cannot be represented;\n\t\t\t// keep the unbounded wait rather than firing a false early timeout.\n\t\t\tif (timeoutGraceDeadlineMs <= MAX_TIMEOUT_MS) {\n\t\t\t\ttimeoutGraceTimer = setTimeout(() => settle(() => resolve(\"timeout_grace\")), timeoutGraceDeadlineMs);\n\t\t\t}\n\t\t}\n\t\tif (signal) {\n\t\t\tarmAbortGrace = () => {\n\t\t\t\tabortGraceTimer ??= setTimeout(() => settle(() => resolve(\"abort_grace\")), KILLED_SESSION_EXIT_GRACE_MS);\n\t\t\t};\n\t\t\tif (signal.aborted) armAbortGrace();\n\t\t\telse signal.addEventListener(\"abort\", armAbortGrace, { once: true });\n\t\t}\n\t});\n}\n\nasync function runForeground(\n\tctx: TerminalToolContext,\n\tinput: PtyBashInput,\n\tcols: number,\n\trows: number,\n\tsignal: AbortSignal | undefined,\n\tcwd: string | undefined,\n): Promise<TerminalToolResult> {\n\tif (signal?.aborted) return errorResult(\"Command aborted\");\n\tconst timeoutMs = input.timeout !== undefined ? Math.trunc(input.timeout * 1000) : undefined;\n\tconst { id, runtime } = await spawnCommandSession(ctx, { command: input.command, cols, rows, timeoutMs, cwd });\n\t// Interrupt means \"stop now\": SIGKILL the whole process group in one shot.\n\t// kill() is one-shot idempotent, so a gentle SIGTERM first would block any\n\t// escalation, and a SIGTERM-ignoring command would pin the agent forever.\n\tconst onAbort = () => runtime.session.kill(\"SIGKILL\");\n\tif (signal) {\n\t\tif (signal.aborted) onAbort();\n\t\telse signal.addEventListener(\"abort\", onAbort, { once: true });\n\t}\n\tlet outcome: ForegroundWaitOutcome;\n\ttry {\n\t\toutcome = await raceExitWithKillGrace(runtime, signal, timeoutMs);\n\t} finally {\n\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t}\n\n\tif (outcome !== \"exited\") {\n\t\t// Sweep the never-settling session: the bounded registry stop marks it\n\t\t// `stopping`, so later /exit teardown cannot hang on its exit wait.\n\t\tvoid ctx.manager.stop(id).catch(() => {});\n\t}\n\tconst output = runtime.fullOutput().trimEnd();\n\t// Aborted runs report \"Command aborted\" (core bash parity) whether the exit\n\t// settled normally or the kill grace released the wait. `outcome` matters\n\t// beyond that only for the timeout grace, where exitResult is still null.\n\tif (signal?.aborted) {\n\t\treturn errorResult(`${output ? `${output}\\n\\n` : \"\"}Command aborted`);\n\t}\n\tconst exit = runtime.exitResult;\n\tif (outcome === \"timeout_grace\" || exit?.timedOut) {\n\t\treturn errorResult(`${output ? `${output}\\n\\n` : \"\"}Command timed out after ${input.timeout} seconds`);\n\t}\n\tconst status = describeExit(runtime);\n\tif (exit && exit.exitCode !== 0 && exit.exitCode !== null) {\n\t\treturn errorResult(`${output ? `${output}\\n\\n` : \"\"}Command exited with code ${exit.exitCode}`);\n\t}\n\treturn textResult(output || \"(no output)\", { details: { status } });\n}\n\nasync function runBackground(\n\tctx: TerminalToolContext,\n\tinput: PtyBashInput,\n\tcols: number,\n\trows: number,\n\tcwd: string | undefined,\n): Promise<TerminalToolResult> {\n\t// Background sessions are NEVER killed by `timeout` (bash-timeout injects a default into\n\t// every bash call); they live until exit or kill_bash, so no timeoutMs is passed.\n\tconst { id, runtime } = await spawnCommandSession(ctx, { command: input.command, cols, rows, cwd });\n\tif (ctx.onBackgroundExit) runtime.session.onExit(() => ctx.onBackgroundExit?.(id, runtime));\n\n\t// Capture any output the command emits within a short grace window (or its exit).\n\tawait Promise.race([delay(BACKGROUND_START_GRACE_MS), runtime.session.waitExit()]);\n\tconst early = runtime.readDelta().text.trimEnd();\n\tconst header = `Command running in background with ID: ${id}`;\n\tconst backendNote =\n\t\truntime.backend === \"pipe-fallback\"\n\t\t\t? \"\\n(native PTY unavailable — running via pipe fallback; bash_input/bash_resize are limited.)\"\n\t\t\t: \"\";\n\tconst earlyBlock = early ? `\\n\\n${early}` : \"\";\n\treturn textResult(`${header}${backendNote}${earlyBlock}`, { details: { bash_id: id, background: true } });\n}\n\n/** Build the PTY-backed `bash` tool definition. */\nexport function createPtyBashTool(ctx: TerminalToolContext) {\n\treturn {\n\t\tname: TERMINAL_BASH_TOOL,\n\t\tlabel: \"bash\",\n\t\tdescription:\n\t\t\t\"Execute a shell command in a persistent PTY-backed session. Set run_in_background:true for long-lived or interactive sessions; steer them with bash_input, snapshot with bash_output, tear down with kill_bash. Foreground timeout is a kill deadline in seconds.\",\n\t\tpromptSnippet: \"Run shell commands; run_in_background:true for long-lived/interactive PTY sessions\",\n\t\tparameters: ptyBashSchema,\n\t\tasync execute(\n\t\t\t_toolCallId: string,\n\t\t\tinput: PtyBashInput,\n\t\t\tsignal?: AbortSignal,\n\t\t\t_onUpdate?: unknown,\n\t\t\texecCtx?: { cwd?: string },\n\t\t): Promise<TerminalToolResult> {\n\t\t\tconst cols = resolveDimension(input.cols, ctx.defaultCols || DEFAULT_COLS);\n\t\t\tconst rows = resolveDimension(input.rows, ctx.defaultRows || DEFAULT_ROWS);\n\t\t\tconst cwd = execCtx?.cwd;\n\t\t\tif (input.run_in_background) return runBackground(ctx, input, cols, rows, cwd);\n\t\t\treturn runForeground(ctx, input, cols, rows, signal, cwd);\n\t\t},\n\t};\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import type { ExtensionAPI, ExtensionContext } from "../../types.ts";
2
+ import { type TodoItem, type TodoPhase } from "./state.ts";
3
+ export type TodoCommandAccessors = {
4
+ getCurrentPhases: () => TodoPhase[];
5
+ setCurrentPhases: (phases: TodoPhase[]) => void;
6
+ syncWidget: (ctx: ExtensionContext) => void;
7
+ };
8
+ /** Tokenizer honoring double-quoted strings and backslash escapes. */
9
+ export declare function tokenizeTodoArgs(input: string): string[];
10
+ /** Exact name first, then unique prefix, then unique substring (case-insensitive). */
11
+ export declare function findPhaseFuzzy(phases: TodoPhase[], query: string): TodoPhase | undefined;
12
+ /** Exact content first, then unique substring; ambiguity resolved toward open work. */
13
+ export declare function findTaskFuzzy(phases: TodoPhase[], query: string): {
14
+ task: TodoItem;
15
+ phase: TodoPhase;
16
+ } | undefined;
17
+ export declare function registerTodoCommand(pi: ExtensionAPI, accessors: TodoCommandAccessors): void;
18
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/todotools/commands.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAA2B,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE9F,OAAO,EAKN,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,MAAM,YAAY,CAAC;AAkBpB,MAAM,MAAM,oBAAoB,GAAG;IAClC,gBAAgB,EAAE,MAAM,SAAS,EAAE,CAAC;IACpC,gBAAgB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IAChD,UAAU,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA0BxD;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAUxF;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAAG,SAAS,CAkBlH;AA8BD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAmS3F"}