@xyit/wellspring 0.0.0-stage → 1.0.0

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 (459) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +829 -2
  3. package/dist/agent/pending-asks.d.ts +20 -0
  4. package/dist/agent/pending-asks.js +70 -0
  5. package/dist/agent/pending-asks.js.map +1 -0
  6. package/dist/agent/task-registry.d.ts +14 -0
  7. package/dist/agent/task-registry.js +80 -0
  8. package/dist/agent/task-registry.js.map +1 -0
  9. package/dist/agent/tool-context.d.ts +30 -0
  10. package/dist/agent/tool-context.js +10 -0
  11. package/dist/agent/tool-context.js.map +1 -0
  12. package/dist/agent/usage.d.ts +40 -0
  13. package/dist/agent/usage.js +122 -0
  14. package/dist/agent/usage.js.map +1 -0
  15. package/dist/api/host/agent.d.ts +165 -0
  16. package/dist/api/host/agent.js +5 -0
  17. package/dist/api/host/agent.js.map +1 -0
  18. package/dist/api/host/events.d.ts +2 -0
  19. package/dist/api/host/events.js +6 -0
  20. package/dist/api/host/events.js.map +1 -0
  21. package/dist/api/host/exec.d.ts +36 -0
  22. package/dist/api/host/exec.js +10 -0
  23. package/dist/api/host/exec.js.map +1 -0
  24. package/dist/api/host/fs.d.ts +24 -0
  25. package/dist/api/host/fs.js +7 -0
  26. package/dist/api/host/fs.js.map +1 -0
  27. package/dist/api/host/hooks.d.ts +210 -0
  28. package/dist/api/host/hooks.js +401 -0
  29. package/dist/api/host/hooks.js.map +1 -0
  30. package/dist/api/host/host.d.ts +36 -0
  31. package/dist/api/host/host.js +53 -0
  32. package/dist/api/host/host.js.map +1 -0
  33. package/dist/api/host/http.d.ts +58 -0
  34. package/dist/api/host/http.js +6 -0
  35. package/dist/api/host/http.js.map +1 -0
  36. package/dist/api/host/index.d.ts +15 -0
  37. package/dist/api/host/index.js +20 -0
  38. package/dist/api/host/index.js.map +1 -0
  39. package/dist/api/host/models.d.ts +65 -0
  40. package/dist/api/host/models.js +8 -0
  41. package/dist/api/host/models.js.map +1 -0
  42. package/dist/api/host/network.d.ts +22 -0
  43. package/dist/api/host/network.js +7 -0
  44. package/dist/api/host/network.js.map +1 -0
  45. package/dist/api/host/plugin.d.ts +138 -0
  46. package/dist/api/host/plugin.js +6 -0
  47. package/dist/api/host/plugin.js.map +1 -0
  48. package/dist/api/host/plugins.d.ts +45 -0
  49. package/dist/api/host/plugins.js +6 -0
  50. package/dist/api/host/plugins.js.map +1 -0
  51. package/dist/api/host/pty.d.ts +55 -0
  52. package/dist/api/host/pty.js +21 -0
  53. package/dist/api/host/pty.js.map +1 -0
  54. package/dist/api/host/session.d.ts +5 -0
  55. package/dist/api/host/session.js +52 -0
  56. package/dist/api/host/session.js.map +1 -0
  57. package/dist/api/host/version.d.ts +2 -0
  58. package/dist/api/host/version.js +3 -0
  59. package/dist/api/host/version.js.map +1 -0
  60. package/dist/api/host/workspace.d.ts +38 -0
  61. package/dist/api/host/workspace.js +9 -0
  62. package/dist/api/host/workspace.js.map +1 -0
  63. package/dist/api/plugin/http-client.d.ts +42 -0
  64. package/dist/api/plugin/http-client.js +364 -0
  65. package/dist/api/plugin/http-client.js.map +1 -0
  66. package/dist/api/plugin/http-protocol.d.ts +152 -0
  67. package/dist/api/plugin/http-protocol.js +49 -0
  68. package/dist/api/plugin/http-protocol.js.map +1 -0
  69. package/dist/api/result/result.d.ts +16 -0
  70. package/dist/api/result/result.js +43 -0
  71. package/dist/api/result/result.js.map +1 -0
  72. package/dist/commands/agent-turn.d.ts +63 -0
  73. package/dist/commands/agent-turn.js +687 -0
  74. package/dist/commands/agent-turn.js.map +1 -0
  75. package/dist/commands/ask-prompt.d.ts +6 -0
  76. package/dist/commands/ask-prompt.js +49 -0
  77. package/dist/commands/ask-prompt.js.map +1 -0
  78. package/dist/commands/config.d.ts +2 -0
  79. package/dist/commands/config.js +283 -0
  80. package/dist/commands/config.js.map +1 -0
  81. package/dist/commands/conversation.d.ts +51 -0
  82. package/dist/commands/conversation.js +630 -0
  83. package/dist/commands/conversation.js.map +1 -0
  84. package/dist/commands/doctor.d.ts +2 -0
  85. package/dist/commands/doctor.js +77 -0
  86. package/dist/commands/doctor.js.map +1 -0
  87. package/dist/commands/exec-approval.d.ts +3 -0
  88. package/dist/commands/exec-approval.js +80 -0
  89. package/dist/commands/exec-approval.js.map +1 -0
  90. package/dist/commands/help.d.ts +2 -0
  91. package/dist/commands/help.js +35 -0
  92. package/dist/commands/help.js.map +1 -0
  93. package/dist/commands/key.d.ts +2 -0
  94. package/dist/commands/key.js +226 -0
  95. package/dist/commands/key.js.map +1 -0
  96. package/dist/commands/plugin.d.ts +2 -0
  97. package/dist/commands/plugin.js +188 -0
  98. package/dist/commands/plugin.js.map +1 -0
  99. package/dist/commands/session.d.ts +2 -0
  100. package/dist/commands/session.js +167 -0
  101. package/dist/commands/session.js.map +1 -0
  102. package/dist/commands/shared.d.ts +35 -0
  103. package/dist/commands/shared.js +66 -0
  104. package/dist/commands/shared.js.map +1 -0
  105. package/dist/commands/start.d.ts +2 -0
  106. package/dist/commands/start.js +75 -0
  107. package/dist/commands/start.js.map +1 -0
  108. package/dist/commands/stop.d.ts +2 -0
  109. package/dist/commands/stop.js +24 -0
  110. package/dist/commands/stop.js.map +1 -0
  111. package/dist/commands/version.d.ts +2 -0
  112. package/dist/commands/version.js +33 -0
  113. package/dist/commands/version.js.map +1 -0
  114. package/dist/config/codes.d.ts +13 -0
  115. package/dist/config/codes.js +15 -0
  116. package/dist/config/codes.js.map +1 -0
  117. package/dist/config/credentials.d.ts +67 -0
  118. package/dist/config/credentials.js +214 -0
  119. package/dist/config/credentials.js.map +1 -0
  120. package/dist/config/defaults.d.ts +5 -0
  121. package/dist/config/defaults.js +31 -0
  122. package/dist/config/defaults.js.map +1 -0
  123. package/dist/config/index.d.ts +5 -0
  124. package/dist/config/index.js +10 -0
  125. package/dist/config/index.js.map +1 -0
  126. package/dist/config/loader.d.ts +10 -0
  127. package/dist/config/loader.js +68 -0
  128. package/dist/config/loader.js.map +1 -0
  129. package/dist/config/providers.d.ts +30 -0
  130. package/dist/config/providers.js +97 -0
  131. package/dist/config/providers.js.map +1 -0
  132. package/dist/config/types.d.ts +75 -0
  133. package/dist/config/types.js +4 -0
  134. package/dist/config/types.js.map +1 -0
  135. package/dist/config/validate.d.ts +4 -0
  136. package/dist/config/validate.js +391 -0
  137. package/dist/config/validate.js.map +1 -0
  138. package/dist/display/markdown.d.ts +7 -0
  139. package/dist/display/markdown.js +116 -0
  140. package/dist/display/markdown.js.map +1 -0
  141. package/dist/display/tool-label.d.ts +6 -0
  142. package/dist/display/tool-label.js +81 -0
  143. package/dist/display/tool-label.js.map +1 -0
  144. package/dist/event/event.d.ts +27 -0
  145. package/dist/event/event.js +152 -0
  146. package/dist/event/event.js.map +1 -0
  147. package/dist/index.d.ts +2 -0
  148. package/dist/index.js +308 -0
  149. package/dist/index.js.map +1 -0
  150. package/dist/input/codes.d.ts +15 -0
  151. package/dist/input/codes.js +20 -0
  152. package/dist/input/codes.js.map +1 -0
  153. package/dist/input/commands.d.ts +10 -0
  154. package/dist/input/commands.js +65 -0
  155. package/dist/input/commands.js.map +1 -0
  156. package/dist/input/help.d.ts +8 -0
  157. package/dist/input/help.js +51 -0
  158. package/dist/input/help.js.map +1 -0
  159. package/dist/input/index.d.ts +6 -0
  160. package/dist/input/index.js +10 -0
  161. package/dist/input/index.js.map +1 -0
  162. package/dist/input/parse-options.d.ts +11 -0
  163. package/dist/input/parse-options.js +51 -0
  164. package/dist/input/parse-options.js.map +1 -0
  165. package/dist/input/parse.d.ts +3 -0
  166. package/dist/input/parse.js +119 -0
  167. package/dist/input/parse.js.map +1 -0
  168. package/dist/input/types.d.ts +17 -0
  169. package/dist/input/types.js +2 -0
  170. package/dist/input/types.js.map +1 -0
  171. package/dist/logger/elog4js.d.ts +65 -0
  172. package/dist/logger/elog4js.js +305 -0
  173. package/dist/logger/elog4js.js.map +1 -0
  174. package/dist/logger/logger.d.ts +37 -0
  175. package/dist/logger/logger.js +196 -0
  176. package/dist/logger/logger.js.map +1 -0
  177. package/dist/network/index.d.ts +2 -0
  178. package/dist/network/index.js +6 -0
  179. package/dist/network/index.js.map +1 -0
  180. package/dist/network/openai.d.ts +117 -0
  181. package/dist/network/openai.js +443 -0
  182. package/dist/network/openai.js.map +1 -0
  183. package/dist/network/proxy.d.ts +9 -0
  184. package/dist/network/proxy.js +72 -0
  185. package/dist/network/proxy.js.map +1 -0
  186. package/dist/network/web.d.ts +34 -0
  187. package/dist/network/web.js +152 -0
  188. package/dist/network/web.js.map +1 -0
  189. package/dist/platform/clipboard.d.ts +15 -0
  190. package/dist/platform/clipboard.js +82 -0
  191. package/dist/platform/clipboard.js.map +1 -0
  192. package/dist/platform/exec.d.ts +28 -0
  193. package/dist/platform/exec.js +95 -0
  194. package/dist/platform/exec.js.map +1 -0
  195. package/dist/platform/file.d.ts +38 -0
  196. package/dist/platform/file.js +197 -0
  197. package/dist/platform/file.js.map +1 -0
  198. package/dist/platform/index.d.ts +7 -0
  199. package/dist/platform/index.js +12 -0
  200. package/dist/platform/index.js.map +1 -0
  201. package/dist/platform/notification.d.ts +14 -0
  202. package/dist/platform/notification.js +82 -0
  203. package/dist/platform/notification.js.map +1 -0
  204. package/dist/platform/open-external.d.ts +10 -0
  205. package/dist/platform/open-external.js +105 -0
  206. package/dist/platform/open-external.js.map +1 -0
  207. package/dist/platform/os.d.ts +20 -0
  208. package/dist/platform/os.js +86 -0
  209. package/dist/platform/os.js.map +1 -0
  210. package/dist/platform/path.d.ts +32 -0
  211. package/dist/platform/path.js +154 -0
  212. package/dist/platform/path.js.map +1 -0
  213. package/dist/plugin/access-guard.d.ts +1 -0
  214. package/dist/plugin/access-guard.js +40 -0
  215. package/dist/plugin/access-guard.js.map +1 -0
  216. package/dist/plugin/agent-service.d.ts +25 -0
  217. package/dist/plugin/agent-service.js +809 -0
  218. package/dist/plugin/agent-service.js.map +1 -0
  219. package/dist/plugin/agent-tools.d.ts +12 -0
  220. package/dist/plugin/agent-tools.js +31 -0
  221. package/dist/plugin/agent-tools.js.map +1 -0
  222. package/dist/plugin/capabilities.d.ts +26 -0
  223. package/dist/plugin/capabilities.js +192 -0
  224. package/dist/plugin/capabilities.js.map +1 -0
  225. package/dist/plugin/console-guard.d.ts +2 -0
  226. package/dist/plugin/console-guard.js +52 -0
  227. package/dist/plugin/console-guard.js.map +1 -0
  228. package/dist/plugin/data-access.d.ts +15 -0
  229. package/dist/plugin/data-access.js +57 -0
  230. package/dist/plugin/data-access.js.map +1 -0
  231. package/dist/plugin/fs.d.ts +3 -0
  232. package/dist/plugin/fs.js +93 -0
  233. package/dist/plugin/fs.js.map +1 -0
  234. package/dist/plugin/host-alias.d.ts +2 -0
  235. package/dist/plugin/host-alias.js +57 -0
  236. package/dist/plugin/host-alias.js.map +1 -0
  237. package/dist/plugin/index.d.ts +7 -0
  238. package/dist/plugin/index.js +11 -0
  239. package/dist/plugin/index.js.map +1 -0
  240. package/dist/plugin/install.d.ts +12 -0
  241. package/dist/plugin/install.js +114 -0
  242. package/dist/plugin/install.js.map +1 -0
  243. package/dist/plugin/loader.d.ts +45 -0
  244. package/dist/plugin/loader.js +739 -0
  245. package/dist/plugin/loader.js.map +1 -0
  246. package/dist/plugin/manage.d.ts +31 -0
  247. package/dist/plugin/manage.js +265 -0
  248. package/dist/plugin/manage.js.map +1 -0
  249. package/dist/plugin/models-service.d.ts +15 -0
  250. package/dist/plugin/models-service.js +317 -0
  251. package/dist/plugin/models-service.js.map +1 -0
  252. package/dist/plugin/network-service.d.ts +10 -0
  253. package/dist/plugin/network-service.js +87 -0
  254. package/dist/plugin/network-service.js.map +1 -0
  255. package/dist/plugin/paths.d.ts +6 -0
  256. package/dist/plugin/paths.js +15 -0
  257. package/dist/plugin/paths.js.map +1 -0
  258. package/dist/plugin/registry.d.ts +17 -0
  259. package/dist/plugin/registry.js +82 -0
  260. package/dist/plugin/registry.js.map +1 -0
  261. package/dist/plugin/runtime.d.ts +9 -0
  262. package/dist/plugin/runtime.js +43 -0
  263. package/dist/plugin/runtime.js.map +1 -0
  264. package/dist/plugin/scaffold.d.ts +13 -0
  265. package/dist/plugin/scaffold.js +126 -0
  266. package/dist/plugin/scaffold.js.map +1 -0
  267. package/dist/plugin/state.d.ts +6 -0
  268. package/dist/plugin/state.js +38 -0
  269. package/dist/plugin/state.js.map +1 -0
  270. package/dist/plugin/zip.d.ts +7 -0
  271. package/dist/plugin/zip.js +138 -0
  272. package/dist/plugin/zip.js.map +1 -0
  273. package/dist/sandbox/audit.d.ts +12 -0
  274. package/dist/sandbox/audit.js +20 -0
  275. package/dist/sandbox/audit.js.map +1 -0
  276. package/dist/sandbox/backends/bwrap.d.ts +28 -0
  277. package/dist/sandbox/backends/bwrap.js +197 -0
  278. package/dist/sandbox/backends/bwrap.js.map +1 -0
  279. package/dist/sandbox/backends/direct.d.ts +7 -0
  280. package/dist/sandbox/backends/direct.js +32 -0
  281. package/dist/sandbox/backends/direct.js.map +1 -0
  282. package/dist/sandbox/bridge-state.d.ts +13 -0
  283. package/dist/sandbox/bridge-state.js +12 -0
  284. package/dist/sandbox/bridge-state.js.map +1 -0
  285. package/dist/sandbox/index.d.ts +5 -0
  286. package/dist/sandbox/index.js +6 -0
  287. package/dist/sandbox/index.js.map +1 -0
  288. package/dist/sandbox/manager.d.ts +8 -0
  289. package/dist/sandbox/manager.js +325 -0
  290. package/dist/sandbox/manager.js.map +1 -0
  291. package/dist/sandbox/memory-limit.d.ts +44 -0
  292. package/dist/sandbox/memory-limit.js +193 -0
  293. package/dist/sandbox/memory-limit.js.map +1 -0
  294. package/dist/sandbox/plugin-client.d.ts +80 -0
  295. package/dist/sandbox/plugin-client.js +1601 -0
  296. package/dist/sandbox/plugin-client.js.map +1 -0
  297. package/dist/sandbox/plugin-host.d.ts +1 -0
  298. package/dist/sandbox/plugin-host.js +1001 -0
  299. package/dist/sandbox/plugin-host.js.map +1 -0
  300. package/dist/sandbox/protocol.d.ts +43 -0
  301. package/dist/sandbox/protocol.js +96 -0
  302. package/dist/sandbox/protocol.js.map +1 -0
  303. package/dist/sandbox/rpc-timeouts.d.ts +28 -0
  304. package/dist/sandbox/rpc-timeouts.js +15 -0
  305. package/dist/sandbox/rpc-timeouts.js.map +1 -0
  306. package/dist/sandbox/supervisor.d.ts +31 -0
  307. package/dist/sandbox/supervisor.js +114 -0
  308. package/dist/sandbox/supervisor.js.map +1 -0
  309. package/dist/sandbox/types.d.ts +124 -0
  310. package/dist/sandbox/types.js +17 -0
  311. package/dist/sandbox/types.js.map +1 -0
  312. package/dist/service/control.d.ts +32 -0
  313. package/dist/service/control.js +117 -0
  314. package/dist/service/control.js.map +1 -0
  315. package/dist/session/compress.d.ts +3 -0
  316. package/dist/session/compress.js +42 -0
  317. package/dist/session/compress.js.map +1 -0
  318. package/dist/session/index.d.ts +4 -0
  319. package/dist/session/index.js +8 -0
  320. package/dist/session/index.js.map +1 -0
  321. package/dist/session/registry.d.ts +4 -0
  322. package/dist/session/registry.js +12 -0
  323. package/dist/session/registry.js.map +1 -0
  324. package/dist/session/replay.d.ts +10 -0
  325. package/dist/session/replay.js +109 -0
  326. package/dist/session/replay.js.map +1 -0
  327. package/dist/session/session.d.ts +40 -0
  328. package/dist/session/session.js +108 -0
  329. package/dist/session/session.js.map +1 -0
  330. package/dist/session/store.d.ts +58 -0
  331. package/dist/session/store.js +382 -0
  332. package/dist/session/store.js.map +1 -0
  333. package/dist/session/types.d.ts +56 -0
  334. package/dist/session/types.js +3 -0
  335. package/dist/session/types.js.map +1 -0
  336. package/dist/workspace/index.d.ts +7 -0
  337. package/dist/workspace/index.js +17 -0
  338. package/dist/workspace/index.js.map +1 -0
  339. package/dist/workspace/registry.d.ts +25 -0
  340. package/dist/workspace/registry.js +293 -0
  341. package/dist/workspace/registry.js.map +1 -0
  342. package/package.json +73 -5
  343. package/scripts/build-node-pty.mjs +55 -0
  344. package/scripts/rewrite-dts.mjs +36 -0
  345. package/scripts/verify-sandbox.ts +98 -0
  346. package/src/agent/pending-asks.ts +88 -0
  347. package/src/agent/task-registry.ts +108 -0
  348. package/src/agent/tool-context.ts +47 -0
  349. package/src/agent/usage.ts +170 -0
  350. package/src/api/host/agent.ts +162 -0
  351. package/src/api/host/events.ts +7 -0
  352. package/src/api/host/exec.ts +47 -0
  353. package/src/api/host/fs.ts +33 -0
  354. package/src/api/host/hooks.ts +635 -0
  355. package/src/api/host/host.ts +99 -0
  356. package/src/api/host/http.ts +79 -0
  357. package/src/api/host/index.ts +20 -0
  358. package/src/api/host/models.ts +81 -0
  359. package/src/api/host/network.ts +32 -0
  360. package/src/api/host/plugin.ts +158 -0
  361. package/src/api/host/plugins.ts +55 -0
  362. package/src/api/host/pty.ts +73 -0
  363. package/src/api/host/session.ts +61 -0
  364. package/src/api/host/version.ts +2 -0
  365. package/src/api/host/workspace.ts +51 -0
  366. package/src/api/plugin/http-client.ts +492 -0
  367. package/src/api/plugin/http-protocol.ts +231 -0
  368. package/src/api/result/result.ts +52 -0
  369. package/src/commands/agent-turn.ts +817 -0
  370. package/src/commands/ask-prompt.ts +52 -0
  371. package/src/commands/config.ts +306 -0
  372. package/src/commands/conversation.ts +777 -0
  373. package/src/commands/doctor.ts +92 -0
  374. package/src/commands/exec-approval.ts +91 -0
  375. package/src/commands/help.ts +41 -0
  376. package/src/commands/key.ts +281 -0
  377. package/src/commands/plugin.ts +218 -0
  378. package/src/commands/session.ts +179 -0
  379. package/src/commands/shared.ts +103 -0
  380. package/src/commands/start.ts +88 -0
  381. package/src/commands/stop.ts +24 -0
  382. package/src/commands/version.ts +40 -0
  383. package/src/config/codes.ts +17 -0
  384. package/src/config/credentials.ts +302 -0
  385. package/src/config/defaults.ts +32 -0
  386. package/src/config/index.ts +10 -0
  387. package/src/config/loader.ts +80 -0
  388. package/src/config/providers.ts +133 -0
  389. package/src/config/types.ts +88 -0
  390. package/src/config/validate.ts +458 -0
  391. package/src/display/markdown.ts +137 -0
  392. package/src/display/tool-label.ts +87 -0
  393. package/src/event/event.ts +171 -0
  394. package/src/index.ts +344 -0
  395. package/src/input/codes.ts +21 -0
  396. package/src/input/commands.ts +76 -0
  397. package/src/input/help.ts +60 -0
  398. package/src/input/index.ts +10 -0
  399. package/src/input/parse-options.ts +66 -0
  400. package/src/input/parse.ts +138 -0
  401. package/src/input/types.ts +19 -0
  402. package/src/logger/elog4js.ts +366 -0
  403. package/src/logger/logger.ts +251 -0
  404. package/src/network/index.ts +6 -0
  405. package/src/network/openai.ts +571 -0
  406. package/src/network/proxy.ts +80 -0
  407. package/src/network/web.ts +206 -0
  408. package/src/platform/clipboard.ts +107 -0
  409. package/src/platform/exec.ts +128 -0
  410. package/src/platform/file.ts +235 -0
  411. package/src/platform/index.ts +12 -0
  412. package/src/platform/notification.ts +108 -0
  413. package/src/platform/open-external.ts +132 -0
  414. package/src/platform/os.ts +101 -0
  415. package/src/platform/path.ts +214 -0
  416. package/src/plugin/access-guard.ts +46 -0
  417. package/src/plugin/agent-service.ts +969 -0
  418. package/src/plugin/agent-tools.ts +43 -0
  419. package/src/plugin/capabilities.ts +240 -0
  420. package/src/plugin/console-guard.ts +66 -0
  421. package/src/plugin/data-access.ts +70 -0
  422. package/src/plugin/fs.ts +109 -0
  423. package/src/plugin/host-alias.ts +61 -0
  424. package/src/plugin/index.ts +11 -0
  425. package/src/plugin/install.ts +149 -0
  426. package/src/plugin/loader.ts +952 -0
  427. package/src/plugin/manage.ts +329 -0
  428. package/src/plugin/models-service.ts +383 -0
  429. package/src/plugin/network-service.ts +102 -0
  430. package/src/plugin/paths.ts +19 -0
  431. package/src/plugin/registry.ts +103 -0
  432. package/src/plugin/runtime.ts +57 -0
  433. package/src/plugin/scaffold.ts +152 -0
  434. package/src/plugin/state.ts +52 -0
  435. package/src/plugin/zip.ts +156 -0
  436. package/src/sandbox/audit.ts +38 -0
  437. package/src/sandbox/backends/bwrap.ts +251 -0
  438. package/src/sandbox/backends/direct.ts +43 -0
  439. package/src/sandbox/bridge-state.ts +29 -0
  440. package/src/sandbox/index.ts +5 -0
  441. package/src/sandbox/manager.ts +406 -0
  442. package/src/sandbox/memory-limit.ts +245 -0
  443. package/src/sandbox/plugin-client.ts +1881 -0
  444. package/src/sandbox/plugin-host.ts +1282 -0
  445. package/src/sandbox/protocol.ts +142 -0
  446. package/src/sandbox/pty-bridge.py +154 -0
  447. package/src/sandbox/rpc-timeouts.ts +43 -0
  448. package/src/sandbox/supervisor.ts +172 -0
  449. package/src/sandbox/types.ts +149 -0
  450. package/src/service/control.ts +155 -0
  451. package/src/session/compress.ts +47 -0
  452. package/src/session/index.ts +8 -0
  453. package/src/session/registry.ts +17 -0
  454. package/src/session/replay.ts +132 -0
  455. package/src/session/session.ts +134 -0
  456. package/src/session/store.ts +468 -0
  457. package/src/session/types.ts +61 -0
  458. package/src/workspace/index.ts +21 -0
  459. package/src/workspace/registry.ts +356 -0
@@ -0,0 +1,27 @@
1
+ export declare class EventEntity<T> {
2
+ private readonly data;
3
+ private cancelled;
4
+ private cancelReason;
5
+ private constructor();
6
+ static create<T>(data: T, cancelled?: boolean, cancelReason?: string): EventEntity<T>;
7
+ cancel(reason?: string): this;
8
+ getData(): T;
9
+ isCancelled(): boolean;
10
+ getCancelReason(): string;
11
+ }
12
+ export type EventListener<T = unknown> = (event: EventEntity<T>) => void;
13
+ export declare class EventBus {
14
+ private readonly listeners;
15
+ private readonly bridgeSubscriptions;
16
+ subscribe<T>(eventName: string, listener: EventListener<T>): () => void;
17
+ publish<T>(eventName: string, event: EventEntity<T>): void;
18
+ /** sandbox bridge 收到宿主事件后在本进程投递 */
19
+ receive<T>(eventName: string, data: T): void;
20
+ private deliverLocal;
21
+ once<T>(eventName: string, listener: EventListener<T>): () => void;
22
+ clear(eventName: string): void;
23
+ clearAll(): void;
24
+ private remove;
25
+ private unsubscribeBridge;
26
+ }
27
+ export declare const eventBus: EventBus;
@@ -0,0 +1,152 @@
1
+ /*
2
+ * EventEntity / EventBus
3
+ *
4
+ * EventEntity 的负载只读,取消状态可变:监听器对事件实例调 cancel 后
5
+ * isCancelled 立即为 true,EventBus 据此终止后续传播
6
+ * 取消不回滚已完成的投递
7
+ */
8
+ export class EventEntity {
9
+ data;
10
+ cancelled;
11
+ cancelReason;
12
+ constructor(data, cancelled = false, cancelReason = "") {
13
+ this.data = data;
14
+ this.cancelled = cancelled;
15
+ this.cancelReason = cancelReason;
16
+ }
17
+ static create(data, cancelled = false, cancelReason = "") {
18
+ return new EventEntity(data, cancelled, cancelReason);
19
+ }
20
+ cancel(reason = "") {
21
+ this.cancelled = true;
22
+ this.cancelReason = reason;
23
+ return this;
24
+ }
25
+ getData() {
26
+ return this.data;
27
+ }
28
+ isCancelled() {
29
+ return this.cancelled;
30
+ }
31
+ getCancelReason() {
32
+ return this.cancelReason;
33
+ }
34
+ }
35
+ import { getHostBridge } from "../sandbox/bridge-state.js";
36
+ export class EventBus {
37
+ listeners = new Map();
38
+ bridgeSubscriptions = new Set();
39
+ subscribe(eventName, listener) {
40
+ if (typeof listener !== "function") {
41
+ throw new TypeError(`监听器不是函数:${eventName}`);
42
+ }
43
+ const record = { fn: listener, active: true };
44
+ const bridge = getHostBridge();
45
+ if (bridge !== null && !this.bridgeSubscriptions.has(eventName)) {
46
+ this.bridgeSubscriptions.add(eventName);
47
+ void bridge.request("host.event.subscribe", { name: eventName }).catch(() => undefined);
48
+ }
49
+ const handlers = this.listeners.get(eventName);
50
+ if (handlers) {
51
+ handlers.push(record);
52
+ }
53
+ else {
54
+ this.listeners.set(eventName, [record]);
55
+ }
56
+ return () => this.remove(eventName, record);
57
+ }
58
+ publish(eventName, event) {
59
+ const bridge = getHostBridge();
60
+ if (bridge !== null) {
61
+ bridge.notify("host.event.publish", { name: eventName, data: event.getData() });
62
+ return;
63
+ }
64
+ this.deliverLocal(eventName, event);
65
+ }
66
+ /** sandbox bridge 收到宿主事件后在本进程投递 */
67
+ receive(eventName, data) {
68
+ this.deliverLocal(eventName, EventEntity.create(data));
69
+ }
70
+ deliverLocal(eventName, event) {
71
+ const handlers = this.listeners.get(eventName);
72
+ if (!handlers || handlers.length === 0) {
73
+ return;
74
+ }
75
+ let firstError;
76
+ let failed = false;
77
+ // 快照后校验存活状态:本轮回调内的退订对后续监听器生效
78
+ for (const record of handlers.slice()) {
79
+ if (!record.active)
80
+ continue;
81
+ if (event.isCancelled())
82
+ break;
83
+ try {
84
+ record.fn(event);
85
+ }
86
+ catch (error) {
87
+ // 单监听器异常不中断其余监听器,循环结束后抛出首个异常
88
+ if (!failed) {
89
+ firstError = error;
90
+ failed = true;
91
+ }
92
+ }
93
+ }
94
+ if (failed) {
95
+ throw firstError;
96
+ }
97
+ }
98
+ once(eventName, listener) {
99
+ const unsubscribe = this.subscribe(eventName, (event) => {
100
+ // 先退订再回调:回调内重入发布不会二次触发,回调抛错也不残留订阅
101
+ unsubscribe();
102
+ listener(event);
103
+ });
104
+ return unsubscribe;
105
+ }
106
+ clear(eventName) {
107
+ this.unsubscribeBridge(eventName);
108
+ const handlers = this.listeners.get(eventName);
109
+ if (!handlers)
110
+ return;
111
+ for (const record of handlers) {
112
+ record.active = false;
113
+ }
114
+ this.listeners.delete(eventName);
115
+ }
116
+ clearAll() {
117
+ for (const eventName of [...this.bridgeSubscriptions]) {
118
+ this.unsubscribeBridge(eventName);
119
+ }
120
+ for (const handlers of this.listeners.values()) {
121
+ for (const record of handlers) {
122
+ record.active = false;
123
+ }
124
+ }
125
+ this.listeners.clear();
126
+ }
127
+ remove(eventName, record) {
128
+ if (!record.active)
129
+ return;
130
+ record.active = false;
131
+ const handlers = this.listeners.get(eventName);
132
+ if (!handlers)
133
+ return;
134
+ const index = handlers.indexOf(record);
135
+ if (index !== -1) {
136
+ handlers.splice(index, 1);
137
+ }
138
+ if (handlers.length === 0) {
139
+ this.listeners.delete(eventName);
140
+ this.unsubscribeBridge(eventName);
141
+ }
142
+ }
143
+ unsubscribeBridge(eventName) {
144
+ if (!this.bridgeSubscriptions.delete(eventName)) {
145
+ return;
146
+ }
147
+ const bridge = getHostBridge();
148
+ bridge?.notify("host.event.unsubscribe", { name: eventName });
149
+ }
150
+ }
151
+ export const eventBus = new EventBus();
152
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/event/event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,308 @@
1
+ #!/usr/bin/env node
2
+ /*
3
+ * Wellspring CLI 入口。
4
+ * 解析全局参数 → 应用目录/日志覆盖 → 加载配置与插件 → 分发命令。
5
+ */
6
+ import { resolve } from "node:path";
7
+ import { configureHost, setHostStatus } from "./api/host/host.js";
8
+ import { setHookErrorHandler, setHookGuard, withHookOwner } from "./api/host/hooks.js";
9
+ import { runConfigCommand } from "./commands/config.js";
10
+ import { runConversationCommand } from "./commands/conversation.js";
11
+ import { runDoctorCommand } from "./commands/doctor.js";
12
+ import { runHelpCommand } from "./commands/help.js";
13
+ import { runKeyCommand } from "./commands/key.js";
14
+ import { runPluginCommand } from "./commands/plugin.js";
15
+ import { errorMessage, exitCodeFor, failure, } from "./commands/shared.js";
16
+ import { runSessionCommand } from "./commands/session.js";
17
+ import { runStartCommand } from "./commands/start.js";
18
+ import { runStopCommand } from "./commands/stop.js";
19
+ import { runVersionCommand } from "./commands/version.js";
20
+ import { credentialsFile } from "./config/credentials.js";
21
+ import { activeModelProvider, effectiveModel, effectiveReasoning, providerApiKey, providerOpenAISettings, } from "./config/providers.js";
22
+ import { DEFAULT_SETTINGS } from "./config/defaults.js";
23
+ import { loadSettings, SETTING_FILE_NAME } from "./config/loader.js";
24
+ import { BUILTIN_NAMES, findBuiltin } from "./input/commands.js";
25
+ import { parseGlobal } from "./input/parse.js";
26
+ import { getElog, initElog } from "./logger/elog4js.js";
27
+ import { closeLogger, initLogger } from "./logger/logger.js";
28
+ import { initOpenAIClient } from "./network/openai.js";
29
+ import { createProxyFetch } from "./network/proxy.js";
30
+ import { getPaths } from "./platform/path.js";
31
+ import { withConsoleGuard } from "./plugin/console-guard.js";
32
+ import { loadPlugins } from "./plugin/loader.js";
33
+ import { createPluginFileApi } from "./plugin/fs.js";
34
+ import { ensurePluginDataDir, loadPluginConfig } from "./plugin/runtime.js";
35
+ import { shutdownAllSandboxPlugins } from "./sandbox/plugin-client.js";
36
+ import { AgentToolRegistry } from "./plugin/agent-tools.js";
37
+ import { PluginRegistry } from "./plugin/registry.js";
38
+ function printParseError(code) {
39
+ const elog = getElog();
40
+ elog.error(errorMessage(code));
41
+ elog.notice("运行 wellspring --help 查看用法");
42
+ process.exitCode = 2;
43
+ }
44
+ function emitOutcome(outcome, json) {
45
+ const code = outcome.result.getCode();
46
+ if (json) {
47
+ const payload = {
48
+ success: outcome.result.isSuccess(),
49
+ code: outcome.result.isSuccess() ? null : code,
50
+ data: outcome.result.isSuccess() ? outcome.result.getData() : null,
51
+ };
52
+ process.stdout.write(`${JSON.stringify(payload)}\n`);
53
+ }
54
+ else if (!outcome.result.isSuccess() && code !== null) {
55
+ getElog().error(errorMessage(code));
56
+ }
57
+ process.exitCode = outcome.result.isSuccess() ? 0 : exitCodeFor(code);
58
+ }
59
+ function stripJsonFlag(argv) {
60
+ const next = [...argv];
61
+ const marker = next.indexOf("--");
62
+ const limit = marker === -1 ? next.length : marker;
63
+ for (let index = 0; index < limit; index += 1) {
64
+ if (next[index] === "--json") {
65
+ next.splice(index, 1);
66
+ return { argv: next, json: true };
67
+ }
68
+ }
69
+ return { argv: next, json: false };
70
+ }
71
+ function createPluginOutput(pluginName) {
72
+ const elog = getElog();
73
+ return {
74
+ info: (text) => elog.plugin("info", pluginName, text),
75
+ warn: (text) => elog.plugin("warn", pluginName, text),
76
+ error: (text) => elog.plugin("error", pluginName, text),
77
+ print: (text = "") => elog.plugin("info", pluginName, text),
78
+ };
79
+ }
80
+ async function main(argv) {
81
+ const parsed = parseGlobal(argv);
82
+ if (!parsed.isSuccess()) {
83
+ printParseError(parsed.getCode() ?? "usage.invalid-value");
84
+ return;
85
+ }
86
+ const parsedGlobal = parsed.getData();
87
+ if (parsedGlobal === null) {
88
+ printParseError("usage.invalid-value");
89
+ return;
90
+ }
91
+ const { options: globalOptions } = parsedGlobal;
92
+ let command = parsedGlobal.command;
93
+ let commandArgv = [...parsedGlobal.commandArgv];
94
+ if (globalOptions.version) {
95
+ command = "version";
96
+ commandArgv = [];
97
+ }
98
+ const builtin = command === null ? undefined : findBuiltin(command);
99
+ const builtinName = builtin?.name ?? null;
100
+ let jsonMode = globalOptions.json;
101
+ if (builtinName !== null) {
102
+ const stripped = stripJsonFlag(commandArgv);
103
+ commandArgv = stripped.argv;
104
+ jsonMode = jsonMode || stripped.json;
105
+ }
106
+ const options = { ...globalOptions, json: jsonMode };
107
+ if (globalOptions.home !== undefined) {
108
+ process.env["WELLSPRING_HOME"] = globalOptions.home;
109
+ }
110
+ const paths = getPaths();
111
+ configureHost({ paths });
112
+ setHostStatus("starting");
113
+ const settingsFile = resolve(globalOptions.config ?? `${paths.configDir}/${SETTING_FILE_NAME}`);
114
+ const loaded = await loadSettings(settingsFile);
115
+ const settings = loaded.getData() ?? DEFAULT_SETTINGS;
116
+ const configCode = loaded.isSuccess() ? null : loaded.getCode();
117
+ initElog({ json: jsonMode });
118
+ const elog = getElog();
119
+ const logger = await initLogger({
120
+ settings,
121
+ level: globalOptions.logLevel ?? (globalOptions.quiet ? "silent" : undefined),
122
+ json: jsonMode,
123
+ stdout: false,
124
+ });
125
+ if (configCode !== null) {
126
+ logger.warn({ code: configCode }, "配置加载失败,使用默认配置");
127
+ elog.warn(`配置加载失败,使用默认配置:${errorMessage(configCode)}`);
128
+ }
129
+ setHookGuard(async (owner, task) => {
130
+ await withHookOwner(owner, async () => {
131
+ await withConsoleGuard(owner, logger.child({ plugin: owner }), task);
132
+ });
133
+ });
134
+ setHookErrorHandler(({ hook, owner, error }) => {
135
+ const message = error instanceof Error ? error.message : String(error);
136
+ logger.warn({ hook, owner, message }, "插件钩子执行失败");
137
+ elog.warn(`插件钩子执行失败:${hook}(${owner ?? "-"}):${message}`);
138
+ });
139
+ let openai = null;
140
+ let proxyFetch;
141
+ try {
142
+ proxyFetch = createProxyFetch(settings.network.proxy);
143
+ }
144
+ catch (error) {
145
+ const reason = error instanceof Error ? error.message : String(error);
146
+ logger.warn({ reason }, "代理初始化失败");
147
+ elog.warn(`代理初始化失败:${reason}`);
148
+ proxyFetch = undefined;
149
+ }
150
+ // 当前供应商/模型:启动时解析一次,CLI 单轮命令直接用
151
+ const provider = activeModelProvider(settings);
152
+ const activeModel = effectiveModel(settings, provider);
153
+ const activeReasoning = effectiveReasoning(settings, provider);
154
+ const providerApiKeyValue = providerApiKey(provider, paths.configDir);
155
+ const openaiResult = initOpenAIClient({
156
+ settings: providerOpenAISettings(settings, provider),
157
+ apiKey: providerApiKeyValue ?? "",
158
+ credentialsFile: credentialsFile(paths.configDir),
159
+ logger: logger.child({ module: "openai" }),
160
+ fetch: proxyFetch,
161
+ });
162
+ if (openaiResult.isSuccess()) {
163
+ openai = openaiResult.getData();
164
+ }
165
+ else {
166
+ logger.warn({ code: openaiResult.getCode() }, "OpenAI 客户端不可用");
167
+ }
168
+ const registry = new PluginRegistry();
169
+ const agentTools = new AgentToolRegistry();
170
+ let pluginsCache = null;
171
+ const ensurePlugins = async () => {
172
+ if (pluginsCache !== null) {
173
+ return pluginsCache;
174
+ }
175
+ pluginsCache = await loadPlugins({
176
+ paths,
177
+ config: settings,
178
+ logger,
179
+ registry,
180
+ agentTools,
181
+ sandbox: settings.sandbox,
182
+ });
183
+ setHostStatus("running");
184
+ for (const plugin of pluginsCache) {
185
+ if (plugin.status === "failed") {
186
+ logger.warn({ plugin: plugin.name, error: plugin.error }, "插件加载失败");
187
+ }
188
+ }
189
+ return pluginsCache;
190
+ };
191
+ const commandHelpRequested = builtinName !== null && commandArgv.some((token) => token === "--help" || token === "-h");
192
+ const requested = commandHelpRequested ? builtinName : command;
193
+ let commandName;
194
+ if ((globalOptions.help || commandHelpRequested) && requested !== null) {
195
+ commandName = "help";
196
+ commandArgv = [requested];
197
+ }
198
+ else {
199
+ commandName = requested ?? "help";
200
+ }
201
+ const ctx = {
202
+ global: options,
203
+ settings,
204
+ settingsFile,
205
+ configCode,
206
+ paths,
207
+ logger,
208
+ elog,
209
+ registry,
210
+ agentTools,
211
+ openai,
212
+ activeProvider: provider.id,
213
+ activeModel,
214
+ activeReasoning,
215
+ loadPlugins: ensurePlugins,
216
+ };
217
+ try {
218
+ // 钩子与插件命令都可能在任意命令里用到;version / key / plugin 不启动插件
219
+ // plugin 子命令只改文件,插件是否加载由下次运行决定
220
+ if (commandName !== "version" && commandName !== "key" && commandName !== "plugin") {
221
+ await ensurePlugins();
222
+ }
223
+ setHostStatus("running");
224
+ let outcome;
225
+ switch (commandName) {
226
+ case "chat":
227
+ outcome = await runConversationCommand(ctx, commandArgv, "chat");
228
+ break;
229
+ case "run":
230
+ outcome = await runConversationCommand(ctx, commandArgv, "run");
231
+ break;
232
+ case "start":
233
+ outcome = await runStartCommand(ctx);
234
+ break;
235
+ case "stop":
236
+ outcome = await runStopCommand(ctx);
237
+ break;
238
+ case "session":
239
+ outcome = await runSessionCommand(ctx, commandArgv);
240
+ break;
241
+ case "config":
242
+ outcome = await runConfigCommand(ctx, commandArgv);
243
+ break;
244
+ case "plugin":
245
+ outcome = await runPluginCommand(ctx, commandArgv);
246
+ break;
247
+ case "doctor":
248
+ outcome = await runDoctorCommand(ctx);
249
+ break;
250
+ case "key":
251
+ outcome = await runKeyCommand(ctx, commandArgv);
252
+ break;
253
+ case "version":
254
+ outcome = await runVersionCommand(ctx);
255
+ break;
256
+ case "help":
257
+ outcome = await runHelpCommand(ctx, commandArgv);
258
+ break;
259
+ default: {
260
+ const record = registry.resolve(commandName);
261
+ if (record === undefined) {
262
+ outcome = failure(`usage.unknown-command:${commandName}`);
263
+ break;
264
+ }
265
+ const pluginLogger = logger.child({ plugin: record.pluginName });
266
+ try {
267
+ const pluginDataDir = await ensurePluginDataDir(record.pluginName, paths);
268
+ const pluginConfig = await loadPluginConfig(record.pluginName, paths);
269
+ const pluginFs = createPluginFileApi(pluginDataDir);
270
+ const workspaceFs = createPluginFileApi(process.cwd());
271
+ const pluginContext = {
272
+ argv: commandArgv,
273
+ env: process.env,
274
+ paths,
275
+ config: settings,
276
+ logger: pluginLogger,
277
+ output: createPluginOutput(record.pluginName),
278
+ pluginDataDir,
279
+ pluginConfig,
280
+ fs: pluginFs,
281
+ workspaceFs,
282
+ cwd: process.cwd(),
283
+ json: jsonMode,
284
+ stdin: process.stdin,
285
+ stdout: process.stdout,
286
+ stderr: process.stderr,
287
+ };
288
+ const code = await withHookOwner(record.pluginName, async () => withConsoleGuard(record.pluginName, pluginLogger, async () => record.command.run(pluginContext)));
289
+ process.exitCode = typeof code === "number" ? code : 0;
290
+ return;
291
+ }
292
+ catch (error) {
293
+ const message = error instanceof Error ? error.message : String(error);
294
+ logger.error({ plugin: record.pluginName, message }, "插件命令执行失败");
295
+ outcome = failure(`plugin.command-failed:${message}`);
296
+ }
297
+ }
298
+ }
299
+ emitOutcome(outcome, jsonMode);
300
+ }
301
+ finally {
302
+ setHostStatus("stopped");
303
+ await shutdownAllSandboxPlugins();
304
+ await closeLogger();
305
+ }
306
+ }
307
+ await main(process.argv.slice(2));
308
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** 入参错误码,退出码统一为 2 */
2
+ export declare const USAGE_CODES: {
3
+ readonly unknownCommand: "usage.unknown-command";
4
+ readonly unknownOption: "usage.unknown-option";
5
+ readonly unknownSubcommand: "usage.unknown-subcommand";
6
+ readonly missingValue: "usage.missing-value";
7
+ readonly invalidValue: "usage.invalid-value";
8
+ readonly missingContext: "usage.missing-context";
9
+ readonly invalidSessionId: "usage.invalid-session-id";
10
+ readonly unknownConfigKey: "usage.unknown-config-key";
11
+ readonly conflictingOptions: "usage.conflicting-options";
12
+ readonly missingConfirmation: "usage.missing-confirmation";
13
+ };
14
+ export declare function usageCode(code: string, detail?: string): string;
15
+ export declare function isUsageCode(code: string | null): boolean;
@@ -0,0 +1,20 @@
1
+ /** 入参错误码,退出码统一为 2 */
2
+ export const USAGE_CODES = {
3
+ unknownCommand: "usage.unknown-command",
4
+ unknownOption: "usage.unknown-option",
5
+ unknownSubcommand: "usage.unknown-subcommand",
6
+ missingValue: "usage.missing-value",
7
+ invalidValue: "usage.invalid-value",
8
+ missingContext: "usage.missing-context",
9
+ invalidSessionId: "usage.invalid-session-id",
10
+ unknownConfigKey: "usage.unknown-config-key",
11
+ conflictingOptions: "usage.conflicting-options",
12
+ missingConfirmation: "usage.missing-confirmation",
13
+ };
14
+ export function usageCode(code, detail) {
15
+ return detail === undefined || detail === "" ? code : `${code}:${detail}`;
16
+ }
17
+ export function isUsageCode(code) {
18
+ return code !== null && code.startsWith("usage.");
19
+ }
20
+ //# sourceMappingURL=codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codes.js","sourceRoot":"","sources":["../../src/input/codes.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,cAAc,EAAE,uBAAuB;IACvC,aAAa,EAAE,sBAAsB;IACrC,iBAAiB,EAAE,0BAA0B;IAC7C,YAAY,EAAE,qBAAqB;IACnC,YAAY,EAAE,qBAAqB;IACnC,cAAc,EAAE,uBAAuB;IACvC,gBAAgB,EAAE,0BAA0B;IAC5C,gBAAgB,EAAE,0BAA0B;IAC5C,kBAAkB,EAAE,2BAA2B;IAC/C,mBAAmB,EAAE,4BAA4B;CAC3C,CAAA;AAEV,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,MAAe;IACnD,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAA;AAC7E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAmB;IAC3C,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;AACrD,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** 内置命令元数据,帮助文本与命令校验共用这一份 */
2
+ export interface BuiltinCommandSpec {
3
+ readonly name: string;
4
+ readonly summary: string;
5
+ readonly usage: string;
6
+ readonly aliases?: readonly string[];
7
+ }
8
+ export declare const BUILTIN_COMMANDS: readonly BuiltinCommandSpec[];
9
+ export declare const BUILTIN_NAMES: ReadonlySet<string>;
10
+ export declare function findBuiltin(name: string): BuiltinCommandSpec | undefined;
@@ -0,0 +1,65 @@
1
+ /** 内置命令元数据,帮助文本与命令校验共用这一份 */
2
+ export const BUILTIN_COMMANDS = [
3
+ {
4
+ name: "chat",
5
+ summary: "对话模式,单轮对话或进入交互式会话",
6
+ usage: "wellspring chat [--session-id <id>] [--new] [--model <name>] [--reasoning off|low|high|max] [--system <text>] <context...>",
7
+ },
8
+ {
9
+ name: "run",
10
+ summary: "Agent 模式,单轮执行或进入交互式会话",
11
+ usage: "wellspring run [--session-id <id>] [--new] [--agent <name>] [--model <name>] [--reasoning off|low|high|max] [--permission read-only|workspace-write|danger-full-access] [--allow-exec] [--max-steps <n>] <context...>",
12
+ },
13
+ {
14
+ name: "start",
15
+ summary: "以服务进程启动,加载插件并触发 onInit",
16
+ usage: "wellspring start",
17
+ },
18
+ {
19
+ name: "stop",
20
+ summary: "停止正在运行的 Wellspring 服务",
21
+ usage: "wellspring stop",
22
+ },
23
+ {
24
+ name: "session",
25
+ summary: "查看、切换与删除会话",
26
+ usage: "wellspring session <list|show|delete> [args]",
27
+ },
28
+ {
29
+ name: "config",
30
+ summary: "配置路径、查看与读写配置项",
31
+ usage: "wellspring config <path|show|get|set> [args]",
32
+ },
33
+ {
34
+ name: "key",
35
+ summary: "查看、设置、清除与测试 OpenAI API Key",
36
+ usage: "wellspring key <status|set|clear|test|path> [--provider <id>] [args]",
37
+ },
38
+ {
39
+ name: "plugin",
40
+ summary: "插件列表、安装与删除",
41
+ usage: "wellspring plugin <list|new|install|link|enable|disable|remove> [args]",
42
+ },
43
+ {
44
+ name: "doctor",
45
+ summary: "环境与配置诊断",
46
+ usage: "wellspring doctor [--json]",
47
+ },
48
+ {
49
+ name: "version",
50
+ summary: "显示版本与运行环境",
51
+ usage: "wellspring version [--json]",
52
+ aliases: ["-v"],
53
+ },
54
+ {
55
+ name: "help",
56
+ summary: "显示帮助",
57
+ usage: "wellspring help [command]",
58
+ aliases: ["-h"],
59
+ },
60
+ ];
61
+ export const BUILTIN_NAMES = new Set(BUILTIN_COMMANDS.map((spec) => spec.name));
62
+ export function findBuiltin(name) {
63
+ return BUILTIN_COMMANDS.find((spec) => spec.name === name || (spec.aliases ?? []).includes(name));
64
+ }
65
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/input/commands.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAS7B,MAAM,CAAC,MAAM,gBAAgB,GAAkC;IAC3D;QACI,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,mBAAmB;QAC5B,KAAK,EAAE,4HAA4H;KACtI;IACD;QACI,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE,uNAAuN;KACjO;IACD;QACI,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,wBAAwB;QACjC,KAAK,EAAE,kBAAkB;KAC5B;IACD;QACI,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE,iBAAiB;KAC3B;IACD;QACI,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,8CAA8C;KACxD;IACD;QACI,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,8CAA8C;KACxD;IACD;QACI,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,4BAA4B;QACrC,KAAK,EAAE,sEAAsE;KAChF;IACD;QACI,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,wEAAwE;KAClF;IACD;QACI,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,4BAA4B;KACtC;IACD;QACI,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,6BAA6B;QACpC,OAAO,EAAE,CAAC,IAAI,CAAC;KAClB;IACD;QACI,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,2BAA2B;QAClC,OAAO,EAAE,CAAC,IAAI,CAAC;KAClB;CACJ,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAEpG,MAAM,UAAU,WAAW,CAAC,IAAY;IACpC,OAAO,gBAAgB,CAAC,IAAI,CACxB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CACtE,CAAA;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface HelpPluginCommand {
2
+ readonly name: string;
3
+ readonly summary: string;
4
+ readonly usage: string;
5
+ readonly plugin: string;
6
+ }
7
+ export declare function formatGlobalHelp(pluginCommands: readonly HelpPluginCommand[]): string;
8
+ export declare function formatCommandHelp(name: string, pluginCommand?: HelpPluginCommand): string | null;