@code-yeongyu/senpi 2026.6.14 → 2026.6.16

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 (317) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/dist/core/compaction/compaction.d.ts.map +1 -1
  3. package/dist/core/compaction/compaction.js +5 -0
  4. package/dist/core/compaction/compaction.js.map +1 -1
  5. package/dist/core/extensions/builtin/bash-timeout/index.d.ts.map +1 -1
  6. package/dist/core/extensions/builtin/bash-timeout/index.js +3 -1
  7. package/dist/core/extensions/builtin/bash-timeout/index.js.map +1 -1
  8. package/dist/core/extensions/builtin/bash-timeout/timeout.js +2 -2
  9. package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
  10. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  11. package/dist/core/extensions/builtin/compaction/speculative.js +24 -12
  12. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  13. package/dist/core/extensions/builtin/goal/command.d.ts +14 -0
  14. package/dist/core/extensions/builtin/goal/command.d.ts.map +1 -0
  15. package/dist/core/extensions/builtin/goal/command.js +16 -0
  16. package/dist/core/extensions/builtin/goal/command.js.map +1 -0
  17. package/dist/core/extensions/builtin/goal/continuation.d.ts +4 -0
  18. package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -0
  19. package/dist/core/extensions/builtin/goal/continuation.js +7 -0
  20. package/dist/core/extensions/builtin/goal/continuation.js.map +1 -0
  21. package/dist/core/extensions/builtin/goal/errors.d.ts +13 -0
  22. package/dist/core/extensions/builtin/goal/errors.d.ts.map +1 -0
  23. package/dist/core/extensions/builtin/goal/errors.js +25 -0
  24. package/dist/core/extensions/builtin/goal/errors.js.map +1 -0
  25. package/dist/core/extensions/builtin/goal/format.d.ts +8 -0
  26. package/dist/core/extensions/builtin/goal/format.d.ts.map +1 -0
  27. package/dist/core/extensions/builtin/goal/format.js +71 -0
  28. package/dist/core/extensions/builtin/goal/format.js.map +1 -0
  29. package/dist/core/extensions/builtin/goal/index.d.ts +3 -0
  30. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -0
  31. package/dist/core/extensions/builtin/goal/index.js +322 -0
  32. package/dist/core/extensions/builtin/goal/index.js.map +1 -0
  33. package/dist/core/extensions/builtin/goal/prompt.d.ts +3 -0
  34. package/dist/core/extensions/builtin/goal/prompt.d.ts.map +1 -0
  35. package/dist/core/extensions/builtin/goal/prompt.js +34 -0
  36. package/dist/core/extensions/builtin/goal/prompt.js.map +1 -0
  37. package/dist/core/extensions/builtin/goal/store.d.ts +9 -0
  38. package/dist/core/extensions/builtin/goal/store.d.ts.map +1 -0
  39. package/dist/core/extensions/builtin/goal/store.js +173 -0
  40. package/dist/core/extensions/builtin/goal/store.js.map +1 -0
  41. package/dist/core/extensions/builtin/goal/types.d.ts +50 -0
  42. package/dist/core/extensions/builtin/goal/types.d.ts.map +1 -0
  43. package/dist/core/extensions/builtin/goal/types.js +6 -0
  44. package/dist/core/extensions/builtin/goal/types.js.map +1 -0
  45. package/dist/core/extensions/builtin/goal/ui.d.ts +6 -0
  46. package/dist/core/extensions/builtin/goal/ui.d.ts.map +1 -0
  47. package/dist/core/extensions/builtin/goal/ui.js +20 -0
  48. package/dist/core/extensions/builtin/goal/ui.js.map +1 -0
  49. package/dist/core/extensions/builtin/goal/validation.d.ts +3 -0
  50. package/dist/core/extensions/builtin/goal/validation.d.ts.map +1 -0
  51. package/dist/core/extensions/builtin/goal/validation.js +13 -0
  52. package/dist/core/extensions/builtin/goal/validation.js.map +1 -0
  53. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  54. package/dist/core/extensions/builtin/index.js +10 -2
  55. package/dist/core/extensions/builtin/index.js.map +1 -1
  56. package/dist/core/extensions/builtin/nested-agents-md/core/containment.d.ts +10 -0
  57. package/dist/core/extensions/builtin/nested-agents-md/core/containment.d.ts.map +1 -0
  58. package/dist/core/extensions/builtin/nested-agents-md/core/containment.js +23 -0
  59. package/dist/core/extensions/builtin/nested-agents-md/core/containment.js.map +1 -0
  60. package/dist/core/extensions/builtin/nested-agents-md/core/errors.d.ts +5 -0
  61. package/dist/core/extensions/builtin/nested-agents-md/core/errors.d.ts.map +1 -0
  62. package/dist/core/extensions/builtin/nested-agents-md/core/errors.js +9 -0
  63. package/dist/core/extensions/builtin/nested-agents-md/core/errors.js.map +1 -0
  64. package/dist/core/extensions/builtin/nested-agents-md/core/find-agents-md-up.d.ts +7 -0
  65. package/dist/core/extensions/builtin/nested-agents-md/core/find-agents-md-up.d.ts.map +1 -0
  66. package/dist/core/extensions/builtin/nested-agents-md/core/find-agents-md-up.js +44 -0
  67. package/dist/core/extensions/builtin/nested-agents-md/core/find-agents-md-up.js.map +1 -0
  68. package/dist/core/extensions/builtin/nested-agents-md/core/format.d.ts +7 -0
  69. package/dist/core/extensions/builtin/nested-agents-md/core/format.d.ts.map +1 -0
  70. package/dist/core/extensions/builtin/nested-agents-md/core/format.js +7 -0
  71. package/dist/core/extensions/builtin/nested-agents-md/core/format.js.map +1 -0
  72. package/dist/core/extensions/builtin/nested-agents-md/core/inject-directory-context.d.ts +11 -0
  73. package/dist/core/extensions/builtin/nested-agents-md/core/inject-directory-context.d.ts.map +1 -0
  74. package/dist/core/extensions/builtin/nested-agents-md/core/inject-directory-context.js +77 -0
  75. package/dist/core/extensions/builtin/nested-agents-md/core/inject-directory-context.js.map +1 -0
  76. package/dist/core/extensions/builtin/nested-agents-md/core/injection-cache.d.ts +11 -0
  77. package/dist/core/extensions/builtin/nested-agents-md/core/injection-cache.d.ts.map +1 -0
  78. package/dist/core/extensions/builtin/nested-agents-md/core/injection-cache.js +33 -0
  79. package/dist/core/extensions/builtin/nested-agents-md/core/injection-cache.js.map +1 -0
  80. package/dist/core/extensions/builtin/nested-agents-md/core/session-key.d.ts +8 -0
  81. package/dist/core/extensions/builtin/nested-agents-md/core/session-key.d.ts.map +1 -0
  82. package/dist/core/extensions/builtin/nested-agents-md/core/session-key.js +8 -0
  83. package/dist/core/extensions/builtin/nested-agents-md/core/session-key.js.map +1 -0
  84. package/dist/core/extensions/builtin/nested-agents-md/core/truncate.d.ts +8 -0
  85. package/dist/core/extensions/builtin/nested-agents-md/core/truncate.d.ts.map +1 -0
  86. package/dist/core/extensions/builtin/nested-agents-md/core/truncate.js +26 -0
  87. package/dist/core/extensions/builtin/nested-agents-md/core/truncate.js.map +1 -0
  88. package/dist/core/extensions/builtin/nested-agents-md/core/types.d.ts +25 -0
  89. package/dist/core/extensions/builtin/nested-agents-md/core/types.d.ts.map +1 -0
  90. package/dist/core/extensions/builtin/nested-agents-md/core/types.js +4 -0
  91. package/dist/core/extensions/builtin/nested-agents-md/core/types.js.map +1 -0
  92. package/dist/core/extensions/builtin/nested-agents-md/index.d.ts +3 -0
  93. package/dist/core/extensions/builtin/nested-agents-md/index.d.ts.map +1 -0
  94. package/dist/core/extensions/builtin/nested-agents-md/index.js +102 -0
  95. package/dist/core/extensions/builtin/nested-agents-md/index.js.map +1 -0
  96. package/dist/core/extensions/builtin/nested-agents-md/ui/reporter.d.ts +32 -0
  97. package/dist/core/extensions/builtin/nested-agents-md/ui/reporter.d.ts.map +1 -0
  98. package/dist/core/extensions/builtin/nested-agents-md/ui/reporter.js +66 -0
  99. package/dist/core/extensions/builtin/nested-agents-md/ui/reporter.js.map +1 -0
  100. package/dist/core/extensions/builtin/prompt-preset/presets.js +2 -2
  101. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  102. package/dist/core/extensions/builtin/rules/commands.d.ts +4 -0
  103. package/dist/core/extensions/builtin/rules/commands.d.ts.map +1 -0
  104. package/dist/core/extensions/builtin/rules/commands.js +87 -0
  105. package/dist/core/extensions/builtin/rules/commands.js.map +1 -0
  106. package/dist/core/extensions/builtin/rules/index.d.ts +3 -0
  107. package/dist/core/extensions/builtin/rules/index.d.ts.map +1 -0
  108. package/dist/core/extensions/builtin/rules/index.js +127 -0
  109. package/dist/core/extensions/builtin/rules/index.js.map +1 -0
  110. package/dist/core/extensions/builtin/rules/rules/cache.d.ts +10 -0
  111. package/dist/core/extensions/builtin/rules/rules/cache.d.ts.map +1 -0
  112. package/dist/core/extensions/builtin/rules/rules/cache.js +51 -0
  113. package/dist/core/extensions/builtin/rules/rules/cache.js.map +1 -0
  114. package/dist/core/extensions/builtin/rules/rules/constants.d.ts +57 -0
  115. package/dist/core/extensions/builtin/rules/rules/constants.d.ts.map +1 -0
  116. package/dist/core/extensions/builtin/rules/rules/constants.js +96 -0
  117. package/dist/core/extensions/builtin/rules/rules/constants.js.map +1 -0
  118. package/dist/core/extensions/builtin/rules/rules/engine.d.ts +67 -0
  119. package/dist/core/extensions/builtin/rules/rules/engine.d.ts.map +1 -0
  120. package/dist/core/extensions/builtin/rules/rules/engine.js +443 -0
  121. package/dist/core/extensions/builtin/rules/rules/engine.js.map +1 -0
  122. package/dist/core/extensions/builtin/rules/rules/errors.d.ts +7 -0
  123. package/dist/core/extensions/builtin/rules/rules/errors.d.ts.map +1 -0
  124. package/dist/core/extensions/builtin/rules/rules/errors.js +13 -0
  125. package/dist/core/extensions/builtin/rules/rules/errors.js.map +1 -0
  126. package/dist/core/extensions/builtin/rules/rules/finder.d.ts +27 -0
  127. package/dist/core/extensions/builtin/rules/rules/finder.d.ts.map +1 -0
  128. package/dist/core/extensions/builtin/rules/rules/finder.js +241 -0
  129. package/dist/core/extensions/builtin/rules/rules/finder.js.map +1 -0
  130. package/dist/core/extensions/builtin/rules/rules/formatter.d.ts +8 -0
  131. package/dist/core/extensions/builtin/rules/rules/formatter.d.ts.map +1 -0
  132. package/dist/core/extensions/builtin/rules/rules/formatter.js +44 -0
  133. package/dist/core/extensions/builtin/rules/rules/formatter.js.map +1 -0
  134. package/dist/core/extensions/builtin/rules/rules/matcher.d.ts +25 -0
  135. package/dist/core/extensions/builtin/rules/rules/matcher.d.ts.map +1 -0
  136. package/dist/core/extensions/builtin/rules/rules/matcher.js +107 -0
  137. package/dist/core/extensions/builtin/rules/rules/matcher.js.map +1 -0
  138. package/dist/core/extensions/builtin/rules/rules/ordering.d.ts +4 -0
  139. package/dist/core/extensions/builtin/rules/rules/ordering.d.ts.map +1 -0
  140. package/dist/core/extensions/builtin/rules/rules/ordering.js +28 -0
  141. package/dist/core/extensions/builtin/rules/rules/ordering.js.map +1 -0
  142. package/dist/core/extensions/builtin/rules/rules/parser.d.ts +4 -0
  143. package/dist/core/extensions/builtin/rules/rules/parser.d.ts.map +1 -0
  144. package/dist/core/extensions/builtin/rules/rules/parser.js +290 -0
  145. package/dist/core/extensions/builtin/rules/rules/parser.js.map +1 -0
  146. package/dist/core/extensions/builtin/rules/rules/project-root.d.ts +2 -0
  147. package/dist/core/extensions/builtin/rules/rules/project-root.d.ts.map +1 -0
  148. package/dist/core/extensions/builtin/rules/rules/project-root.js +24 -0
  149. package/dist/core/extensions/builtin/rules/rules/project-root.js.map +1 -0
  150. package/dist/core/extensions/builtin/rules/rules/scanner.d.ts +14 -0
  151. package/dist/core/extensions/builtin/rules/rules/scanner.d.ts.map +1 -0
  152. package/dist/core/extensions/builtin/rules/rules/scanner.js +96 -0
  153. package/dist/core/extensions/builtin/rules/rules/scanner.js.map +1 -0
  154. package/dist/core/extensions/builtin/rules/rules/tool-paths.d.ts +4 -0
  155. package/dist/core/extensions/builtin/rules/rules/tool-paths.d.ts.map +1 -0
  156. package/dist/core/extensions/builtin/rules/rules/tool-paths.js +37 -0
  157. package/dist/core/extensions/builtin/rules/rules/tool-paths.js.map +1 -0
  158. package/dist/core/extensions/builtin/rules/rules/truncator.d.ts +18 -0
  159. package/dist/core/extensions/builtin/rules/rules/truncator.d.ts.map +1 -0
  160. package/dist/core/extensions/builtin/rules/rules/truncator.js +46 -0
  161. package/dist/core/extensions/builtin/rules/rules/truncator.js.map +1 -0
  162. package/dist/core/extensions/builtin/rules/rules/types.d.ts +124 -0
  163. package/dist/core/extensions/builtin/rules/rules/types.d.ts.map +1 -0
  164. package/dist/core/extensions/builtin/rules/rules/types.js +9 -0
  165. package/dist/core/extensions/builtin/rules/rules/types.js.map +1 -0
  166. package/dist/core/extensions/builtin/rules/ui/dynamic-border.d.ts +8 -0
  167. package/dist/core/extensions/builtin/rules/ui/dynamic-border.d.ts.map +1 -0
  168. package/dist/core/extensions/builtin/rules/ui/dynamic-border.js +10 -0
  169. package/dist/core/extensions/builtin/rules/ui/dynamic-border.js.map +1 -0
  170. package/dist/core/extensions/builtin/rules/ui/rules-banner.d.ts +22 -0
  171. package/dist/core/extensions/builtin/rules/ui/rules-banner.d.ts.map +1 -0
  172. package/dist/core/extensions/builtin/rules/ui/rules-banner.js +51 -0
  173. package/dist/core/extensions/builtin/rules/ui/rules-banner.js.map +1 -0
  174. package/dist/core/extensions/builtin/webfetch/index.d.ts +10 -0
  175. package/dist/core/extensions/builtin/webfetch/index.d.ts.map +1 -0
  176. package/dist/core/extensions/builtin/webfetch/index.js +53 -0
  177. package/dist/core/extensions/builtin/webfetch/index.js.map +1 -0
  178. package/dist/core/extensions/builtin/webfetch/webfetch/content.d.ts +4 -0
  179. package/dist/core/extensions/builtin/webfetch/webfetch/content.d.ts.map +1 -0
  180. package/dist/core/extensions/builtin/webfetch/webfetch/content.js +60 -0
  181. package/dist/core/extensions/builtin/webfetch/webfetch/content.js.map +1 -0
  182. package/dist/core/extensions/builtin/webfetch/webfetch/errors.d.ts +13 -0
  183. package/dist/core/extensions/builtin/webfetch/webfetch/errors.d.ts.map +1 -0
  184. package/dist/core/extensions/builtin/webfetch/webfetch/errors.js +25 -0
  185. package/dist/core/extensions/builtin/webfetch/webfetch/errors.js.map +1 -0
  186. package/dist/core/extensions/builtin/webfetch/webfetch/fetcher.d.ts +24 -0
  187. package/dist/core/extensions/builtin/webfetch/webfetch/fetcher.d.ts.map +1 -0
  188. package/dist/core/extensions/builtin/webfetch/webfetch/fetcher.js +148 -0
  189. package/dist/core/extensions/builtin/webfetch/webfetch/fetcher.js.map +1 -0
  190. package/dist/core/extensions/builtin/webfetch/webfetch/renderers.d.ts +15 -0
  191. package/dist/core/extensions/builtin/webfetch/webfetch/renderers.d.ts.map +1 -0
  192. package/dist/core/extensions/builtin/webfetch/webfetch/renderers.js +110 -0
  193. package/dist/core/extensions/builtin/webfetch/webfetch/renderers.js.map +1 -0
  194. package/dist/core/extensions/builtin/webfetch/webfetch/tool.d.ts +28 -0
  195. package/dist/core/extensions/builtin/webfetch/webfetch/tool.d.ts.map +1 -0
  196. package/dist/core/extensions/builtin/webfetch/webfetch/tool.js +79 -0
  197. package/dist/core/extensions/builtin/webfetch/webfetch/tool.js.map +1 -0
  198. package/dist/core/extensions/builtin/websearch/index.d.ts +3 -0
  199. package/dist/core/extensions/builtin/websearch/index.d.ts.map +1 -0
  200. package/dist/core/extensions/builtin/websearch/index.js +76 -0
  201. package/dist/core/extensions/builtin/websearch/index.js.map +1 -0
  202. package/dist/core/extensions/builtin/websearch/websearch/config.d.ts +12 -0
  203. package/dist/core/extensions/builtin/websearch/websearch/config.d.ts.map +1 -0
  204. package/dist/core/extensions/builtin/websearch/websearch/config.js +245 -0
  205. package/dist/core/extensions/builtin/websearch/websearch/config.js.map +1 -0
  206. package/dist/core/extensions/builtin/websearch/websearch/native.d.ts +19 -0
  207. package/dist/core/extensions/builtin/websearch/websearch/native.d.ts.map +1 -0
  208. package/dist/core/extensions/builtin/websearch/websearch/native.js +65 -0
  209. package/dist/core/extensions/builtin/websearch/websearch/native.js.map +1 -0
  210. package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.d.ts +5 -0
  211. package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.d.ts.map +1 -0
  212. package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.js +58 -0
  213. package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.js.map +1 -0
  214. package/dist/core/extensions/builtin/websearch/websearch/providers.d.ts +4 -0
  215. package/dist/core/extensions/builtin/websearch/websearch/providers.d.ts.map +1 -0
  216. package/dist/core/extensions/builtin/websearch/websearch/providers.js +464 -0
  217. package/dist/core/extensions/builtin/websearch/websearch/providers.js.map +1 -0
  218. package/dist/core/extensions/builtin/websearch/websearch/renderers.d.ts +26 -0
  219. package/dist/core/extensions/builtin/websearch/websearch/renderers.d.ts.map +1 -0
  220. package/dist/core/extensions/builtin/websearch/websearch/renderers.js +66 -0
  221. package/dist/core/extensions/builtin/websearch/websearch/renderers.js.map +1 -0
  222. package/dist/core/extensions/builtin/websearch/websearch/search.d.ts +9 -0
  223. package/dist/core/extensions/builtin/websearch/websearch/search.d.ts.map +1 -0
  224. package/dist/core/extensions/builtin/websearch/websearch/search.js +261 -0
  225. package/dist/core/extensions/builtin/websearch/websearch/search.js.map +1 -0
  226. package/dist/core/extensions/builtin/websearch/websearch/tool.d.ts +18 -0
  227. package/dist/core/extensions/builtin/websearch/websearch/tool.d.ts.map +1 -0
  228. package/dist/core/extensions/builtin/websearch/websearch/tool.js +88 -0
  229. package/dist/core/extensions/builtin/websearch/websearch/tool.js.map +1 -0
  230. package/dist/core/extensions/builtin/websearch/websearch/types.d.ts +115 -0
  231. package/dist/core/extensions/builtin/websearch/websearch/types.d.ts.map +1 -0
  232. package/dist/core/extensions/builtin/websearch/websearch/types.js +2 -0
  233. package/dist/core/extensions/builtin/websearch/websearch/types.js.map +1 -0
  234. package/dist/core/extensions/runner.d.ts.map +1 -1
  235. package/dist/core/extensions/runner.js +8 -1
  236. package/dist/core/extensions/runner.js.map +1 -1
  237. package/dist/core/tools/bash.d.ts.map +1 -1
  238. package/dist/core/tools/bash.js +4 -0
  239. package/dist/core/tools/bash.js.map +1 -1
  240. package/dist/main.d.ts +5 -0
  241. package/dist/main.d.ts.map +1 -1
  242. package/dist/main.js +8 -4
  243. package/dist/main.js.map +1 -1
  244. package/dist/modes/interactive/components/diff.d.ts +14 -0
  245. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  246. package/dist/modes/interactive/components/diff.js +65 -1
  247. package/dist/modes/interactive/components/diff.js.map +1 -1
  248. package/dist/modes/interactive/components/session-selector.d.ts +0 -1
  249. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  250. package/dist/modes/interactive/components/session-selector.js +0 -4
  251. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  252. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  253. package/dist/modes/interactive/components/tree-selector.js +87 -12
  254. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  255. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  256. package/dist/modes/interactive/interactive-mode.js +6 -17
  257. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  258. package/dist/utils/child-process.d.ts +7 -4
  259. package/dist/utils/child-process.d.ts.map +1 -1
  260. package/dist/utils/child-process.js +23 -5
  261. package/dist/utils/child-process.js.map +1 -1
  262. package/docs/containerization.md +36 -36
  263. package/docs/extensions.md +4 -4
  264. package/docs/index.md +1 -1
  265. package/docs/security.md +13 -13
  266. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  267. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  268. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  269. package/examples/extensions/gondolin/package-lock.json +2 -2
  270. package/examples/extensions/gondolin/package.json +1 -1
  271. package/examples/extensions/question.ts +39 -18
  272. package/examples/extensions/questionnaire.ts +49 -28
  273. package/examples/extensions/sandbox/package-lock.json +2 -2
  274. package/examples/extensions/sandbox/package.json +1 -1
  275. package/examples/extensions/with-deps/package-lock.json +2 -2
  276. package/examples/extensions/with-deps/package.json +1 -1
  277. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
  278. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +5 -0
  279. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  280. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  281. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  282. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +140 -47
  283. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  284. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +169 -122
  285. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  286. package/node_modules/@earendil-works/pi-ai/dist/models.js +4 -1
  287. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  288. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  289. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +18 -1
  290. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
  291. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js +2 -1
  292. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js.map +1 -1
  293. package/node_modules/@earendil-works/pi-ai/dist/providers/google.js +2 -1
  294. package/node_modules/@earendil-works/pi-ai/dist/providers/google.js.map +1 -1
  295. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  296. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +20 -2
  297. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
  298. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +2 -0
  299. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  300. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  301. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-choice-fallback.d.ts +5 -0
  302. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-choice-fallback.d.ts.map +1 -0
  303. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-choice-fallback.js +41 -0
  304. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-choice-fallback.js.map +1 -0
  305. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  306. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  307. package/node_modules/@earendil-works/pi-tui/dist/tui.js +14 -1
  308. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  309. package/node_modules/@earendil-works/pi-tui/dist/utils.js +1 -1
  310. package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
  311. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  312. package/npm-shrinkwrap.json +45 -12
  313. package/package.json +8 -4
  314. package/dist/core/extensions/builtin/kimi-web-search/index.d.ts +0 -3
  315. package/dist/core/extensions/builtin/kimi-web-search/index.d.ts.map +0 -1
  316. package/dist/core/extensions/builtin/kimi-web-search/index.js +0 -208
  317. package/dist/core/extensions/builtin/kimi-web-search/index.js.map +0 -1
@@ -1,208 +0,0 @@
1
- import { Type } from "typebox";
2
- const ENABLE_ENV = "PI_KIMI_WEB_SEARCH";
3
- const SEARCH_BASE_URL_ENV = "PI_KIMI_SEARCH_BASE_URL";
4
- const FETCH_BASE_URL_ENV = "PI_KIMI_FETCH_BASE_URL";
5
- const DEFAULT_SEARCH_URL = "https://api.kimi.com/coding/v1/search";
6
- const DEFAULT_FETCH_URL = "https://api.kimi.com/coding/v1/fetch";
7
- function parseEnableEnv(envVar) {
8
- const envValue = process.env[envVar];
9
- if (!envValue) {
10
- return true;
11
- }
12
- const normalized = envValue.trim().toLowerCase();
13
- if (normalized === "0" || normalized === "false" || normalized === "no" || normalized === "off") {
14
- return false;
15
- }
16
- if (normalized === "1" || normalized === "true" || normalized === "yes" || normalized === "on") {
17
- return true;
18
- }
19
- return true;
20
- }
21
- function isEnabled() {
22
- return parseEnableEnv(ENABLE_ENV);
23
- }
24
- function getSearchBaseUrl() {
25
- return process.env[SEARCH_BASE_URL_ENV] || DEFAULT_SEARCH_URL;
26
- }
27
- function getFetchBaseUrl() {
28
- return process.env[FETCH_BASE_URL_ENV] || DEFAULT_FETCH_URL;
29
- }
30
- async function resolveApiKey(ctx) {
31
- const model = ctx.model;
32
- if (!model) {
33
- return undefined;
34
- }
35
- try {
36
- const auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);
37
- if (auth.ok && auth.apiKey) {
38
- return auth.apiKey;
39
- }
40
- }
41
- catch {
42
- // ignore
43
- }
44
- return undefined;
45
- }
46
- const searchWebSchema = Type.Object({
47
- query: Type.String({ description: "The query text to search for." }),
48
- limit: Type.Optional(Type.Number({
49
- description: "The number of results to return. Typically you do not need to set this value. When the results do not contain what you need, you probably want to give a more concrete query.",
50
- default: 5,
51
- minimum: 1,
52
- maximum: 20,
53
- })),
54
- include_content: Type.Optional(Type.Boolean({
55
- description: "Whether to include the content of the web pages in the results. It can consume a large amount of tokens when this is set to True. You should avoid enabling this when limit is set to a large value.",
56
- default: false,
57
- })),
58
- });
59
- const fetchUrlSchema = Type.Object({
60
- url: Type.String({ description: "The URL to fetch content from." }),
61
- });
62
- async function callKimiSearch(apiKey, toolCallId, params, signal) {
63
- const baseUrl = getSearchBaseUrl();
64
- const body = {
65
- text_query: params.query,
66
- limit: params.limit ?? 5,
67
- enable_page_crawling: params.include_content ?? false,
68
- timeout_seconds: 30,
69
- };
70
- const response = await fetch(baseUrl, {
71
- method: "POST",
72
- headers: {
73
- "Content-Type": "application/json",
74
- Authorization: `Bearer ${apiKey}`,
75
- "X-Msh-Tool-Call-Id": toolCallId,
76
- },
77
- body: JSON.stringify(body),
78
- signal,
79
- });
80
- if (!response.ok) {
81
- const text = await response.text().catch(() => "Unknown error");
82
- throw new Error(`Search service HTTP ${response.status}: ${text}`);
83
- }
84
- const data = (await response.json());
85
- if (data.error) {
86
- throw new Error(`Search service error: ${data.error}`);
87
- }
88
- const results = data.search_results ?? [];
89
- const answer = data.answer;
90
- let outputText = "";
91
- if (answer) {
92
- outputText += `Answer: ${answer}\n\n`;
93
- }
94
- if (results.length > 0) {
95
- outputText += "Search results:\n";
96
- for (const result of results) {
97
- outputText += `- ${result.title || "Untitled"}\n`;
98
- outputText += ` URL: ${result.url || "N/A"}\n`;
99
- if (result.summary) {
100
- outputText += ` Summary: ${result.summary}\n`;
101
- }
102
- if (result.content) {
103
- outputText += ` Content: ${result.content}\n`;
104
- }
105
- outputText += "\n";
106
- }
107
- }
108
- else {
109
- outputText += "No search results found.\n";
110
- }
111
- return {
112
- content: [{ type: "text", text: outputText }],
113
- details: { results, answer },
114
- };
115
- }
116
- async function callKimiFetch(apiKey, toolCallId, params, signal) {
117
- const baseUrl = getFetchBaseUrl();
118
- const body = {
119
- url: params.url,
120
- };
121
- const response = await fetch(baseUrl, {
122
- method: "POST",
123
- headers: {
124
- "Content-Type": "application/json",
125
- Authorization: `Bearer ${apiKey}`,
126
- "X-Msh-Tool-Call-Id": toolCallId,
127
- },
128
- body: JSON.stringify(body),
129
- signal,
130
- });
131
- if (!response.ok) {
132
- // Fallback: try local fetch
133
- const localResponse = await fetch(params.url, {
134
- method: "GET",
135
- headers: {
136
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
137
- },
138
- signal,
139
- });
140
- if (!localResponse.ok) {
141
- throw new Error(`Fetch URL failed: service HTTP ${response.status}, local HTTP ${localResponse.status}`);
142
- }
143
- const text = await localResponse.text();
144
- return {
145
- content: [{ type: "text", text }],
146
- details: { url: params.url, content: text },
147
- };
148
- }
149
- const data = (await response.json());
150
- if (data.error) {
151
- throw new Error(`Fetch service error: ${data.error}`);
152
- }
153
- const content = data.markdown || data.content || "";
154
- return {
155
- content: [{ type: "text", text: content }],
156
- details: { url: params.url, content },
157
- };
158
- }
159
- export default function kimiWebSearchExtension(pi) {
160
- if (!isEnabled()) {
161
- return;
162
- }
163
- pi.registerTool({
164
- name: "SearchWeb",
165
- label: "SearchWeb",
166
- description: "WebSearch tool allows you to search on the internet to get latest information, including news, documents, release notes, blog posts, papers, etc.",
167
- promptSnippet: "SearchWeb — search the internet for current information",
168
- parameters: searchWebSchema,
169
- async execute(toolCallId, params, signal, _onUpdate, ctx) {
170
- const apiKey = await resolveApiKey(ctx);
171
- if (!apiKey) {
172
- return {
173
- content: [
174
- {
175
- type: "text",
176
- text: "Search service is not configured. No API key found for Kimi provider.",
177
- },
178
- ],
179
- details: { results: [], error: "No API key" },
180
- };
181
- }
182
- return callKimiSearch(apiKey, toolCallId, params, signal);
183
- },
184
- });
185
- pi.registerTool({
186
- name: "FetchURL",
187
- label: "FetchURL",
188
- description: "FetchURL tool allows you to fetch content from a URL.",
189
- promptSnippet: "FetchURL — fetch web page content from a URL",
190
- parameters: fetchUrlSchema,
191
- async execute(toolCallId, params, signal, _onUpdate, ctx) {
192
- const apiKey = await resolveApiKey(ctx);
193
- if (!apiKey) {
194
- return {
195
- content: [
196
- {
197
- type: "text",
198
- text: "Fetch service is not configured. No API key found for Kimi provider.",
199
- },
200
- ],
201
- details: { url: params.url, content: "", error: "No API key" },
202
- };
203
- }
204
- return callKimiFetch(apiKey, toolCallId, params, signal);
205
- },
206
- });
207
- }
208
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/kimi-web-search/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { TextContent } from \"@earendil-works/pi-ai\";\nimport { type Static, Type } from \"typebox\";\nimport type { ExtensionAPI, ExtensionContext } from \"../../types.ts\";\n\nconst ENABLE_ENV = \"PI_KIMI_WEB_SEARCH\";\nconst SEARCH_BASE_URL_ENV = \"PI_KIMI_SEARCH_BASE_URL\";\nconst FETCH_BASE_URL_ENV = \"PI_KIMI_FETCH_BASE_URL\";\nconst DEFAULT_SEARCH_URL = \"https://api.kimi.com/coding/v1/search\";\nconst DEFAULT_FETCH_URL = \"https://api.kimi.com/coding/v1/fetch\";\n\nfunction parseEnableEnv(envVar: string): boolean {\n\tconst envValue = process.env[envVar];\n\tif (!envValue) {\n\t\treturn true;\n\t}\n\tconst normalized = envValue.trim().toLowerCase();\n\tif (normalized === \"0\" || normalized === \"false\" || normalized === \"no\" || normalized === \"off\") {\n\t\treturn false;\n\t}\n\tif (normalized === \"1\" || normalized === \"true\" || normalized === \"yes\" || normalized === \"on\") {\n\t\treturn true;\n\t}\n\treturn true;\n}\n\nfunction isEnabled(): boolean {\n\treturn parseEnableEnv(ENABLE_ENV);\n}\n\nfunction getSearchBaseUrl(): string {\n\treturn process.env[SEARCH_BASE_URL_ENV] || DEFAULT_SEARCH_URL;\n}\n\nfunction getFetchBaseUrl(): string {\n\treturn process.env[FETCH_BASE_URL_ENV] || DEFAULT_FETCH_URL;\n}\n\nasync function resolveApiKey(ctx: ExtensionContext): Promise<string | undefined> {\n\tconst model = ctx.model;\n\tif (!model) {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\tconst auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);\n\t\tif (auth.ok && auth.apiKey) {\n\t\t\treturn auth.apiKey;\n\t\t}\n\t} catch {\n\t\t// ignore\n\t}\n\treturn undefined;\n}\n\nconst searchWebSchema = Type.Object({\n\tquery: Type.String({ description: \"The query text to search for.\" }),\n\tlimit: Type.Optional(\n\t\tType.Number({\n\t\t\tdescription:\n\t\t\t\t\"The number of results to return. Typically you do not need to set this value. When the results do not contain what you need, you probably want to give a more concrete query.\",\n\t\t\tdefault: 5,\n\t\t\tminimum: 1,\n\t\t\tmaximum: 20,\n\t\t}),\n\t),\n\tinclude_content: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription:\n\t\t\t\t\"Whether to include the content of the web pages in the results. It can consume a large amount of tokens when this is set to True. You should avoid enabling this when limit is set to a large value.\",\n\t\t\tdefault: false,\n\t\t}),\n\t),\n});\n\ntype SearchWebInput = Static<typeof searchWebSchema>;\n\nconst fetchUrlSchema = Type.Object({\n\turl: Type.String({ description: \"The URL to fetch content from.\" }),\n});\n\ntype FetchUrlInput = Static<typeof fetchUrlSchema>;\n\ninterface SearchResult {\n\ttitle?: string;\n\turl?: string;\n\tsummary?: string;\n\tcontent?: string;\n}\n\ninterface SearchResponse {\n\tsearch_results?: SearchResult[];\n\tanswer?: string;\n\terror?: string;\n}\n\ninterface FetchResponse {\n\tcontent?: string;\n\tmarkdown?: string;\n\terror?: string;\n}\n\nasync function callKimiSearch(\n\tapiKey: string,\n\ttoolCallId: string,\n\tparams: SearchWebInput,\n\tsignal: AbortSignal | undefined,\n): Promise<AgentToolResult<{ results: SearchResult[]; answer?: string }>> {\n\tconst baseUrl = getSearchBaseUrl();\n\tconst body = {\n\t\ttext_query: params.query,\n\t\tlimit: params.limit ?? 5,\n\t\tenable_page_crawling: params.include_content ?? false,\n\t\ttimeout_seconds: 30,\n\t};\n\n\tconst response = await fetch(baseUrl, {\n\t\tmethod: \"POST\",\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\"X-Msh-Tool-Call-Id\": toolCallId,\n\t\t},\n\t\tbody: JSON.stringify(body),\n\t\tsignal,\n\t} as RequestInit);\n\n\tif (!response.ok) {\n\t\tconst text = await response.text().catch(() => \"Unknown error\");\n\t\tthrow new Error(`Search service HTTP ${response.status}: ${text}`);\n\t}\n\n\tconst data = (await response.json()) as SearchResponse;\n\n\tif (data.error) {\n\t\tthrow new Error(`Search service error: ${data.error}`);\n\t}\n\n\tconst results = data.search_results ?? [];\n\tconst answer = data.answer;\n\n\tlet outputText = \"\";\n\tif (answer) {\n\t\toutputText += `Answer: ${answer}\\n\\n`;\n\t}\n\tif (results.length > 0) {\n\t\toutputText += \"Search results:\\n\";\n\t\tfor (const result of results) {\n\t\t\toutputText += `- ${result.title || \"Untitled\"}\\n`;\n\t\t\toutputText += ` URL: ${result.url || \"N/A\"}\\n`;\n\t\t\tif (result.summary) {\n\t\t\t\toutputText += ` Summary: ${result.summary}\\n`;\n\t\t\t}\n\t\t\tif (result.content) {\n\t\t\t\toutputText += ` Content: ${result.content}\\n`;\n\t\t\t}\n\t\t\toutputText += \"\\n\";\n\t\t}\n\t} else {\n\t\toutputText += \"No search results found.\\n\";\n\t}\n\n\treturn {\n\t\tcontent: [{ type: \"text\", text: outputText } as TextContent],\n\t\tdetails: { results, answer },\n\t};\n}\n\nasync function callKimiFetch(\n\tapiKey: string,\n\ttoolCallId: string,\n\tparams: FetchUrlInput,\n\tsignal: AbortSignal | undefined,\n): Promise<AgentToolResult<{ url: string; content: string }>> {\n\tconst baseUrl = getFetchBaseUrl();\n\tconst body = {\n\t\turl: params.url,\n\t};\n\n\tconst response = await fetch(baseUrl, {\n\t\tmethod: \"POST\",\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\"X-Msh-Tool-Call-Id\": toolCallId,\n\t\t},\n\t\tbody: JSON.stringify(body),\n\t\tsignal,\n\t} as RequestInit);\n\n\tif (!response.ok) {\n\t\t// Fallback: try local fetch\n\t\tconst localResponse = await fetch(params.url, {\n\t\t\tmethod: \"GET\",\n\t\t\theaders: {\n\t\t\t\t\"User-Agent\":\n\t\t\t\t\t\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36\",\n\t\t\t},\n\t\t\tsignal,\n\t\t} as RequestInit);\n\t\tif (!localResponse.ok) {\n\t\t\tthrow new Error(`Fetch URL failed: service HTTP ${response.status}, local HTTP ${localResponse.status}`);\n\t\t}\n\t\tconst text = await localResponse.text();\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text } as TextContent],\n\t\t\tdetails: { url: params.url, content: text },\n\t\t};\n\t}\n\n\tconst data = (await response.json()) as FetchResponse;\n\n\tif (data.error) {\n\t\tthrow new Error(`Fetch service error: ${data.error}`);\n\t}\n\n\tconst content = data.markdown || data.content || \"\";\n\n\treturn {\n\t\tcontent: [{ type: \"text\", text: content } as TextContent],\n\t\tdetails: { url: params.url, content },\n\t};\n}\n\nexport default function kimiWebSearchExtension(pi: ExtensionAPI): void {\n\tif (!isEnabled()) {\n\t\treturn;\n\t}\n\n\tpi.registerTool({\n\t\tname: \"SearchWeb\",\n\t\tlabel: \"SearchWeb\",\n\t\tdescription:\n\t\t\t\"WebSearch tool allows you to search on the internet to get latest information, including news, documents, release notes, blog posts, papers, etc.\",\n\t\tpromptSnippet: \"SearchWeb — search the internet for current information\",\n\t\tparameters: searchWebSchema,\n\t\tasync execute(toolCallId, params, signal, _onUpdate, ctx) {\n\t\t\tconst apiKey = await resolveApiKey(ctx);\n\t\t\tif (!apiKey) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: \"Search service is not configured. No API key found for Kimi provider.\",\n\t\t\t\t\t\t} as TextContent,\n\t\t\t\t\t],\n\t\t\t\t\tdetails: { results: [], error: \"No API key\" },\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn callKimiSearch(apiKey, toolCallId, params, signal);\n\t\t},\n\t});\n\n\tpi.registerTool({\n\t\tname: \"FetchURL\",\n\t\tlabel: \"FetchURL\",\n\t\tdescription: \"FetchURL tool allows you to fetch content from a URL.\",\n\t\tpromptSnippet: \"FetchURL — fetch web page content from a URL\",\n\t\tparameters: fetchUrlSchema,\n\t\tasync execute(toolCallId, params, signal, _onUpdate, ctx) {\n\t\t\tconst apiKey = await resolveApiKey(ctx);\n\t\t\tif (!apiKey) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: \"Fetch service is not configured. No API key found for Kimi provider.\",\n\t\t\t\t\t\t} as TextContent,\n\t\t\t\t\t],\n\t\t\t\t\tdetails: { url: params.url, content: \"\", error: \"No API key\" },\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn callKimiFetch(apiKey, toolCallId, params, signal);\n\t\t},\n\t});\n}\n"]}