@akon-labs/nexus-cli 0.1.9 → 0.1.11-rc.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 (369) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +1 -0
  3. package/README.md +3 -2
  4. package/dist/app-bridge.bundle.js +67 -0
  5. package/dist/cli/require-login.d.ts.map +1 -1
  6. package/dist/cli/require-login.js +2 -2
  7. package/dist/cli/require-login.js.map +1 -1
  8. package/dist/cli.js +20866 -1882
  9. package/dist/core/agent-session.d.ts +3 -1
  10. package/dist/core/agent-session.d.ts.map +1 -1
  11. package/dist/core/agent-session.js +5 -1
  12. package/dist/core/agent-session.js.map +1 -1
  13. package/dist/core/auto-model.d.ts +1 -1
  14. package/dist/core/auto-model.d.ts.map +1 -1
  15. package/dist/core/auto-model.js +1 -1
  16. package/dist/core/auto-model.js.map +1 -1
  17. package/dist/core/extensions/index.d.ts +1 -1
  18. package/dist/core/extensions/index.d.ts.map +1 -1
  19. package/dist/core/extensions/index.js.map +1 -1
  20. package/dist/core/extensions/loader.d.ts.map +1 -1
  21. package/dist/core/extensions/loader.js +6 -0
  22. package/dist/core/extensions/loader.js.map +1 -1
  23. package/dist/core/extensions/runner.d.ts +7 -1
  24. package/dist/core/extensions/runner.d.ts.map +1 -1
  25. package/dist/core/extensions/runner.js +14 -0
  26. package/dist/core/extensions/runner.js.map +1 -1
  27. package/dist/core/extensions/types.d.ts +18 -0
  28. package/dist/core/extensions/types.d.ts.map +1 -1
  29. package/dist/core/extensions/types.js.map +1 -1
  30. package/dist/core/model-resolver.d.ts +2 -2
  31. package/dist/core/model-resolver.d.ts.map +1 -1
  32. package/dist/core/model-resolver.js +3 -3
  33. package/dist/core/model-resolver.js.map +1 -1
  34. package/dist/core/package-manager.d.ts +15 -0
  35. package/dist/core/package-manager.d.ts.map +1 -1
  36. package/dist/core/package-manager.js +50 -0
  37. package/dist/core/package-manager.js.map +1 -1
  38. package/dist/core/sdk.d.ts.map +1 -1
  39. package/dist/core/sdk.js +1 -1
  40. package/dist/core/sdk.js.map +1 -1
  41. package/dist/core/slash-commands.d.ts.map +1 -1
  42. package/dist/core/slash-commands.js +3 -3
  43. package/dist/core/slash-commands.js.map +1 -1
  44. package/dist/core/system-prompt.d.ts.map +1 -1
  45. package/dist/core/system-prompt.js +1 -1
  46. package/dist/core/system-prompt.js.map +1 -1
  47. package/dist/core/tools/find.d.ts.map +1 -1
  48. package/dist/core/tools/find.js +1 -1
  49. package/dist/core/tools/find.js.map +1 -1
  50. package/dist/core/tools/grep.d.ts.map +1 -1
  51. package/dist/core/tools/grep.js +1 -1
  52. package/dist/core/tools/grep.js.map +1 -1
  53. package/dist/core/tools/index.d.ts +1 -1
  54. package/dist/core/tools/index.d.ts.map +1 -1
  55. package/dist/core/tools/index.js +5 -5
  56. package/dist/core/tools/index.js.map +1 -1
  57. package/dist/core/tools/websearch.d.ts.map +1 -1
  58. package/dist/core/tools/websearch.js +3 -3
  59. package/dist/core/tools/websearch.js.map +1 -1
  60. package/dist/extensions/gitnexus/config.d.ts +15 -1
  61. package/dist/extensions/gitnexus/config.d.ts.map +1 -1
  62. package/dist/extensions/gitnexus/config.js +86 -2
  63. package/dist/extensions/gitnexus/config.js.map +1 -1
  64. package/dist/extensions/gitnexus/gateway.d.ts +6 -6
  65. package/dist/extensions/gitnexus/gateway.d.ts.map +1 -1
  66. package/dist/extensions/gitnexus/gateway.js +4 -4
  67. package/dist/extensions/gitnexus/gateway.js.map +1 -1
  68. package/dist/extensions/gitnexus/index.d.ts.map +1 -1
  69. package/dist/extensions/gitnexus/index.js +6 -4
  70. package/dist/extensions/gitnexus/index.js.map +1 -1
  71. package/dist/extensions/gitnexus/observatory.d.ts.map +1 -1
  72. package/dist/extensions/gitnexus/observatory.js +2 -2
  73. package/dist/extensions/gitnexus/observatory.js.map +1 -1
  74. package/dist/extensions/index.d.ts.map +1 -1
  75. package/dist/extensions/index.js +3 -0
  76. package/dist/extensions/index.js.map +1 -1
  77. package/dist/extensions/mcp/abort.d.ts +3 -0
  78. package/dist/extensions/mcp/abort.d.ts.map +1 -0
  79. package/dist/extensions/mcp/abort.js +41 -0
  80. package/dist/extensions/mcp/abort.js.map +1 -0
  81. package/dist/extensions/mcp/agent-dir.d.ts +6 -0
  82. package/dist/extensions/mcp/agent-dir.d.ts.map +1 -0
  83. package/dist/extensions/mcp/agent-dir.js +18 -0
  84. package/dist/extensions/mcp/agent-dir.js.map +1 -0
  85. package/dist/extensions/mcp/agent-plugin-loader.d.ts +9 -0
  86. package/dist/extensions/mcp/agent-plugin-loader.d.ts.map +1 -0
  87. package/dist/extensions/mcp/agent-plugin-loader.js +384 -0
  88. package/dist/extensions/mcp/agent-plugin-loader.js.map +1 -0
  89. package/dist/extensions/mcp/app-bridge.bundle.js +67 -0
  90. package/dist/extensions/mcp/commands.d.ts +47 -0
  91. package/dist/extensions/mcp/commands.d.ts.map +1 -0
  92. package/dist/extensions/mcp/commands.js +821 -0
  93. package/dist/extensions/mcp/commands.js.map +1 -0
  94. package/dist/extensions/mcp/config.d.ts +123 -38
  95. package/dist/extensions/mcp/config.d.ts.map +1 -1
  96. package/dist/extensions/mcp/config.js +1035 -70
  97. package/dist/extensions/mcp/config.js.map +1 -1
  98. package/dist/extensions/mcp/consent-manager.d.ts +14 -0
  99. package/dist/extensions/mcp/consent-manager.d.ts.map +1 -0
  100. package/dist/extensions/mcp/consent-manager.js +60 -0
  101. package/dist/extensions/mcp/consent-manager.js.map +1 -0
  102. package/dist/extensions/mcp/direct-tools.d.ts +11 -0
  103. package/dist/extensions/mcp/direct-tools.d.ts.map +1 -0
  104. package/dist/extensions/mcp/direct-tools.js +562 -0
  105. package/dist/extensions/mcp/direct-tools.js.map +1 -0
  106. package/dist/extensions/mcp/elicitation-handler.d.ts +18 -0
  107. package/dist/extensions/mcp/elicitation-handler.d.ts.map +1 -0
  108. package/dist/extensions/mcp/elicitation-handler.js +320 -0
  109. package/dist/extensions/mcp/elicitation-handler.js.map +1 -0
  110. package/dist/extensions/mcp/error-signal.d.ts +16 -0
  111. package/dist/extensions/mcp/error-signal.d.ts.map +1 -0
  112. package/dist/extensions/mcp/error-signal.js +22 -0
  113. package/dist/extensions/mcp/error-signal.js.map +1 -0
  114. package/dist/extensions/mcp/errors.d.ts +104 -0
  115. package/dist/extensions/mcp/errors.d.ts.map +1 -0
  116. package/dist/extensions/mcp/errors.js +171 -0
  117. package/dist/extensions/mcp/errors.js.map +1 -0
  118. package/dist/extensions/mcp/glimpse-ui.d.ts +10 -0
  119. package/dist/extensions/mcp/glimpse-ui.d.ts.map +1 -0
  120. package/dist/extensions/mcp/glimpse-ui.js +67 -0
  121. package/dist/extensions/mcp/glimpse-ui.js.map +1 -0
  122. package/dist/extensions/mcp/host-html-template.d.ts +17 -0
  123. package/dist/extensions/mcp/host-html-template.d.ts.map +1 -0
  124. package/dist/extensions/mcp/host-html-template.js +442 -0
  125. package/dist/extensions/mcp/host-html-template.js.map +1 -0
  126. package/dist/extensions/mcp/index.d.ts +20 -15
  127. package/dist/extensions/mcp/index.d.ts.map +1 -1
  128. package/dist/extensions/mcp/index.js +1113 -82
  129. package/dist/extensions/mcp/index.js.map +1 -1
  130. package/dist/extensions/mcp/init.d.ts +28 -0
  131. package/dist/extensions/mcp/init.d.ts.map +1 -0
  132. package/dist/extensions/mcp/init.js +631 -0
  133. package/dist/extensions/mcp/init.js.map +1 -0
  134. package/dist/extensions/mcp/json-schema-validator.d.ts +3 -0
  135. package/dist/extensions/mcp/json-schema-validator.d.ts.map +1 -0
  136. package/dist/extensions/mcp/json-schema-validator.js +53 -0
  137. package/dist/extensions/mcp/json-schema-validator.js.map +1 -0
  138. package/dist/extensions/mcp/lifecycle.d.ts +56 -0
  139. package/dist/extensions/mcp/lifecycle.d.ts.map +1 -0
  140. package/dist/extensions/mcp/lifecycle.js +395 -0
  141. package/dist/extensions/mcp/lifecycle.js.map +1 -0
  142. package/dist/extensions/mcp/logger.d.ts +52 -0
  143. package/dist/extensions/mcp/logger.d.ts.map +1 -0
  144. package/dist/extensions/mcp/logger.js +134 -0
  145. package/dist/extensions/mcp/logger.js.map +1 -0
  146. package/dist/extensions/mcp/mcp-auth-flow.d.ts +117 -0
  147. package/dist/extensions/mcp/mcp-auth-flow.d.ts.map +1 -0
  148. package/dist/extensions/mcp/mcp-auth-flow.js +869 -0
  149. package/dist/extensions/mcp/mcp-auth-flow.js.map +1 -0
  150. package/dist/extensions/mcp/mcp-auth.d.ts +162 -0
  151. package/dist/extensions/mcp/mcp-auth.d.ts.map +1 -0
  152. package/dist/extensions/mcp/mcp-auth.js +897 -0
  153. package/dist/extensions/mcp/mcp-auth.js.map +1 -0
  154. package/dist/extensions/mcp/mcp-bearer-store.d.ts +25 -0
  155. package/dist/extensions/mcp/mcp-bearer-store.d.ts.map +1 -0
  156. package/dist/extensions/mcp/mcp-bearer-store.js +350 -0
  157. package/dist/extensions/mcp/mcp-bearer-store.js.map +1 -0
  158. package/dist/extensions/mcp/mcp-callback-server.d.ts +54 -0
  159. package/dist/extensions/mcp/mcp-callback-server.d.ts.map +1 -0
  160. package/dist/extensions/mcp/mcp-callback-server.js +454 -0
  161. package/dist/extensions/mcp/mcp-callback-server.js.map +1 -0
  162. package/dist/extensions/mcp/mcp-code.d.ts +48 -0
  163. package/dist/extensions/mcp/mcp-code.d.ts.map +1 -0
  164. package/dist/extensions/mcp/mcp-code.js +358 -0
  165. package/dist/extensions/mcp/mcp-code.js.map +1 -0
  166. package/dist/extensions/mcp/mcp-keyring-helper.cjs +89 -0
  167. package/dist/extensions/mcp/mcp-oauth-provider.d.ts +135 -0
  168. package/dist/extensions/mcp/mcp-oauth-provider.d.ts.map +1 -0
  169. package/dist/extensions/mcp/mcp-oauth-provider.js +491 -0
  170. package/dist/extensions/mcp/mcp-oauth-provider.js.map +1 -0
  171. package/dist/extensions/mcp/mcp-output-guard.d.ts +59 -0
  172. package/dist/extensions/mcp/mcp-output-guard.d.ts.map +1 -0
  173. package/dist/extensions/mcp/mcp-output-guard.js +343 -0
  174. package/dist/extensions/mcp/mcp-output-guard.js.map +1 -0
  175. package/dist/extensions/mcp/mcp-panel.d.ts +71 -0
  176. package/dist/extensions/mcp/mcp-panel.d.ts.map +1 -0
  177. package/dist/extensions/mcp/mcp-panel.js +973 -0
  178. package/dist/extensions/mcp/mcp-panel.js.map +1 -0
  179. package/dist/extensions/mcp/mcp-probe.d.ts +7 -0
  180. package/dist/extensions/mcp/mcp-probe.d.ts.map +1 -0
  181. package/dist/extensions/mcp/mcp-probe.js +155 -0
  182. package/dist/extensions/mcp/mcp-probe.js.map +1 -0
  183. package/dist/extensions/mcp/mcp-script-worker.mjs +130 -0
  184. package/dist/extensions/mcp/mcp-setup-panel.d.ts +146 -0
  185. package/dist/extensions/mcp/mcp-setup-panel.d.ts.map +1 -0
  186. package/dist/extensions/mcp/mcp-setup-panel.js +1104 -0
  187. package/dist/extensions/mcp/mcp-setup-panel.js.map +1 -0
  188. package/dist/extensions/mcp/mcp-status.d.ts +12 -0
  189. package/dist/extensions/mcp/mcp-status.d.ts.map +1 -0
  190. package/dist/extensions/mcp/mcp-status.js +98 -0
  191. package/dist/extensions/mcp/mcp-status.js.map +1 -0
  192. package/dist/extensions/mcp/mcp-trace.d.ts +95 -0
  193. package/dist/extensions/mcp/mcp-trace.d.ts.map +1 -0
  194. package/dist/extensions/mcp/mcp-trace.js +252 -0
  195. package/dist/extensions/mcp/mcp-trace.js.map +1 -0
  196. package/dist/extensions/mcp/metadata-cache.d.ts +20 -0
  197. package/dist/extensions/mcp/metadata-cache.d.ts.map +1 -0
  198. package/dist/extensions/mcp/metadata-cache.js +318 -0
  199. package/dist/extensions/mcp/metadata-cache.js.map +1 -0
  200. package/dist/extensions/mcp/npx-resolver.d.ts +7 -0
  201. package/dist/extensions/mcp/npx-resolver.d.ts.map +1 -0
  202. package/dist/extensions/mcp/npx-resolver.js +505 -0
  203. package/dist/extensions/mcp/npx-resolver.js.map +1 -0
  204. package/dist/extensions/mcp/oauth.d.ts +21 -0
  205. package/dist/extensions/mcp/oauth.d.ts.map +1 -0
  206. package/dist/extensions/mcp/oauth.js +15 -0
  207. package/dist/extensions/mcp/oauth.js.map +1 -0
  208. package/dist/extensions/mcp/onboarding-state.d.ts +13 -0
  209. package/dist/extensions/mcp/onboarding-state.d.ts.map +1 -0
  210. package/dist/extensions/mcp/onboarding-state.js +65 -0
  211. package/dist/extensions/mcp/onboarding-state.js.map +1 -0
  212. package/dist/extensions/mcp/package-mcp-loader.d.ts +3 -0
  213. package/dist/extensions/mcp/package-mcp-loader.d.ts.map +1 -0
  214. package/dist/extensions/mcp/package-mcp-loader.js +170 -0
  215. package/dist/extensions/mcp/package-mcp-loader.js.map +1 -0
  216. package/dist/extensions/mcp/panel-keys.d.ts +21 -0
  217. package/dist/extensions/mcp/panel-keys.d.ts.map +1 -0
  218. package/dist/extensions/mcp/panel-keys.js +29 -0
  219. package/dist/extensions/mcp/panel-keys.js.map +1 -0
  220. package/dist/extensions/mcp/prompts.d.ts +63 -0
  221. package/dist/extensions/mcp/prompts.d.ts.map +1 -0
  222. package/dist/extensions/mcp/prompts.js +297 -0
  223. package/dist/extensions/mcp/prompts.js.map +1 -0
  224. package/dist/extensions/mcp/proxy-modes.d.ts +15 -0
  225. package/dist/extensions/mcp/proxy-modes.d.ts.map +1 -0
  226. package/dist/extensions/mcp/proxy-modes.js +1421 -0
  227. package/dist/extensions/mcp/proxy-modes.js.map +1 -0
  228. package/dist/extensions/mcp/request-headers-command.d.ts +11 -0
  229. package/dist/extensions/mcp/request-headers-command.d.ts.map +1 -0
  230. package/dist/extensions/mcp/request-headers-command.js +334 -0
  231. package/dist/extensions/mcp/request-headers-command.js.map +1 -0
  232. package/dist/extensions/mcp/resource-tools.d.ts +2 -0
  233. package/dist/extensions/mcp/resource-tools.d.ts.map +1 -0
  234. package/dist/extensions/mcp/resource-tools.js +15 -0
  235. package/dist/extensions/mcp/resource-tools.js.map +1 -0
  236. package/dist/extensions/mcp/runtime-owner.d.ts +14 -0
  237. package/dist/extensions/mcp/runtime-owner.d.ts.map +1 -0
  238. package/dist/extensions/mcp/runtime-owner.js +84 -0
  239. package/dist/extensions/mcp/runtime-owner.js.map +1 -0
  240. package/dist/extensions/mcp/sampling-handler.d.ts +18 -0
  241. package/dist/extensions/mcp/sampling-handler.d.ts.map +1 -0
  242. package/dist/extensions/mcp/sampling-handler.js +229 -0
  243. package/dist/extensions/mcp/sampling-handler.js.map +1 -0
  244. package/dist/extensions/mcp/search-ranking.d.ts +25 -0
  245. package/dist/extensions/mcp/search-ranking.d.ts.map +1 -0
  246. package/dist/extensions/mcp/search-ranking.js +234 -0
  247. package/dist/extensions/mcp/search-ranking.js.map +1 -0
  248. package/dist/extensions/mcp/server-manager.d.ts +116 -0
  249. package/dist/extensions/mcp/server-manager.d.ts.map +1 -0
  250. package/dist/extensions/mcp/server-manager.js +1052 -0
  251. package/dist/extensions/mcp/server-manager.js.map +1 -0
  252. package/dist/extensions/mcp/session-recovery.d.ts +27 -0
  253. package/dist/extensions/mcp/session-recovery.d.ts.map +1 -0
  254. package/dist/extensions/mcp/session-recovery.js +140 -0
  255. package/dist/extensions/mcp/session-recovery.js.map +1 -0
  256. package/dist/extensions/mcp/skills/mcp-scripting/SKILL.md +38 -0
  257. package/dist/extensions/mcp/state.d.ts +62 -0
  258. package/dist/extensions/mcp/state.d.ts.map +1 -0
  259. package/dist/extensions/mcp/state.js +2 -0
  260. package/dist/extensions/mcp/state.js.map +1 -0
  261. package/dist/extensions/mcp/tool-approval.d.ts +11 -0
  262. package/dist/extensions/mcp/tool-approval.d.ts.map +1 -0
  263. package/dist/extensions/mcp/tool-approval.js +156 -0
  264. package/dist/extensions/mcp/tool-approval.js.map +1 -0
  265. package/dist/extensions/mcp/tool-metadata.d.ts +11 -0
  266. package/dist/extensions/mcp/tool-metadata.d.ts.map +1 -0
  267. package/dist/extensions/mcp/tool-metadata.js +264 -0
  268. package/dist/extensions/mcp/tool-metadata.js.map +1 -0
  269. package/dist/extensions/mcp/tool-registrar.d.ts +21 -0
  270. package/dist/extensions/mcp/tool-registrar.d.ts.map +1 -0
  271. package/dist/extensions/mcp/tool-registrar.js +229 -0
  272. package/dist/extensions/mcp/tool-registrar.js.map +1 -0
  273. package/dist/extensions/mcp/tool-result-renderer.d.ts +83 -0
  274. package/dist/extensions/mcp/tool-result-renderer.d.ts.map +1 -0
  275. package/dist/extensions/mcp/tool-result-renderer.js +345 -0
  276. package/dist/extensions/mcp/tool-result-renderer.js.map +1 -0
  277. package/dist/extensions/mcp/ts-shape.d.ts +3 -0
  278. package/dist/extensions/mcp/ts-shape.d.ts.map +1 -0
  279. package/dist/extensions/mcp/ts-shape.js +160 -0
  280. package/dist/extensions/mcp/ts-shape.js.map +1 -0
  281. package/dist/extensions/mcp/types.d.ts +521 -0
  282. package/dist/extensions/mcp/types.d.ts.map +1 -0
  283. package/dist/extensions/mcp/types.js +294 -0
  284. package/dist/extensions/mcp/types.js.map +1 -0
  285. package/dist/extensions/mcp/ui-app-bridge-helpers.d.ts +7 -0
  286. package/dist/extensions/mcp/ui-app-bridge-helpers.d.ts.map +1 -0
  287. package/dist/extensions/mcp/ui-app-bridge-helpers.js +37 -0
  288. package/dist/extensions/mcp/ui-app-bridge-helpers.js.map +1 -0
  289. package/dist/extensions/mcp/ui-resource-handler.d.ts +18 -0
  290. package/dist/extensions/mcp/ui-resource-handler.d.ts.map +1 -0
  291. package/dist/extensions/mcp/ui-resource-handler.js +210 -0
  292. package/dist/extensions/mcp/ui-resource-handler.js.map +1 -0
  293. package/dist/extensions/mcp/ui-server.d.ts +52 -0
  294. package/dist/extensions/mcp/ui-server.d.ts.map +1 -0
  295. package/dist/extensions/mcp/ui-server.js +740 -0
  296. package/dist/extensions/mcp/ui-server.js.map +1 -0
  297. package/dist/extensions/mcp/ui-session.d.ts +40 -0
  298. package/dist/extensions/mcp/ui-session.d.ts.map +1 -0
  299. package/dist/extensions/mcp/ui-session.js +477 -0
  300. package/dist/extensions/mcp/ui-session.js.map +1 -0
  301. package/dist/extensions/mcp/ui-stream-types.d.ts +105 -0
  302. package/dist/extensions/mcp/ui-stream-types.d.ts.map +1 -0
  303. package/dist/extensions/mcp/ui-stream-types.js +61 -0
  304. package/dist/extensions/mcp/ui-stream-types.js.map +1 -0
  305. package/dist/extensions/mcp/ui-tool-visibility.d.ts +5 -0
  306. package/dist/extensions/mcp/ui-tool-visibility.d.ts.map +1 -0
  307. package/dist/extensions/mcp/ui-tool-visibility.js +27 -0
  308. package/dist/extensions/mcp/ui-tool-visibility.js.map +1 -0
  309. package/dist/extensions/mcp/unix-socket-transport.d.ts +15 -0
  310. package/dist/extensions/mcp/unix-socket-transport.d.ts.map +1 -0
  311. package/dist/extensions/mcp/unix-socket-transport.js +85 -0
  312. package/dist/extensions/mcp/unix-socket-transport.js.map +1 -0
  313. package/dist/extensions/mcp/utils.d.ts +32 -0
  314. package/dist/extensions/mcp/utils.d.ts.map +1 -0
  315. package/dist/extensions/mcp/utils.js +336 -0
  316. package/dist/extensions/mcp/utils.js.map +1 -0
  317. package/dist/extensions/subagent/index.d.ts +62 -1
  318. package/dist/extensions/subagent/index.d.ts.map +1 -1
  319. package/dist/extensions/subagent/index.js +195 -9
  320. package/dist/extensions/subagent/index.js.map +1 -1
  321. package/dist/extensions/subagent-render.d.ts +3 -0
  322. package/dist/extensions/subagent-render.d.ts.map +1 -0
  323. package/dist/extensions/subagent-render.js +39 -0
  324. package/dist/extensions/subagent-render.js.map +1 -0
  325. package/dist/extensions/web-access.d.ts.map +1 -1
  326. package/dist/extensions/web-access.js +1 -1
  327. package/dist/extensions/web-access.js.map +1 -1
  328. package/dist/index.d.ts +2 -0
  329. package/dist/index.d.ts.map +1 -1
  330. package/dist/index.js +20992 -2003
  331. package/dist/index.js.map +1 -1
  332. package/dist/mcp-keyring-helper.cjs +89 -0
  333. package/dist/mcp-script-worker.mjs +130 -0
  334. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  335. package/dist/modes/interactive/components/model-selector.js +1 -1
  336. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  337. package/dist/modes/interactive/components/response-separator.d.ts +1 -1
  338. package/dist/modes/interactive/components/response-separator.d.ts.map +1 -1
  339. package/dist/modes/interactive/components/response-separator.js +1 -1
  340. package/dist/modes/interactive/components/response-separator.js.map +1 -1
  341. package/dist/modes/interactive/components/tool-execution.d.ts +3 -2
  342. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  343. package/dist/modes/interactive/components/tool-execution.js +12 -2
  344. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  345. package/dist/modes/interactive/interactive-mode.d.ts +2 -0
  346. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  347. package/dist/modes/interactive/interactive-mode.js +14 -8
  348. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  349. package/dist/rpc-entry.js +20866 -1882
  350. package/dist/skills/mcp-scripting/SKILL.md +38 -0
  351. package/dist/utils/hidden-spawn.d.ts +29 -0
  352. package/dist/utils/hidden-spawn.d.ts.map +1 -0
  353. package/dist/utils/hidden-spawn.js +101 -0
  354. package/dist/utils/hidden-spawn.js.map +1 -0
  355. package/dist/vendor/ai.js +110 -35
  356. package/docs/mcp.md +178 -0
  357. package/docs/pi-subagents.md +75 -0
  358. package/docs/quickstart.md +1 -1
  359. package/docs/usage.md +2 -1
  360. package/examples/extensions/pi-subagents-worker-policy.ts +86 -0
  361. package/native/win32/build.mjs +95 -0
  362. package/native/win32/prebuilds/win32-x64/hidden-spawn.exe +0 -0
  363. package/native/win32/src/hidden-spawn.c +157 -0
  364. package/npm-shrinkwrap.json +728 -6
  365. package/package.json +21 -6
  366. package/dist/extensions/mcp/client.d.ts +0 -86
  367. package/dist/extensions/mcp/client.d.ts.map +0 -1
  368. package/dist/extensions/mcp/client.js +0 -275
  369. package/dist/extensions/mcp/client.js.map +0 -1
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: mcp-scripting
3
+ description: Write mcpScript JavaScript for discovering, inspecting, and calling MCP tools.
4
+ ---
5
+
6
+ # MCP scripting
7
+
8
+ For multi-call MCP work, write ordinary JavaScript with loops, filtering, chaining, fan-out, or other logic between calls. Run that source with `mcpScript`; it is the primary MCP orchestration surface. For a single MCP search, describe, status check, auth action, or tool call, use `mcp` instead.
9
+
10
+ Write the source naturally, then pass it as `mcpScript`'s `code` argument:
11
+
12
+ ```js
13
+ const { items } = await tools.search({ query: "search issues", server: "github" });
14
+ const candidate = items[0];
15
+ if (!candidate) return { error: "No matching tool" };
16
+
17
+ const details = await tools.describe({ path: candidate.path });
18
+ if (details.error) return details;
19
+
20
+ const result = await tools.call(details.path, { query: "is:open label:bug" });
21
+ if (!result.ok) return result;
22
+ emit({ tool: details.path, completed: true });
23
+ return result.data;
24
+ ```
25
+
26
+ ## Workflow
27
+
28
+ 1. Find candidate tools with `await tools.search({ query, server?, limit?, offset? })`.
29
+ 2. Inspect the exact returned path with `await tools.describe({ path })`.
30
+ 3. Call it with `tools.call(path, args)`.
31
+
32
+ Calls resolve to `{ ok: true, data }` or `{ ok: false, error }`; handle failed calls instead of expecting them to stop the script. `emit(value)` adds user-visible output before the final `return` value. `console` output is captured too.
33
+
34
+ `tools` is a non-enumerable proxy: `Object.keys(tools)` throws. Always use `tools.search` for discovery. When a known flat path is a valid identifier, direct calls such as `tools.github_search_issues(args)` are supported; use bracket syntax for hyphenated names: `tools["server_tool-name"](args)`. `search`, `call`, `describe`, and promise/serialization names (`then`, `catch`, `finally`, `toJSON`, `toString`, `valueOf`) are reserved on the proxy; if a flat path collides with one, call it via `tools.call("exact-path", args)`.
35
+
36
+ `tools.search` and `tools.describe` are asynchronous and must be awaited. The default script timeout is 30 seconds; the worker is terminated at the deadline, including for infinite loops. Every invocation still uses normal lazy connection, authentication, output guarding, and approval gates. Result details contain a concise `calls` trace with every search, describe, and call operation; each entry includes its query or path, outcome, and duration.
37
+
38
+ Use plain JavaScript loops and Promise utilities for composition. Fluent helpers such as `tools.find(...).one()`, `tools.parallel(...)`, and `tools.retry(...)` are not provided.
@@ -0,0 +1,29 @@
1
+ import { type ChildProcess, type SpawnOptions } from "node:child_process";
2
+ /**
3
+ * Windowless relauncher. See native/win32/src/hidden-spawn.c.
4
+ * The parent spawns this GUI-subsystem exe, which starts the real console
5
+ * binary with CREATE_NO_WINDOW and no SW_HIDE, so Windows never paints a console.
6
+ */
7
+ export declare const HIDDEN_SPAWN_TARGET_ENV = "NEXUS_HIDDEN_SPAWN_TARGET";
8
+ export declare const HIDDEN_SPAWN_SCRIPT_ENV = "NEXUS_HIDDEN_SPAWN_SCRIPT";
9
+ export interface HiddenSpawnOptions {
10
+ platform?: NodeJS.Platform;
11
+ /** Explicit helper path. Pass an empty string to skip the helper. */
12
+ hiddenSpawn?: string;
13
+ execPath?: string;
14
+ }
15
+ /** Locate the built helper next to this package or next to a compiled CLI binary. */
16
+ export declare function findHiddenSpawnBinary(moduleUrl?: string, execPath?: string, arch?: string): string | undefined;
17
+ /**
18
+ * Point pi-subagents' child binary at the windowless helper.
19
+ * Returns true when the helper was installed into env.
20
+ * An explicit PI_SUBAGENT_PI_BINARY is left untouched by the caller.
21
+ */
22
+ export declare function applyHiddenChildLaunch(env: NodeJS.ProcessEnv, resolved: string, binaryEnv: string, options?: HiddenSpawnOptions): boolean;
23
+ /**
24
+ * Spawn a child without a console window on Windows.
25
+ * Uses the helper when it is built; otherwise windowsHide with detached forced off,
26
+ * because DETACHED_PROCESS makes Windows ignore CREATE_NO_WINDOW.
27
+ */
28
+ export declare function spawnWithoutConsole(command: string, args: string[], options?: SpawnOptions): ChildProcess;
29
+ //# sourceMappingURL=hidden-spawn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hidden-spawn.d.ts","sourceRoot":"","sources":["../../src/utils/hidden-spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAS,MAAM,oBAAoB,CAAC;AAKjF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AACnE,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD,qFAAqF;AACrF,wBAAgB,qBAAqB,CACpC,SAAS,GAAE,MAAwB,EACnC,QAAQ,GAAE,MAAyB,EACnC,IAAI,GAAE,MAAqB,GACzB,MAAM,GAAG,SAAS,CAmBpB;AAMD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACrC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAuB,GAC9B,OAAO,CAkBT;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,YAAiB,GAAG,YAAY,CAwB7G","sourcesContent":["import { type ChildProcess, type SpawnOptions, spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/**\n * Windowless relauncher. See native/win32/src/hidden-spawn.c.\n * The parent spawns this GUI-subsystem exe, which starts the real console\n * binary with CREATE_NO_WINDOW and no SW_HIDE, so Windows never paints a console.\n */\nexport const HIDDEN_SPAWN_TARGET_ENV = \"NEXUS_HIDDEN_SPAWN_TARGET\";\nexport const HIDDEN_SPAWN_SCRIPT_ENV = \"NEXUS_HIDDEN_SPAWN_SCRIPT\";\n\nexport interface HiddenSpawnOptions {\n\tplatform?: NodeJS.Platform;\n\t/** Explicit helper path. Pass an empty string to skip the helper. */\n\thiddenSpawn?: string;\n\texecPath?: string;\n}\n\nfunction prebuildArch(arch: string): \"x64\" | \"arm64\" | undefined {\n\tif (arch === \"arm64\") return \"arm64\";\n\tif (arch === \"x64\") return \"x64\";\n\treturn undefined;\n}\n\n/** Locate the built helper next to this package or next to a compiled CLI binary. */\nexport function findHiddenSpawnBinary(\n\tmoduleUrl: string = import.meta.url,\n\texecPath: string = process.execPath,\n\tarch: string = process.arch,\n): string | undefined {\n\tconst folder = prebuildArch(arch);\n\tif (!folder) return undefined;\n\tconst relative = path.join(\"prebuilds\", `win32-${folder}`, \"hidden-spawn.exe\");\n\tconst here = path.dirname(fileURLToPath(moduleUrl));\n\tconst candidates = [\n\t\tpath.join(here, \"hidden-spawn.exe\"),\n\t\tpath.resolve(here, \"../native/win32\", relative),\n\t\tpath.resolve(here, \"../../native/win32\", relative),\n\t\tpath.resolve(here, \"../../../native/win32\", relative),\n\t\tpath.join(path.dirname(execPath), \"hidden-spawn.exe\"),\n\t];\n\treturn candidates.find((candidate) => {\n\t\ttry {\n\t\t\treturn fs.existsSync(candidate);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t});\n}\n\nfunction isScriptPath(filePath: string): boolean {\n\treturn /\\.(?:mjs|cjs|js)$/i.test(filePath);\n}\n\n/**\n * Point pi-subagents' child binary at the windowless helper.\n * Returns true when the helper was installed into env.\n * An explicit PI_SUBAGENT_PI_BINARY is left untouched by the caller.\n */\nexport function applyHiddenChildLaunch(\n\tenv: NodeJS.ProcessEnv,\n\tresolved: string,\n\tbinaryEnv: string,\n\toptions: HiddenSpawnOptions = {},\n): boolean {\n\tconst platform = options.platform ?? process.platform;\n\tif (platform !== \"win32\") return false;\n\tconst helper =\n\t\toptions.hiddenSpawn !== undefined\n\t\t\t? options.hiddenSpawn.trim() || undefined\n\t\t\t: findHiddenSpawnBinary(import.meta.url, options.execPath ?? process.execPath);\n\tif (!helper) return false;\n\tconst execPath = options.execPath ?? process.execPath;\n\tenv[binaryEnv] = helper;\n\tif (isScriptPath(resolved)) {\n\t\tenv[HIDDEN_SPAWN_TARGET_ENV] = execPath;\n\t\tenv[HIDDEN_SPAWN_SCRIPT_ENV] = resolved;\n\t} else {\n\t\tenv[HIDDEN_SPAWN_TARGET_ENV] = resolved;\n\t\tdelete env[HIDDEN_SPAWN_SCRIPT_ENV];\n\t}\n\treturn true;\n}\n\n/**\n * Spawn a child without a console window on Windows.\n * Uses the helper when it is built; otherwise windowsHide with detached forced off,\n * because DETACHED_PROCESS makes Windows ignore CREATE_NO_WINDOW.\n */\nexport function spawnWithoutConsole(command: string, args: string[], options: SpawnOptions = {}): ChildProcess {\n\tif (process.platform !== \"win32\") {\n\t\treturn spawn(command, args, options);\n\t}\n\tconst helper = findHiddenSpawnBinary();\n\tconst env = { ...(options.env ?? process.env) };\n\tif (helper) {\n\t\tenv[HIDDEN_SPAWN_TARGET_ENV] = command;\n\t\tdelete env[HIDDEN_SPAWN_SCRIPT_ENV];\n\t\treturn spawn(helper, args, {\n\t\t\t...options,\n\t\t\tdetached: false,\n\t\t\tenv,\n\t\t\tshell: false,\n\t\t\twindowsHide: true,\n\t\t});\n\t}\n\treturn spawn(command, args, {\n\t\t...options,\n\t\tdetached: false,\n\t\tenv,\n\t\tshell: false,\n\t\twindowsHide: true,\n\t});\n}\n"]}
@@ -0,0 +1,101 @@
1
+ import { spawn } from "node:child_process";
2
+ import * as fs from "node:fs";
3
+ import * as path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ /**
6
+ * Windowless relauncher. See native/win32/src/hidden-spawn.c.
7
+ * The parent spawns this GUI-subsystem exe, which starts the real console
8
+ * binary with CREATE_NO_WINDOW and no SW_HIDE, so Windows never paints a console.
9
+ */
10
+ export const HIDDEN_SPAWN_TARGET_ENV = "NEXUS_HIDDEN_SPAWN_TARGET";
11
+ export const HIDDEN_SPAWN_SCRIPT_ENV = "NEXUS_HIDDEN_SPAWN_SCRIPT";
12
+ function prebuildArch(arch) {
13
+ if (arch === "arm64")
14
+ return "arm64";
15
+ if (arch === "x64")
16
+ return "x64";
17
+ return undefined;
18
+ }
19
+ /** Locate the built helper next to this package or next to a compiled CLI binary. */
20
+ export function findHiddenSpawnBinary(moduleUrl = import.meta.url, execPath = process.execPath, arch = process.arch) {
21
+ const folder = prebuildArch(arch);
22
+ if (!folder)
23
+ return undefined;
24
+ const relative = path.join("prebuilds", `win32-${folder}`, "hidden-spawn.exe");
25
+ const here = path.dirname(fileURLToPath(moduleUrl));
26
+ const candidates = [
27
+ path.join(here, "hidden-spawn.exe"),
28
+ path.resolve(here, "../native/win32", relative),
29
+ path.resolve(here, "../../native/win32", relative),
30
+ path.resolve(here, "../../../native/win32", relative),
31
+ path.join(path.dirname(execPath), "hidden-spawn.exe"),
32
+ ];
33
+ return candidates.find((candidate) => {
34
+ try {
35
+ return fs.existsSync(candidate);
36
+ }
37
+ catch {
38
+ return false;
39
+ }
40
+ });
41
+ }
42
+ function isScriptPath(filePath) {
43
+ return /\.(?:mjs|cjs|js)$/i.test(filePath);
44
+ }
45
+ /**
46
+ * Point pi-subagents' child binary at the windowless helper.
47
+ * Returns true when the helper was installed into env.
48
+ * An explicit PI_SUBAGENT_PI_BINARY is left untouched by the caller.
49
+ */
50
+ export function applyHiddenChildLaunch(env, resolved, binaryEnv, options = {}) {
51
+ const platform = options.platform ?? process.platform;
52
+ if (platform !== "win32")
53
+ return false;
54
+ const helper = options.hiddenSpawn !== undefined
55
+ ? options.hiddenSpawn.trim() || undefined
56
+ : findHiddenSpawnBinary(import.meta.url, options.execPath ?? process.execPath);
57
+ if (!helper)
58
+ return false;
59
+ const execPath = options.execPath ?? process.execPath;
60
+ env[binaryEnv] = helper;
61
+ if (isScriptPath(resolved)) {
62
+ env[HIDDEN_SPAWN_TARGET_ENV] = execPath;
63
+ env[HIDDEN_SPAWN_SCRIPT_ENV] = resolved;
64
+ }
65
+ else {
66
+ env[HIDDEN_SPAWN_TARGET_ENV] = resolved;
67
+ delete env[HIDDEN_SPAWN_SCRIPT_ENV];
68
+ }
69
+ return true;
70
+ }
71
+ /**
72
+ * Spawn a child without a console window on Windows.
73
+ * Uses the helper when it is built; otherwise windowsHide with detached forced off,
74
+ * because DETACHED_PROCESS makes Windows ignore CREATE_NO_WINDOW.
75
+ */
76
+ export function spawnWithoutConsole(command, args, options = {}) {
77
+ if (process.platform !== "win32") {
78
+ return spawn(command, args, options);
79
+ }
80
+ const helper = findHiddenSpawnBinary();
81
+ const env = { ...(options.env ?? process.env) };
82
+ if (helper) {
83
+ env[HIDDEN_SPAWN_TARGET_ENV] = command;
84
+ delete env[HIDDEN_SPAWN_SCRIPT_ENV];
85
+ return spawn(helper, args, {
86
+ ...options,
87
+ detached: false,
88
+ env,
89
+ shell: false,
90
+ windowsHide: true,
91
+ });
92
+ }
93
+ return spawn(command, args, {
94
+ ...options,
95
+ detached: false,
96
+ env,
97
+ shell: false,
98
+ windowsHide: true,
99
+ });
100
+ }
101
+ //# sourceMappingURL=hidden-spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hidden-spawn.js","sourceRoot":"","sources":["../../src/utils/hidden-spawn.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcess, type SpawnOptions, spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/**\n * Windowless relauncher. See native/win32/src/hidden-spawn.c.\n * The parent spawns this GUI-subsystem exe, which starts the real console\n * binary with CREATE_NO_WINDOW and no SW_HIDE, so Windows never paints a console.\n */\nexport const HIDDEN_SPAWN_TARGET_ENV = \"NEXUS_HIDDEN_SPAWN_TARGET\";\nexport const HIDDEN_SPAWN_SCRIPT_ENV = \"NEXUS_HIDDEN_SPAWN_SCRIPT\";\n\nexport interface HiddenSpawnOptions {\n\tplatform?: NodeJS.Platform;\n\t/** Explicit helper path. Pass an empty string to skip the helper. */\n\thiddenSpawn?: string;\n\texecPath?: string;\n}\n\nfunction prebuildArch(arch: string): \"x64\" | \"arm64\" | undefined {\n\tif (arch === \"arm64\") return \"arm64\";\n\tif (arch === \"x64\") return \"x64\";\n\treturn undefined;\n}\n\n/** Locate the built helper next to this package or next to a compiled CLI binary. */\nexport function findHiddenSpawnBinary(\n\tmoduleUrl: string = import.meta.url,\n\texecPath: string = process.execPath,\n\tarch: string = process.arch,\n): string | undefined {\n\tconst folder = prebuildArch(arch);\n\tif (!folder) return undefined;\n\tconst relative = path.join(\"prebuilds\", `win32-${folder}`, \"hidden-spawn.exe\");\n\tconst here = path.dirname(fileURLToPath(moduleUrl));\n\tconst candidates = [\n\t\tpath.join(here, \"hidden-spawn.exe\"),\n\t\tpath.resolve(here, \"../native/win32\", relative),\n\t\tpath.resolve(here, \"../../native/win32\", relative),\n\t\tpath.resolve(here, \"../../../native/win32\", relative),\n\t\tpath.join(path.dirname(execPath), \"hidden-spawn.exe\"),\n\t];\n\treturn candidates.find((candidate) => {\n\t\ttry {\n\t\t\treturn fs.existsSync(candidate);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t});\n}\n\nfunction isScriptPath(filePath: string): boolean {\n\treturn /\\.(?:mjs|cjs|js)$/i.test(filePath);\n}\n\n/**\n * Point pi-subagents' child binary at the windowless helper.\n * Returns true when the helper was installed into env.\n * An explicit PI_SUBAGENT_PI_BINARY is left untouched by the caller.\n */\nexport function applyHiddenChildLaunch(\n\tenv: NodeJS.ProcessEnv,\n\tresolved: string,\n\tbinaryEnv: string,\n\toptions: HiddenSpawnOptions = {},\n): boolean {\n\tconst platform = options.platform ?? process.platform;\n\tif (platform !== \"win32\") return false;\n\tconst helper =\n\t\toptions.hiddenSpawn !== undefined\n\t\t\t? options.hiddenSpawn.trim() || undefined\n\t\t\t: findHiddenSpawnBinary(import.meta.url, options.execPath ?? process.execPath);\n\tif (!helper) return false;\n\tconst execPath = options.execPath ?? process.execPath;\n\tenv[binaryEnv] = helper;\n\tif (isScriptPath(resolved)) {\n\t\tenv[HIDDEN_SPAWN_TARGET_ENV] = execPath;\n\t\tenv[HIDDEN_SPAWN_SCRIPT_ENV] = resolved;\n\t} else {\n\t\tenv[HIDDEN_SPAWN_TARGET_ENV] = resolved;\n\t\tdelete env[HIDDEN_SPAWN_SCRIPT_ENV];\n\t}\n\treturn true;\n}\n\n/**\n * Spawn a child without a console window on Windows.\n * Uses the helper when it is built; otherwise windowsHide with detached forced off,\n * because DETACHED_PROCESS makes Windows ignore CREATE_NO_WINDOW.\n */\nexport function spawnWithoutConsole(command: string, args: string[], options: SpawnOptions = {}): ChildProcess {\n\tif (process.platform !== \"win32\") {\n\t\treturn spawn(command, args, options);\n\t}\n\tconst helper = findHiddenSpawnBinary();\n\tconst env = { ...(options.env ?? process.env) };\n\tif (helper) {\n\t\tenv[HIDDEN_SPAWN_TARGET_ENV] = command;\n\t\tdelete env[HIDDEN_SPAWN_SCRIPT_ENV];\n\t\treturn spawn(helper, args, {\n\t\t\t...options,\n\t\t\tdetached: false,\n\t\t\tenv,\n\t\t\tshell: false,\n\t\t\twindowsHide: true,\n\t\t});\n\t}\n\treturn spawn(command, args, {\n\t\t...options,\n\t\tdetached: false,\n\t\tenv,\n\t\tshell: false,\n\t\twindowsHide: true,\n\t});\n}\n"]}