@hyperspaceng/neural-coding-agent 0.62.1 → 0.63.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 (374) hide show
  1. package/CHANGELOG.md +143 -0
  2. package/README.md +10 -0
  3. package/dist/bun/register-bedrock.d.ts.map +1 -1
  4. package/dist/bun/register-bedrock.js +2 -2
  5. package/dist/bun/register-bedrock.js.map +1 -1
  6. package/dist/cli/args.d.ts +1 -1
  7. package/dist/cli/args.d.ts.map +1 -1
  8. package/dist/cli/args.js.map +1 -1
  9. package/dist/cli/config-selector.d.ts.map +1 -1
  10. package/dist/cli/config-selector.js +1 -1
  11. package/dist/cli/config-selector.js.map +1 -1
  12. package/dist/cli/file-processor.d.ts +1 -1
  13. package/dist/cli/file-processor.d.ts.map +1 -1
  14. package/dist/cli/file-processor.js +4 -0
  15. package/dist/cli/file-processor.js.map +1 -1
  16. package/dist/cli/initial-message.d.ts +1 -1
  17. package/dist/cli/initial-message.d.ts.map +1 -1
  18. package/dist/cli/initial-message.js.map +1 -1
  19. package/dist/cli/list-models.d.ts.map +1 -1
  20. package/dist/cli/list-models.js +1 -1
  21. package/dist/cli/list-models.js.map +1 -1
  22. package/dist/cli/session-picker.d.ts.map +1 -1
  23. package/dist/cli/session-picker.js +1 -1
  24. package/dist/cli/session-picker.js.map +1 -1
  25. package/dist/core/agent-session.d.ts +21 -11
  26. package/dist/core/agent-session.d.ts.map +1 -1
  27. package/dist/core/agent-session.js +159 -101
  28. package/dist/core/agent-session.js.map +1 -1
  29. package/dist/core/auth-storage.d.ts +5 -3
  30. package/dist/core/auth-storage.d.ts.map +1 -1
  31. package/dist/core/auth-storage.js +7 -4
  32. package/dist/core/auth-storage.js.map +1 -1
  33. package/dist/core/compaction/branch-summarization.d.ts +4 -2
  34. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  35. package/dist/core/compaction/branch-summarization.js +3 -3
  36. package/dist/core/compaction/branch-summarization.js.map +1 -1
  37. package/dist/core/compaction/compaction.d.ts +5 -5
  38. package/dist/core/compaction/compaction.d.ts.map +1 -1
  39. package/dist/core/compaction/compaction.js +28 -27
  40. package/dist/core/compaction/compaction.js.map +1 -1
  41. package/dist/core/compaction/utils.d.ts +2 -2
  42. package/dist/core/compaction/utils.d.ts.map +1 -1
  43. package/dist/core/compaction/utils.js.map +1 -1
  44. package/dist/core/defaults.d.ts +1 -1
  45. package/dist/core/defaults.d.ts.map +1 -1
  46. package/dist/core/defaults.js.map +1 -1
  47. package/dist/core/export-html/index.d.ts +3 -3
  48. package/dist/core/export-html/index.d.ts.map +1 -1
  49. package/dist/core/export-html/index.js +7 -6
  50. package/dist/core/export-html/index.js.map +1 -1
  51. package/dist/core/export-html/tool-renderer.d.ts +2 -2
  52. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  53. package/dist/core/export-html/tool-renderer.js +41 -16
  54. package/dist/core/export-html/tool-renderer.js.map +1 -1
  55. package/dist/core/extensions/index.d.ts +3 -2
  56. package/dist/core/extensions/index.d.ts.map +1 -1
  57. package/dist/core/extensions/index.js.map +1 -1
  58. package/dist/core/extensions/loader.d.ts.map +1 -1
  59. package/dist/core/extensions/loader.js +27 -17
  60. package/dist/core/extensions/loader.js.map +1 -1
  61. package/dist/core/extensions/runner.d.ts +7 -10
  62. package/dist/core/extensions/runner.d.ts.map +1 -1
  63. package/dist/core/extensions/runner.js +27 -38
  64. package/dist/core/extensions/runner.js.map +1 -1
  65. package/dist/core/extensions/types.d.ts +56 -15
  66. package/dist/core/extensions/types.d.ts.map +1 -1
  67. package/dist/core/extensions/types.js.map +1 -1
  68. package/dist/core/extensions/wrapper.d.ts +1 -1
  69. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  70. package/dist/core/extensions/wrapper.js +2 -8
  71. package/dist/core/extensions/wrapper.js.map +1 -1
  72. package/dist/core/index.d.ts +2 -1
  73. package/dist/core/index.d.ts.map +1 -1
  74. package/dist/core/index.js +1 -0
  75. package/dist/core/index.js.map +1 -1
  76. package/dist/core/keybindings.d.ts +2 -2
  77. package/dist/core/keybindings.d.ts.map +1 -1
  78. package/dist/core/keybindings.js +1 -1
  79. package/dist/core/keybindings.js.map +1 -1
  80. package/dist/core/messages.d.ts +3 -3
  81. package/dist/core/messages.d.ts.map +1 -1
  82. package/dist/core/messages.js.map +1 -1
  83. package/dist/core/model-registry.d.ts +19 -3
  84. package/dist/core/model-registry.d.ts.map +1 -1
  85. package/dist/core/model-registry.js +85 -71
  86. package/dist/core/model-registry.js.map +1 -1
  87. package/dist/core/model-resolver.d.ts +2 -2
  88. package/dist/core/model-resolver.d.ts.map +1 -1
  89. package/dist/core/model-resolver.js +5 -5
  90. package/dist/core/model-resolver.js.map +1 -1
  91. package/dist/core/output-guard.d.ts +6 -0
  92. package/dist/core/output-guard.d.ts.map +1 -0
  93. package/dist/core/output-guard.js +59 -0
  94. package/dist/core/output-guard.js.map +1 -0
  95. package/dist/core/package-manager.d.ts +3 -0
  96. package/dist/core/package-manager.d.ts.map +1 -1
  97. package/dist/core/package-manager.js +153 -29
  98. package/dist/core/package-manager.js.map +1 -1
  99. package/dist/core/prompt-templates.d.ts +2 -1
  100. package/dist/core/prompt-templates.d.ts.map +1 -1
  101. package/dist/core/prompt-templates.js +30 -32
  102. package/dist/core/prompt-templates.js.map +1 -1
  103. package/dist/core/resolve-config-value.d.ts +6 -0
  104. package/dist/core/resolve-config-value.d.ts.map +1 -1
  105. package/dist/core/resolve-config-value.js +37 -5
  106. package/dist/core/resolve-config-value.js.map +1 -1
  107. package/dist/core/resource-loader.d.ts +6 -5
  108. package/dist/core/resource-loader.d.ts.map +1 -1
  109. package/dist/core/resource-loader.js +136 -108
  110. package/dist/core/resource-loader.js.map +1 -1
  111. package/dist/core/sdk.d.ts +4 -4
  112. package/dist/core/sdk.d.ts.map +1 -1
  113. package/dist/core/sdk.js +15 -24
  114. package/dist/core/sdk.js.map +1 -1
  115. package/dist/core/session-manager.d.ts +2 -2
  116. package/dist/core/session-manager.d.ts.map +1 -1
  117. package/dist/core/session-manager.js.map +1 -1
  118. package/dist/core/settings-manager.d.ts +3 -1
  119. package/dist/core/settings-manager.d.ts.map +1 -1
  120. package/dist/core/settings-manager.js +3 -0
  121. package/dist/core/settings-manager.js.map +1 -1
  122. package/dist/core/skills.d.ts +2 -1
  123. package/dist/core/skills.d.ts.map +1 -1
  124. package/dist/core/skills.js +25 -1
  125. package/dist/core/skills.js.map +1 -1
  126. package/dist/core/slash-commands.d.ts +2 -3
  127. package/dist/core/slash-commands.d.ts.map +1 -1
  128. package/dist/core/slash-commands.js.map +1 -1
  129. package/dist/core/source-info.d.ts +18 -0
  130. package/dist/core/source-info.d.ts.map +1 -0
  131. package/dist/core/source-info.js +19 -0
  132. package/dist/core/source-info.js.map +1 -0
  133. package/dist/core/system-prompt.d.ts.map +1 -1
  134. package/dist/core/system-prompt.js +3 -38
  135. package/dist/core/system-prompt.js.map +1 -1
  136. package/dist/core/timings.d.ts +1 -0
  137. package/dist/core/timings.d.ts.map +1 -1
  138. package/dist/core/timings.js +6 -0
  139. package/dist/core/timings.js.map +1 -1
  140. package/dist/core/tools/bash.d.ts +20 -10
  141. package/dist/core/tools/bash.d.ts.map +1 -1
  142. package/dist/core/tools/bash.js +151 -59
  143. package/dist/core/tools/bash.js.map +1 -1
  144. package/dist/core/tools/edit-diff.d.ts +23 -1
  145. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  146. package/dist/core/tools/edit-diff.js +150 -57
  147. package/dist/core/tools/edit-diff.js.map +1 -1
  148. package/dist/core/tools/edit.d.ts +31 -7
  149. package/dist/core/tools/edit.d.ts.map +1 -1
  150. package/dist/core/tools/edit.js +179 -59
  151. package/dist/core/tools/edit.js.map +1 -1
  152. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  153. package/dist/core/tools/file-mutation-queue.js +4 -4
  154. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  155. package/dist/core/tools/find.d.ts +12 -5
  156. package/dist/core/tools/find.d.ts.map +1 -1
  157. package/dist/core/tools/find.js +76 -27
  158. package/dist/core/tools/find.js.map +1 -1
  159. package/dist/core/tools/grep.d.ts +16 -5
  160. package/dist/core/tools/grep.d.ts.map +1 -1
  161. package/dist/core/tools/grep.js +83 -29
  162. package/dist/core/tools/grep.js.map +1 -1
  163. package/dist/core/tools/index.d.ts +68 -22
  164. package/dist/core/tools/index.d.ts.map +1 -1
  165. package/dist/core/tools/index.js +50 -26
  166. package/dist/core/tools/index.js.map +1 -1
  167. package/dist/core/tools/ls.d.ts +10 -4
  168. package/dist/core/tools/ls.d.ts.map +1 -1
  169. package/dist/core/tools/ls.js +67 -13
  170. package/dist/core/tools/ls.js.map +1 -1
  171. package/dist/core/tools/read.d.ts +11 -4
  172. package/dist/core/tools/read.d.ts.map +1 -1
  173. package/dist/core/tools/read.js +110 -51
  174. package/dist/core/tools/read.js.map +1 -1
  175. package/dist/core/tools/render-utils.d.ts +21 -0
  176. package/dist/core/tools/render-utils.d.ts.map +1 -0
  177. package/dist/core/tools/render-utils.js +49 -0
  178. package/dist/core/tools/render-utils.js.map +1 -0
  179. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  180. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  181. package/dist/core/tools/tool-definition-wrapper.js +30 -0
  182. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  183. package/dist/core/tools/write.d.ts +10 -4
  184. package/dist/core/tools/write.d.ts.map +1 -1
  185. package/dist/core/tools/write.js +162 -27
  186. package/dist/core/tools/write.js.map +1 -1
  187. package/dist/index.d.ts +3 -2
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +2 -1
  190. package/dist/index.js.map +1 -1
  191. package/dist/main.d.ts.map +1 -1
  192. package/dist/main.js +57 -19
  193. package/dist/main.js.map +1 -1
  194. package/dist/modes/interactive/components/armin.d.ts +1 -1
  195. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  196. package/dist/modes/interactive/components/armin.js.map +1 -1
  197. package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
  198. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  199. package/dist/modes/interactive/components/assistant-message.js +1 -1
  200. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  201. package/dist/modes/interactive/components/bash-execution.d.ts +1 -2
  202. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  203. package/dist/modes/interactive/components/bash-execution.js +19 -6
  204. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  205. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  206. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  207. package/dist/modes/interactive/components/bordered-loader.js +1 -1
  208. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  209. package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
  210. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  211. package/dist/modes/interactive/components/branch-summary-message.js +1 -1
  212. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  213. package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
  214. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  215. package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  216. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  217. package/dist/modes/interactive/components/config-selector.d.ts +1 -1
  218. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  219. package/dist/modes/interactive/components/config-selector.js +1 -1
  220. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  221. package/dist/modes/interactive/components/countdown-timer.d.ts +1 -1
  222. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  223. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  224. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  225. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  226. package/dist/modes/interactive/components/custom-editor.js +1 -1
  227. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  228. package/dist/modes/interactive/components/custom-message.d.ts +1 -1
  229. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  230. package/dist/modes/interactive/components/custom-message.js +1 -1
  231. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  232. package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
  233. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  234. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  235. package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
  236. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  237. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  238. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  239. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  240. package/dist/modes/interactive/components/extension-editor.js +1 -1
  241. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  242. package/dist/modes/interactive/components/extension-input.d.ts +1 -1
  243. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  244. package/dist/modes/interactive/components/extension-input.js +1 -1
  245. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  246. package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
  247. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  248. package/dist/modes/interactive/components/extension-selector.js +1 -1
  249. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  250. package/dist/modes/interactive/components/footer.d.ts +1 -1
  251. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  252. package/dist/modes/interactive/components/footer.js +1 -1
  253. package/dist/modes/interactive/components/footer.js.map +1 -1
  254. package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -1
  255. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  256. package/dist/modes/interactive/components/keybinding-hints.js +1 -1
  257. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  258. package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
  259. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  260. package/dist/modes/interactive/components/login-dialog.js +2 -2
  261. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  262. package/dist/modes/interactive/components/model-selector.d.ts +2 -2
  263. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  264. package/dist/modes/interactive/components/model-selector.js +2 -2
  265. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  266. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  267. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  268. package/dist/modes/interactive/components/oauth-selector.js +2 -2
  269. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  270. package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
  271. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  272. package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
  273. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  274. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  275. package/dist/modes/interactive/components/session-selector-search.js +1 -1
  276. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  277. package/dist/modes/interactive/components/session-selector.d.ts +1 -1
  278. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  279. package/dist/modes/interactive/components/session-selector.js +1 -1
  280. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  281. package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
  282. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  283. package/dist/modes/interactive/components/settings-selector.js +1 -1
  284. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  285. package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
  286. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  287. package/dist/modes/interactive/components/show-images-selector.js +1 -1
  288. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  289. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  290. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  291. package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  292. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  293. package/dist/modes/interactive/components/theme-selector.d.ts +1 -1
  294. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  295. package/dist/modes/interactive/components/theme-selector.js +1 -1
  296. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  297. package/dist/modes/interactive/components/thinking-selector.d.ts +2 -2
  298. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  299. package/dist/modes/interactive/components/thinking-selector.js +1 -1
  300. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  301. package/dist/modes/interactive/components/tool-execution.d.ts +15 -41
  302. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  303. package/dist/modes/interactive/components/tool-execution.js +121 -679
  304. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  305. package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
  306. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  307. package/dist/modes/interactive/components/tree-selector.js +1 -1
  308. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  309. package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
  310. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  311. package/dist/modes/interactive/components/user-message-selector.js +1 -1
  312. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  313. package/dist/modes/interactive/components/user-message.d.ts +1 -1
  314. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  315. package/dist/modes/interactive/components/user-message.js +1 -1
  316. package/dist/modes/interactive/components/user-message.js.map +1 -1
  317. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  318. package/dist/modes/interactive/components/visual-truncate.js +1 -1
  319. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  320. package/dist/modes/interactive/interactive-mode.d.ts +5 -13
  321. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  322. package/dist/modes/interactive/interactive-mode.js +175 -160
  323. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  324. package/dist/modes/interactive/theme/theme.d.ts +5 -2
  325. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  326. package/dist/modes/interactive/theme/theme.js +15 -1
  327. package/dist/modes/interactive/theme/theme.js.map +1 -1
  328. package/dist/modes/print-mode.d.ts +2 -2
  329. package/dist/modes/print-mode.d.ts.map +1 -1
  330. package/dist/modes/print-mode.js +84 -78
  331. package/dist/modes/print-mode.js.map +1 -1
  332. package/dist/modes/rpc/rpc-client.d.ts +2 -2
  333. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  334. package/dist/modes/rpc/rpc-client.js.map +1 -1
  335. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  336. package/dist/modes/rpc/rpc-mode.js +27 -20
  337. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  338. package/dist/modes/rpc/rpc-types.d.ts +5 -6
  339. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  340. package/dist/modes/rpc/rpc-types.js.map +1 -1
  341. package/dist/utils/image-resize.d.ts +6 -6
  342. package/dist/utils/image-resize.d.ts.map +1 -1
  343. package/dist/utils/image-resize.js +45 -94
  344. package/dist/utils/image-resize.js.map +1 -1
  345. package/docs/development.md +3 -1
  346. package/docs/extensions.md +85 -34
  347. package/docs/models.md +6 -0
  348. package/docs/rpc.md +11 -2
  349. package/docs/settings.md +12 -0
  350. package/docs/skills.md +3 -2
  351. package/docs/tui.md +2 -2
  352. package/examples/extensions/built-in-tool-renderer.ts +8 -8
  353. package/examples/extensions/commands.ts +3 -3
  354. package/examples/extensions/custom-compaction.ts +17 -4
  355. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  356. package/examples/extensions/custom-provider-anthropic/package.json +17 -17
  357. package/examples/extensions/custom-provider-gitlab-duo/package.json +14 -14
  358. package/examples/extensions/custom-provider-qwen-cli/package.json +14 -14
  359. package/examples/extensions/handoff.ts +5 -2
  360. package/examples/extensions/minimal-mode.ts +14 -14
  361. package/examples/extensions/qna.ts +5 -2
  362. package/examples/extensions/question.ts +2 -2
  363. package/examples/extensions/questionnaire.ts +2 -2
  364. package/examples/extensions/subagent/index.ts +23 -3
  365. package/examples/extensions/summarize.ts +15 -4
  366. package/examples/extensions/todo.ts +2 -2
  367. package/examples/extensions/trigger-compact.ts +11 -1
  368. package/examples/extensions/truncated-tool.ts +2 -2
  369. package/examples/extensions/with-deps/package-lock.json +2 -2
  370. package/examples/extensions/with-deps/package.json +20 -20
  371. package/examples/sdk/04-skills.ts +8 -2
  372. package/examples/sdk/08-prompt-templates.ts +2 -1
  373. package/examples/sdk/12-full-control.ts +0 -1
  374. package/package.json +5 -4
@@ -7,6 +7,7 @@ import ignore from "ignore";
7
7
  import { minimatch } from "minimatch";
8
8
  import { CONFIG_DIR_NAME } from "../config.js";
9
9
  import { parseGitUrl } from "../utils/git.js";
10
+ import { isStdoutTakenOver } from "./output-guard.js";
10
11
  const NETWORK_TIMEOUT_MS = 10000;
11
12
  const UPDATE_CHECK_CONCURRENCY = 4;
12
13
  function isOfflineModeEnabled() {
@@ -130,7 +131,7 @@ function collectFiles(dir, filePattern, skipNodeModules = true, ignoreMatcher, r
130
131
  }
131
132
  return files;
132
133
  }
133
- function collectSkillEntries(dir, includeRootFiles = true, ignoreMatcher, rootDir) {
134
+ function collectSkillEntries(dir, mode, ignoreMatcher, rootDir) {
134
135
  const entries = [];
135
136
  if (!existsSync(dir))
136
137
  return entries;
@@ -139,6 +140,26 @@ function collectSkillEntries(dir, includeRootFiles = true, ignoreMatcher, rootDi
139
140
  addIgnoreRules(ig, dir, root);
140
141
  try {
141
142
  const dirEntries = readdirSync(dir, { withFileTypes: true });
143
+ for (const entry of dirEntries) {
144
+ if (entry.name !== "SKILL.md") {
145
+ continue;
146
+ }
147
+ const fullPath = join(dir, entry.name);
148
+ let isFile = entry.isFile();
149
+ if (entry.isSymbolicLink()) {
150
+ try {
151
+ isFile = statSync(fullPath).isFile();
152
+ }
153
+ catch {
154
+ continue;
155
+ }
156
+ }
157
+ const relPath = toPosixPath(relative(root, fullPath));
158
+ if (isFile && !ig.ignores(relPath)) {
159
+ entries.push(fullPath);
160
+ return entries;
161
+ }
162
+ }
142
163
  for (const entry of dirEntries) {
143
164
  if (entry.name.startsWith("."))
144
165
  continue;
@@ -158,19 +179,15 @@ function collectSkillEntries(dir, includeRootFiles = true, ignoreMatcher, rootDi
158
179
  }
159
180
  }
160
181
  const relPath = toPosixPath(relative(root, fullPath));
161
- const ignorePath = isDir ? `${relPath}/` : relPath;
162
- if (ig.ignores(ignorePath))
182
+ if (mode === "pi" && dir === root && isFile && entry.name.endsWith(".md") && !ig.ignores(relPath)) {
183
+ entries.push(fullPath);
163
184
  continue;
164
- if (isDir) {
165
- entries.push(...collectSkillEntries(fullPath, false, ig, root));
166
- }
167
- else if (isFile) {
168
- const isRootMd = includeRootFiles && entry.name.endsWith(".md");
169
- const isSkillMd = !includeRootFiles && entry.name === "SKILL.md";
170
- if (isRootMd || isSkillMd) {
171
- entries.push(fullPath);
172
- }
173
185
  }
186
+ if (!isDir)
187
+ continue;
188
+ if (ig.ignores(`${relPath}/`))
189
+ continue;
190
+ entries.push(...collectSkillEntries(fullPath, mode, ig, root));
174
191
  }
175
192
  }
176
193
  catch {
@@ -178,8 +195,8 @@ function collectSkillEntries(dir, includeRootFiles = true, ignoreMatcher, rootDi
178
195
  }
179
196
  return entries;
180
197
  }
181
- function collectAutoSkillEntries(dir, includeRootFiles = true) {
182
- return collectSkillEntries(dir, includeRootFiles);
198
+ function collectAutoSkillEntries(dir, mode) {
199
+ return collectSkillEntries(dir, mode);
183
200
  }
184
201
  function findGitRepoRoot(startDir) {
185
202
  let dir = resolve(startDir);
@@ -379,7 +396,7 @@ function collectAutoExtensionEntries(dir) {
379
396
  */
380
397
  function collectResourceFiles(dir, resourceType) {
381
398
  if (resourceType === "skills") {
382
- return collectSkillEntries(dir);
399
+ return collectSkillEntries(dir, "pi");
383
400
  }
384
401
  if (resourceType === "extensions") {
385
402
  return collectAutoExtensionEntries(dir);
@@ -674,18 +691,27 @@ export class DefaultPackageManager {
674
691
  const globalSettings = this.settingsManager.getGlobalSettings();
675
692
  const projectSettings = this.settingsManager.getProjectSettings();
676
693
  const identity = source ? this.getPackageIdentity(source) : undefined;
694
+ let matched = false;
677
695
  for (const pkg of globalSettings.packages ?? []) {
678
696
  const sourceStr = typeof pkg === "string" ? pkg : pkg.source;
679
697
  if (identity && this.getPackageIdentity(sourceStr, "user") !== identity)
680
698
  continue;
699
+ matched = true;
681
700
  await this.updateSourceForScope(sourceStr, "user");
682
701
  }
683
702
  for (const pkg of projectSettings.packages ?? []) {
684
703
  const sourceStr = typeof pkg === "string" ? pkg : pkg.source;
685
704
  if (identity && this.getPackageIdentity(sourceStr, "project") !== identity)
686
705
  continue;
706
+ matched = true;
687
707
  await this.updateSourceForScope(sourceStr, "project");
688
708
  }
709
+ if (source && !matched) {
710
+ throw new Error(this.buildNoMatchingPackageMessage(source, [
711
+ ...(globalSettings.packages ?? []),
712
+ ...(projectSettings.packages ?? []),
713
+ ]));
714
+ }
689
715
  }
690
716
  async updateSourceForScope(source, scope) {
691
717
  if (isOfflineModeEnabled()) {
@@ -696,7 +722,10 @@ export class DefaultPackageManager {
696
722
  if (parsed.pinned)
697
723
  return;
698
724
  await this.withProgress("update", source, `Updating ${source}...`, async () => {
699
- await this.installNpm(parsed, scope, false);
725
+ await this.installNpm({
726
+ ...parsed,
727
+ spec: `${parsed.name}@latest`,
728
+ }, scope, false);
700
729
  });
701
730
  return;
702
731
  }
@@ -878,6 +907,35 @@ export class DefaultPackageManager {
878
907
  const baseDir = this.getBaseDirForScope(scope);
879
908
  return `local:${this.resolvePathFromBase(parsed.path, baseDir)}`;
880
909
  }
910
+ buildNoMatchingPackageMessage(source, configuredPackages) {
911
+ const suggestion = this.findSuggestedConfiguredSource(source, configuredPackages);
912
+ if (!suggestion) {
913
+ return `No matching package found for ${source}`;
914
+ }
915
+ return `No matching package found for ${source}. Did you mean ${suggestion}?`;
916
+ }
917
+ findSuggestedConfiguredSource(source, configuredPackages) {
918
+ const trimmedSource = source.trim();
919
+ const suggestions = new Set();
920
+ for (const pkg of configuredPackages) {
921
+ const sourceStr = this.getPackageSourceString(pkg);
922
+ const parsed = this.parseSource(sourceStr);
923
+ if (parsed.type === "npm") {
924
+ if (trimmedSource === parsed.name || trimmedSource === parsed.spec) {
925
+ suggestions.add(sourceStr);
926
+ }
927
+ continue;
928
+ }
929
+ if (parsed.type === "git") {
930
+ const shorthand = `${parsed.host}/${parsed.path}`;
931
+ const shorthandWithRef = parsed.ref ? `${shorthand}@${parsed.ref}` : undefined;
932
+ if (trimmedSource === shorthand || (shorthandWithRef && trimmedSource === shorthandWithRef)) {
933
+ suggestions.add(sourceStr);
934
+ }
935
+ }
936
+ }
937
+ return suggestions.values().next().value;
938
+ }
881
939
  packageSourcesMatch(existing, inputSource, scope) {
882
940
  const left = this.getSourceMatchKeyForSettings(this.getPackageSourceString(existing), scope);
883
941
  const right = this.getSourceMatchKeyForInput(inputSource);
@@ -1002,6 +1060,67 @@ export class DefaultPackageManager {
1002
1060
  }
1003
1061
  return match[1];
1004
1062
  }
1063
+ async getLocalGitUpdateTarget(installedPath) {
1064
+ try {
1065
+ const upstream = await this.runCommandCapture("git", ["rev-parse", "--abbrev-ref", "@{upstream}"], {
1066
+ cwd: installedPath,
1067
+ timeoutMs: NETWORK_TIMEOUT_MS,
1068
+ });
1069
+ const trimmedUpstream = upstream.trim();
1070
+ if (!trimmedUpstream.startsWith("origin/")) {
1071
+ throw new Error(`Unsupported upstream remote: ${trimmedUpstream}`);
1072
+ }
1073
+ const branch = trimmedUpstream.slice("origin/".length);
1074
+ if (!branch) {
1075
+ throw new Error("Missing upstream branch name");
1076
+ }
1077
+ const head = await this.runCommandCapture("git", ["rev-parse", "@{upstream}"], {
1078
+ cwd: installedPath,
1079
+ timeoutMs: NETWORK_TIMEOUT_MS,
1080
+ });
1081
+ return {
1082
+ ref: "@{upstream}",
1083
+ head,
1084
+ fetchArgs: [
1085
+ "fetch",
1086
+ "--prune",
1087
+ "--no-tags",
1088
+ "origin",
1089
+ `+refs/heads/${branch}:refs/remotes/origin/${branch}`,
1090
+ ],
1091
+ };
1092
+ }
1093
+ catch {
1094
+ await this.runCommand("git", ["remote", "set-head", "origin", "-a"], { cwd: installedPath }).catch(() => { });
1095
+ const head = await this.runCommandCapture("git", ["rev-parse", "origin/HEAD"], {
1096
+ cwd: installedPath,
1097
+ timeoutMs: NETWORK_TIMEOUT_MS,
1098
+ });
1099
+ const originHeadRef = await this.runCommandCapture("git", ["symbolic-ref", "refs/remotes/origin/HEAD"], {
1100
+ cwd: installedPath,
1101
+ timeoutMs: NETWORK_TIMEOUT_MS,
1102
+ }).catch(() => "");
1103
+ const branch = originHeadRef.trim().replace(/^refs\/remotes\/origin\//, "");
1104
+ if (branch) {
1105
+ return {
1106
+ ref: "origin/HEAD",
1107
+ head,
1108
+ fetchArgs: [
1109
+ "fetch",
1110
+ "--prune",
1111
+ "--no-tags",
1112
+ "origin",
1113
+ `+refs/heads/${branch}:refs/remotes/origin/${branch}`,
1114
+ ],
1115
+ };
1116
+ }
1117
+ return {
1118
+ ref: "origin/HEAD",
1119
+ head,
1120
+ fetchArgs: ["fetch", "--prune", "--no-tags", "origin", "+HEAD:refs/remotes/origin/HEAD"],
1121
+ };
1122
+ }
1123
+ }
1005
1124
  async getGitUpstreamRef(installedPath) {
1006
1125
  try {
1007
1126
  const upstream = await this.runCommandCapture("git", ["rev-parse", "--abbrev-ref", "@{upstream}"], {
@@ -1164,16 +1283,21 @@ export class DefaultPackageManager {
1164
1283
  await this.installGit(source, scope);
1165
1284
  return;
1166
1285
  }
1167
- // Fetch latest from remote (handles force-push by getting new history)
1168
- await this.runCommand("git", ["fetch", "--prune", "origin"], { cwd: targetDir });
1169
- // Reset to tracking branch. Fall back to origin/HEAD when no upstream is configured.
1170
- try {
1171
- await this.runCommand("git", ["reset", "--hard", "@{upstream}"], { cwd: targetDir });
1172
- }
1173
- catch {
1174
- await this.runCommand("git", ["remote", "set-head", "origin", "-a"], { cwd: targetDir }).catch(() => { });
1175
- await this.runCommand("git", ["reset", "--hard", "origin/HEAD"], { cwd: targetDir });
1286
+ const target = await this.getLocalGitUpdateTarget(targetDir);
1287
+ // Fetch only the ref we will reset to, avoiding unrelated branch/tag noise.
1288
+ await this.runCommand("git", target.fetchArgs, { cwd: targetDir });
1289
+ const localHead = await this.runCommandCapture("git", ["rev-parse", "HEAD"], {
1290
+ cwd: targetDir,
1291
+ timeoutMs: NETWORK_TIMEOUT_MS,
1292
+ });
1293
+ const refreshedTargetHead = await this.runCommandCapture("git", ["rev-parse", target.ref], {
1294
+ cwd: targetDir,
1295
+ timeoutMs: NETWORK_TIMEOUT_MS,
1296
+ });
1297
+ if (localHead.trim() === refreshedTargetHead.trim()) {
1298
+ return;
1176
1299
  }
1300
+ await this.runCommand("git", ["reset", "--hard", target.ref], { cwd: targetDir });
1177
1301
  // Clean untracked files (extensions should be pristine)
1178
1302
  await this.runCommand("git", ["clean", "-fdx"], { cwd: targetDir });
1179
1303
  const packageJsonPath = join(targetDir, "package.json");
@@ -1509,13 +1633,13 @@ export class DefaultPackageManager {
1509
1633
  };
1510
1634
  addResources("extensions", collectAutoExtensionEntries(projectDirs.extensions), projectMetadata, projectOverrides.extensions, projectBaseDir);
1511
1635
  addResources("skills", [
1512
- ...collectAutoSkillEntries(projectDirs.skills),
1513
- ...projectAgentsSkillDirs.flatMap((dir) => collectAutoSkillEntries(dir)),
1636
+ ...collectAutoSkillEntries(projectDirs.skills, "pi"),
1637
+ ...projectAgentsSkillDirs.flatMap((dir) => collectAutoSkillEntries(dir, "agents")),
1514
1638
  ], projectMetadata, projectOverrides.skills, projectBaseDir);
1515
1639
  addResources("prompts", collectAutoPromptEntries(projectDirs.prompts), projectMetadata, projectOverrides.prompts, projectBaseDir);
1516
1640
  addResources("themes", collectAutoThemeEntries(projectDirs.themes), projectMetadata, projectOverrides.themes, projectBaseDir);
1517
1641
  addResources("extensions", collectAutoExtensionEntries(userDirs.extensions), userMetadata, userOverrides.extensions, globalBaseDir);
1518
- addResources("skills", [...collectAutoSkillEntries(userDirs.skills), ...collectAutoSkillEntries(userAgentsSkillsDir)], userMetadata, userOverrides.skills, globalBaseDir);
1642
+ addResources("skills", [...collectAutoSkillEntries(userDirs.skills, "pi"), ...collectAutoSkillEntries(userAgentsSkillsDir, "agents")], userMetadata, userOverrides.skills, globalBaseDir);
1519
1643
  addResources("prompts", collectAutoPromptEntries(userDirs.prompts), userMetadata, userOverrides.prompts, globalBaseDir);
1520
1644
  addResources("themes", collectAutoThemeEntries(userDirs.themes), userMetadata, userOverrides.themes, globalBaseDir);
1521
1645
  }
@@ -1630,7 +1754,7 @@ export class DefaultPackageManager {
1630
1754
  return new Promise((resolvePromise, reject) => {
1631
1755
  const child = spawn(command, args, {
1632
1756
  cwd: options?.cwd,
1633
- stdio: "inherit",
1757
+ stdio: isStdoutTakenOver() ? ["ignore", 2, 2] : "inherit",
1634
1758
  shell: process.platform === "win32",
1635
1759
  });
1636
1760
  child.on("error", reject);