@xagent-ai/cli 1.2.2 → 1.3.1

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 (602) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +38 -38
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -20
  3. package/.github/release.yml +76 -0
  4. package/.github/workflows/ci.yml +75 -0
  5. package/.github/workflows/release.yml +103 -0
  6. package/.gitmodules +3 -3
  7. package/README.md +326 -280
  8. package/README_CN.md +325 -279
  9. package/dist/agents.d.ts.map +1 -1
  10. package/dist/agents.js +7 -3
  11. package/dist/agents.js.map +1 -1
  12. package/dist/ai-client/factory.d.ts +40 -0
  13. package/dist/ai-client/factory.d.ts.map +1 -0
  14. package/dist/ai-client/factory.js +100 -0
  15. package/dist/ai-client/factory.js.map +1 -0
  16. package/dist/ai-client/index.d.ts +20 -0
  17. package/dist/ai-client/index.d.ts.map +1 -0
  18. package/dist/ai-client/index.js +49 -0
  19. package/dist/ai-client/index.js.map +1 -0
  20. package/dist/ai-client/providers/anthropic.d.ts +57 -0
  21. package/dist/ai-client/providers/anthropic.d.ts.map +1 -0
  22. package/dist/ai-client/providers/anthropic.js +406 -0
  23. package/dist/ai-client/providers/anthropic.js.map +1 -0
  24. package/dist/ai-client/providers/openai.d.ts +57 -0
  25. package/dist/ai-client/providers/openai.d.ts.map +1 -0
  26. package/dist/ai-client/providers/openai.js +290 -0
  27. package/dist/ai-client/providers/openai.js.map +1 -0
  28. package/dist/ai-client/providers/remote.d.ts +110 -0
  29. package/dist/ai-client/providers/remote.d.ts.map +1 -0
  30. package/dist/ai-client/providers/remote.js +352 -0
  31. package/dist/ai-client/providers/remote.js.map +1 -0
  32. package/dist/ai-client/registry.d.ts +51 -0
  33. package/dist/ai-client/registry.d.ts.map +1 -0
  34. package/dist/ai-client/registry.js +81 -0
  35. package/dist/ai-client/registry.js.map +1 -0
  36. package/dist/ai-client/types.d.ts +274 -0
  37. package/dist/ai-client/types.d.ts.map +1 -0
  38. package/dist/ai-client/types.js +90 -0
  39. package/dist/ai-client/types.js.map +1 -0
  40. package/dist/ai-client-factory.d.ts +62 -0
  41. package/dist/ai-client-factory.d.ts.map +1 -0
  42. package/dist/ai-client-factory.js +157 -0
  43. package/dist/ai-client-factory.js.map +1 -0
  44. package/dist/auth.d.ts +23 -1
  45. package/dist/auth.d.ts.map +1 -1
  46. package/dist/auth.js +164 -174
  47. package/dist/auth.js.map +1 -1
  48. package/dist/cancellation.d.ts +5 -4
  49. package/dist/cancellation.d.ts.map +1 -1
  50. package/dist/cancellation.js +53 -32
  51. package/dist/cancellation.js.map +1 -1
  52. package/dist/checkpoint.d.ts +2 -1
  53. package/dist/checkpoint.d.ts.map +1 -1
  54. package/dist/checkpoint.js +39 -6
  55. package/dist/checkpoint.js.map +1 -1
  56. package/dist/cli.js +742 -29
  57. package/dist/cli.js.map +1 -1
  58. package/dist/config.d.ts +10 -4
  59. package/dist/config.d.ts.map +1 -1
  60. package/dist/config.js +62 -25
  61. package/dist/config.js.map +1 -1
  62. package/dist/context-compressor.d.ts +82 -18
  63. package/dist/context-compressor.d.ts.map +1 -1
  64. package/dist/context-compressor.js +718 -154
  65. package/dist/context-compressor.js.map +1 -1
  66. package/dist/conversation.d.ts +1 -1
  67. package/dist/conversation.d.ts.map +1 -1
  68. package/dist/conversation.js +8 -7
  69. package/dist/conversation.js.map +1 -1
  70. package/dist/gui-subagent/action-parser/actionParser.d.ts.map +1 -1
  71. package/dist/gui-subagent/action-parser/actionParser.js +6 -4
  72. package/dist/gui-subagent/action-parser/actionParser.js.map +1 -1
  73. package/dist/gui-subagent/agent/gui-agent.d.ts +39 -2
  74. package/dist/gui-subagent/agent/gui-agent.d.ts.map +1 -1
  75. package/dist/gui-subagent/agent/gui-agent.js +189 -74
  76. package/dist/gui-subagent/agent/gui-agent.js.map +1 -1
  77. package/dist/gui-subagent/index.d.ts +23 -1
  78. package/dist/gui-subagent/index.d.ts.map +1 -1
  79. package/dist/gui-subagent/index.js +6 -0
  80. package/dist/gui-subagent/index.js.map +1 -1
  81. package/dist/gui-subagent/operator/base-operator.d.ts.map +1 -1
  82. package/dist/gui-subagent/operator/base-operator.js +0 -1
  83. package/dist/gui-subagent/operator/base-operator.js.map +1 -1
  84. package/dist/gui-subagent/operator/computer-operator.d.ts.map +1 -1
  85. package/dist/gui-subagent/operator/computer-operator.js +31 -8
  86. package/dist/gui-subagent/operator/computer-operator.js.map +1 -1
  87. package/dist/gui-subagent/types/actions.d.ts +1 -1
  88. package/dist/gui-subagent/types/actions.d.ts.map +1 -1
  89. package/dist/gui-subagent/types/actions.js +0 -1
  90. package/dist/gui-subagent/types/actions.js.map +1 -1
  91. package/dist/gui-subagent/types/operator.d.ts +1 -1
  92. package/dist/gui-subagent/types/operator.d.ts.map +1 -1
  93. package/dist/index.d.ts +1 -2
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +1 -2
  96. package/dist/index.js.map +1 -1
  97. package/dist/input-processor.d.ts.map +1 -1
  98. package/dist/input-processor.js +8 -5
  99. package/dist/input-processor.js.map +1 -1
  100. package/dist/logger.d.ts.map +1 -1
  101. package/dist/logger.js +1 -1
  102. package/dist/logger.js.map +1 -1
  103. package/dist/mcp.d.ts +7 -1
  104. package/dist/mcp.d.ts.map +1 -1
  105. package/dist/mcp.js +157 -49
  106. package/dist/mcp.js.map +1 -1
  107. package/dist/memory.d.ts.map +1 -1
  108. package/dist/memory.js +3 -3
  109. package/dist/memory.js.map +1 -1
  110. package/dist/output-util.d.ts +27 -0
  111. package/dist/output-util.d.ts.map +1 -0
  112. package/dist/output-util.js +74 -0
  113. package/dist/output-util.js.map +1 -0
  114. package/dist/retry.js +1 -1
  115. package/dist/retry.js.map +1 -1
  116. package/dist/ripgrep.d.ts +29 -0
  117. package/dist/ripgrep.d.ts.map +1 -0
  118. package/dist/ripgrep.js +294 -0
  119. package/dist/ripgrep.js.map +1 -0
  120. package/dist/sdk-output-adapter.d.ts +34 -1
  121. package/dist/sdk-output-adapter.d.ts.map +1 -1
  122. package/dist/sdk-output-adapter.js +67 -2
  123. package/dist/sdk-output-adapter.js.map +1 -1
  124. package/dist/sdk-session.d.ts.map +1 -1
  125. package/dist/sdk-session.js +2 -0
  126. package/dist/sdk-session.js.map +1 -1
  127. package/dist/session-manager.js +3 -3
  128. package/dist/session-manager.js.map +1 -1
  129. package/dist/session.d.ts +116 -6
  130. package/dist/session.d.ts.map +1 -1
  131. package/dist/session.js +1416 -448
  132. package/dist/session.js.map +1 -1
  133. package/dist/shell.d.ts +33 -0
  134. package/dist/shell.d.ts.map +1 -0
  135. package/dist/shell.js +126 -0
  136. package/dist/shell.js.map +1 -0
  137. package/dist/skill-installer.d.ts +38 -0
  138. package/dist/skill-installer.d.ts.map +1 -0
  139. package/dist/skill-installer.js +447 -0
  140. package/dist/skill-installer.js.map +1 -0
  141. package/dist/skill-invoker.d.ts +8 -2
  142. package/dist/skill-invoker.d.ts.map +1 -1
  143. package/dist/skill-invoker.js +36 -15
  144. package/dist/skill-invoker.js.map +1 -1
  145. package/dist/skill-loader.d.ts +8 -3
  146. package/dist/skill-loader.d.ts.map +1 -1
  147. package/dist/skill-loader.js +51 -48
  148. package/dist/skill-loader.js.map +1 -1
  149. package/dist/skill-manager.d.ts +85 -0
  150. package/dist/skill-manager.d.ts.map +1 -0
  151. package/dist/skill-manager.js +341 -0
  152. package/dist/skill-manager.js.map +1 -0
  153. package/dist/slash-commands.d.ts +39 -2
  154. package/dist/slash-commands.d.ts.map +1 -1
  155. package/dist/slash-commands.js +934 -305
  156. package/dist/slash-commands.js.map +1 -1
  157. package/dist/smart-approval.d.ts +20 -1
  158. package/dist/smart-approval.d.ts.map +1 -1
  159. package/dist/smart-approval.js +125 -56
  160. package/dist/smart-approval.js.map +1 -1
  161. package/dist/system-prompt-generator.d.ts +6 -0
  162. package/dist/system-prompt-generator.d.ts.map +1 -1
  163. package/dist/system-prompt-generator.js +86 -36
  164. package/dist/system-prompt-generator.js.map +1 -1
  165. package/dist/terminal.d.ts +28 -0
  166. package/dist/terminal.d.ts.map +1 -0
  167. package/dist/terminal.js +82 -0
  168. package/dist/terminal.js.map +1 -0
  169. package/dist/theme.d.ts.map +1 -1
  170. package/dist/theme.js +8 -7
  171. package/dist/theme.js.map +1 -1
  172. package/dist/tools.d.ts +38 -7
  173. package/dist/tools.d.ts.map +1 -1
  174. package/dist/tools.js +1249 -617
  175. package/dist/tools.js.map +1 -1
  176. package/dist/truncate.d.ts +55 -0
  177. package/dist/truncate.d.ts.map +1 -0
  178. package/dist/truncate.js +130 -0
  179. package/dist/truncate.js.map +1 -0
  180. package/dist/types.d.ts +84 -9
  181. package/dist/types.d.ts.map +1 -1
  182. package/dist/types.js +49 -0
  183. package/dist/types.js.map +1 -1
  184. package/dist/update.d.ts.map +1 -1
  185. package/dist/update.js +28 -36
  186. package/dist/update.js.map +1 -1
  187. package/dist/workflow.d.ts +5 -1
  188. package/dist/workflow.d.ts.map +1 -1
  189. package/dist/workflow.js +61 -49
  190. package/dist/workflow.js.map +1 -1
  191. package/docs/architecture/mcp-integration-guide.md +304 -194
  192. package/docs/architecture/overview.md +169 -169
  193. package/docs/architecture/tool-system-design.md +134 -134
  194. package/docs/cli/commands.md +349 -238
  195. package/docs/smart-mode.md +281 -281
  196. package/docs/third-party-models.md +440 -439
  197. package/find-skills/SKILL.md +133 -0
  198. package/package.json +91 -90
  199. package/scripts/install-ripgrep.js +241 -0
  200. package/src/agents.ts +7 -3
  201. package/src/ai-client/factory.ts +116 -0
  202. package/src/ai-client/index.ts +61 -0
  203. package/src/ai-client/providers/anthropic.ts +475 -0
  204. package/src/ai-client/providers/openai.ts +348 -0
  205. package/src/ai-client/providers/remote.ts +439 -0
  206. package/src/ai-client/registry.ts +97 -0
  207. package/src/ai-client/types.ts +364 -0
  208. package/src/ai-client-factory.ts +204 -0
  209. package/src/auth.ts +661 -614
  210. package/src/cancellation.ts +202 -176
  211. package/src/checkpoint.ts +255 -219
  212. package/src/cli.ts +1523 -743
  213. package/src/config.ts +341 -297
  214. package/src/context-compressor.ts +987 -290
  215. package/src/conversation.ts +290 -288
  216. package/src/gui-subagent/action-parser/actionParser.ts +318 -315
  217. package/src/gui-subagent/action-parser/constants.ts +14 -14
  218. package/src/gui-subagent/action-parser/index.ts +8 -8
  219. package/src/gui-subagent/action-parser/types.ts +31 -31
  220. package/src/gui-subagent/agent/gui-agent.ts +1234 -1089
  221. package/src/gui-subagent/agent/index.ts +5 -5
  222. package/src/gui-subagent/index.ts +185 -163
  223. package/src/gui-subagent/operator/base-operator.ts +244 -245
  224. package/src/gui-subagent/operator/computer-operator.ts +541 -520
  225. package/src/gui-subagent/operator/index.ts +6 -6
  226. package/src/gui-subagent/types/actions.ts +260 -262
  227. package/src/gui-subagent/types/index.ts +6 -6
  228. package/src/gui-subagent/types/operator.ts +106 -106
  229. package/src/gui-subagent/utils.ts +51 -51
  230. package/src/index.ts +17 -18
  231. package/src/input-processor.ts +8 -5
  232. package/src/logger.ts +436 -438
  233. package/src/mcp.ts +793 -682
  234. package/src/memory.ts +343 -344
  235. package/src/output-util.ts +80 -0
  236. package/src/retry.ts +1 -1
  237. package/src/ripgrep.ts +370 -0
  238. package/src/sdk-output-adapter.ts +842 -0
  239. package/src/sdk-session.ts +62 -0
  240. package/src/session-manager.ts +308 -308
  241. package/src/session.ts +1775 -573
  242. package/src/shell.ts +134 -0
  243. package/src/skill-installer.ts +518 -0
  244. package/src/skill-invoker.ts +959 -935
  245. package/src/skill-loader.ts +501 -496
  246. package/src/skill-manager.ts +385 -0
  247. package/src/slash-commands.ts +2189 -1389
  248. package/src/smart-approval.ts +193 -74
  249. package/src/system-prompt-generator.ts +91 -36
  250. package/src/terminal.ts +96 -0
  251. package/src/theme.ts +739 -738
  252. package/src/tools.ts +1790 -931
  253. package/src/truncate.ts +173 -0
  254. package/src/types.ts +337 -198
  255. package/src/update.ts +33 -40
  256. package/src/workflow.ts +521 -508
  257. package/test/cli-launch.test.ts +279 -0
  258. package/tsconfig.json +22 -22
  259. package/vitest.config.ts +21 -19
  260. package/dist/ai-client.d.ts +0 -86
  261. package/dist/ai-client.d.ts.map +0 -1
  262. package/dist/ai-client.js +0 -1372
  263. package/dist/ai-client.js.map +0 -1
  264. package/dist/gui-subagent/operator/browser-operator.d.ts +0 -36
  265. package/dist/gui-subagent/operator/browser-operator.d.ts.map +0 -1
  266. package/dist/gui-subagent/operator/browser-operator.js +0 -306
  267. package/dist/gui-subagent/operator/browser-operator.js.map +0 -1
  268. package/dist/gui-subagent/operator/desktop-operator.d.ts +0 -55
  269. package/dist/gui-subagent/operator/desktop-operator.d.ts.map +0 -1
  270. package/dist/gui-subagent/operator/desktop-operator.js +0 -527
  271. package/dist/gui-subagent/operator/desktop-operator.js.map +0 -1
  272. package/dist/hook.d.ts +0 -73
  273. package/dist/hook.d.ts.map +0 -1
  274. package/dist/hook.js +0 -156
  275. package/dist/hook.js.map +0 -1
  276. package/dist/input-history.d.ts +0 -24
  277. package/dist/input-history.d.ts.map +0 -1
  278. package/dist/input-history.js +0 -94
  279. package/dist/input-history.js.map +0 -1
  280. package/dist/keyboard-manager.d.ts +0 -151
  281. package/dist/keyboard-manager.d.ts.map +0 -1
  282. package/dist/keyboard-manager.js +0 -396
  283. package/dist/keyboard-manager.js.map +0 -1
  284. package/dist/print-system-prompt.d.ts +0 -2
  285. package/dist/print-system-prompt.d.ts.map +0 -1
  286. package/dist/print-system-prompt.js +0 -40
  287. package/dist/print-system-prompt.js.map +0 -1
  288. package/dist/remote-ai-client.d.ts +0 -104
  289. package/dist/remote-ai-client.d.ts.map +0 -1
  290. package/dist/remote-ai-client.js +0 -552
  291. package/dist/remote-ai-client.js.map +0 -1
  292. package/dist/sdk-session-v2.d.ts +0 -13
  293. package/dist/sdk-session-v2.d.ts.map +0 -1
  294. package/dist/sdk-session-v2.js +0 -46
  295. package/dist/sdk-session-v2.js.map +0 -1
  296. package/dist/test-boundary-conditions.d.ts.map +0 -1
  297. package/dist/test-boundary-conditions.js.map +0 -1
  298. package/dist/test-cancellation-fix.d.ts.map +0 -1
  299. package/dist/test-cancellation-fix.js.map +0 -1
  300. package/dist/test-input-history.d.ts.map +0 -1
  301. package/dist/test-input-history.js.map +0 -1
  302. package/dist/test-interaction-flow.d.ts.map +0 -1
  303. package/dist/test-interaction-flow.js.map +0 -1
  304. package/dist/test-quick.d.ts.map +0 -1
  305. package/dist/test-quick.js.map +0 -1
  306. package/dist/test-user-interaction.d.ts.map +0 -1
  307. package/dist/test-user-interaction.js.map +0 -1
  308. package/dist/tools/edit-diff.d.ts +0 -32
  309. package/dist/tools/edit-diff.d.ts.map +0 -1
  310. package/dist/tools/edit-diff.js +0 -185
  311. package/dist/tools/edit-diff.js.map +0 -1
  312. package/dist/tools/edit.d.ts +0 -11
  313. package/dist/tools/edit.d.ts.map +0 -1
  314. package/dist/tools/edit.js +0 -129
  315. package/dist/tools/edit.js.map +0 -1
  316. package/dist/unified-session.d.ts +0 -42
  317. package/dist/unified-session.d.ts.map +0 -1
  318. package/dist/unified-session.js +0 -271
  319. package/dist/unified-session.js.map +0 -1
  320. package/skills/.claude-plugin/marketplace.json +0 -45
  321. package/skills/README.md +0 -94
  322. package/skills/THIRD_PARTY_NOTICES.md +0 -405
  323. package/skills/skills/algorithmic-art/LICENSE.txt +0 -202
  324. package/skills/skills/algorithmic-art/SKILL.md +0 -405
  325. package/skills/skills/algorithmic-art/templates/generator_template.js +0 -223
  326. package/skills/skills/algorithmic-art/templates/viewer.html +0 -599
  327. package/skills/skills/brand-guidelines/LICENSE.txt +0 -202
  328. package/skills/skills/brand-guidelines/SKILL.md +0 -73
  329. package/skills/skills/canvas-design/LICENSE.txt +0 -202
  330. package/skills/skills/canvas-design/SKILL.md +0 -130
  331. package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
  332. package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  333. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  334. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
  335. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  336. package/skills/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
  337. package/skills/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  338. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  339. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
  340. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  341. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  342. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  343. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
  344. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  345. package/skills/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
  346. package/skills/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  347. package/skills/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
  348. package/skills/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  349. package/skills/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  350. package/skills/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
  351. package/skills/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  352. package/skills/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
  353. package/skills/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  354. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  355. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
  356. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  357. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  358. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  359. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  360. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  361. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  362. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  363. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  364. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
  365. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  366. package/skills/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  367. package/skills/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  368. package/skills/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
  369. package/skills/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  370. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  371. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
  372. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  373. package/skills/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  374. package/skills/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  375. package/skills/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
  376. package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
  377. package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  378. package/skills/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  379. package/skills/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  380. package/skills/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  381. package/skills/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
  382. package/skills/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  383. package/skills/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  384. package/skills/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
  385. package/skills/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  386. package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
  387. package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  388. package/skills/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  389. package/skills/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
  390. package/skills/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  391. package/skills/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  392. package/skills/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
  393. package/skills/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
  394. package/skills/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  395. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  396. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
  397. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  398. package/skills/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
  399. package/skills/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  400. package/skills/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  401. package/skills/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
  402. package/skills/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  403. package/skills/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
  404. package/skills/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  405. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  406. package/skills/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  407. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  408. package/skills/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
  409. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  410. package/skills/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
  411. package/skills/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  412. package/skills/skills/doc-coauthoring/SKILL.md +0 -375
  413. package/skills/skills/docx/LICENSE.txt +0 -30
  414. package/skills/skills/docx/SKILL.md +0 -197
  415. package/skills/skills/docx/docx-js.md +0 -350
  416. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  417. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  418. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  419. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  420. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  421. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  422. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  423. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  424. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  425. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  426. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  427. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  428. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  429. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  430. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  431. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  432. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  433. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  434. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  435. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  436. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  437. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  438. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  439. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  440. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  441. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  442. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  443. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  444. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  445. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  446. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  447. package/skills/skills/docx/ooxml/schemas/mce/mc.xsd +0 -75
  448. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
  449. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
  450. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
  451. package/skills/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
  452. package/skills/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
  453. package/skills/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  454. package/skills/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
  455. package/skills/skills/docx/ooxml/scripts/pack.py +0 -159
  456. package/skills/skills/docx/ooxml/scripts/unpack.py +0 -29
  457. package/skills/skills/docx/ooxml/scripts/validate.py +0 -69
  458. package/skills/skills/docx/ooxml/scripts/validation/__init__.py +0 -15
  459. package/skills/skills/docx/ooxml/scripts/validation/base.py +0 -951
  460. package/skills/skills/docx/ooxml/scripts/validation/docx.py +0 -274
  461. package/skills/skills/docx/ooxml/scripts/validation/pptx.py +0 -315
  462. package/skills/skills/docx/ooxml/scripts/validation/redlining.py +0 -279
  463. package/skills/skills/docx/ooxml.md +0 -610
  464. package/skills/skills/docx/scripts/__init__.py +0 -1
  465. package/skills/skills/docx/scripts/document.py +0 -1276
  466. package/skills/skills/docx/scripts/templates/comments.xml +0 -3
  467. package/skills/skills/docx/scripts/templates/commentsExtended.xml +0 -3
  468. package/skills/skills/docx/scripts/templates/commentsExtensible.xml +0 -3
  469. package/skills/skills/docx/scripts/templates/commentsIds.xml +0 -3
  470. package/skills/skills/docx/scripts/templates/people.xml +0 -3
  471. package/skills/skills/docx/scripts/utilities.py +0 -374
  472. package/skills/skills/frontend-design/LICENSE.txt +0 -177
  473. package/skills/skills/frontend-design/SKILL.md +0 -42
  474. package/skills/skills/internal-comms/LICENSE.txt +0 -202
  475. package/skills/skills/internal-comms/SKILL.md +0 -32
  476. package/skills/skills/internal-comms/examples/3p-updates.md +0 -47
  477. package/skills/skills/internal-comms/examples/company-newsletter.md +0 -65
  478. package/skills/skills/internal-comms/examples/faq-answers.md +0 -30
  479. package/skills/skills/internal-comms/examples/general-comms.md +0 -16
  480. package/skills/skills/mcp-builder/LICENSE.txt +0 -202
  481. package/skills/skills/mcp-builder/SKILL.md +0 -236
  482. package/skills/skills/mcp-builder/reference/evaluation.md +0 -602
  483. package/skills/skills/mcp-builder/reference/mcp_best_practices.md +0 -249
  484. package/skills/skills/mcp-builder/reference/node_mcp_server.md +0 -970
  485. package/skills/skills/mcp-builder/reference/python_mcp_server.md +0 -719
  486. package/skills/skills/mcp-builder/scripts/connections.py +0 -151
  487. package/skills/skills/mcp-builder/scripts/evaluation.py +0 -373
  488. package/skills/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  489. package/skills/skills/mcp-builder/scripts/requirements.txt +0 -2
  490. package/skills/skills/pdf/LICENSE.txt +0 -30
  491. package/skills/skills/pdf/SKILL.md +0 -294
  492. package/skills/skills/pdf/forms.md +0 -205
  493. package/skills/skills/pdf/reference.md +0 -612
  494. package/skills/skills/pdf/scripts/check_bounding_boxes.py +0 -70
  495. package/skills/skills/pdf/scripts/check_bounding_boxes_test.py +0 -226
  496. package/skills/skills/pdf/scripts/check_fillable_fields.py +0 -12
  497. package/skills/skills/pdf/scripts/convert_pdf_to_images.py +0 -35
  498. package/skills/skills/pdf/scripts/create_validation_image.py +0 -41
  499. package/skills/skills/pdf/scripts/extract_form_field_info.py +0 -152
  500. package/skills/skills/pdf/scripts/fill_fillable_fields.py +0 -114
  501. package/skills/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -108
  502. package/skills/skills/pptx/LICENSE.txt +0 -30
  503. package/skills/skills/pptx/SKILL.md +0 -484
  504. package/skills/skills/pptx/html2pptx.md +0 -625
  505. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  506. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  507. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  508. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  509. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  510. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  511. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  512. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  513. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  514. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  515. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  516. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  517. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  518. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  519. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  520. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  521. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  522. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  523. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  524. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  525. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  526. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  527. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  528. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  529. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  530. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  531. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  532. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  533. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  534. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  535. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  536. package/skills/skills/pptx/ooxml/schemas/mce/mc.xsd +0 -75
  537. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
  538. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
  539. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
  540. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
  541. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
  542. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  543. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
  544. package/skills/skills/pptx/ooxml/scripts/pack.py +0 -159
  545. package/skills/skills/pptx/ooxml/scripts/unpack.py +0 -29
  546. package/skills/skills/pptx/ooxml/scripts/validate.py +0 -69
  547. package/skills/skills/pptx/ooxml/scripts/validation/__init__.py +0 -15
  548. package/skills/skills/pptx/ooxml/scripts/validation/base.py +0 -951
  549. package/skills/skills/pptx/ooxml/scripts/validation/docx.py +0 -274
  550. package/skills/skills/pptx/ooxml/scripts/validation/pptx.py +0 -315
  551. package/skills/skills/pptx/ooxml/scripts/validation/redlining.py +0 -279
  552. package/skills/skills/pptx/ooxml.md +0 -427
  553. package/skills/skills/pptx/scripts/html2pptx.js +0 -979
  554. package/skills/skills/pptx/scripts/inventory.py +0 -1020
  555. package/skills/skills/pptx/scripts/rearrange.py +0 -231
  556. package/skills/skills/pptx/scripts/replace.py +0 -385
  557. package/skills/skills/pptx/scripts/thumbnail.py +0 -450
  558. package/skills/skills/skill-creator/LICENSE.txt +0 -202
  559. package/skills/skills/skill-creator/SKILL.md +0 -356
  560. package/skills/skills/skill-creator/references/output-patterns.md +0 -82
  561. package/skills/skills/skill-creator/references/workflows.md +0 -28
  562. package/skills/skills/skill-creator/scripts/init_skill.py +0 -303
  563. package/skills/skills/skill-creator/scripts/package_skill.py +0 -110
  564. package/skills/skills/skill-creator/scripts/quick_validate.py +0 -95
  565. package/skills/skills/slack-gif-creator/LICENSE.txt +0 -202
  566. package/skills/skills/slack-gif-creator/SKILL.md +0 -254
  567. package/skills/skills/slack-gif-creator/core/easing.py +0 -234
  568. package/skills/skills/slack-gif-creator/core/frame_composer.py +0 -176
  569. package/skills/skills/slack-gif-creator/core/gif_builder.py +0 -269
  570. package/skills/skills/slack-gif-creator/core/validators.py +0 -136
  571. package/skills/skills/slack-gif-creator/requirements.txt +0 -4
  572. package/skills/skills/theme-factory/LICENSE.txt +0 -202
  573. package/skills/skills/theme-factory/SKILL.md +0 -59
  574. package/skills/skills/theme-factory/theme-showcase.pdf +0 -0
  575. package/skills/skills/theme-factory/themes/arctic-frost.md +0 -19
  576. package/skills/skills/theme-factory/themes/botanical-garden.md +0 -19
  577. package/skills/skills/theme-factory/themes/desert-rose.md +0 -19
  578. package/skills/skills/theme-factory/themes/forest-canopy.md +0 -19
  579. package/skills/skills/theme-factory/themes/golden-hour.md +0 -19
  580. package/skills/skills/theme-factory/themes/midnight-galaxy.md +0 -19
  581. package/skills/skills/theme-factory/themes/modern-minimalist.md +0 -19
  582. package/skills/skills/theme-factory/themes/ocean-depths.md +0 -19
  583. package/skills/skills/theme-factory/themes/sunset-boulevard.md +0 -19
  584. package/skills/skills/theme-factory/themes/tech-innovation.md +0 -19
  585. package/skills/skills/web-artifacts-builder/LICENSE.txt +0 -202
  586. package/skills/skills/web-artifacts-builder/SKILL.md +0 -74
  587. package/skills/skills/web-artifacts-builder/scripts/bundle-artifact.sh +0 -54
  588. package/skills/skills/web-artifacts-builder/scripts/init-artifact.sh +0 -322
  589. package/skills/skills/webapp-testing/LICENSE.txt +0 -202
  590. package/skills/skills/webapp-testing/SKILL.md +0 -96
  591. package/skills/skills/webapp-testing/examples/console_logging.py +0 -35
  592. package/skills/skills/webapp-testing/examples/element_discovery.py +0 -40
  593. package/skills/skills/webapp-testing/examples/static_html_automation.py +0 -33
  594. package/skills/skills/webapp-testing/scripts/with_server.py +0 -106
  595. package/skills/skills/xlsx/LICENSE.txt +0 -30
  596. package/skills/skills/xlsx/SKILL.md +0 -289
  597. package/skills/skills/xlsx/recalc.py +0 -178
  598. package/skills/spec/agent-skills-spec.md +0 -3
  599. package/skills/template/SKILL.md +0 -6
  600. package/src/ai-client.ts +0 -1560
  601. package/src/remote-ai-client.ts +0 -664
  602. /package/{.eslintrc.js → .eslintrc.cjs} +0 -0
@@ -1,9 +1,12 @@
1
- import inquirer from 'inquirer';
2
- import { AIClient, Message } from './ai-client.js';
1
+ import { confirm } from '@clack/prompts';
2
+ import { Message } from './ai-client/types.js';
3
+ import { createAIClient, AIClientInterface } from './ai-client-factory.js';
3
4
  import { getConfigManager } from './config.js';
4
5
  import { AuthType } from './types.js';
5
6
  import { getLogger } from './logger.js';
6
7
  import { colors, icons } from './theme.js';
8
+ import { getCancellationManager } from './cancellation.js';
9
+ import { SdkOutputAdapter } from './sdk-output-adapter.js';
7
10
 
8
11
  const logger = getLogger();
9
12
 
@@ -14,7 +17,7 @@ export enum ApprovalDecision {
14
17
  APPROVED = 'approved',
15
18
  REJECTED = 'rejected',
16
19
  REQUIRES_CONFIRMATION = 'requires_confirmation',
17
- AI_REVIEW = 'ai_review'
20
+ AI_REVIEW = 'ai_review',
18
21
  }
19
22
 
20
23
  /**
@@ -24,7 +27,7 @@ export enum RiskLevel {
24
27
  LOW = 'LOW',
25
28
  MEDIUM = 'MEDIUM',
26
29
  HIGH = 'HIGH',
27
- CRITICAL = 'CRITICAL'
30
+ CRITICAL = 'CRITICAL',
28
31
  }
29
32
 
30
33
  /**
@@ -77,7 +80,7 @@ export class WhitelistChecker {
77
80
  'ask_user_question',
78
81
  'save_memory',
79
82
  'xml_escape',
80
- 'Skill'
83
+ 'Skill',
81
84
  ]);
82
85
 
83
86
  /**
@@ -115,31 +118,31 @@ export class BlacklistChecker {
115
118
  pattern: /rm\s+-rf\s+\/$/,
116
119
  category: 'System destruction',
117
120
  riskLevel: RiskLevel.CRITICAL,
118
- description: 'Delete root directory'
121
+ description: 'Delete root directory',
119
122
  },
120
123
  {
121
124
  pattern: /rm\s+-rf\s+(\/etc|\/usr|\/bin|\/sbin|\/lib|\/lib64)/,
122
125
  category: 'System destruction',
123
126
  riskLevel: RiskLevel.CRITICAL,
124
- description: 'Delete system directories'
127
+ description: 'Delete system directories',
125
128
  },
126
129
  {
127
130
  pattern: /rm\s+-rf\s+.*\*/,
128
131
  category: 'System destruction',
129
132
  riskLevel: RiskLevel.HIGH,
130
- description: 'Batch delete files'
133
+ description: 'Batch delete files',
131
134
  },
132
135
  {
133
136
  pattern: /(mkfs|format)\s+/,
134
137
  category: 'System destruction',
135
138
  riskLevel: RiskLevel.CRITICAL,
136
- description: 'Format disk'
139
+ description: 'Format disk',
137
140
  },
138
141
  {
139
142
  pattern: /dd\s+.*of=\/dev\/(sd[a-z]|nvme[0-9]n[0-9])/,
140
143
  category: 'System destruction',
141
144
  riskLevel: RiskLevel.CRITICAL,
142
- description: 'Overwrite disk data'
145
+ description: 'Overwrite disk data',
143
146
  },
144
147
 
145
148
  // Privilege escalation
@@ -147,25 +150,25 @@ export class BlacklistChecker {
147
150
  pattern: /chmod\s+777\s+/,
148
151
  category: 'Privilege escalation',
149
152
  riskLevel: RiskLevel.HIGH,
150
- description: 'Set file permissions to 777'
153
+ description: 'Set file permissions to 777',
151
154
  },
152
155
  {
153
156
  pattern: /chmod\s+[45][0-9]{3}\s+/,
154
157
  category: 'Privilege escalation',
155
158
  riskLevel: RiskLevel.HIGH,
156
- description: 'Set SUID/SGID permissions'
159
+ description: 'Set SUID/SGID permissions',
157
160
  },
158
161
  {
159
162
  pattern: /vi\s+\/etc\/sudoers/,
160
163
  category: 'Privilege escalation',
161
164
  riskLevel: RiskLevel.CRITICAL,
162
- description: 'Modify sudo permissions'
165
+ description: 'Modify sudo permissions',
163
166
  },
164
167
  {
165
168
  pattern: /echo.*>>.*\/etc\/sudoers/,
166
169
  category: 'Privilege escalation',
167
170
  riskLevel: RiskLevel.CRITICAL,
168
- description: 'Modify sudo permissions'
171
+ description: 'Modify sudo permissions',
169
172
  },
170
173
 
171
174
  // Data theft
@@ -173,31 +176,31 @@ export class BlacklistChecker {
173
176
  pattern: /cat\s+\/etc\/passwd/,
174
177
  category: 'Data theft',
175
178
  riskLevel: RiskLevel.HIGH,
176
- description: 'Read password file'
179
+ description: 'Read password file',
177
180
  },
178
181
  {
179
182
  pattern: /cat\s+\/etc\/shadow/,
180
183
  category: 'Data theft',
181
184
  riskLevel: RiskLevel.CRITICAL,
182
- description: 'Read shadow file'
185
+ description: 'Read shadow file',
183
186
  },
184
187
  {
185
188
  pattern: /cat\s+.*\/\.ssh\/id_rsa/,
186
189
  category: 'Data theft',
187
190
  riskLevel: RiskLevel.CRITICAL,
188
- description: 'Read SSH private key'
191
+ description: 'Read SSH private key',
189
192
  },
190
193
  {
191
194
  pattern: /grep\s+-[rRi].*password/,
192
195
  category: 'Data theft',
193
196
  riskLevel: RiskLevel.HIGH,
194
- description: 'Search for password information'
197
+ description: 'Search for password information',
195
198
  },
196
199
  {
197
200
  pattern: /(curl|wget).*\|(sh|bash|python|perl)/,
198
201
  category: 'Data theft',
199
202
  riskLevel: RiskLevel.CRITICAL,
200
- description: 'Remote code execution'
203
+ description: 'Remote code execution',
201
204
  },
202
205
 
203
206
  // Network attacks
@@ -205,19 +208,19 @@ export class BlacklistChecker {
205
208
  pattern: /nmap\s+-[sS].*/,
206
209
  category: 'Network attacks',
207
210
  riskLevel: RiskLevel.MEDIUM,
208
- description: 'Network scanning'
211
+ description: 'Network scanning',
209
212
  },
210
213
  {
211
214
  pattern: /nc\s+.*-l/,
212
215
  category: 'Network attacks',
213
216
  riskLevel: RiskLevel.HIGH,
214
- description: 'Create network listener'
217
+ description: 'Create network listener',
215
218
  },
216
219
  {
217
220
  pattern: /iptables\s+-F/,
218
221
  category: 'Network attacks',
219
222
  riskLevel: RiskLevel.HIGH,
220
- description: 'Clear firewall rules'
223
+ description: 'Clear firewall rules',
221
224
  },
222
225
 
223
226
  // Resource exhaustion
@@ -225,14 +228,14 @@ export class BlacklistChecker {
225
228
  pattern: /:\)\s*{\s*:\s*\|\s*:&\s*};/,
226
229
  category: 'Resource exhaustion',
227
230
  riskLevel: RiskLevel.CRITICAL,
228
- description: 'Fork bomb'
231
+ description: 'Fork bomb',
229
232
  },
230
233
  {
231
234
  pattern: /while\s+true\s*;\s*do\s+.*done/,
232
235
  category: 'Resource exhaustion',
233
236
  riskLevel: RiskLevel.HIGH,
234
- description: 'Infinite loop'
235
- }
237
+ description: 'Infinite loop',
238
+ },
236
239
  ];
237
240
 
238
241
  /**
@@ -262,8 +265,8 @@ export class BlacklistChecker {
262
265
  pattern: /system-path/,
263
266
  category: 'System destruction',
264
267
  riskLevel: RiskLevel.HIGH,
265
- description: 'Modify system files'
266
- }
268
+ description: 'Modify system files',
269
+ },
267
270
  };
268
271
  }
269
272
  }
@@ -285,11 +288,11 @@ export class BlacklistChecker {
285
288
  '/boot',
286
289
  '/sys',
287
290
  '/proc',
288
- '/dev'
291
+ '/dev',
289
292
  ];
290
293
 
291
294
  const normalizedPath = filePath.toLowerCase().replace(/\\/g, '/');
292
- return systemPaths.some(sysPath => normalizedPath.startsWith(sysPath));
295
+ return systemPaths.some((sysPath) => normalizedPath.startsWith(sysPath));
293
296
  }
294
297
 
295
298
  /**
@@ -304,7 +307,7 @@ export class BlacklistChecker {
304
307
  * AI approval checker
305
308
  */
306
309
  export class AIApprovalChecker {
307
- private aiClient: AIClient | null = null;
310
+ private aiClient: AIClientInterface | null = null;
308
311
  private isRemoteMode: boolean = false;
309
312
 
310
313
  constructor() {
@@ -325,24 +328,29 @@ export class AIApprovalChecker {
325
328
  // Remote mode: AI review handled by remote LLM, no local AIClient needed
326
329
  // Local mode: use local AIClient
327
330
  if (!this.isRemoteMode && authConfig.apiKey) {
328
- this.aiClient = new AIClient(authConfig);
331
+ this.aiClient = createAIClient(authConfig);
329
332
  }
330
333
  } catch (error) {
331
- logger.error('Failed to initialize AI approval checker', error instanceof Error ? error.message : String(error));
334
+ logger.error(
335
+ 'Failed to initialize AI approval checker',
336
+ error instanceof Error ? error.message : String(error)
337
+ );
332
338
  }
333
339
  }
334
340
 
335
341
  /**
336
342
  * Use AI for intelligent review
337
343
  */
338
- async check(context: ToolCallContext): Promise<{ approved: boolean; analysis: string; riskLevel: RiskLevel }> {
344
+ async check(
345
+ context: ToolCallContext
346
+ ): Promise<{ approved: boolean; analysis: string; riskLevel: RiskLevel }> {
339
347
  // In Remote mode, the remote LLM has already approved the tool_calls
340
348
  // Local AI review approves directly, no need to repeat
341
349
  if (this.isRemoteMode) {
342
350
  return {
343
351
  approved: true,
344
352
  analysis: 'Remote mode: tool approval handled by remote LLM',
345
- riskLevel: RiskLevel.LOW
353
+ riskLevel: RiskLevel.LOW,
346
354
  };
347
355
  }
348
356
 
@@ -350,8 +358,9 @@ export class AIApprovalChecker {
350
358
  // If AI client is not initialized, default to medium risk, requires user confirmation
351
359
  return {
352
360
  approved: false,
353
- analysis: 'AI review not available (no local LLM configured), requires manual user confirmation',
354
- riskLevel: RiskLevel.MEDIUM
361
+ analysis:
362
+ 'AI review not available (no local LLM configured), requires manual user confirmation',
363
+ riskLevel: RiskLevel.MEDIUM,
355
364
  };
356
365
  }
357
366
 
@@ -374,22 +383,27 @@ Please return results in JSON format:
374
383
  "approved": boolean,
375
384
  "riskLevel": "LOW" | "MEDIUM" | "HIGH" | "CRITICAL",
376
385
  "analysis": "Detailed analysis description"
377
- }`
386
+ }`,
378
387
  },
379
388
  {
380
389
  role: 'user',
381
- content: prompt
382
- }
390
+ content: prompt,
391
+ },
383
392
  ];
384
393
 
385
- const response = await this.aiClient.chatCompletion(messages, {
386
- temperature: 0.3,
387
- // maxTokens: 500
388
- });
394
+ const controller = new AbortController();
395
+ const response = await getCancellationManager().withCancellation(
396
+ this.aiClient.chatCompletion(messages, {
397
+ temperature: 0.3,
398
+ signal: controller.signal,
399
+ }),
400
+ 'smart-approval'
401
+ );
389
402
 
390
- const content = typeof response.choices[0].message.content === 'string'
391
- ? response.choices[0].message.content
392
- : '{}';
403
+ const content =
404
+ typeof response.choices[0].message.content === 'string'
405
+ ? response.choices[0].message.content
406
+ : '{}';
393
407
 
394
408
  // Parse AI response
395
409
  const jsonMatch = content.match(/\{[\s\S]*\}/);
@@ -398,7 +412,7 @@ Please return results in JSON format:
398
412
  return {
399
413
  approved: result.approved || false,
400
414
  analysis: result.analysis || 'No detailed analysis',
401
- riskLevel: result.riskLevel || RiskLevel.MEDIUM
415
+ riskLevel: result.riskLevel || RiskLevel.MEDIUM,
402
416
  };
403
417
  }
404
418
 
@@ -406,10 +420,22 @@ Please return results in JSON format:
406
420
  return {
407
421
  approved: false,
408
422
  analysis: 'Unable to parse AI response, requires manual confirmation',
409
- riskLevel: RiskLevel.MEDIUM
423
+ riskLevel: RiskLevel.MEDIUM,
410
424
  };
411
425
  } catch (error: any) {
412
- logger.error('AI approval check failed', error instanceof Error ? error.message : String(error));
426
+ // Check if it was cancelled by user first - don't log error for cancellations
427
+ const isCancelled = error.message === 'Operation cancelled by user' ||
428
+ error.message.includes('cancelled') ||
429
+ error.message.includes('aborted');
430
+
431
+ if (isCancelled) {
432
+ throw new Error('Operation cancelled by user');
433
+ }
434
+
435
+ logger.error(
436
+ 'AI approval check failed',
437
+ error instanceof Error ? error.message : String(error)
438
+ );
413
439
 
414
440
  // In Remote mode, remote LLM already approved, local failure means auto-approve
415
441
  const configManager = getConfigManager();
@@ -420,14 +446,21 @@ Please return results in JSON format:
420
446
  return {
421
447
  approved: true,
422
448
  analysis: 'Remote mode: approved (remote LLM handled approval)',
423
- riskLevel: RiskLevel.LOW
449
+ riskLevel: RiskLevel.LOW,
424
450
  };
425
451
  }
426
452
 
453
+ // If user cancelled the AI review, directly cancel the entire task
454
+ // instead of just canceling the AI review and continuing
455
+ if (isCancelled) {
456
+ throw new Error('Operation cancelled by user');
457
+ }
458
+
459
+ // Other errors require manual confirmation
427
460
  return {
428
461
  approved: false,
429
462
  analysis: `AI review failed: ${error.message}, requires manual confirmation`,
430
- riskLevel: RiskLevel.MEDIUM
463
+ riskLevel: RiskLevel.MEDIUM,
431
464
  };
432
465
  }
433
466
  }
@@ -462,6 +495,8 @@ export class SmartApprovalEngine {
462
495
  private blacklistChecker: BlacklistChecker;
463
496
  private aiChecker: AIApprovalChecker;
464
497
  private debugMode: boolean;
498
+ private sdkAdapter: SdkOutputAdapter | null = null;
499
+ private isSdkMode: boolean = false;
465
500
 
466
501
  constructor(debugMode: boolean = false) {
467
502
  this.whitelistChecker = new WhitelistChecker();
@@ -470,6 +505,28 @@ export class SmartApprovalEngine {
470
505
  this.debugMode = debugMode;
471
506
  }
472
507
 
508
+ /**
509
+ * Set SDK mode and output adapter for SDK mode support
510
+ */
511
+ setSdkMode(enabled: boolean, adapter: SdkOutputAdapter | null): void {
512
+ this.isSdkMode = enabled;
513
+ this.sdkAdapter = adapter;
514
+ }
515
+
516
+ /**
517
+ * Check if in SDK mode
518
+ */
519
+ getIsSdkMode(): boolean {
520
+ return this.isSdkMode;
521
+ }
522
+
523
+ /**
524
+ * Get SDK adapter
525
+ */
526
+ getSdkAdapter(): SdkOutputAdapter | null {
527
+ return this.sdkAdapter;
528
+ }
529
+
473
530
  /**
474
531
  * Evaluate tool call
475
532
  */
@@ -485,7 +542,9 @@ export class SmartApprovalEngine {
485
542
  if (whitelistCheck) {
486
543
  const latency = Date.now() - startTime;
487
544
  if (this.debugMode) {
488
- logger.debug(`[WhitelistChecker] Tool '${context.toolName}' in whitelist, latency: ${latency}ms`);
545
+ logger.debug(
546
+ `[WhitelistChecker] Tool '${context.toolName}' in whitelist, latency: ${latency}ms`
547
+ );
489
548
  }
490
549
 
491
550
  return {
@@ -493,7 +552,7 @@ export class SmartApprovalEngine {
493
552
  riskLevel: RiskLevel.LOW,
494
553
  detectionMethod: 'whitelist',
495
554
  description: `Tool '${context.toolName}' is in the whitelist, executing directly`,
496
- latency
555
+ latency,
497
556
  };
498
557
  }
499
558
 
@@ -506,7 +565,9 @@ export class SmartApprovalEngine {
506
565
  if (blacklistCheck.matched && blacklistCheck.rule) {
507
566
  const latency = Date.now() - startTime;
508
567
  if (this.debugMode) {
509
- logger.debug(`[BlacklistChecker] Matched rule: ${blacklistCheck.rule.description}, Risk: ${blacklistCheck.rule.riskLevel}, latency: ${latency}ms`);
568
+ logger.debug(
569
+ `[BlacklistChecker] Matched rule: ${blacklistCheck.rule.description}, Risk: ${blacklistCheck.rule.riskLevel}, latency: ${latency}ms`
570
+ );
510
571
  }
511
572
 
512
573
  return {
@@ -514,7 +575,7 @@ export class SmartApprovalEngine {
514
575
  riskLevel: blacklistCheck.rule.riskLevel,
515
576
  detectionMethod: 'blacklist',
516
577
  description: `Detected potentially risky operation: ${blacklistCheck.rule.description}`,
517
- latency
578
+ latency,
518
579
  };
519
580
  }
520
581
 
@@ -527,30 +588,50 @@ export class SmartApprovalEngine {
527
588
  const latency = Date.now() - startTime;
528
589
 
529
590
  if (this.debugMode) {
530
- logger.debug(`[AIApprovalChecker] AI review result: approved=${aiCheck.approved}, risk=${aiCheck.riskLevel}, latency: ${latency}ms`);
591
+ logger.debug(
592
+ `[AIApprovalChecker] AI review result: approved=${aiCheck.approved}, risk=${aiCheck.riskLevel}, latency: ${latency}ms`
593
+ );
531
594
  }
532
595
 
533
596
  return {
534
- decision: aiCheck.approved ? ApprovalDecision.APPROVED : ApprovalDecision.REQUIRES_CONFIRMATION,
597
+ decision: aiCheck.approved
598
+ ? ApprovalDecision.APPROVED
599
+ : ApprovalDecision.REQUIRES_CONFIRMATION,
535
600
  riskLevel: aiCheck.riskLevel,
536
601
  detectionMethod: 'ai_review',
537
602
  description: aiCheck.analysis,
538
603
  latency,
539
- aiAnalysis: aiCheck.analysis
604
+ aiAnalysis: aiCheck.analysis,
540
605
  };
541
606
  }
542
607
 
543
608
  /**
544
609
  * Request user confirmation
545
610
  */
546
- async requestConfirmation(result: ApprovalResult): Promise<boolean> {
611
+ async requestConfirmation(
612
+ result: ApprovalResult,
613
+ toolName?: string,
614
+ toolParams?: Record<string, unknown>
615
+ ): Promise<boolean> {
616
+ // Check if in SDK mode with adapter
617
+ if (this.isSdkMode && this.sdkAdapter) {
618
+ return this.requestConfirmationSdk(result, toolName, toolParams);
619
+ }
620
+
621
+ // Regular TUI mode
547
622
  const separator = icons.separator.repeat(40);
548
623
  console.log('');
549
- console.log(colors.warning(`${icons.warning} [Smart Mode] Detected potentially risky operation`));
624
+ console.log(
625
+ colors.warning(`${icons.warning} [Smart Mode] Detected potentially risky operation`)
626
+ );
550
627
  console.log(colors.border(separator));
551
628
  console.log('');
552
629
  console.log(colors.textMuted(`📊 Risk Level: ${this.getRiskLevelDisplay(result.riskLevel)}`));
553
- console.log(colors.textMuted(`🔍 Detection Method: ${this.getDetectionMethodDisplay(result.detectionMethod)}`));
630
+ console.log(
631
+ colors.textMuted(
632
+ `🔍 Detection Method: ${this.getDetectionMethodDisplay(result.detectionMethod)}`
633
+ )
634
+ );
554
635
  console.log('');
555
636
 
556
637
  if (result.aiAnalysis) {
@@ -564,18 +645,56 @@ export class SmartApprovalEngine {
564
645
  console.log(colors.warning('Potentially risky operation detected, continue execution?'));
565
646
 
566
647
  try {
567
- const { confirmed } = await inquirer.prompt([
568
- {
569
- type: 'confirm',
570
- name: 'confirmed',
571
- message: 'Continue execution?',
572
- default: false
573
- }
574
- ]);
648
+ const confirmed = await confirm({
649
+ message: 'Continue execution?',
650
+ });
575
651
 
576
- return confirmed;
652
+ return confirmed === true;
577
653
  } catch (error) {
578
- logger.error('Failed to get user confirmation', error instanceof Error ? error.message : String(error));
654
+ logger.error(
655
+ 'Failed to get user confirmation',
656
+ error instanceof Error ? error.message : String(error)
657
+ );
658
+ return false;
659
+ }
660
+ }
661
+
662
+ /**
663
+ * Request user confirmation in SDK mode
664
+ */
665
+ private async requestConfirmationSdk(
666
+ result: ApprovalResult,
667
+ toolName?: string,
668
+ toolParams?: Record<string, unknown>
669
+ ): Promise<boolean> {
670
+ const requestId = `approval_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
671
+
672
+ // Output approval request through SDK adapter
673
+ this.sdkAdapter!.outputApprovalRequest({
674
+ requestId,
675
+ toolName: toolName || 'unknown',
676
+ params: toolParams || {},
677
+ riskLevel: result.riskLevel,
678
+ description: result.description,
679
+ aiAnalysis: result.aiAnalysis
680
+ });
681
+
682
+ // Wait for SDK response using session
683
+ try {
684
+ const { getSingletonSession } = await import('./session.js');
685
+ const session = getSingletonSession();
686
+ if (!session) {
687
+ logger.error('SDK session not available');
688
+ return false;
689
+ }
690
+ const approved = await session.waitForApprovalResponse(requestId);
691
+ this.sdkAdapter!.outputApprovalResponse(requestId, approved);
692
+ return approved;
693
+ } catch (error) {
694
+ logger.error(
695
+ 'Failed to get SDK approval response',
696
+ error instanceof Error ? error.message : String(error)
697
+ );
579
698
  return false;
580
699
  }
581
700
  }
@@ -588,7 +707,7 @@ export class SmartApprovalEngine {
588
707
  [RiskLevel.LOW]: colors.success('LOW'),
589
708
  [RiskLevel.MEDIUM]: colors.warning('MEDIUM'),
590
709
  [RiskLevel.HIGH]: colors.error('HIGH'),
591
- [RiskLevel.CRITICAL]: colors.error('CRITICAL')
710
+ [RiskLevel.CRITICAL]: colors.error('CRITICAL'),
592
711
  };
593
712
  return displays[riskLevel];
594
713
  }
@@ -601,7 +720,7 @@ export class SmartApprovalEngine {
601
720
  whitelist: 'Whitelist rules',
602
721
  blacklist: 'Blacklist rules',
603
722
  ai_review: 'AI intelligent review',
604
- manual: 'Manual review'
723
+ manual: 'Manual review',
605
724
  };
606
725
  return displays[method as keyof typeof displays] || method;
607
726
  }
@@ -624,4 +743,4 @@ export function getSmartApprovalEngine(debugMode: boolean = false): SmartApprova
624
743
  smartApprovalEngineInstance = new SmartApprovalEngine(debugMode);
625
744
  }
626
745
  return smartApprovalEngineInstance;
627
- }
746
+ }