@ai-agent-forge/agent-forge 0.86.7 → 0.87.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 (665) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +8 -9
  3. package/dist/artifacts/artifact-store.d.ts.map +1 -1
  4. package/dist/artifacts/artifact-store.js +9 -5
  5. package/dist/artifacts/artifact-store.js.map +1 -1
  6. package/dist/bundle/.build-manifest.json +410 -371
  7. package/dist/bundle/chunks/{chunk-A7GUOX2H.js → chunk-6ZKDNZHA.js} +5 -1
  8. package/dist/bundle/chunks/chunk-BFC2BDVJ.js +13 -0
  9. package/dist/bundle/chunks/chunk-MOHOLL3F.js +1456 -0
  10. package/dist/bundle/chunks/image-resize-worker.js +12 -1
  11. package/dist/bundle/chunks/{virtual-modules-3IZ4MYSQ.js → virtual-modules-KZ5DRH7Q.js} +1 -1
  12. package/dist/bundle/cli.js +1 -1
  13. package/dist/bundle/client.js +1 -1
  14. package/dist/bundle/index.js +2 -2
  15. package/dist/bundle/rpc-entry.js +1 -1
  16. package/dist/cli/args.d.ts.map +1 -1
  17. package/dist/cli/args.js +231 -185
  18. package/dist/cli/args.js.map +1 -1
  19. package/dist/cli/auth-check.d.ts.map +1 -1
  20. package/dist/cli/auth-check.js +3 -2
  21. package/dist/cli/auth-check.js.map +1 -1
  22. package/dist/cli/auth-command.d.ts.map +1 -1
  23. package/dist/cli/auth-command.js +15 -9
  24. package/dist/cli/auth-command.js.map +1 -1
  25. package/dist/cli/credential-print.d.ts.map +1 -1
  26. package/dist/cli/credential-print.js +14 -7
  27. package/dist/cli/credential-print.js.map +1 -1
  28. package/dist/cli/experimental/command.d.ts.map +1 -1
  29. package/dist/cli/experimental/command.js +6 -5
  30. package/dist/cli/experimental/command.js.map +1 -1
  31. package/dist/cli/list-models.d.ts.map +1 -1
  32. package/dist/cli/list-models.js +9 -8
  33. package/dist/cli/list-models.js.map +1 -1
  34. package/dist/cli/plugin-manager-controller.d.ts.map +1 -1
  35. package/dist/cli/plugin-manager-controller.js +2 -1
  36. package/dist/cli/plugin-manager-controller.js.map +1 -1
  37. package/dist/cli/serve.d.ts.map +1 -1
  38. package/dist/cli/serve.js +8 -5
  39. package/dist/cli/serve.js.map +1 -1
  40. package/dist/client/remote-session.d.ts.map +1 -1
  41. package/dist/client/remote-session.js +16 -9
  42. package/dist/client/remote-session.js.map +1 -1
  43. package/dist/config.d.ts.map +1 -1
  44. package/dist/config.js +2 -1
  45. package/dist/config.js.map +1 -1
  46. package/dist/core/agent-capability-contract.d.ts +0 -7
  47. package/dist/core/agent-capability-contract.d.ts.map +1 -1
  48. package/dist/core/agent-capability-contract.js +72 -68
  49. package/dist/core/agent-capability-contract.js.map +1 -1
  50. package/dist/core/agent-session-bash.d.ts.map +1 -1
  51. package/dist/core/agent-session-bash.js +5 -4
  52. package/dist/core/agent-session-bash.js.map +1 -1
  53. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  54. package/dist/core/agent-session-compaction.js +28 -22
  55. package/dist/core/agent-session-compaction.js.map +1 -1
  56. package/dist/core/agent-session-context.d.ts.map +1 -1
  57. package/dist/core/agent-session-context.js +18 -13
  58. package/dist/core/agent-session-context.js.map +1 -1
  59. package/dist/core/agent-session-model.d.ts.map +1 -1
  60. package/dist/core/agent-session-model.js +2 -1
  61. package/dist/core/agent-session-model.js.map +1 -1
  62. package/dist/core/agent-session-retry.d.ts.map +1 -1
  63. package/dist/core/agent-session-retry.js +3 -2
  64. package/dist/core/agent-session-retry.js.map +1 -1
  65. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  66. package/dist/core/agent-session-runtime.js +7 -6
  67. package/dist/core/agent-session-runtime.js.map +1 -1
  68. package/dist/core/agent-session-services.d.ts +1 -1
  69. package/dist/core/agent-session-services.d.ts.map +1 -1
  70. package/dist/core/agent-session-services.js.map +1 -1
  71. package/dist/core/agent-session-tools.d.ts.map +1 -1
  72. package/dist/core/agent-session-tools.js +3 -2
  73. package/dist/core/agent-session-tools.js.map +1 -1
  74. package/dist/core/agent-session.d.ts +40 -2
  75. package/dist/core/agent-session.d.ts.map +1 -1
  76. package/dist/core/agent-session.js +142 -34
  77. package/dist/core/agent-session.js.map +1 -1
  78. package/dist/core/auth-guidance.d.ts.map +1 -1
  79. package/dist/core/auth-guidance.js +11 -5
  80. package/dist/core/auth-guidance.js.map +1 -1
  81. package/dist/core/auth-storage.d.ts.map +1 -1
  82. package/dist/core/auth-storage.js +9 -6
  83. package/dist/core/auth-storage.js.map +1 -1
  84. package/dist/core/compaction/compaction.d.ts.map +1 -1
  85. package/dist/core/compaction/compaction.js +2 -1
  86. package/dist/core/compaction/compaction.js.map +1 -1
  87. package/dist/core/embedded-sdk.d.ts.map +1 -1
  88. package/dist/core/embedded-sdk.js +10 -6
  89. package/dist/core/embedded-sdk.js.map +1 -1
  90. package/dist/core/export-html/index.d.ts.map +1 -1
  91. package/dist/core/export-html/index.js +9 -4
  92. package/dist/core/export-html/index.js.map +1 -1
  93. package/dist/core/extensions/agent-composition.d.ts.map +1 -1
  94. package/dist/core/extensions/agent-composition.js +26 -19
  95. package/dist/core/extensions/agent-composition.js.map +1 -1
  96. package/dist/core/extensions/bootstrap-agent-loop.d.ts.map +1 -1
  97. package/dist/core/extensions/bootstrap-agent-loop.js +3 -2
  98. package/dist/core/extensions/bootstrap-agent-loop.js.map +1 -1
  99. package/dist/core/extensions/bootstrap-lifecycle.d.ts.map +1 -1
  100. package/dist/core/extensions/bootstrap-lifecycle.js +20 -17
  101. package/dist/core/extensions/bootstrap-lifecycle.js.map +1 -1
  102. package/dist/core/extensions/bootstrap-overflow-policy.d.ts.map +1 -1
  103. package/dist/core/extensions/bootstrap-overflow-policy.js +2 -1
  104. package/dist/core/extensions/bootstrap-overflow-policy.js.map +1 -1
  105. package/dist/core/extensions/bootstrap-retry-policy.d.ts.map +1 -1
  106. package/dist/core/extensions/bootstrap-retry-policy.js +2 -1
  107. package/dist/core/extensions/bootstrap-retry-policy.js.map +1 -1
  108. package/dist/core/extensions/bootstrap-skills.d.ts.map +1 -1
  109. package/dist/core/extensions/bootstrap-skills.js +7 -6
  110. package/dist/core/extensions/bootstrap-skills.js.map +1 -1
  111. package/dist/core/extensions/bootstrap-tools.d.ts.map +1 -1
  112. package/dist/core/extensions/bootstrap-tools.js +2 -1
  113. package/dist/core/extensions/bootstrap-tools.js.map +1 -1
  114. package/dist/core/extensions/capability-plugin.d.ts.map +1 -1
  115. package/dist/core/extensions/capability-plugin.js +37 -13
  116. package/dist/core/extensions/capability-plugin.js.map +1 -1
  117. package/dist/core/extensions/capability-runtime-events.d.ts.map +1 -1
  118. package/dist/core/extensions/capability-runtime-events.js +17 -13
  119. package/dist/core/extensions/capability-runtime-events.js.map +1 -1
  120. package/dist/core/extensions/capability-runtime-guards.d.ts.map +1 -1
  121. package/dist/core/extensions/capability-runtime-guards.js +16 -15
  122. package/dist/core/extensions/capability-runtime-guards.js.map +1 -1
  123. package/dist/core/extensions/capability-runtime-manifest.d.ts.map +1 -1
  124. package/dist/core/extensions/capability-runtime-manifest.js +52 -30
  125. package/dist/core/extensions/capability-runtime-manifest.js.map +1 -1
  126. package/dist/core/extensions/capability-runtime-validation.d.ts.map +1 -1
  127. package/dist/core/extensions/capability-runtime-validation.js +66 -65
  128. package/dist/core/extensions/capability-runtime-validation.js.map +1 -1
  129. package/dist/core/extensions/capability-runtime.d.ts.map +1 -1
  130. package/dist/core/extensions/capability-runtime.js +147 -127
  131. package/dist/core/extensions/capability-runtime.js.map +1 -1
  132. package/dist/core/extensions/compaction-memory-failure-mode.d.ts.map +1 -1
  133. package/dist/core/extensions/compaction-memory-failure-mode.js +3 -2
  134. package/dist/core/extensions/compaction-memory-failure-mode.js.map +1 -1
  135. package/dist/core/extensions/context-strategy-binding.d.ts.map +1 -1
  136. package/dist/core/extensions/context-strategy-binding.js +7 -4
  137. package/dist/core/extensions/context-strategy-binding.js.map +1 -1
  138. package/dist/core/extensions/lifecycle-catalog.d.ts.map +1 -1
  139. package/dist/core/extensions/lifecycle-catalog.js +290 -279
  140. package/dist/core/extensions/lifecycle-catalog.js.map +1 -1
  141. package/dist/core/extensions/lifecycle-delivery-queue.d.ts.map +1 -1
  142. package/dist/core/extensions/lifecycle-delivery-queue.js +3 -2
  143. package/dist/core/extensions/lifecycle-delivery-queue.js.map +1 -1
  144. package/dist/core/facade/coding-agent-facade.d.ts +6 -0
  145. package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
  146. package/dist/core/facade/coding-agent-facade.js +2 -0
  147. package/dist/core/facade/coding-agent-facade.js.map +1 -1
  148. package/dist/core/http-dispatcher.d.ts.map +1 -1
  149. package/dist/core/http-dispatcher.js +2 -1
  150. package/dist/core/http-dispatcher.js.map +1 -1
  151. package/dist/core/i18n/index.d.ts +14 -0
  152. package/dist/core/i18n/index.d.ts.map +1 -0
  153. package/dist/core/i18n/index.js +67 -0
  154. package/dist/core/i18n/index.js.map +1 -0
  155. package/dist/core/i18n/locales/en/example.d.ts +7 -0
  156. package/dist/core/i18n/locales/en/example.d.ts.map +1 -0
  157. package/dist/core/i18n/locales/en/example.js +7 -0
  158. package/dist/core/i18n/locales/en/example.js.map +1 -0
  159. package/dist/core/i18n/locales/zh-cn/cli.d.ts +8 -0
  160. package/dist/core/i18n/locales/zh-cn/cli.d.ts.map +1 -0
  161. package/dist/core/i18n/locales/zh-cn/cli.js +227 -0
  162. package/dist/core/i18n/locales/zh-cn/cli.js.map +1 -0
  163. package/dist/core/i18n/locales/zh-cn/common.d.ts +6 -0
  164. package/dist/core/i18n/locales/zh-cn/common.d.ts.map +1 -0
  165. package/dist/core/i18n/locales/zh-cn/common.js +6 -0
  166. package/dist/core/i18n/locales/zh-cn/common.js.map +1 -0
  167. package/dist/core/i18n/locales/zh-cn/core-contract-core.d.ts +13 -0
  168. package/dist/core/i18n/locales/zh-cn/core-contract-core.d.ts.map +1 -0
  169. package/dist/core/i18n/locales/zh-cn/core-contract-core.js +173 -0
  170. package/dist/core/i18n/locales/zh-cn/core-contract-core.js.map +1 -0
  171. package/dist/core/i18n/locales/zh-cn/core-contract-extensions.d.ts +12 -0
  172. package/dist/core/i18n/locales/zh-cn/core-contract-extensions.d.ts.map +1 -0
  173. package/dist/core/i18n/locales/zh-cn/core-contract-extensions.js +582 -0
  174. package/dist/core/i18n/locales/zh-cn/core-contract-extensions.js.map +1 -0
  175. package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts +9 -0
  176. package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts.map +1 -0
  177. package/dist/core/i18n/locales/zh-cn/core-contract-final.js +55 -0
  178. package/dist/core/i18n/locales/zh-cn/core-contract-final.js.map +1 -0
  179. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts +11 -0
  180. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts.map +1 -0
  181. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js +455 -0
  182. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js.map +1 -0
  183. package/dist/core/i18n/locales/zh-cn/core-errors.d.ts +9 -0
  184. package/dist/core/i18n/locales/zh-cn/core-errors.d.ts.map +1 -0
  185. package/dist/core/i18n/locales/zh-cn/core-errors.js +191 -0
  186. package/dist/core/i18n/locales/zh-cn/core-errors.js.map +1 -0
  187. package/dist/core/i18n/locales/zh-cn/example.d.ts +7 -0
  188. package/dist/core/i18n/locales/zh-cn/example.d.ts.map +1 -0
  189. package/dist/core/i18n/locales/zh-cn/example.js +10 -0
  190. package/dist/core/i18n/locales/zh-cn/example.js.map +1 -0
  191. package/dist/core/i18n/locales/zh-cn/index.d.ts +2 -0
  192. package/dist/core/i18n/locales/zh-cn/index.d.ts.map +1 -0
  193. package/dist/core/i18n/locales/zh-cn/index.js +41 -0
  194. package/dist/core/i18n/locales/zh-cn/index.js.map +1 -0
  195. package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts +10 -0
  196. package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts.map +1 -0
  197. package/dist/core/i18n/locales/zh-cn/interactive-mode.js +265 -0
  198. package/dist/core/i18n/locales/zh-cn/interactive-mode.js.map +1 -0
  199. package/dist/core/i18n/locales/zh-cn/keybindings.d.ts +11 -0
  200. package/dist/core/i18n/locales/zh-cn/keybindings.d.ts.map +1 -0
  201. package/dist/core/i18n/locales/zh-cn/keybindings.js +67 -0
  202. package/dist/core/i18n/locales/zh-cn/keybindings.js.map +1 -0
  203. package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts +7 -0
  204. package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts.map +1 -0
  205. package/dist/core/i18n/locales/zh-cn/slash-commands.js +39 -0
  206. package/dist/core/i18n/locales/zh-cn/slash-commands.js.map +1 -0
  207. package/dist/core/i18n/locales/zh-cn/tui-builtin.d.ts +10 -0
  208. package/dist/core/i18n/locales/zh-cn/tui-builtin.d.ts.map +1 -0
  209. package/dist/core/i18n/locales/zh-cn/tui-builtin.js +15 -0
  210. package/dist/core/i18n/locales/zh-cn/tui-builtin.js.map +1 -0
  211. package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts +13 -0
  212. package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts.map +1 -0
  213. package/dist/core/i18n/locales/zh-cn/tui-components-misc.js +102 -0
  214. package/dist/core/i18n/locales/zh-cn/tui-components-misc.js.map +1 -0
  215. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.d.ts +12 -0
  216. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.d.ts.map +1 -0
  217. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js +288 -0
  218. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js.map +1 -0
  219. package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.d.ts +9 -0
  220. package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.d.ts.map +1 -0
  221. package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.js +79 -0
  222. package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.js.map +1 -0
  223. package/dist/core/i18n/locales/zh-cn/tui-self-owned.d.ts +8 -0
  224. package/dist/core/i18n/locales/zh-cn/tui-self-owned.d.ts.map +1 -0
  225. package/dist/core/i18n/locales/zh-cn/tui-self-owned.js +72 -0
  226. package/dist/core/i18n/locales/zh-cn/tui-self-owned.js.map +1 -0
  227. package/dist/core/keybindings.d.ts +15 -0
  228. package/dist/core/keybindings.d.ts.map +1 -1
  229. package/dist/core/keybindings.js +18 -0
  230. package/dist/core/keybindings.js.map +1 -1
  231. package/dist/core/logger.d.ts.map +1 -1
  232. package/dist/core/logger.js +5 -1
  233. package/dist/core/logger.js.map +1 -1
  234. package/dist/core/model-registry.d.ts.map +1 -1
  235. package/dist/core/model-registry.js +2 -1
  236. package/dist/core/model-registry.js.map +1 -1
  237. package/dist/core/model-runtime.d.ts.map +1 -1
  238. package/dist/core/model-runtime.js +8 -4
  239. package/dist/core/model-runtime.js.map +1 -1
  240. package/dist/core/package-install-host.d.ts.map +1 -1
  241. package/dist/core/package-install-host.js +4 -3
  242. package/dist/core/package-install-host.js.map +1 -1
  243. package/dist/core/package-manager.d.ts.map +1 -1
  244. package/dist/core/package-manager.js +15 -10
  245. package/dist/core/package-manager.js.map +1 -1
  246. package/dist/core/package-resource-collection.d.ts.map +1 -1
  247. package/dist/core/package-resource-collection.js +2 -1
  248. package/dist/core/package-resource-collection.js.map +1 -1
  249. package/dist/core/package-source.d.ts.map +1 -1
  250. package/dist/core/package-source.js +3 -2
  251. package/dist/core/package-source.js.map +1 -1
  252. package/dist/core/provider-composer.d.ts.map +1 -1
  253. package/dist/core/provider-composer.js +22 -13
  254. package/dist/core/provider-composer.js.map +1 -1
  255. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  256. package/dist/core/remote-catalog-provider.js +6 -2
  257. package/dist/core/remote-catalog-provider.js.map +1 -1
  258. package/dist/core/resolve-config-value.d.ts.map +1 -1
  259. package/dist/core/resolve-config-value.js +15 -5
  260. package/dist/core/resolve-config-value.js.map +1 -1
  261. package/dist/core/sdk.d.ts +19 -5
  262. package/dist/core/sdk.d.ts.map +1 -1
  263. package/dist/core/sdk.js +74 -54
  264. package/dist/core/sdk.js.map +1 -1
  265. package/dist/core/session-cwd.d.ts.map +1 -1
  266. package/dist/core/session-cwd.js +5 -2
  267. package/dist/core/session-cwd.js.map +1 -1
  268. package/dist/core/session-export.d.ts.map +1 -1
  269. package/dist/core/session-export.js +2 -1
  270. package/dist/core/session-export.js.map +1 -1
  271. package/dist/core/session-manager.d.ts.map +1 -1
  272. package/dist/core/session-manager.js +39 -29
  273. package/dist/core/session-manager.js.map +1 -1
  274. package/dist/core/session-storage.d.ts.map +1 -1
  275. package/dist/core/session-storage.js +3 -3
  276. package/dist/core/session-storage.js.map +1 -1
  277. package/dist/core/settings-manager.d.ts +11 -0
  278. package/dist/core/settings-manager.d.ts.map +1 -1
  279. package/dist/core/settings-manager.js +27 -5
  280. package/dist/core/settings-manager.js.map +1 -1
  281. package/dist/core/slash-commands.d.ts.map +1 -1
  282. package/dist/core/slash-commands.js +53 -32
  283. package/dist/core/slash-commands.js.map +1 -1
  284. package/dist/core/system-prompt.d.ts.map +1 -1
  285. package/dist/core/system-prompt.js +25 -2
  286. package/dist/core/system-prompt.js.map +1 -1
  287. package/dist/core/tools/bash.d.ts.map +1 -1
  288. package/dist/core/tools/bash.js +11 -7
  289. package/dist/core/tools/bash.js.map +1 -1
  290. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  291. package/dist/core/tools/edit-diff.js +9 -4
  292. package/dist/core/tools/edit-diff.js.map +1 -1
  293. package/dist/core/tools/edit.d.ts.map +1 -1
  294. package/dist/core/tools/edit.js +4 -3
  295. package/dist/core/tools/edit.js.map +1 -1
  296. package/dist/core/tools/index.d.ts.map +1 -1
  297. package/dist/core/tools/index.js +3 -2
  298. package/dist/core/tools/index.js.map +1 -1
  299. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  300. package/dist/core/tools/output-accumulator.js +2 -1
  301. package/dist/core/tools/output-accumulator.js.map +1 -1
  302. package/dist/core/tools/read.d.ts.map +1 -1
  303. package/dist/core/tools/read.js +6 -2
  304. package/dist/core/tools/read.js.map +1 -1
  305. package/dist/core/tools/write.d.ts.map +1 -1
  306. package/dist/core/tools/write.js +2 -1
  307. package/dist/core/tools/write.js.map +1 -1
  308. package/dist/durable/durable-service.d.ts.map +1 -1
  309. package/dist/durable/durable-service.js +25 -18
  310. package/dist/durable/durable-service.js.map +1 -1
  311. package/dist/host/checkpoint-commit.d.ts.map +1 -1
  312. package/dist/host/checkpoint-commit.js +2 -1
  313. package/dist/host/checkpoint-commit.js.map +1 -1
  314. package/dist/host/manual-compaction.d.ts.map +1 -1
  315. package/dist/host/manual-compaction.js +2 -1
  316. package/dist/host/manual-compaction.js.map +1 -1
  317. package/dist/host/output-projection.d.ts +0 -13
  318. package/dist/host/output-projection.d.ts.map +1 -1
  319. package/dist/host/output-projection.js +16 -2
  320. package/dist/host/output-projection.js.map +1 -1
  321. package/dist/host/summary-retry.d.ts.map +1 -1
  322. package/dist/host/summary-retry.js +3 -2
  323. package/dist/host/summary-retry.js.map +1 -1
  324. package/dist/main.d.ts.map +1 -1
  325. package/dist/main.js +94 -58
  326. package/dist/main.js.map +1 -1
  327. package/dist/modes/interactive/components/agents-view.d.ts.map +1 -1
  328. package/dist/modes/interactive/components/agents-view.js +18 -15
  329. package/dist/modes/interactive/components/agents-view.js.map +1 -1
  330. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  331. package/dist/modes/interactive/components/assistant-message.js +6 -5
  332. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  333. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  334. package/dist/modes/interactive/components/bash-execution.js +12 -7
  335. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  336. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  337. package/dist/modes/interactive/components/bordered-loader.js +2 -1
  338. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  339. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  340. package/dist/modes/interactive/components/branch-summary-message.js +6 -5
  341. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  342. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  343. package/dist/modes/interactive/components/compaction-summary-message.js +9 -5
  344. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  345. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  346. package/dist/modes/interactive/components/config-selector.js +18 -15
  347. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  348. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  349. package/dist/modes/interactive/components/custom-entry.js +2 -1
  350. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  351. package/dist/modes/interactive/components/dialog-editor.d.ts.map +1 -1
  352. package/dist/modes/interactive/components/dialog-editor.js +5 -4
  353. package/dist/modes/interactive/components/dialog-editor.js.map +1 -1
  354. package/dist/modes/interactive/components/dialog-input.d.ts.map +1 -1
  355. package/dist/modes/interactive/components/dialog-input.js +2 -1
  356. package/dist/modes/interactive/components/dialog-input.js.map +1 -1
  357. package/dist/modes/interactive/components/dialog-selector.d.ts.map +1 -1
  358. package/dist/modes/interactive/components/dialog-selector.js +4 -3
  359. package/dist/modes/interactive/components/dialog-selector.js.map +1 -1
  360. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  361. package/dist/modes/interactive/components/first-time-setup.js +11 -10
  362. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  363. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  364. package/dist/modes/interactive/components/footer.js +7 -4
  365. package/dist/modes/interactive/components/footer.js.map +1 -1
  366. package/dist/modes/interactive/components/index.d.ts +1 -0
  367. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  368. package/dist/modes/interactive/components/index.js +1 -0
  369. package/dist/modes/interactive/components/index.js.map +1 -1
  370. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  371. package/dist/modes/interactive/components/keybinding-hints.js +3 -2
  372. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  373. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  374. package/dist/modes/interactive/components/login-dialog.js +12 -11
  375. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  376. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
  377. package/dist/modes/interactive/components/mermaid.js +6 -2
  378. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  379. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  380. package/dist/modes/interactive/components/model-selector.js +28 -16
  381. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  382. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  383. package/dist/modes/interactive/components/oauth-selector.js +10 -9
  384. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  385. package/dist/modes/interactive/components/plugin-manager-entry.d.ts.map +1 -1
  386. package/dist/modes/interactive/components/plugin-manager-entry.js +22 -13
  387. package/dist/modes/interactive/components/plugin-manager-entry.js.map +1 -1
  388. package/dist/modes/interactive/components/plugin-selection-entry.d.ts.map +1 -1
  389. package/dist/modes/interactive/components/plugin-selection-entry.js +27 -12
  390. package/dist/modes/interactive/components/plugin-selection-entry.js.map +1 -1
  391. package/dist/modes/interactive/components/queue-manager-selector.d.ts +60 -0
  392. package/dist/modes/interactive/components/queue-manager-selector.d.ts.map +1 -0
  393. package/dist/modes/interactive/components/queue-manager-selector.js +166 -0
  394. package/dist/modes/interactive/components/queue-manager-selector.js.map +1 -0
  395. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  396. package/dist/modes/interactive/components/scoped-models-selector.js +16 -14
  397. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  398. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  399. package/dist/modes/interactive/components/session-selector.js +43 -31
  400. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  401. package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  402. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  403. package/dist/modes/interactive/components/settings-selector.js +113 -96
  404. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  405. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
  406. package/dist/modes/interactive/components/settings-submenu.js +5 -4
  407. package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
  408. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  409. package/dist/modes/interactive/components/show-images-selector.js +3 -2
  410. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  411. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  412. package/dist/modes/interactive/components/skill-invocation-message.js +4 -3
  413. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  414. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  415. package/dist/modes/interactive/components/status-indicator.js +14 -5
  416. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  417. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  418. package/dist/modes/interactive/components/theme-selector.js +2 -1
  419. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  420. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  421. package/dist/modes/interactive/components/thinking-selector.js +11 -4
  422. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  423. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  424. package/dist/modes/interactive/components/tool-execution.js +8 -3
  425. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  426. package/dist/modes/interactive/components/tree-list.d.ts.map +1 -1
  427. package/dist/modes/interactive/components/tree-list.js +7 -6
  428. package/dist/modes/interactive/components/tree-list.js.map +1 -1
  429. package/dist/modes/interactive/components/tree-render.d.ts.map +1 -1
  430. package/dist/modes/interactive/components/tree-render.js +28 -23
  431. package/dist/modes/interactive/components/tree-render.js.map +1 -1
  432. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  433. package/dist/modes/interactive/components/tree-selector.js +9 -7
  434. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  435. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  436. package/dist/modes/interactive/components/user-message-selector.js +5 -4
  437. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  438. package/dist/modes/interactive/components/workflow-view.d.ts.map +1 -1
  439. package/dist/modes/interactive/components/workflow-view.js +36 -21
  440. package/dist/modes/interactive/components/workflow-view.js.map +1 -1
  441. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  442. package/dist/modes/interactive/external-editor.js +2 -1
  443. package/dist/modes/interactive/external-editor.js.map +1 -1
  444. package/dist/modes/interactive/interactive-auth.d.ts.map +1 -1
  445. package/dist/modes/interactive/interactive-auth.js +71 -40
  446. package/dist/modes/interactive/interactive-auth.js.map +1 -1
  447. package/dist/modes/interactive/interactive-commands.d.ts +1 -0
  448. package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
  449. package/dist/modes/interactive/interactive-commands.js +3 -0
  450. package/dist/modes/interactive/interactive-commands.js.map +1 -1
  451. package/dist/modes/interactive/interactive-dialog-ui.d.ts.map +1 -1
  452. package/dist/modes/interactive/interactive-dialog-ui.js +5 -5
  453. package/dist/modes/interactive/interactive-dialog-ui.js.map +1 -1
  454. package/dist/modes/interactive/interactive-format.d.ts.map +1 -1
  455. package/dist/modes/interactive/interactive-format.js +34 -18
  456. package/dist/modes/interactive/interactive-format.js.map +1 -1
  457. package/dist/modes/interactive/interactive-helpers.d.ts.map +1 -1
  458. package/dist/modes/interactive/interactive-helpers.js +7 -2
  459. package/dist/modes/interactive/interactive-helpers.js.map +1 -1
  460. package/dist/modes/interactive/interactive-mode.d.ts +4 -1
  461. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  462. package/dist/modes/interactive/interactive-mode.js +327 -243
  463. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  464. package/dist/modes/interactive/interactive-selectors.d.ts +9 -0
  465. package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -1
  466. package/dist/modes/interactive/interactive-selectors.js +79 -25
  467. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  468. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  469. package/dist/modes/interactive/theme/theme-controller.js +5 -1
  470. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  471. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  472. package/dist/modes/interactive/theme/theme.js +26 -23
  473. package/dist/modes/interactive/theme/theme.js.map +1 -1
  474. package/dist/modes/json-event.d.ts.map +1 -1
  475. package/dist/modes/json-event.js +3 -2
  476. package/dist/modes/json-event.js.map +1 -1
  477. package/dist/modes/print-mode.d.ts.map +1 -1
  478. package/dist/modes/print-mode.js +3 -2
  479. package/dist/modes/print-mode.js.map +1 -1
  480. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  481. package/dist/modes/rpc/rpc-client.js +3 -2
  482. package/dist/modes/rpc/rpc-client.js.map +1 -1
  483. package/dist/package-manager-cli.d.ts.map +1 -1
  484. package/dist/package-manager-cli.js +28 -13
  485. package/dist/package-manager-cli.js.map +1 -1
  486. package/dist/plugins/ecosystem/catalog.d.ts.map +1 -1
  487. package/dist/plugins/ecosystem/catalog.js +3 -2
  488. package/dist/plugins/ecosystem/catalog.js.map +1 -1
  489. package/dist/plugins/ecosystem/cli.d.ts.map +1 -1
  490. package/dist/plugins/ecosystem/cli.js +2 -1
  491. package/dist/plugins/ecosystem/cli.js.map +1 -1
  492. package/dist/plugins/ecosystem/default-plugin-market.d.ts.map +1 -1
  493. package/dist/plugins/ecosystem/default-plugin-market.js +3 -2
  494. package/dist/plugins/ecosystem/default-plugin-market.js.map +1 -1
  495. package/dist/plugins/ecosystem/distribution.d.ts.map +1 -1
  496. package/dist/plugins/ecosystem/distribution.js +2 -1
  497. package/dist/plugins/ecosystem/distribution.js.map +1 -1
  498. package/dist/plugins/ecosystem/installer.d.ts.map +1 -1
  499. package/dist/plugins/ecosystem/installer.js +3 -2
  500. package/dist/plugins/ecosystem/installer.js.map +1 -1
  501. package/dist/plugins/ecosystem/node-disk-registry-source.d.ts.map +1 -1
  502. package/dist/plugins/ecosystem/node-disk-registry-source.js +20 -17
  503. package/dist/plugins/ecosystem/node-disk-registry-source.js.map +1 -1
  504. package/dist/plugins/ecosystem/node-distribution-host.d.ts.map +1 -1
  505. package/dist/plugins/ecosystem/node-distribution-host.js +35 -34
  506. package/dist/plugins/ecosystem/node-distribution-host.js.map +1 -1
  507. package/dist/plugins/ecosystem/node-npm-registry-source.d.ts.map +1 -1
  508. package/dist/plugins/ecosystem/node-npm-registry-source.js +35 -34
  509. package/dist/plugins/ecosystem/node-npm-registry-source.js.map +1 -1
  510. package/dist/plugins/ecosystem/node-package-install-host.d.ts.map +1 -1
  511. package/dist/plugins/ecosystem/node-package-install-host.js +9 -8
  512. package/dist/plugins/ecosystem/node-package-install-host.js.map +1 -1
  513. package/dist/plugins/ecosystem/node-package-install-persistence.d.ts.map +1 -1
  514. package/dist/plugins/ecosystem/node-package-install-persistence.js +4 -3
  515. package/dist/plugins/ecosystem/node-package-install-persistence.js.map +1 -1
  516. package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
  517. package/dist/plugins/ecosystem/node-plugin-bootstrap.js +21 -5
  518. package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
  519. package/dist/plugins/ecosystem/node-plugin-trust-root.d.ts.map +1 -1
  520. package/dist/plugins/ecosystem/node-plugin-trust-root.js +10 -9
  521. package/dist/plugins/ecosystem/node-plugin-trust-root.js.map +1 -1
  522. package/dist/plugins/ecosystem/node-registry-source.d.ts.map +1 -1
  523. package/dist/plugins/ecosystem/node-registry-source.js +31 -30
  524. package/dist/plugins/ecosystem/node-registry-source.js.map +1 -1
  525. package/dist/plugins/ecosystem/node-release-package-source.d.ts.map +1 -1
  526. package/dist/plugins/ecosystem/node-release-package-source.js +30 -29
  527. package/dist/plugins/ecosystem/node-release-package-source.js.map +1 -1
  528. package/dist/plugins/ecosystem/node-tar-writer.d.ts.map +1 -1
  529. package/dist/plugins/ecosystem/node-tar-writer.js +11 -10
  530. package/dist/plugins/ecosystem/node-tar-writer.js.map +1 -1
  531. package/dist/plugins/ecosystem/node-url-package-source.d.ts.map +1 -1
  532. package/dist/plugins/ecosystem/node-url-package-source.js +21 -20
  533. package/dist/plugins/ecosystem/node-url-package-source.js.map +1 -1
  534. package/dist/plugins/ecosystem/plugin-acquisition.d.ts.map +1 -1
  535. package/dist/plugins/ecosystem/plugin-acquisition.js +3 -2
  536. package/dist/plugins/ecosystem/plugin-acquisition.js.map +1 -1
  537. package/dist/plugins/ecosystem/registry-cli-adapter.d.ts.map +1 -1
  538. package/dist/plugins/ecosystem/registry-cli-adapter.js +2 -1
  539. package/dist/plugins/ecosystem/registry-cli-adapter.js.map +1 -1
  540. package/dist/plugins/ecosystem/registry.d.ts.map +1 -1
  541. package/dist/plugins/ecosystem/registry.js +35 -32
  542. package/dist/plugins/ecosystem/registry.js.map +1 -1
  543. package/dist/plugins/ecosystem/resolver.d.ts.map +1 -1
  544. package/dist/plugins/ecosystem/resolver.js +3 -2
  545. package/dist/plugins/ecosystem/resolver.js.map +1 -1
  546. package/dist/plugins/ecosystem/selection-store.d.ts.map +1 -1
  547. package/dist/plugins/ecosystem/selection-store.js +11 -10
  548. package/dist/plugins/ecosystem/selection-store.js.map +1 -1
  549. package/dist/plugins/ecosystem/selection.d.ts.map +1 -1
  550. package/dist/plugins/ecosystem/selection.js +8 -7
  551. package/dist/plugins/ecosystem/selection.js.map +1 -1
  552. package/dist/plugins/ecosystem/state.d.ts.map +1 -1
  553. package/dist/plugins/ecosystem/state.js +24 -23
  554. package/dist/plugins/ecosystem/state.js.map +1 -1
  555. package/dist/plugins/ecosystem/updates.d.ts.map +1 -1
  556. package/dist/plugins/ecosystem/updates.js +5 -4
  557. package/dist/plugins/ecosystem/updates.js.map +1 -1
  558. package/dist/plugins/mcp-http.d.ts +0 -17
  559. package/dist/plugins/mcp-http.d.ts.map +1 -1
  560. package/dist/plugins/mcp-http.js +30 -7
  561. package/dist/plugins/mcp-http.js.map +1 -1
  562. package/dist/plugins/plugin-supervisor.d.ts.map +1 -1
  563. package/dist/plugins/plugin-supervisor.js +19 -1
  564. package/dist/plugins/plugin-supervisor.js.map +1 -1
  565. package/dist/profile/first-roles.d.ts.map +1 -1
  566. package/dist/profile/first-roles.js +10 -1
  567. package/dist/profile/first-roles.js.map +1 -1
  568. package/dist/profile/goal-plugin.d.ts.map +1 -1
  569. package/dist/profile/goal-plugin.js +24 -5
  570. package/dist/profile/goal-plugin.js.map +1 -1
  571. package/dist/profile/identity.d.ts.map +1 -1
  572. package/dist/profile/identity.js +7 -6
  573. package/dist/profile/identity.js.map +1 -1
  574. package/dist/profile/lock.d.ts.map +1 -1
  575. package/dist/profile/lock.js +15 -1
  576. package/dist/profile/lock.js.map +1 -1
  577. package/dist/profile/plan-plugin.d.ts.map +1 -1
  578. package/dist/profile/plan-plugin.js +26 -13
  579. package/dist/profile/plan-plugin.js.map +1 -1
  580. package/dist/profile/plugin-profiles.d.ts.map +1 -1
  581. package/dist/profile/plugin-profiles.js +2 -1
  582. package/dist/profile/plugin-profiles.js.map +1 -1
  583. package/dist/profile/policy-manifest.d.ts.map +1 -1
  584. package/dist/profile/policy-manifest.js +5 -4
  585. package/dist/profile/policy-manifest.js.map +1 -1
  586. package/dist/profile/profile-registry.d.ts +0 -12
  587. package/dist/profile/profile-registry.d.ts.map +1 -1
  588. package/dist/profile/profile-registry.js +14 -1
  589. package/dist/profile/profile-registry.js.map +1 -1
  590. package/dist/profile/role-catalog.d.ts +0 -1
  591. package/dist/profile/role-catalog.d.ts.map +1 -1
  592. package/dist/profile/role-catalog.js +17 -15
  593. package/dist/profile/role-catalog.js.map +1 -1
  594. package/dist/profile/role-orchestrator.d.ts.map +1 -1
  595. package/dist/profile/role-orchestrator.js +8 -7
  596. package/dist/profile/role-orchestrator.js.map +1 -1
  597. package/dist/profile/role-runner.d.ts.map +1 -1
  598. package/dist/profile/role-runner.js +3 -2
  599. package/dist/profile/role-runner.js.map +1 -1
  600. package/dist/profile/root-facade.d.ts.map +1 -1
  601. package/dist/profile/root-facade.js +2 -1
  602. package/dist/profile/root-facade.js.map +1 -1
  603. package/dist/profile/skill-discovery-wiring.d.ts.map +1 -1
  604. package/dist/profile/skill-discovery-wiring.js +7 -2
  605. package/dist/profile/skill-discovery-wiring.js.map +1 -1
  606. package/dist/profile/state-store.d.ts.map +1 -1
  607. package/dist/profile/state-store.js +13 -9
  608. package/dist/profile/state-store.js.map +1 -1
  609. package/dist/profile/todo-plugin.d.ts.map +1 -1
  610. package/dist/profile/todo-plugin.js +9 -4
  611. package/dist/profile/todo-plugin.js.map +1 -1
  612. package/dist/profiles/builtin-suites.d.ts +13 -6
  613. package/dist/profiles/builtin-suites.d.ts.map +1 -1
  614. package/dist/profiles/builtin-suites.js +15 -6
  615. package/dist/profiles/builtin-suites.js.map +1 -1
  616. package/dist/profiles/suite-loader.d.ts +25 -1
  617. package/dist/profiles/suite-loader.d.ts.map +1 -1
  618. package/dist/profiles/suite-loader.js +34 -9
  619. package/dist/profiles/suite-loader.js.map +1 -1
  620. package/dist/remote/server-entry.d.ts.map +1 -1
  621. package/dist/remote/server-entry.js +3 -2
  622. package/dist/remote/server-entry.js.map +1 -1
  623. package/dist/remote/session-source.d.ts.map +1 -1
  624. package/dist/remote/session-source.js +8 -4
  625. package/dist/remote/session-source.js.map +1 -1
  626. package/dist/share/session-share.d.ts.map +1 -1
  627. package/dist/share/session-share.js +14 -2
  628. package/dist/share/session-share.js.map +1 -1
  629. package/dist/testing/plugin-testkit.d.ts.map +1 -1
  630. package/dist/testing/plugin-testkit.js +4 -3
  631. package/dist/testing/plugin-testkit.js.map +1 -1
  632. package/dist/testing/runtime-delivery-queue.d.ts.map +1 -1
  633. package/dist/testing/runtime-delivery-queue.js +2 -1
  634. package/dist/testing/runtime-delivery-queue.js.map +1 -1
  635. package/dist/testing/session-plugin-testkit.d.ts.map +1 -1
  636. package/dist/testing/session-plugin-testkit.js +10 -7
  637. package/dist/testing/session-plugin-testkit.js.map +1 -1
  638. package/dist/utils/ansi.d.ts.map +1 -1
  639. package/dist/utils/ansi.js +2 -1
  640. package/dist/utils/ansi.js.map +1 -1
  641. package/dist/utils/clipboard.d.ts.map +1 -1
  642. package/dist/utils/clipboard.js +7 -6
  643. package/dist/utils/clipboard.js.map +1 -1
  644. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  645. package/dist/utils/image-resize-worker.js +3 -2
  646. package/dist/utils/image-resize-worker.js.map +1 -1
  647. package/dist/utils/shell.d.ts.map +1 -1
  648. package/dist/utils/shell.js +9 -8
  649. package/dist/utils/shell.js.map +1 -1
  650. package/dist/utils/tools-manager.d.ts.map +1 -1
  651. package/dist/utils/tools-manager.js +23 -13
  652. package/dist/utils/tools-manager.js.map +1 -1
  653. package/dist/utils/version-check.d.ts.map +1 -1
  654. package/dist/utils/version-check.js +5 -1
  655. package/dist/utils/version-check.js.map +1 -1
  656. package/docs/keybindings.md +3 -0
  657. package/docs/quickstart.md +1 -1
  658. package/docs/settings.md +1 -0
  659. package/docs/terminal-setup.md +2 -3
  660. package/docs/usage.md +6 -5
  661. package/examples/extensions/with-deps/package-lock.json +2 -2
  662. package/examples/extensions/with-deps/package.json +1 -1
  663. package/examples/extensions/with-deps/plugin.json +1 -1
  664. package/package.json +1 -1
  665. package/dist/bundle/chunks/chunk-EALJ5DDX.js +0 -1452
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
3
- import{APP_NAME,configureHttpDispatcher,main}from"./chunks/chunk-EALJ5DDX.js";import"./chunks/chunk-JUUC5AZY.js";import"./chunks/chunk-A7GUOX2H.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-3QKHSPQL.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-7ZY7IXZD.js";import"./chunks/chunk-Y7HXTASS.js";import"./chunks/chunk-CIX3FSBK.js";import"./chunks/chunk-4L3WN2XY.js";process.title=`${APP_NAME}-rpc`;process.env.AGENT_FORGE="true";process.env.AI_AGENT="agent-forge";process.emitWarning=(()=>{});configureHttpDispatcher();main(["--mode","rpc",...process.argv.slice(2)]);
3
+ import{APP_NAME,configureHttpDispatcher,main}from"./chunks/chunk-MOHOLL3F.js";import"./chunks/chunk-JUUC5AZY.js";import"./chunks/chunk-6ZKDNZHA.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-3QKHSPQL.js";import"./chunks/chunk-BFC2BDVJ.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-7ZY7IXZD.js";import"./chunks/chunk-Y7HXTASS.js";import"./chunks/chunk-CIX3FSBK.js";import"./chunks/chunk-4L3WN2XY.js";process.title=`${APP_NAME}-rpc`;process.env.AGENT_FORGE="true";process.env.AI_AGENT="agent-forge";process.emitWarning=(()=>{});configureHttpDispatcher();main(["--mode","rpc",...process.argv.slice(2)]);
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * CLI argument parsing and help display\n */\n\nimport type { ThinkingLevel } from \"@agent-forge/agent-core\";\nimport chalk from \"chalk\";\nimport { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR, ENV_SESSION_DIR } from \"../config.ts\";\nimport type { HostLogLevel } from \"../core/logger.ts\";\nimport type { TuiMode } from \"../core/settings-manager.ts\";\n// TRACE_KINDS_V1 is a value import, but observability-types.ts has no runtime\n// edges (its two imports are type-only), so no import cycle can form here.\nimport { TRACE_KINDS_V1 } from \"../plugins/observability-types.ts\";\n\nexport type Mode = \"text\" | \"json\" | \"rpc\";\n\nexport interface Args {\n\tprovider?: string;\n\tmodel?: string;\n\tapiKey?: string;\n\tsystemPrompt?: string;\n\tappendSystemPrompt?: string[];\n\tthinking?: ThinkingLevel;\n\tcontinue?: boolean;\n\tresume?: boolean;\n\thelp?: boolean;\n\tversion?: boolean;\n\tmode?: Mode;\n\tname?: string;\n\tnoSession?: boolean;\n\t/** Explicit suite/profile migration on resume (--rebind-suite): adopt the current plugin set when the session binding drifted. */\n\trebindSuite?: boolean;\n\tsession?: string;\n\tsessionId?: string;\n\tfork?: string;\n\tsessionDir?: string;\n\t/** Suite (方案) id for session workspace and context assembly. */\n\tsuite?: string;\n\t/** One-shot lifecycle action: create the user suite workspace (设计 §9). */\n\tsuiteCreate?: string;\n\t/** Companion of --suite-create: clone the source suite workspace. */\n\tcloneFrom?: string;\n\t/** One-shot lifecycle action: delete the user suite workspace (设计 §9). */\n\tsuiteDelete?: string;\n\t/** One-shot lifecycle action: reset a builtin suite to factory contents (设计 §9). */\n\tsuiteReset?: string;\n\t/** Serve the coding-agent session runtime over TCP on the given port. */\n\tserve?: number;\n\t/** Opt-in `--serve` workspace boundary: remote creates must resolve inside one of these roots (repeatable). */\n\tserveWorkspaceRoots?: string[];\n\t/**\n\t * Run as a headless subagent runner (D-045 pooled increment 2b): serve the\n\t * subagent-task command surface on stdio for a parent session's runner pool.\n\t */\n\tsubagentRunner?: boolean;\n\tmodels?: string[];\n\ttools?: string[];\n\texcludeTools?: string[];\n\tnoTools?: boolean;\n\tnoBuiltinTools?: boolean;\n\tnoPlugins?: boolean;\n\t/** Disable session trace collection: equivalent to SDK `traceEnabled: false`. */\n\tnoTrace?: boolean;\n\t/** Host log level. Overrides AGENT_FORGE_LOG_LEVEL; default \"info\". */\n\tlogLevel?: HostLogLevel;\n\t/** Explicit builtin plugin profile for this run. */\n\tpluginProfile?: string;\n\t/** Explicit plugin IDs selected for the profile. */\n\tplugins?: string[];\n\t/** Explicit plugin IDs disabled for the profile. */\n\tdisabledPlugins?: string[];\n\t/** Persistence scope for explicit plugin selection: global by default. */\n\tpluginSelectionScope?: \"global\" | \"project\";\n\tprint?: boolean;\n\texport?: string;\n\t/** View a session's trace file (session id, path, or empty for the most recent session). */\n\ttrace?: string;\n\t/** Structured records output for --trace (设计 §8 第 3 期). */\n\ttraceJson?: boolean;\n\t/** With --trace, show only records whose kind is in this whitelist (TRACE_KINDS_V1 members). */\n\ttraceKind?: string[];\n\t/** With --trace, show only the last N records (positive integer). */\n\ttraceLimit?: number;\n\tnoSkills?: boolean;\n\tskills?: string[];\n\tpromptTemplates?: string[];\n\tnoPromptTemplates?: boolean;\n\tthemes?: string[];\n\tuseTheme?: string;\n\tnoThemes?: boolean;\n\tnoContextFiles?: boolean;\n\tlistModels?: string | true;\n\toffline?: boolean;\n\ttuiMode?: TuiMode;\n\tverbose?: boolean;\n\tmessages: string[];\n\tfileArgs: string[];\n\tdiagnostics: Array<{ type: \"warning\" | \"error\"; message: string }>;\n}\n\nconst VALID_THINKING_LEVELS = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"] as const;\n\nconst VALID_LOG_LEVELS = [\"debug\", \"info\", \"warn\", \"error\"] as const;\n\nexport function isValidHostLogLevel(level: string): level is HostLogLevel {\n\treturn VALID_LOG_LEVELS.includes(level as HostLogLevel);\n}\n\n/** Single source of valid `--trace-kind` values: the TRACE_KINDS_V1 runtime mirror. */\nexport function isValidTraceKind(kind: string): boolean {\n\treturn (TRACE_KINDS_V1 as readonly string[]).includes(kind);\n}\n\n/** Keep CLI plugin selection bounded before it reaches profile resolution. */\nexport const MAX_PLUGIN_CLI_ID_CHARS = 128;\nexport const MAX_PLUGIN_CLI_IDS = 128;\n\nexport function isValidThinkingLevel(level: string): level is ThinkingLevel {\n\treturn VALID_THINKING_LEVELS.includes(level as ThinkingLevel);\n}\n\nexport function normalizeSessionName(value: string): string | undefined {\n\tconst name = value.trim();\n\treturn name.length > 0 ? name : undefined;\n}\n\nfunction parseBoundedPluginId(\n\targs: string[],\n\tindex: number,\n\tresult: Args,\n\toption: \"--plugin\" | \"--disable-plugin\",\n\tvalues: string[],\n): number {\n\tconst raw = args[index + 1];\n\tif (raw === undefined || raw.startsWith(\"-\")) {\n\t\tresult.diagnostics.push({ type: \"error\", message: `${option} requires a plugin id` });\n\t\treturn index;\n\t}\n\tconst value = raw.trim();\n\tif (value.length === 0) {\n\t\tresult.diagnostics.push({ type: \"error\", message: `${option} requires a non-empty plugin id` });\n\t\treturn index + 1;\n\t}\n\tif (value.length > MAX_PLUGIN_CLI_ID_CHARS) {\n\t\tresult.diagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `${option} plugin id must be at most ${MAX_PLUGIN_CLI_ID_CHARS} characters`,\n\t\t});\n\t\treturn index + 1;\n\t}\n\tif (values.length >= MAX_PLUGIN_CLI_IDS) {\n\t\tresult.diagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `${option} accepts at most ${MAX_PLUGIN_CLI_IDS} plugin ids`,\n\t\t});\n\t\treturn index + 1;\n\t}\n\tvalues.push(value);\n\treturn index + 1;\n}\n\nfunction parsePluginProfileValue(args: string[], index: number, result: Args, rawValue?: string): number {\n\tconst raw = rawValue ?? args[index + 1];\n\tif (raw === undefined || raw.startsWith(\"-\")) {\n\t\tresult.diagnostics.push({ type: \"error\", message: \"--plugin-profile requires a profile id\" });\n\t\treturn rawValue === undefined ? index : index;\n\t}\n\tconst value = raw.trim();\n\tif (value.length === 0) {\n\t\tresult.diagnostics.push({ type: \"error\", message: \"--plugin-profile requires a non-empty profile id\" });\n\t\treturn rawValue === undefined ? index + 1 : index;\n\t}\n\tif (value.length > MAX_PLUGIN_CLI_ID_CHARS) {\n\t\tresult.diagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `--plugin-profile id must be at most ${MAX_PLUGIN_CLI_ID_CHARS} characters`,\n\t\t});\n\t\treturn rawValue === undefined ? index + 1 : index;\n\t}\n\tresult.pluginProfile = value;\n\treturn rawValue === undefined ? index + 1 : index;\n}\n\nexport function parseArgs(args: string[]): Args {\n\tconst result: Args = {\n\t\tmessages: [],\n\t\tfileArgs: [],\n\t\tdiagnostics: [],\n\t};\n\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\n\t\tif (arg === \"--\") {\n\t\t\tfor (const positionalArg of args.slice(i + 1)) {\n\t\t\t\tif (positionalArg.startsWith(\"@\")) {\n\t\t\t\t\tresult.fileArgs.push(positionalArg.slice(1));\n\t\t\t\t} else {\n\t\t\t\t\tresult.messages.push(positionalArg);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t} else if (arg === \"--help\" || arg === \"-h\") {\n\t\t\tresult.help = true;\n\t\t} else if (arg === \"--version\" || arg === \"-v\") {\n\t\t\tresult.version = true;\n\t\t} else if (arg === \"--mode\") {\n\t\t\tconst mode = args[i + 1];\n\t\t\tif (mode === undefined || mode.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--mode requires text, json, or rpc\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ti++;\n\t\t\tif (mode !== \"text\" && mode !== \"json\" && mode !== \"rpc\") {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: `Invalid mode \"${mode}\". Valid values: text, json, rpc`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresult.mode = mode;\n\t\t} else if (arg === \"--continue\" || arg === \"-c\") {\n\t\t\tresult.continue = true;\n\t\t} else if (arg === \"--resume\" || arg === \"-r\") {\n\t\t\tresult.resume = true;\n\t\t} else if (arg === \"--provider\" && i + 1 < args.length) {\n\t\t\tresult.provider = args[++i];\n\t\t} else if ((arg === \"--model\" || arg === \"-m\") && i + 1 < args.length) {\n\t\t\tresult.model = args[++i];\n\t\t} else if (arg === \"--api-key\" && i + 1 < args.length) {\n\t\t\tresult.apiKey = args[++i];\n\t\t} else if (arg === \"--system-prompt\" && i + 1 < args.length) {\n\t\t\tresult.systemPrompt = args[++i];\n\t\t} else if (arg === \"--append-system-prompt\" && i + 1 < args.length) {\n\t\t\tresult.appendSystemPrompt = result.appendSystemPrompt ?? [];\n\t\t\tresult.appendSystemPrompt.push(args[++i]);\n\t\t} else if (arg === \"--name\" || arg === \"-n\") {\n\t\t\tif (i + 1 < args.length) {\n\t\t\t\tresult.name = args[++i];\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--name requires a value\" });\n\t\t\t}\n\t\t} else if (arg === \"--no-session\") {\n\t\t\tresult.noSession = true;\n\t\t} else if (arg === \"--rebind-suite\") {\n\t\t\tresult.rebindSuite = true;\n\t\t} else if (arg === \"--session\" && i + 1 < args.length) {\n\t\t\tresult.session = args[++i];\n\t\t} else if (arg === \"--session-id\" && i + 1 < args.length) {\n\t\t\tresult.sessionId = args[++i];\n\t\t} else if (arg === \"--fork\" && i + 1 < args.length) {\n\t\t\tresult.fork = args[++i];\n\t\t} else if (arg === \"--session-dir\" && i + 1 < args.length) {\n\t\t\tresult.sessionDir = args[++i];\n\t\t} else if (arg === \"--suite\") {\n\t\t\tconst id = args[i + 1];\n\t\t\tif (id !== undefined && !id.startsWith(\"-\")) {\n\t\t\t\tresult.suite = id;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--suite requires a suite id\" });\n\t\t\t}\n\t\t} else if (arg === \"--suite-create\") {\n\t\t\tconst id = args[i + 1];\n\t\t\tif (id !== undefined && !id.startsWith(\"-\")) {\n\t\t\t\tresult.suiteCreate = id;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--suite-create requires a suite id\" });\n\t\t\t}\n\t\t} else if (arg === \"--clone-from\") {\n\t\t\tconst id = args[i + 1];\n\t\t\tif (id !== undefined && !id.startsWith(\"-\")) {\n\t\t\t\tresult.cloneFrom = id;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--clone-from requires a suite id\" });\n\t\t\t}\n\t\t} else if (arg === \"--suite-delete\") {\n\t\t\tconst id = args[i + 1];\n\t\t\tif (id !== undefined && !id.startsWith(\"-\")) {\n\t\t\t\tresult.suiteDelete = id;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--suite-delete requires a suite id\" });\n\t\t\t}\n\t\t} else if (arg === \"--suite-reset\") {\n\t\t\tconst id = args[i + 1];\n\t\t\tif (id !== undefined && !id.startsWith(\"-\")) {\n\t\t\t\tresult.suiteReset = id;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--suite-reset requires a suite id\" });\n\t\t\t}\n\t\t} else if (arg === \"--serve\") {\n\t\t\tconst raw = args[i + 1];\n\t\t\tconst port = raw !== undefined && /^\\d+$/.test(raw) ? Number(raw) : Number.NaN;\n\t\t\tif (Number.isInteger(port) && port <= 65535) {\n\t\t\t\tresult.serve = port;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--serve requires a valid TCP port (0-65535)\" });\n\t\t\t\tif (raw !== undefined) i++;\n\t\t\t}\n\t\t} else if (arg === \"--subagent-runner\") {\n\t\t\tresult.subagentRunner = true;\n\t\t} else if (arg === \"--serve-workspace-root\") {\n\t\t\tconst dir = args[i + 1];\n\t\t\tif (dir === undefined || dir.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--serve-workspace-root requires a directory\" });\n\t\t\t} else {\n\t\t\t\tresult.serveWorkspaceRoots = result.serveWorkspaceRoots ?? [];\n\t\t\t\tresult.serveWorkspaceRoots.push(dir);\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else if (arg === \"--models\" && i + 1 < args.length) {\n\t\t\tresult.models = args[++i].split(\",\").map((s) => s.trim());\n\t\t} else if (arg === \"--no-tools\" || arg === \"-nt\") {\n\t\t\tresult.noTools = true;\n\t\t} else if (arg === \"--no-builtin-tools\" || arg === \"-nbt\") {\n\t\t\tresult.noBuiltinTools = true;\n\t\t} else if ((arg === \"--tools\" || arg === \"-t\") && i + 1 < args.length) {\n\t\t\tresult.tools = args[++i]\n\t\t\t\t.split(\",\")\n\t\t\t\t.map((s) => s.trim())\n\t\t\t\t.filter((name) => name.length > 0);\n\t\t} else if ((arg === \"--exclude-tools\" || arg === \"-xt\") && i + 1 < args.length) {\n\t\t\tresult.excludeTools = args[++i]\n\t\t\t\t.split(\",\")\n\t\t\t\t.map((s) => s.trim())\n\t\t\t\t.filter((name) => name.length > 0);\n\t\t} else if (arg === \"--thinking\" && i + 1 < args.length) {\n\t\t\tconst level = args[++i];\n\t\t\tif (isValidThinkingLevel(level)) {\n\t\t\t\tresult.thinking = level;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"warning\",\n\t\t\t\t\tmessage: `Invalid thinking level \"${level}\". Valid values: ${VALID_THINKING_LEVELS.join(\", \")}`,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (arg === \"--print\" || arg === \"-p\") {\n\t\t\tresult.print = true;\n\t\t\tconst next = args[i + 1];\n\t\t\tif (next !== undefined && !next.startsWith(\"@\") && (!next.startsWith(\"-\") || next.startsWith(\"---\"))) {\n\t\t\t\tresult.messages.push(next);\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else if (arg === \"--export\" && i + 1 < args.length) {\n\t\t\tresult.export = args[++i];\n\t\t} else if (arg === \"--trace\") {\n\t\t\t// View command: bare --trace targets the most recent session; a\n\t\t\t// following non-option token is the session id or trace/session path.\n\t\t\tconst next = args[i + 1];\n\t\t\tif (next !== undefined && !next.startsWith(\"-\")) {\n\t\t\t\tresult.trace = next;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.trace = \"\";\n\t\t\t}\n\t\t} else if (arg === \"--trace-json\") {\n\t\t\tresult.traceJson = true;\n\t\t} else if (arg === \"--trace-kind\") {\n\t\t\tconst raw = args[i + 1];\n\t\t\tif (raw === undefined || raw.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--trace-kind requires a comma-separated kind list\" });\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t\tconst kinds = raw\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((kind) => kind.trim())\n\t\t\t\t\t.filter((kind) => kind.length > 0);\n\t\t\t\tconst invalid = kinds.filter((kind) => !isValidTraceKind(kind));\n\t\t\t\tif (kinds.length === 0) {\n\t\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--trace-kind requires at least one trace kind\" });\n\t\t\t\t} else if (invalid.length > 0) {\n\t\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tmessage: `Invalid trace kind(s) \"${invalid.join(\", \")}\". Valid values: ${TRACE_KINDS_V1.join(\", \")}`,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tresult.traceKind = kinds;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (arg === \"--trace-limit\") {\n\t\t\tconst raw = args[i + 1];\n\t\t\tif (raw === undefined || raw.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--trace-limit requires a positive integer\" });\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t\tconst limit = /^\\d+$/.test(raw) ? Number(raw) : Number.NaN;\n\t\t\t\tif (Number.isInteger(limit) && limit > 0) {\n\t\t\t\t\tresult.traceLimit = limit;\n\t\t\t\t} else {\n\t\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tmessage: `Invalid trace limit \"${raw}\". Expected a positive integer`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (arg === \"--no-plugins\" || arg === \"-np\") {\n\t\t\tresult.noPlugins = true;\n\t\t} else if (arg === \"--no-trace\") {\n\t\t\tresult.noTrace = true;\n\t\t} else if (arg === \"--log-level\") {\n\t\t\tconst level = args[i + 1];\n\t\t\tif (level === undefined || level.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--log-level requires a level\" });\n\t\t\t} else if (!isValidHostLogLevel(level)) {\n\t\t\t\ti++;\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: `Invalid log level \"${level}\". Valid values: ${VALID_LOG_LEVELS.join(\", \")}`,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresult.logLevel = level;\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else if (arg === \"--plugin-profile\") {\n\t\t\ti = parsePluginProfileValue(args, i, result);\n\t\t} else if (arg.startsWith(\"--plugin-profile=\")) {\n\t\t\tparsePluginProfileValue(args, i, result, arg.slice(\"--plugin-profile=\".length));\n\t\t} else if (arg === \"--plugin-scope\" || arg.startsWith(\"--plugin-scope=\")) {\n\t\t\tconst raw = arg === \"--plugin-scope\" ? args[i + 1] : arg.slice(\"--plugin-scope=\".length);\n\t\t\tif (arg === \"--plugin-scope\") i++;\n\t\t\tif (raw !== \"global\" && raw !== \"project\") {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--plugin-scope must be global or project\" });\n\t\t\t} else if (result.pluginSelectionScope !== undefined) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--plugin-scope may be specified only once\" });\n\t\t\t} else {\n\t\t\t\tresult.pluginSelectionScope = raw;\n\t\t\t}\n\t\t} else if (arg === \"--plugin\") {\n\t\t\tresult.plugins = result.plugins ?? [];\n\t\t\ti = parseBoundedPluginId(args, i, result, \"--plugin\", result.plugins);\n\t\t} else if (arg.startsWith(\"--plugin=\")) {\n\t\t\tresult.plugins = result.plugins ?? [];\n\t\t\tconst value = arg.slice(\"--plugin=\".length).trim();\n\t\t\tif (value.length === 0) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--plugin requires a non-empty plugin id\" });\n\t\t\t} else if (value.length > MAX_PLUGIN_CLI_ID_CHARS) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: `--plugin plugin id must be at most ${MAX_PLUGIN_CLI_ID_CHARS} characters`,\n\t\t\t\t});\n\t\t\t} else if (result.plugins.length >= MAX_PLUGIN_CLI_IDS) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: `--plugin accepts at most ${MAX_PLUGIN_CLI_IDS} plugin ids`,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresult.plugins.push(value);\n\t\t\t}\n\t\t} else if (arg === \"--disable-plugin\") {\n\t\t\tresult.disabledPlugins = result.disabledPlugins ?? [];\n\t\t\ti = parseBoundedPluginId(args, i, result, \"--disable-plugin\", result.disabledPlugins);\n\t\t} else if (arg.startsWith(\"--disable-plugin=\")) {\n\t\t\tresult.disabledPlugins = result.disabledPlugins ?? [];\n\t\t\tconst value = arg.slice(\"--disable-plugin=\".length).trim();\n\t\t\tif (value.length === 0) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--disable-plugin requires a non-empty plugin id\" });\n\t\t\t} else if (value.length > MAX_PLUGIN_CLI_ID_CHARS) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: `--disable-plugin plugin id must be at most ${MAX_PLUGIN_CLI_ID_CHARS} characters`,\n\t\t\t\t});\n\t\t\t} else if (result.disabledPlugins.length >= MAX_PLUGIN_CLI_IDS) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: `--disable-plugin accepts at most ${MAX_PLUGIN_CLI_IDS} plugin ids`,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresult.disabledPlugins.push(value);\n\t\t\t}\n\t\t} else if (arg === \"--skill\" && i + 1 < args.length) {\n\t\t\tresult.skills = result.skills ?? [];\n\t\t\tresult.skills.push(args[++i]);\n\t\t} else if (arg === \"--prompt-template\" && i + 1 < args.length) {\n\t\t\tresult.promptTemplates = result.promptTemplates ?? [];\n\t\t\tresult.promptTemplates.push(args[++i]);\n\t\t} else if (arg === \"--theme\" && i + 1 < args.length) {\n\t\t\tresult.themes = result.themes ?? [];\n\t\t\tresult.themes.push(args[++i]);\n\t\t} else if (arg === \"--use-theme\") {\n\t\t\tconst themeName = args[i + 1];\n\t\t\tif (themeName === undefined || themeName.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--use-theme requires a theme name\" });\n\t\t\t} else {\n\t\t\t\tresult.useTheme = themeName;\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else if (arg === \"--no-skills\" || arg === \"-ns\") {\n\t\t\tresult.noSkills = true;\n\t\t} else if (arg === \"--no-prompt-templates\" || arg === \"-np\") {\n\t\t\tresult.noPromptTemplates = true;\n\t\t} else if (arg === \"--no-themes\") {\n\t\t\tresult.noThemes = true;\n\t\t} else if (arg === \"--no-context-files\" || arg === \"-nc\") {\n\t\t\tresult.noContextFiles = true;\n\t\t} else if (arg === \"--list-models\") {\n\t\t\t// Check if next arg is a search pattern (not a flag or file arg)\n\t\t\tif (i + 1 < args.length && !args[i + 1].startsWith(\"-\") && !args[i + 1].startsWith(\"@\")) {\n\t\t\t\tresult.listModels = args[++i];\n\t\t\t} else {\n\t\t\t\tresult.listModels = true;\n\t\t\t}\n\t\t} else if (arg === \"--tui-mode\") {\n\t\t\tconst mode = args[i + 1];\n\t\t\tif (mode === \"regular\" || mode === \"fullscreen\") {\n\t\t\t\tresult.tuiMode = mode;\n\t\t\t\ti++;\n\t\t\t} else if (mode === undefined || mode.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--tui-mode requires regular or fullscreen\" });\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: `Invalid TUI mode \"${mode}\". Valid values: regular, fullscreen`,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (arg === \"--verbose\") {\n\t\t\tresult.verbose = true;\n\t\t} else if (arg === \"--offline\") {\n\t\t\tresult.offline = true;\n\t\t} else if (arg.startsWith(\"@\")) {\n\t\t\tresult.fileArgs.push(arg.slice(1)); // Remove @ prefix\n\t\t} else if (arg.startsWith(\"--\")) {\n\t\t\t// Unknown long options are errors: extension-registered CLI flags no\n\t\t\t// longer exist, so there is nothing left that could claim them.\n\t\t\tresult.diagnostics.push({ type: \"error\", message: `Unknown option: ${arg.split(\"=\")[0]}` });\n\t\t\ti++;\n\t\t} else if (arg.startsWith(\"-\") && !arg.startsWith(\"--\")) {\n\t\t\tresult.diagnostics.push({ type: \"error\", message: `Unknown option: ${arg}` });\n\t\t} else if (!arg.startsWith(\"-\")) {\n\t\t\tresult.messages.push(arg);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function printHelp(): void {\n\tconsole.log(`${chalk.bold(APP_NAME)} - AI coding assistant with read, bash, edit, write tools\n\n${chalk.bold(\"Usage:\")}\n ${APP_NAME} [options] [--] [@files...] [messages...]\n\n${chalk.bold(\"Commands:\")}\n ${APP_NAME} install <source> [-l] Install extension source and add to settings\n ${APP_NAME} remove <source> [-l] Remove extension source from settings\n ${APP_NAME} uninstall <source> [-l] Alias for remove\n ${APP_NAME} update [source|self|agent-forge] Update Agent Forge, extensions, or model catalogs\n ${APP_NAME} list List installed extensions from settings\n ${APP_NAME} config [-l] Open TUI to enable/disable package resources (Tab switches scope)\n ${APP_NAME} auth <command> Print credentials or check provider readiness\n ${APP_NAME} <command> --help Show help for install/remove/uninstall/update/list/config/auth\n\n${chalk.bold(\"Options:\")}\n --provider <name> Provider name (default: google)\n --model <pattern> Model pattern or ID (supports \"provider/id\" and optional \":<thinking>\")\n --api-key <key> API key (defaults to env vars)\n --system-prompt <text> System prompt (default: coding assistant prompt)\n --append-system-prompt <text> Append text or file contents to the system prompt (can be used multiple times)\n --mode <mode> Output mode: text (default), json, or rpc\n --print, -p Non-interactive mode: process prompt and exit\n --continue, -c Continue previous session\n --resume, -r Select a session to resume\n --session <path|id> Use specific session file or partial UUID\n --session-id <id> Use exact project session ID, creating it if missing\n --fork <path|id> Fork specific session file or partial UUID into a new session\n --session-dir <dir> Directory for session storage and lookup\n --suite <id> Suite (方案) for this run: assistant (default) or coding; new sessions only\n --suite-create <id> Create a user suite workspace and exit; add --clone-from <id> to copy one\n --suite-delete <id> Delete a user suite workspace (active session references refuse) and exit\n --suite-reset <id> Reset a builtin suite to factory contents (shows a diff) and exit\n --serve <port> (Experimental, local trust only) Serve the coding-agent session runtime over the WebSocket gateway (default: 127.0.0.1; HTTP surface: /healthz plus token-protected artifact reads) and exit on SIGINT/SIGTERM\n Durable journal: <agentDir>/remote-server-journal.jsonl (never the process cwd)\n --serve-workspace-root <dir> Opt-in --serve boundary: remote creates must run inside one of these roots (repeatable); without it any local directory is allowed\n --subagent-runner (Experimental) Run as a headless subagent runner: serve the subagent-task protocol on stdio for a parent session's runner pool (D-045)\n --no-session Don't save session (ephemeral)\n --name, -n <name> Set session display name\n --models <patterns> Comma-separated model patterns for Ctrl+P cycling\n Supports globs (anthropic/*, *sonnet*) and fuzzy matching\n --no-tools, -nt Disable all tools by default (built-in and plugin)\n --no-builtin-tools, -nbt Disable built-in tools by default but keep plugin/custom tools enabled\n --tools, -t <tools> Comma-separated allowlist of tool names to enable\n Applies to built-in, plugin, and custom tools\n --exclude-tools, -xt <tools> Comma-separated denylist of tool names to disable\n Applies to built-in, plugin, and custom tools\n --thinking <level> Set thinking level: off, minimal, low, medium, high, xhigh, max\n --no-plugins, -np Disable capability plugin discovery (D-028 escape hatch)\n --no-trace Disable session trace collection (no .trace.jsonl file is written)\n --log-level <level> Host log level: debug, info (default), warn, error\n --plugin-profile <id> Select a builtin capability plugin profile for this run\n --plugin <id> Select a plugin within the profile (repeatable)\n --disable-plugin <id> Disable a plugin within the profile (repeatable)\n --plugin-scope <scope> Read the explicit selection from global or project storage\n plugin catalog list List installed/available ecosystem plugins (independent namespace)\n --skill <path> Load a skill file or directory (can be used multiple times)\n --no-skills, -ns Disable skills discovery and loading\n --prompt-template <path> Load a prompt template file or directory (can be used multiple times)\n --no-prompt-templates, -np Disable prompt template discovery and loading\n --theme <path> Load a theme file or directory (can be used multiple times)\n --use-theme <name[/name]> Set the initial interactive theme for this run\n --no-themes Disable theme discovery and loading\n --no-context-files, -nc Disable AGENTS.md and CLAUDE.md discovery and loading\n --export <file> Export session file to HTML and exit\n --trace <session> View a session trace file as a text timeline and exit; <session> is a session id/prefix or trace/session file path, omit it for the most recent session\n --trace-json With --trace, output the structured trace records as JSON instead of the text timeline\n --trace-kind <k1,k2> With --trace, show only records of these kinds (comma-separated); valid kinds: ${TRACE_KINDS_V1.join(\", \")}\n --trace-limit <n> With --trace, show only the last N records (positive integer)\n --list-models [search] List available models (with optional fuzzy search)\n --verbose Force verbose startup (overrides quietStartup setting)\n --tui-mode <mode> TUI mode: regular (default) or fullscreen\n --offline Disable startup network operations (same as AGENT_FORGE_OFFLINE=1)\n -- End option parsing; treat remaining arguments as messages/files\n --help, -h Show this help\n --version, -v Show version number\n\n${chalk.bold(\"Examples:\")}\n # Print a provider API key for an external client\n ${APP_NAME} auth print-api-key --provider openai\n\n # Print an OAuth bearer token for an external client (refreshes if expired)\n ${APP_NAME} auth print-bearer-token --provider openai-codex\n\n # Interactive mode\n ${APP_NAME}\n\n # Interactive mode with initial prompt\n ${APP_NAME} \"List all .ts files in src/\"\n\n # Include files in initial message\n ${APP_NAME} @prompt.md @image.png \"What color is the sky?\"\n\n # Non-interactive mode (process and exit)\n ${APP_NAME} -p \"List all .ts files in src/\"\n\n # Prompt beginning with a dash\n ${APP_NAME} -p -- \"- Summarize these points\"\n\n # Multiple messages (interactive)\n ${APP_NAME} \"Read package.json\" \"What dependencies do we have?\"\n\n # Continue previous session\n ${APP_NAME} --continue \"What did we discuss?\"\n\n # Start a named session\n ${APP_NAME} --name \"Refactor auth module\"\n\n # Use different model\n ${APP_NAME} --provider openai --model gpt-4o-mini \"Help me refactor this code\"\n\n # Use model with provider prefix (no --provider needed)\n ${APP_NAME} --model openai/gpt-4o \"Help me refactor this code\"\n\n # Use model with thinking level shorthand\n ${APP_NAME} --model sonnet:high \"Solve this complex problem\"\n\n # Limit model cycling to specific models\n ${APP_NAME} --models claude-sonnet,claude-haiku,gpt-4o\n\n # Limit to a specific provider with glob pattern\n ${APP_NAME} --models \"github-copilot/*\"\n\n # Cycle models with fixed thinking levels\n ${APP_NAME} --models sonnet:high,haiku:low\n\n # Start with a specific thinking level\n ${APP_NAME} --thinking high \"Solve this complex problem\"\n\n # Read-only mode (no file modifications possible)\n ${APP_NAME} --tools read,grep,find,ls -p \"Review the code in src/\"\n\n # Disable one tool while keeping the rest available\n ${APP_NAME} --exclude-tools ask_question\n\n # Export a session file to HTML\n ${APP_NAME} --export ~/${CONFIG_DIR_NAME}/agent/sessions/--path--/session.jsonl\n ${APP_NAME} --export session.jsonl output.html\n\n${chalk.bold(\"Environment Variables:\")}\n ANTHROPIC_AUTH_TOKEN - Anthropic bearer auth token\n ANTHROPIC_API_KEY - Anthropic Claude API key\n ANTHROPIC_OAUTH_TOKEN - Anthropic OAuth token (alternative to API key)\n ANT_LING_API_KEY - Ant Ling API key\n OPENAI_API_KEY - OpenAI GPT API key\n AZURE_OPENAI_API_KEY - Azure OpenAI API key\n AZURE_OPENAI_BASE_URL - Azure OpenAI/Cognitive Services base URL (e.g. https://{resource}.openai.azure.com)\n AZURE_OPENAI_RESOURCE_NAME - Azure OpenAI resource name (alternative to base URL)\n AZURE_OPENAI_API_VERSION - Azure OpenAI API version (default: v1)\n AZURE_OPENAI_DEPLOYMENT_NAME_MAP - Azure OpenAI model=deployment map (comma-separated)\n DEEPSEEK_API_KEY - DeepSeek API key\n NVIDIA_API_KEY - NVIDIA NIM API key\n GEMINI_API_KEY - Google Gemini API key\n GROQ_API_KEY - Groq API key\n CEREBRAS_API_KEY - Cerebras API key\n XAI_API_KEY - xAI Grok API key\n FIREWORKS_API_KEY - Fireworks API key\n TOGETHER_API_KEY - Together AI API key\n BASETEN_API_KEY - Baseten API key\n OPENROUTER_API_KEY - OpenRouter API key\n AI_GATEWAY_API_KEY - Vercel AI Gateway API key\n ZAI_API_KEY - ZAI Coding Plan API key (Global)\n ZAI_CODING_CN_API_KEY - ZAI Coding Plan API key (China)\n MISTRAL_API_KEY - Mistral API key\n MINIMAX_API_KEY - MiniMax API key\n MOONSHOT_API_KEY - Moonshot AI API key\n OPENCODE_API_KEY - OpenCode Zen/OpenCode Go API key\n KIMI_API_KEY - Kimi For Coding API key\n CLOUDFLARE_API_KEY - Cloudflare API token (Workers AI and AI Gateway)\n CLOUDFLARE_ACCOUNT_ID - Cloudflare account id (required for both)\n CLOUDFLARE_GATEWAY_ID - Cloudflare AI Gateway slug (required for AI Gateway)\n QWEN_TOKEN_PLAN_API_KEY - Qwen Token Plan API key (international region)\n QWEN_TOKEN_PLAN_CN_API_KEY - Qwen Token Plan API key (China region)\n XIAOMI_API_KEY - Xiaomi MiMo API key (api.xiaomimimo.com billing)\n XIAOMI_TOKEN_PLAN_CN_API_KEY - Xiaomi MiMo Token Plan API key (China region)\n XIAOMI_TOKEN_PLAN_AMS_API_KEY - Xiaomi MiMo Token Plan API key (Amsterdam region)\n XIAOMI_TOKEN_PLAN_SGP_API_KEY - Xiaomi MiMo Token Plan API key (Singapore region)\n AWS_PROFILE - AWS profile for Amazon Bedrock\n AWS_ACCESS_KEY_ID - AWS access key for Amazon Bedrock\n AWS_SECRET_ACCESS_KEY - AWS secret key for Amazon Bedrock\n AWS_BEARER_TOKEN_BEDROCK - Bedrock API key (bearer token)\n AWS_REGION - AWS region for Amazon Bedrock (e.g., us-east-1)\n ${ENV_AGENT_DIR.padEnd(32)} - Config directory (default: ~/${CONFIG_DIR_NAME}/agent)\n ${ENV_SESSION_DIR.padEnd(32)} - Session storage directory (overridden by --session-dir)\n AGENT_FORGE_PACKAGE_DIR - Override package directory (for Nix/Guix store paths)\n AGENT_FORGE_OFFLINE - Disable startup network operations when set to 1/true/yes\n\n${chalk.bold(\"Built-in Tool Names:\")}\n read - Read file contents\n bash - Execute bash commands\n powershell - Execute PowerShell commands on Windows\n edit - Edit files with find/replace\n write - Write files (creates/overwrites)\n grep - Search file contents (read-only, off by default)\n find - Find files by glob pattern (read-only, off by default)\n ls - List directory contents (read-only, off by default)\n`);\n}\n"]}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * CLI argument parsing and help display\n */\n\nimport type { ThinkingLevel } from \"@agent-forge/agent-core\";\nimport chalk from \"chalk\";\nimport { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR, ENV_SESSION_DIR } from \"../config.ts\";\nimport { t } from \"../core/i18n/index.ts\";\nimport type { HostLogLevel } from \"../core/logger.ts\";\nimport type { TuiMode } from \"../core/settings-manager.ts\";\n// TRACE_KINDS_V1 is a value import, but observability-types.ts has no runtime\n// edges (its two imports are type-only), so no import cycle can form here.\nimport { TRACE_KINDS_V1 } from \"../plugins/observability-types.ts\";\n\nexport type Mode = \"text\" | \"json\" | \"rpc\";\n\nexport interface Args {\n\tprovider?: string;\n\tmodel?: string;\n\tapiKey?: string;\n\tsystemPrompt?: string;\n\tappendSystemPrompt?: string[];\n\tthinking?: ThinkingLevel;\n\tcontinue?: boolean;\n\tresume?: boolean;\n\thelp?: boolean;\n\tversion?: boolean;\n\tmode?: Mode;\n\tname?: string;\n\tnoSession?: boolean;\n\t/** Explicit suite/profile migration on resume (--rebind-suite): adopt the current plugin set when the session binding drifted. */\n\trebindSuite?: boolean;\n\tsession?: string;\n\tsessionId?: string;\n\tfork?: string;\n\tsessionDir?: string;\n\t/** Suite (方案) id for session workspace and context assembly. */\n\tsuite?: string;\n\t/** One-shot lifecycle action: create the user suite workspace (设计 §9). */\n\tsuiteCreate?: string;\n\t/** Companion of --suite-create: clone the source suite workspace. */\n\tcloneFrom?: string;\n\t/** One-shot lifecycle action: delete the user suite workspace (设计 §9). */\n\tsuiteDelete?: string;\n\t/** One-shot lifecycle action: reset a builtin suite to factory contents (设计 §9). */\n\tsuiteReset?: string;\n\t/** Serve the coding-agent session runtime over TCP on the given port. */\n\tserve?: number;\n\t/** Opt-in `--serve` workspace boundary: remote creates must resolve inside one of these roots (repeatable). */\n\tserveWorkspaceRoots?: string[];\n\t/**\n\t * Run as a headless subagent runner (D-045 pooled increment 2b): serve the\n\t * subagent-task command surface on stdio for a parent session's runner pool.\n\t */\n\tsubagentRunner?: boolean;\n\tmodels?: string[];\n\ttools?: string[];\n\texcludeTools?: string[];\n\tnoTools?: boolean;\n\tnoBuiltinTools?: boolean;\n\tnoPlugins?: boolean;\n\t/** Disable session trace collection: equivalent to SDK `traceEnabled: false`. */\n\tnoTrace?: boolean;\n\t/** Host log level. Overrides AGENT_FORGE_LOG_LEVEL; default \"info\". */\n\tlogLevel?: HostLogLevel;\n\t/** Explicit builtin plugin profile for this run. */\n\tpluginProfile?: string;\n\t/** Explicit plugin IDs selected for the profile. */\n\tplugins?: string[];\n\t/** Explicit plugin IDs disabled for the profile. */\n\tdisabledPlugins?: string[];\n\t/** Persistence scope for explicit plugin selection: global by default. */\n\tpluginSelectionScope?: \"global\" | \"project\";\n\tprint?: boolean;\n\texport?: string;\n\t/** View a session's trace file (session id, path, or empty for the most recent session). */\n\ttrace?: string;\n\t/** Structured records output for --trace (设计 §8 第 3 期). */\n\ttraceJson?: boolean;\n\t/** With --trace, show only records whose kind is in this whitelist (TRACE_KINDS_V1 members). */\n\ttraceKind?: string[];\n\t/** With --trace, show only the last N records (positive integer). */\n\ttraceLimit?: number;\n\tnoSkills?: boolean;\n\tskills?: string[];\n\tpromptTemplates?: string[];\n\tnoPromptTemplates?: boolean;\n\tthemes?: string[];\n\tuseTheme?: string;\n\tnoThemes?: boolean;\n\tnoContextFiles?: boolean;\n\tlistModels?: string | true;\n\toffline?: boolean;\n\ttuiMode?: TuiMode;\n\tverbose?: boolean;\n\tmessages: string[];\n\tfileArgs: string[];\n\tdiagnostics: Array<{ type: \"warning\" | \"error\"; message: string }>;\n}\n\nconst VALID_THINKING_LEVELS = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"] as const;\n\nconst VALID_LOG_LEVELS = [\"debug\", \"info\", \"warn\", \"error\"] as const;\n\nexport function isValidHostLogLevel(level: string): level is HostLogLevel {\n\treturn VALID_LOG_LEVELS.includes(level as HostLogLevel);\n}\n\n/** Single source of valid `--trace-kind` values: the TRACE_KINDS_V1 runtime mirror. */\nexport function isValidTraceKind(kind: string): boolean {\n\treturn (TRACE_KINDS_V1 as readonly string[]).includes(kind);\n}\n\n/** Keep CLI plugin selection bounded before it reaches profile resolution. */\nexport const MAX_PLUGIN_CLI_ID_CHARS = 128;\nexport const MAX_PLUGIN_CLI_IDS = 128;\n\nexport function isValidThinkingLevel(level: string): level is ThinkingLevel {\n\treturn VALID_THINKING_LEVELS.includes(level as ThinkingLevel);\n}\n\nexport function normalizeSessionName(value: string): string | undefined {\n\tconst name = value.trim();\n\treturn name.length > 0 ? name : undefined;\n}\n\nfunction parseBoundedPluginId(\n\targs: string[],\n\tindex: number,\n\tresult: Args,\n\toption: \"--plugin\" | \"--disable-plugin\",\n\tvalues: string[],\n): number {\n\tconst raw = args[index + 1];\n\tif (raw === undefined || raw.startsWith(\"-\")) {\n\t\tresult.diagnostics.push({ type: \"error\", message: t(\"{option} requires a plugin id\", { option }) });\n\t\treturn index;\n\t}\n\tconst value = raw.trim();\n\tif (value.length === 0) {\n\t\tresult.diagnostics.push({ type: \"error\", message: t(\"{option} requires a non-empty plugin id\", { option }) });\n\t\treturn index + 1;\n\t}\n\tif (value.length > MAX_PLUGIN_CLI_ID_CHARS) {\n\t\tresult.diagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: t(\"{option} plugin id must be at most {max} characters\", {\n\t\t\t\toption,\n\t\t\t\tmax: MAX_PLUGIN_CLI_ID_CHARS,\n\t\t\t}),\n\t\t});\n\t\treturn index + 1;\n\t}\n\tif (values.length >= MAX_PLUGIN_CLI_IDS) {\n\t\tresult.diagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: t(\"{option} accepts at most {max} plugin ids\", { option, max: MAX_PLUGIN_CLI_IDS }),\n\t\t});\n\t\treturn index + 1;\n\t}\n\tvalues.push(value);\n\treturn index + 1;\n}\n\nfunction parsePluginProfileValue(args: string[], index: number, result: Args, rawValue?: string): number {\n\tconst raw = rawValue ?? args[index + 1];\n\tif (raw === undefined || raw.startsWith(\"-\")) {\n\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--plugin-profile requires a profile id\") });\n\t\treturn rawValue === undefined ? index : index;\n\t}\n\tconst value = raw.trim();\n\tif (value.length === 0) {\n\t\tresult.diagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: t(\"--plugin-profile requires a non-empty profile id\"),\n\t\t});\n\t\treturn rawValue === undefined ? index + 1 : index;\n\t}\n\tif (value.length > MAX_PLUGIN_CLI_ID_CHARS) {\n\t\tresult.diagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: t(\"--plugin-profile id must be at most {max} characters\", { max: MAX_PLUGIN_CLI_ID_CHARS }),\n\t\t});\n\t\treturn rawValue === undefined ? index + 1 : index;\n\t}\n\tresult.pluginProfile = value;\n\treturn rawValue === undefined ? index + 1 : index;\n}\n\nexport function parseArgs(args: string[]): Args {\n\tconst result: Args = {\n\t\tmessages: [],\n\t\tfileArgs: [],\n\t\tdiagnostics: [],\n\t};\n\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\n\t\tif (arg === \"--\") {\n\t\t\tfor (const positionalArg of args.slice(i + 1)) {\n\t\t\t\tif (positionalArg.startsWith(\"@\")) {\n\t\t\t\t\tresult.fileArgs.push(positionalArg.slice(1));\n\t\t\t\t} else {\n\t\t\t\t\tresult.messages.push(positionalArg);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t} else if (arg === \"--help\" || arg === \"-h\") {\n\t\t\tresult.help = true;\n\t\t} else if (arg === \"--version\" || arg === \"-v\") {\n\t\t\tresult.version = true;\n\t\t} else if (arg === \"--mode\") {\n\t\t\tconst mode = args[i + 1];\n\t\t\tif (mode === undefined || mode.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--mode requires text, json, or rpc\") });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ti++;\n\t\t\tif (mode !== \"text\" && mode !== \"json\" && mode !== \"rpc\") {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t('Invalid mode \"{mode}\". Valid values: text, json, rpc', { mode }),\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresult.mode = mode;\n\t\t} else if (arg === \"--continue\" || arg === \"-c\") {\n\t\t\tresult.continue = true;\n\t\t} else if (arg === \"--resume\" || arg === \"-r\") {\n\t\t\tresult.resume = true;\n\t\t} else if (arg === \"--provider\" && i + 1 < args.length) {\n\t\t\tresult.provider = args[++i];\n\t\t} else if ((arg === \"--model\" || arg === \"-m\") && i + 1 < args.length) {\n\t\t\tresult.model = args[++i];\n\t\t} else if (arg === \"--api-key\" && i + 1 < args.length) {\n\t\t\tresult.apiKey = args[++i];\n\t\t} else if (arg === \"--system-prompt\" && i + 1 < args.length) {\n\t\t\tresult.systemPrompt = args[++i];\n\t\t} else if (arg === \"--append-system-prompt\" && i + 1 < args.length) {\n\t\t\tresult.appendSystemPrompt = result.appendSystemPrompt ?? [];\n\t\t\tresult.appendSystemPrompt.push(args[++i]);\n\t\t} else if (arg === \"--name\" || arg === \"-n\") {\n\t\t\tif (i + 1 < args.length) {\n\t\t\t\tresult.name = args[++i];\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--name requires a value\") });\n\t\t\t}\n\t\t} else if (arg === \"--no-session\") {\n\t\t\tresult.noSession = true;\n\t\t} else if (arg === \"--rebind-suite\") {\n\t\t\tresult.rebindSuite = true;\n\t\t} else if (arg === \"--session\" && i + 1 < args.length) {\n\t\t\tresult.session = args[++i];\n\t\t} else if (arg === \"--session-id\" && i + 1 < args.length) {\n\t\t\tresult.sessionId = args[++i];\n\t\t} else if (arg === \"--fork\" && i + 1 < args.length) {\n\t\t\tresult.fork = args[++i];\n\t\t} else if (arg === \"--session-dir\" && i + 1 < args.length) {\n\t\t\tresult.sessionDir = args[++i];\n\t\t} else if (arg === \"--suite\") {\n\t\t\tconst id = args[i + 1];\n\t\t\tif (id !== undefined && !id.startsWith(\"-\")) {\n\t\t\t\tresult.suite = id;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--suite requires a suite id\") });\n\t\t\t}\n\t\t} else if (arg === \"--suite-create\") {\n\t\t\tconst id = args[i + 1];\n\t\t\tif (id !== undefined && !id.startsWith(\"-\")) {\n\t\t\t\tresult.suiteCreate = id;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--suite-create requires a suite id\") });\n\t\t\t}\n\t\t} else if (arg === \"--clone-from\") {\n\t\t\tconst id = args[i + 1];\n\t\t\tif (id !== undefined && !id.startsWith(\"-\")) {\n\t\t\t\tresult.cloneFrom = id;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--clone-from requires a suite id\") });\n\t\t\t}\n\t\t} else if (arg === \"--suite-delete\") {\n\t\t\tconst id = args[i + 1];\n\t\t\tif (id !== undefined && !id.startsWith(\"-\")) {\n\t\t\t\tresult.suiteDelete = id;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--suite-delete requires a suite id\") });\n\t\t\t}\n\t\t} else if (arg === \"--suite-reset\") {\n\t\t\tconst id = args[i + 1];\n\t\t\tif (id !== undefined && !id.startsWith(\"-\")) {\n\t\t\t\tresult.suiteReset = id;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--suite-reset requires a suite id\") });\n\t\t\t}\n\t\t} else if (arg === \"--serve\") {\n\t\t\tconst raw = args[i + 1];\n\t\t\tconst port = raw !== undefined && /^\\d+$/.test(raw) ? Number(raw) : Number.NaN;\n\t\t\tif (Number.isInteger(port) && port <= 65535) {\n\t\t\t\tresult.serve = port;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t(\"--serve requires a valid TCP port (0-65535)\"),\n\t\t\t\t});\n\t\t\t\tif (raw !== undefined) i++;\n\t\t\t}\n\t\t} else if (arg === \"--subagent-runner\") {\n\t\t\tresult.subagentRunner = true;\n\t\t} else if (arg === \"--serve-workspace-root\") {\n\t\t\tconst dir = args[i + 1];\n\t\t\tif (dir === undefined || dir.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t(\"--serve-workspace-root requires a directory\"),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresult.serveWorkspaceRoots = result.serveWorkspaceRoots ?? [];\n\t\t\t\tresult.serveWorkspaceRoots.push(dir);\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else if (arg === \"--models\" && i + 1 < args.length) {\n\t\t\tresult.models = args[++i].split(\",\").map((s) => s.trim());\n\t\t} else if (arg === \"--no-tools\" || arg === \"-nt\") {\n\t\t\tresult.noTools = true;\n\t\t} else if (arg === \"--no-builtin-tools\" || arg === \"-nbt\") {\n\t\t\tresult.noBuiltinTools = true;\n\t\t} else if ((arg === \"--tools\" || arg === \"-t\") && i + 1 < args.length) {\n\t\t\tresult.tools = args[++i]\n\t\t\t\t.split(\",\")\n\t\t\t\t.map((s) => s.trim())\n\t\t\t\t.filter((name) => name.length > 0);\n\t\t} else if ((arg === \"--exclude-tools\" || arg === \"-xt\") && i + 1 < args.length) {\n\t\t\tresult.excludeTools = args[++i]\n\t\t\t\t.split(\",\")\n\t\t\t\t.map((s) => s.trim())\n\t\t\t\t.filter((name) => name.length > 0);\n\t\t} else if (arg === \"--thinking\" && i + 1 < args.length) {\n\t\t\tconst level = args[++i];\n\t\t\tif (isValidThinkingLevel(level)) {\n\t\t\t\tresult.thinking = level;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"warning\",\n\t\t\t\t\tmessage: t('Invalid thinking level \"{level}\". Valid values: {levels}', {\n\t\t\t\t\t\tlevel,\n\t\t\t\t\t\tlevels: VALID_THINKING_LEVELS.join(\", \"),\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (arg === \"--print\" || arg === \"-p\") {\n\t\t\tresult.print = true;\n\t\t\tconst next = args[i + 1];\n\t\t\tif (next !== undefined && !next.startsWith(\"@\") && (!next.startsWith(\"-\") || next.startsWith(\"---\"))) {\n\t\t\t\tresult.messages.push(next);\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else if (arg === \"--export\" && i + 1 < args.length) {\n\t\t\tresult.export = args[++i];\n\t\t} else if (arg === \"--trace\") {\n\t\t\t// View command: bare --trace targets the most recent session; a\n\t\t\t// following non-option token is the session id or trace/session path.\n\t\t\tconst next = args[i + 1];\n\t\t\tif (next !== undefined && !next.startsWith(\"-\")) {\n\t\t\t\tresult.trace = next;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tresult.trace = \"\";\n\t\t\t}\n\t\t} else if (arg === \"--trace-json\") {\n\t\t\tresult.traceJson = true;\n\t\t} else if (arg === \"--trace-kind\") {\n\t\t\tconst raw = args[i + 1];\n\t\t\tif (raw === undefined || raw.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t(\"--trace-kind requires a comma-separated kind list\"),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t\tconst kinds = raw\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((kind) => kind.trim())\n\t\t\t\t\t.filter((kind) => kind.length > 0);\n\t\t\t\tconst invalid = kinds.filter((kind) => !isValidTraceKind(kind));\n\t\t\t\tif (kinds.length === 0) {\n\t\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tmessage: t(\"--trace-kind requires at least one trace kind\"),\n\t\t\t\t\t});\n\t\t\t\t} else if (invalid.length > 0) {\n\t\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tmessage: t('Invalid trace kind(s) \"{kinds}\". Valid values: {valid}', {\n\t\t\t\t\t\t\tkinds: invalid.join(\", \"),\n\t\t\t\t\t\t\tvalid: TRACE_KINDS_V1.join(\", \"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tresult.traceKind = kinds;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (arg === \"--trace-limit\") {\n\t\t\tconst raw = args[i + 1];\n\t\t\tif (raw === undefined || raw.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t(\"--trace-limit requires a positive integer\"),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t\tconst limit = /^\\d+$/.test(raw) ? Number(raw) : Number.NaN;\n\t\t\t\tif (Number.isInteger(limit) && limit > 0) {\n\t\t\t\t\tresult.traceLimit = limit;\n\t\t\t\t} else {\n\t\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tmessage: t('Invalid trace limit \"{limit}\". Expected a positive integer', { limit: raw }),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (arg === \"--no-plugins\" || arg === \"-np\") {\n\t\t\tresult.noPlugins = true;\n\t\t} else if (arg === \"--no-trace\") {\n\t\t\tresult.noTrace = true;\n\t\t} else if (arg === \"--log-level\") {\n\t\t\tconst level = args[i + 1];\n\t\t\tif (level === undefined || level.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--log-level requires a level\") });\n\t\t\t} else if (!isValidHostLogLevel(level)) {\n\t\t\t\ti++;\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t('Invalid log level \"{level}\". Valid values: {levels}', {\n\t\t\t\t\t\tlevel,\n\t\t\t\t\t\tlevels: VALID_LOG_LEVELS.join(\", \"),\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresult.logLevel = level;\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else if (arg === \"--plugin-profile\") {\n\t\t\ti = parsePluginProfileValue(args, i, result);\n\t\t} else if (arg.startsWith(\"--plugin-profile=\")) {\n\t\t\tparsePluginProfileValue(args, i, result, arg.slice(\"--plugin-profile=\".length));\n\t\t} else if (arg === \"--plugin-scope\" || arg.startsWith(\"--plugin-scope=\")) {\n\t\t\tconst raw = arg === \"--plugin-scope\" ? args[i + 1] : arg.slice(\"--plugin-scope=\".length);\n\t\t\tif (arg === \"--plugin-scope\") i++;\n\t\t\tif (raw !== \"global\" && raw !== \"project\") {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--plugin-scope must be global or project\") });\n\t\t\t} else if (result.pluginSelectionScope !== undefined) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--plugin-scope may be specified only once\") });\n\t\t\t} else {\n\t\t\t\tresult.pluginSelectionScope = raw;\n\t\t\t}\n\t\t} else if (arg === \"--plugin\") {\n\t\t\tresult.plugins = result.plugins ?? [];\n\t\t\ti = parseBoundedPluginId(args, i, result, \"--plugin\", result.plugins);\n\t\t} else if (arg.startsWith(\"--plugin=\")) {\n\t\t\tresult.plugins = result.plugins ?? [];\n\t\t\tconst value = arg.slice(\"--plugin=\".length).trim();\n\t\t\tif (value.length === 0) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t(\"{option} requires a non-empty plugin id\", { option: \"--plugin\" }),\n\t\t\t\t});\n\t\t\t} else if (value.length > MAX_PLUGIN_CLI_ID_CHARS) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t(\"{option} plugin id must be at most {max} characters\", {\n\t\t\t\t\t\toption: \"--plugin\",\n\t\t\t\t\t\tmax: MAX_PLUGIN_CLI_ID_CHARS,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t} else if (result.plugins.length >= MAX_PLUGIN_CLI_IDS) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t(\"{option} accepts at most {max} plugin ids\", { option: \"--plugin\", max: MAX_PLUGIN_CLI_IDS }),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresult.plugins.push(value);\n\t\t\t}\n\t\t} else if (arg === \"--disable-plugin\") {\n\t\t\tresult.disabledPlugins = result.disabledPlugins ?? [];\n\t\t\ti = parseBoundedPluginId(args, i, result, \"--disable-plugin\", result.disabledPlugins);\n\t\t} else if (arg.startsWith(\"--disable-plugin=\")) {\n\t\t\tresult.disabledPlugins = result.disabledPlugins ?? [];\n\t\t\tconst value = arg.slice(\"--disable-plugin=\".length).trim();\n\t\t\tif (value.length === 0) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t(\"{option} requires a non-empty plugin id\", { option: \"--disable-plugin\" }),\n\t\t\t\t});\n\t\t\t} else if (value.length > MAX_PLUGIN_CLI_ID_CHARS) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t(\"{option} plugin id must be at most {max} characters\", {\n\t\t\t\t\t\toption: \"--disable-plugin\",\n\t\t\t\t\t\tmax: MAX_PLUGIN_CLI_ID_CHARS,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t} else if (result.disabledPlugins.length >= MAX_PLUGIN_CLI_IDS) {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t(\"{option} accepts at most {max} plugin ids\", {\n\t\t\t\t\t\toption: \"--disable-plugin\",\n\t\t\t\t\t\tmax: MAX_PLUGIN_CLI_IDS,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresult.disabledPlugins.push(value);\n\t\t\t}\n\t\t} else if (arg === \"--skill\" && i + 1 < args.length) {\n\t\t\tresult.skills = result.skills ?? [];\n\t\t\tresult.skills.push(args[++i]);\n\t\t} else if (arg === \"--prompt-template\" && i + 1 < args.length) {\n\t\t\tresult.promptTemplates = result.promptTemplates ?? [];\n\t\t\tresult.promptTemplates.push(args[++i]);\n\t\t} else if (arg === \"--theme\" && i + 1 < args.length) {\n\t\t\tresult.themes = result.themes ?? [];\n\t\t\tresult.themes.push(args[++i]);\n\t\t} else if (arg === \"--use-theme\") {\n\t\t\tconst themeName = args[i + 1];\n\t\t\tif (themeName === undefined || themeName.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--use-theme requires a theme name\") });\n\t\t\t} else {\n\t\t\t\tresult.useTheme = themeName;\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else if (arg === \"--no-skills\" || arg === \"-ns\") {\n\t\t\tresult.noSkills = true;\n\t\t} else if (arg === \"--no-prompt-templates\" || arg === \"-np\") {\n\t\t\tresult.noPromptTemplates = true;\n\t\t} else if (arg === \"--no-themes\") {\n\t\t\tresult.noThemes = true;\n\t\t} else if (arg === \"--no-context-files\" || arg === \"-nc\") {\n\t\t\tresult.noContextFiles = true;\n\t\t} else if (arg === \"--list-models\") {\n\t\t\t// Check if next arg is a search pattern (not a flag or file arg)\n\t\t\tif (i + 1 < args.length && !args[i + 1].startsWith(\"-\") && !args[i + 1].startsWith(\"@\")) {\n\t\t\t\tresult.listModels = args[++i];\n\t\t\t} else {\n\t\t\t\tresult.listModels = true;\n\t\t\t}\n\t\t} else if (arg === \"--tui-mode\") {\n\t\t\tconst mode = args[i + 1];\n\t\t\tif (mode === \"regular\" || mode === \"fullscreen\") {\n\t\t\t\tresult.tuiMode = mode;\n\t\t\t\ti++;\n\t\t\t} else if (mode === undefined || mode.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: t(\"--tui-mode requires regular or fullscreen\") });\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: t('Invalid TUI mode \"{mode}\". Valid values: regular, fullscreen', { mode }),\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (arg === \"--verbose\") {\n\t\t\tresult.verbose = true;\n\t\t} else if (arg === \"--offline\") {\n\t\t\tresult.offline = true;\n\t\t} else if (arg.startsWith(\"@\")) {\n\t\t\tresult.fileArgs.push(arg.slice(1)); // Remove @ prefix\n\t\t} else if (arg.startsWith(\"--\")) {\n\t\t\t// Unknown long options are errors: extension-registered CLI flags no\n\t\t\t// longer exist, so there is nothing left that could claim them.\n\t\t\tresult.diagnostics.push({ type: \"error\", message: `Unknown option: ${arg.split(\"=\")[0]}` });\n\t\t\ti++;\n\t\t} else if (arg.startsWith(\"-\") && !arg.startsWith(\"--\")) {\n\t\t\tresult.diagnostics.push({ type: \"error\", message: `Unknown option: ${arg}` });\n\t\t} else if (!arg.startsWith(\"-\")) {\n\t\t\tresult.messages.push(arg);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function printHelp(): void {\n\tconsole.log(`${chalk.bold(APP_NAME)} - ${t(\"AI coding assistant with read, bash, edit, write tools\")}\n\n${chalk.bold(t(\"Usage:\"))}\n ${APP_NAME} [options] [--] [@files...] [messages...]\n\n${chalk.bold(t(\"Commands:\"))}\n ${APP_NAME} install <source> [-l] ${t(\"Install extension source and add to settings\")}\n ${APP_NAME} remove <source> [-l] ${t(\"Remove extension source from settings\")}\n ${APP_NAME} uninstall <source> [-l] ${t(\"Alias for remove\")}\n ${APP_NAME} update [source|self|agent-forge] ${t(\"Update Agent Forge, extensions, or model catalogs\")}\n ${APP_NAME} list ${t(\"List installed extensions from settings\")}\n ${APP_NAME} config [-l] ${t(\"Open TUI to enable/disable package resources (Tab switches scope)\")}\n ${APP_NAME} auth <command> ${t(\"Print credentials or check provider readiness\")}\n ${APP_NAME} <command> --help ${t(\"Show help for install/remove/uninstall/update/list/config/auth\")}\n\n${chalk.bold(t(\"Options:\"))}\n --provider <name> ${t(\"Provider name (default: google)\")}\n --model <pattern> ${t('Model pattern or ID (supports \"provider/id\" and optional \":<thinking>\")')}\n --api-key <key> ${t(\"API key (defaults to env vars)\")}\n --system-prompt <text> ${t(\"System prompt (default: coding assistant prompt)\")}\n --append-system-prompt <text> ${t(\"Append text or file contents to the system prompt (can be used multiple times)\")}\n --mode <mode> ${t(\"Output mode: text (default), json, or rpc\")}\n --print, -p ${t(\"Non-interactive mode: process prompt and exit\")}\n --continue, -c ${t(\"Continue previous session\")}\n --resume, -r ${t(\"Select a session to resume\")}\n --session <path|id> ${t(\"Use specific session file or partial UUID\")}\n --session-id <id> ${t(\"Use exact project session ID, creating it if missing\")}\n --fork <path|id> ${t(\"Fork specific session file or partial UUID into a new session\")}\n --session-dir <dir> ${t(\"Directory for session storage and lookup\")}\n --suite <id> ${t(\"Suite (方案) for this run: coding (default) or assistant; new sessions only\")}\n --suite-create <id> ${t(\"Create a user suite workspace and exit; add --clone-from <id> to copy one\")}\n --suite-delete <id> ${t(\"Delete a user suite workspace (active session references refuse) and exit\")}\n --suite-reset <id> ${t(\"Reset a builtin suite to factory contents (shows a diff) and exit\")}\n --serve <port> ${t(\"(Experimental, local trust only) Serve the coding-agent session runtime over the WebSocket gateway (default: 127.0.0.1; HTTP surface: /healthz plus token-protected artifact reads) and exit on SIGINT/SIGTERM\")}\n ${t(\"Durable journal: <agentDir>/remote-server-journal.jsonl (never the process cwd)\")}\n --serve-workspace-root <dir> ${t(\"Opt-in --serve boundary: remote creates must run inside one of these roots (repeatable); without it any local directory is allowed\")}\n --subagent-runner ${t(\"(Experimental) Run as a headless subagent runner: serve the subagent-task protocol on stdio for a parent session's runner pool (D-045)\")}\n --no-session ${t(\"Don't save session (ephemeral)\")}\n --name, -n <name> ${t(\"Set session display name\")}\n --models <patterns> ${t(\"Comma-separated model patterns for Ctrl+P cycling\")}\n ${t(\"Supports globs (anthropic/*, *sonnet*) and fuzzy matching\")}\n --no-tools, -nt ${t(\"Disable all tools by default (built-in and plugin)\")}\n --no-builtin-tools, -nbt ${t(\"Disable built-in tools by default but keep plugin/custom tools enabled\")}\n --tools, -t <tools> ${t(\"Comma-separated allowlist of tool names to enable\")}\n ${t(\"Applies to built-in, plugin, and custom tools\")}\n --exclude-tools, -xt <tools> ${t(\"Comma-separated denylist of tool names to disable\")}\n ${t(\"Applies to built-in, plugin, and custom tools\")}\n --thinking <level> ${t(\"Set thinking level: off, minimal, low, medium, high, xhigh, max\")}\n --no-plugins, -np ${t(\"Disable capability plugin discovery (D-028 escape hatch)\")}\n --no-trace ${t(\"Disable session trace collection (no .trace.jsonl file is written)\")}\n --log-level <level> ${t(\"Host log level: debug, info (default), warn, error\")}\n --plugin-profile <id> ${t(\"Select a builtin capability plugin profile for this run\")}\n --plugin <id> ${t(\"Select a plugin within the profile (repeatable)\")}\n --disable-plugin <id> ${t(\"Disable a plugin within the profile (repeatable)\")}\n --plugin-scope <scope> ${t(\"Read the explicit selection from global or project storage\")}\n plugin catalog list ${t(\"List installed/available ecosystem plugins (independent namespace)\")}\n --skill <path> ${t(\"Load a skill file or directory (can be used multiple times)\")}\n --no-skills, -ns ${t(\"Disable skills discovery and loading\")}\n --prompt-template <path> ${t(\"Load a prompt template file or directory (can be used multiple times)\")}\n --no-prompt-templates, -np ${t(\"Disable prompt template discovery and loading\")}\n --theme <path> ${t(\"Load a theme file or directory (can be used multiple times)\")}\n --use-theme <name[/name]> ${t(\"Set the initial interactive theme for this run\")}\n --no-themes ${t(\"Disable theme discovery and loading\")}\n --no-context-files, -nc ${t(\"Disable AGENTS.md and CLAUDE.md discovery and loading\")}\n --export <file> ${t(\"Export session file to HTML and exit\")}\n --trace <session> ${t(\"View a session trace file as a text timeline and exit; <session> is a session id/prefix or trace/session file path, omit it for the most recent session\")}\n --trace-json ${t(\"With --trace, output the structured trace records as JSON instead of the text timeline\")}\n --trace-kind <k1,k2> ${t(\"With --trace, show only records of these kinds (comma-separated); valid kinds: {kinds}\", { kinds: TRACE_KINDS_V1.join(\", \") })}\n --trace-limit <n> ${t(\"With --trace, show only the last N records (positive integer)\")}\n --list-models [search] ${t(\"List available models (with optional fuzzy search)\")}\n --verbose ${t(\"Force verbose startup (overrides quietStartup setting)\")}\n --tui-mode <mode> ${t(\"TUI mode: regular (default) or fullscreen\")}\n --offline ${t(\"Disable startup network operations (same as AGENT_FORGE_OFFLINE=1)\")}\n -- ${t(\"End option parsing; treat remaining arguments as messages/files\")}\n --help, -h ${t(\"Show this help\")}\n --version, -v ${t(\"Show version number\")}\n\n${chalk.bold(t(\"Examples:\"))}\n # ${t(\"Print a provider API key for an external client\")}\n ${APP_NAME} auth print-api-key --provider openai\n\n # ${t(\"Print an OAuth bearer token for an external client (refreshes if expired)\")}\n ${APP_NAME} auth print-bearer-token --provider openai-codex\n\n # ${t(\"Interactive mode\")}\n ${APP_NAME}\n\n # ${t(\"Interactive mode with initial prompt\")}\n ${APP_NAME} \"List all .ts files in src/\"\n\n # ${t(\"Include files in initial message\")}\n ${APP_NAME} @prompt.md @image.png \"What color is the sky?\"\n\n # ${t(\"Non-interactive mode (process and exit)\")}\n ${APP_NAME} -p \"List all .ts files in src/\"\n\n # ${t(\"Prompt beginning with a dash\")}\n ${APP_NAME} -p -- \"- Summarize these points\"\n\n # ${t(\"Multiple messages (interactive)\")}\n ${APP_NAME} \"Read package.json\" \"What dependencies do we have?\"\n\n # ${t(\"Continue previous session\")}\n ${APP_NAME} --continue \"What did we discuss?\"\n\n # ${t(\"Start a named session\")}\n ${APP_NAME} --name \"Refactor auth module\"\n\n # ${t(\"Use different model\")}\n ${APP_NAME} --provider openai --model gpt-4o-mini \"Help me refactor this code\"\n\n # ${t(\"Use model with provider prefix (no --provider needed)\")}\n ${APP_NAME} --model openai/gpt-4o \"Help me refactor this code\"\n\n # ${t(\"Use model with thinking level shorthand\")}\n ${APP_NAME} --model sonnet:high \"Solve this complex problem\"\n\n # ${t(\"Limit model cycling to specific models\")}\n ${APP_NAME} --models claude-sonnet,claude-haiku,gpt-4o\n\n # ${t(\"Limit to a specific provider with glob pattern\")}\n ${APP_NAME} --models \"github-copilot/*\"\n\n # ${t(\"Cycle models with fixed thinking levels\")}\n ${APP_NAME} --models sonnet:high,haiku:low\n\n # ${t(\"Start with a specific thinking level\")}\n ${APP_NAME} --thinking high \"Solve this complex problem\"\n\n # ${t(\"Read-only mode (no file modifications possible)\")}\n ${APP_NAME} --tools read,grep,find,ls -p \"Review the code in src/\"\n\n # ${t(\"Disable one tool while keeping the rest available\")}\n ${APP_NAME} --exclude-tools ask_question\n\n # ${t(\"Export a session file to HTML\")}\n ${APP_NAME} --export ~/${CONFIG_DIR_NAME}/agent/sessions/--path--/session.jsonl\n ${APP_NAME} --export session.jsonl output.html\n\n${chalk.bold(t(\"Environment Variables:\"))}\n ANTHROPIC_AUTH_TOKEN - ${t(\"Anthropic bearer auth token\")}\n ANTHROPIC_API_KEY - ${t(\"Anthropic Claude API key\")}\n ANTHROPIC_OAUTH_TOKEN - ${t(\"Anthropic OAuth token (alternative to API key)\")}\n ANT_LING_API_KEY - ${t(\"Ant Ling API key\")}\n OPENAI_API_KEY - ${t(\"OpenAI GPT API key\")}\n AZURE_OPENAI_API_KEY - ${t(\"Azure OpenAI API key\")}\n AZURE_OPENAI_BASE_URL - ${t(\"Azure OpenAI/Cognitive Services base URL (e.g. https://{resource}.openai.azure.com)\")}\n AZURE_OPENAI_RESOURCE_NAME - ${t(\"Azure OpenAI resource name (alternative to base URL)\")}\n AZURE_OPENAI_API_VERSION - ${t(\"Azure OpenAI API version (default: v1)\")}\n AZURE_OPENAI_DEPLOYMENT_NAME_MAP - ${t(\"Azure OpenAI model=deployment map (comma-separated)\")}\n DEEPSEEK_API_KEY - ${t(\"DeepSeek API key\")}\n NVIDIA_API_KEY - ${t(\"NVIDIA NIM API key\")}\n GEMINI_API_KEY - ${t(\"Google Gemini API key\")}\n GROQ_API_KEY - ${t(\"Groq API key\")}\n CEREBRAS_API_KEY - ${t(\"Cerebras API key\")}\n XAI_API_KEY - ${t(\"xAI Grok API key\")}\n FIREWORKS_API_KEY - ${t(\"Fireworks API key\")}\n TOGETHER_API_KEY - ${t(\"Together AI API key\")}\n BASETEN_API_KEY - ${t(\"Baseten API key\")}\n OPENROUTER_API_KEY - ${t(\"OpenRouter API key\")}\n AI_GATEWAY_API_KEY - ${t(\"Vercel AI Gateway API key\")}\n ZAI_API_KEY - ${t(\"ZAI Coding Plan API key (Global)\")}\n ZAI_CODING_CN_API_KEY - ${t(\"ZAI Coding Plan API key (China)\")}\n MISTRAL_API_KEY - ${t(\"Mistral API key\")}\n MINIMAX_API_KEY - ${t(\"MiniMax API key\")}\n MOONSHOT_API_KEY - ${t(\"Moonshot AI API key\")}\n OPENCODE_API_KEY - ${t(\"OpenCode Zen/OpenCode Go API key\")}\n KIMI_API_KEY - ${t(\"Kimi For Coding API key\")}\n CLOUDFLARE_API_KEY - ${t(\"Cloudflare API token (Workers AI and AI Gateway)\")}\n CLOUDFLARE_ACCOUNT_ID - ${t(\"Cloudflare account id (required for both)\")}\n CLOUDFLARE_GATEWAY_ID - ${t(\"Cloudflare AI Gateway slug (required for AI Gateway)\")}\n QWEN_TOKEN_PLAN_API_KEY - ${t(\"Qwen Token Plan API key (international region)\")}\n QWEN_TOKEN_PLAN_CN_API_KEY - ${t(\"Qwen Token Plan API key (China region)\")}\n XIAOMI_API_KEY - ${t(\"Xiaomi MiMo API key (api.xiaomimimo.com billing)\")}\n XIAOMI_TOKEN_PLAN_CN_API_KEY - ${t(\"Xiaomi MiMo Token Plan API key (China region)\")}\n XIAOMI_TOKEN_PLAN_AMS_API_KEY - ${t(\"Xiaomi MiMo Token Plan API key (Amsterdam region)\")}\n XIAOMI_TOKEN_PLAN_SGP_API_KEY - ${t(\"Xiaomi MiMo Token Plan API key (Singapore region)\")}\n AWS_PROFILE - ${t(\"AWS profile for Amazon Bedrock\")}\n AWS_ACCESS_KEY_ID - ${t(\"AWS access key for Amazon Bedrock\")}\n AWS_SECRET_ACCESS_KEY - ${t(\"AWS secret key for Amazon Bedrock\")}\n AWS_BEARER_TOKEN_BEDROCK - ${t(\"Bedrock API key (bearer token)\")}\n AWS_REGION - ${t(\"AWS region for Amazon Bedrock (e.g., us-east-1)\")}\n ${ENV_AGENT_DIR.padEnd(32)} - ${t(\"Config directory (default: ~/{configDir}/agent)\", { configDir: CONFIG_DIR_NAME })}\n ${ENV_SESSION_DIR.padEnd(32)} - ${t(\"Session storage directory (overridden by --session-dir)\")}\n AGENT_FORGE_PACKAGE_DIR - ${t(\"Override package directory (for Nix/Guix store paths)\")}\n AGENT_FORGE_OFFLINE - ${t(\"Disable startup network operations when set to 1/true/yes\")}\n\n${chalk.bold(t(\"Built-in Tool Names:\"))}\n read - ${t(\"Read file contents\")}\n bash - ${t(\"Execute bash commands\")}\n powershell - ${t(\"Execute PowerShell commands on Windows\")}\n edit - ${t(\"Edit files with find/replace\")}\n write - ${t(\"Write files (creates/overwrites)\")}\n grep - ${t(\"Search file contents (read-only, off by default)\")}\n find - ${t(\"Find files by glob pattern (read-only, off by default)\")}\n ls - ${t(\"List directory contents (read-only, off by default)\")}\n`);\n}\n"]}