@xagent-ai/cli 1.0.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 (537) hide show
  1. package/.eslintrc.js +25 -0
  2. package/.gitmodules +3 -0
  3. package/.prettierrc.json +8 -0
  4. package/CONTRIBUTING.md +167 -0
  5. package/LICENSE +21 -0
  6. package/README.md +280 -0
  7. package/README_CN.md +280 -0
  8. package/dist/agents.d.ts +21 -0
  9. package/dist/agents.d.ts.map +1 -0
  10. package/dist/agents.js +463 -0
  11. package/dist/agents.js.map +1 -0
  12. package/dist/ai-client.d.ts +83 -0
  13. package/dist/ai-client.d.ts.map +1 -0
  14. package/dist/ai-client.js +1280 -0
  15. package/dist/ai-client.js.map +1 -0
  16. package/dist/auth.d.ts +25 -0
  17. package/dist/auth.d.ts.map +1 -0
  18. package/dist/auth.js +573 -0
  19. package/dist/auth.js.map +1 -0
  20. package/dist/cancellation.d.ts +46 -0
  21. package/dist/cancellation.d.ts.map +1 -0
  22. package/dist/cancellation.js +154 -0
  23. package/dist/cancellation.js.map +1 -0
  24. package/dist/checkpoint.d.ts +28 -0
  25. package/dist/checkpoint.d.ts.map +1 -0
  26. package/dist/checkpoint.js +186 -0
  27. package/dist/checkpoint.js.map +1 -0
  28. package/dist/cli.d.ts +3 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/cli.js +364 -0
  31. package/dist/cli.js.map +1 -0
  32. package/dist/config.d.ts +49 -0
  33. package/dist/config.d.ts.map +1 -0
  34. package/dist/config.js +205 -0
  35. package/dist/config.js.map +1 -0
  36. package/dist/context-compressor.d.ts +51 -0
  37. package/dist/context-compressor.d.ts.map +1 -0
  38. package/dist/context-compressor.js +231 -0
  39. package/dist/context-compressor.js.map +1 -0
  40. package/dist/conversation.d.ts +34 -0
  41. package/dist/conversation.d.ts.map +1 -0
  42. package/dist/conversation.js +221 -0
  43. package/dist/conversation.js.map +1 -0
  44. package/dist/gui-subagent/action-parser/actionParser.d.ts +19 -0
  45. package/dist/gui-subagent/action-parser/actionParser.d.ts.map +1 -0
  46. package/dist/gui-subagent/action-parser/actionParser.js +203 -0
  47. package/dist/gui-subagent/action-parser/actionParser.js.map +1 -0
  48. package/dist/gui-subagent/action-parser/constants.d.ts +8 -0
  49. package/dist/gui-subagent/action-parser/constants.d.ts.map +1 -0
  50. package/dist/gui-subagent/action-parser/constants.js +12 -0
  51. package/dist/gui-subagent/action-parser/constants.js.map +1 -0
  52. package/dist/gui-subagent/action-parser/index.d.ts +3 -0
  53. package/dist/gui-subagent/action-parser/index.d.ts.map +1 -0
  54. package/dist/gui-subagent/action-parser/index.js +6 -0
  55. package/dist/gui-subagent/action-parser/index.js.map +1 -0
  56. package/dist/gui-subagent/action-parser/types.d.ts +24 -0
  57. package/dist/gui-subagent/action-parser/types.d.ts.map +1 -0
  58. package/dist/gui-subagent/action-parser/types.js +12 -0
  59. package/dist/gui-subagent/action-parser/types.js.map +1 -0
  60. package/dist/gui-subagent/agent/gui-agent.d.ts +126 -0
  61. package/dist/gui-subagent/agent/gui-agent.d.ts.map +1 -0
  62. package/dist/gui-subagent/agent/gui-agent.js +820 -0
  63. package/dist/gui-subagent/agent/gui-agent.js.map +1 -0
  64. package/dist/gui-subagent/agent/index.d.ts +5 -0
  65. package/dist/gui-subagent/agent/index.d.ts.map +1 -0
  66. package/dist/gui-subagent/agent/index.js +5 -0
  67. package/dist/gui-subagent/agent/index.js.map +1 -0
  68. package/dist/gui-subagent/index.d.ts +43 -0
  69. package/dist/gui-subagent/index.d.ts.map +1 -0
  70. package/dist/gui-subagent/index.js +96 -0
  71. package/dist/gui-subagent/index.js.map +1 -0
  72. package/dist/gui-subagent/operator/base-operator.d.ts +108 -0
  73. package/dist/gui-subagent/operator/base-operator.d.ts.map +1 -0
  74. package/dist/gui-subagent/operator/base-operator.js +172 -0
  75. package/dist/gui-subagent/operator/base-operator.js.map +1 -0
  76. package/dist/gui-subagent/operator/browser-operator.d.ts +36 -0
  77. package/dist/gui-subagent/operator/browser-operator.d.ts.map +1 -0
  78. package/dist/gui-subagent/operator/browser-operator.js +306 -0
  79. package/dist/gui-subagent/operator/browser-operator.js.map +1 -0
  80. package/dist/gui-subagent/operator/computer-operator.d.ts +31 -0
  81. package/dist/gui-subagent/operator/computer-operator.d.ts.map +1 -0
  82. package/dist/gui-subagent/operator/computer-operator.js +441 -0
  83. package/dist/gui-subagent/operator/computer-operator.js.map +1 -0
  84. package/dist/gui-subagent/operator/desktop-operator.d.ts +55 -0
  85. package/dist/gui-subagent/operator/desktop-operator.d.ts.map +1 -0
  86. package/dist/gui-subagent/operator/desktop-operator.js +527 -0
  87. package/dist/gui-subagent/operator/desktop-operator.js.map +1 -0
  88. package/dist/gui-subagent/operator/index.d.ts +7 -0
  89. package/dist/gui-subagent/operator/index.d.ts.map +1 -0
  90. package/dist/gui-subagent/operator/index.js +6 -0
  91. package/dist/gui-subagent/operator/index.js.map +1 -0
  92. package/dist/gui-subagent/types/actions.d.ts +108 -0
  93. package/dist/gui-subagent/types/actions.d.ts.map +1 -0
  94. package/dist/gui-subagent/types/actions.js +39 -0
  95. package/dist/gui-subagent/types/actions.js.map +1 -0
  96. package/dist/gui-subagent/types/index.d.ts +6 -0
  97. package/dist/gui-subagent/types/index.d.ts.map +1 -0
  98. package/dist/gui-subagent/types/index.js +6 -0
  99. package/dist/gui-subagent/types/index.js.map +1 -0
  100. package/dist/gui-subagent/types/operator.d.ts +95 -0
  101. package/dist/gui-subagent/types/operator.d.ts.map +1 -0
  102. package/dist/gui-subagent/types/operator.js +16 -0
  103. package/dist/gui-subagent/types/operator.js.map +1 -0
  104. package/dist/gui-subagent/utils.d.ts +19 -0
  105. package/dist/gui-subagent/utils.d.ts.map +1 -0
  106. package/dist/gui-subagent/utils.js +42 -0
  107. package/dist/gui-subagent/utils.js.map +1 -0
  108. package/dist/hook.d.ts +73 -0
  109. package/dist/hook.d.ts.map +1 -0
  110. package/dist/hook.js +156 -0
  111. package/dist/hook.js.map +1 -0
  112. package/dist/index.d.ts +19 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +19 -0
  115. package/dist/index.js.map +1 -0
  116. package/dist/input-history.d.ts +24 -0
  117. package/dist/input-history.d.ts.map +1 -0
  118. package/dist/input-history.js +94 -0
  119. package/dist/input-history.js.map +1 -0
  120. package/dist/input-processor.d.ts +31 -0
  121. package/dist/input-processor.d.ts.map +1 -0
  122. package/dist/input-processor.js +233 -0
  123. package/dist/input-processor.js.map +1 -0
  124. package/dist/keyboard-manager.d.ts +151 -0
  125. package/dist/keyboard-manager.d.ts.map +1 -0
  126. package/dist/keyboard-manager.js +396 -0
  127. package/dist/keyboard-manager.js.map +1 -0
  128. package/dist/logger.d.ts +75 -0
  129. package/dist/logger.d.ts.map +1 -0
  130. package/dist/logger.js +339 -0
  131. package/dist/logger.js.map +1 -0
  132. package/dist/mcp.d.ts +57 -0
  133. package/dist/mcp.d.ts.map +1 -0
  134. package/dist/mcp.js +483 -0
  135. package/dist/mcp.js.map +1 -0
  136. package/dist/memory.d.ts +25 -0
  137. package/dist/memory.d.ts.map +1 -0
  138. package/dist/memory.js +250 -0
  139. package/dist/memory.js.map +1 -0
  140. package/dist/print-system-prompt.d.ts +2 -0
  141. package/dist/print-system-prompt.d.ts.map +1 -0
  142. package/dist/print-system-prompt.js +40 -0
  143. package/dist/print-system-prompt.js.map +1 -0
  144. package/dist/session-manager.d.ts +41 -0
  145. package/dist/session-manager.d.ts.map +1 -0
  146. package/dist/session-manager.js +234 -0
  147. package/dist/session-manager.js.map +1 -0
  148. package/dist/session.d.ts +77 -0
  149. package/dist/session.d.ts.map +1 -0
  150. package/dist/session.js +1081 -0
  151. package/dist/session.js.map +1 -0
  152. package/dist/skill-invoker.d.ts +177 -0
  153. package/dist/skill-invoker.d.ts.map +1 -0
  154. package/dist/skill-invoker.js +1643 -0
  155. package/dist/skill-invoker.js.map +1 -0
  156. package/dist/skill-loader.d.ts +76 -0
  157. package/dist/skill-loader.d.ts.map +1 -0
  158. package/dist/skill-loader.js +407 -0
  159. package/dist/skill-loader.js.map +1 -0
  160. package/dist/slash-commands.d.ts +60 -0
  161. package/dist/slash-commands.d.ts.map +1 -0
  162. package/dist/slash-commands.js +1021 -0
  163. package/dist/slash-commands.js.map +1 -0
  164. package/dist/smart-approval.d.ts +137 -0
  165. package/dist/smart-approval.d.ts.map +1 -0
  166. package/dist/smart-approval.js +512 -0
  167. package/dist/smart-approval.js.map +1 -0
  168. package/dist/system-prompt-generator.d.ts +35 -0
  169. package/dist/system-prompt-generator.d.ts.map +1 -0
  170. package/dist/system-prompt-generator.js +729 -0
  171. package/dist/system-prompt-generator.js.map +1 -0
  172. package/dist/test-boundary-conditions.d.ts.map +1 -0
  173. package/dist/test-boundary-conditions.js.map +1 -0
  174. package/dist/test-cancellation-fix.d.ts.map +1 -0
  175. package/dist/test-cancellation-fix.js.map +1 -0
  176. package/dist/test-input-history.d.ts.map +1 -0
  177. package/dist/test-input-history.js.map +1 -0
  178. package/dist/test-interaction-flow.d.ts.map +1 -0
  179. package/dist/test-interaction-flow.js.map +1 -0
  180. package/dist/test-quick.d.ts.map +1 -0
  181. package/dist/test-quick.js.map +1 -0
  182. package/dist/test-user-interaction.d.ts.map +1 -0
  183. package/dist/test-user-interaction.js.map +1 -0
  184. package/dist/theme.d.ts +353 -0
  185. package/dist/theme.d.ts.map +1 -0
  186. package/dist/theme.js +383 -0
  187. package/dist/theme.js.map +1 -0
  188. package/dist/tools.d.ts +373 -0
  189. package/dist/tools.d.ts.map +1 -0
  190. package/dist/tools.js +2906 -0
  191. package/dist/tools.js.map +1 -0
  192. package/dist/types.d.ts +180 -0
  193. package/dist/types.d.ts.map +1 -0
  194. package/dist/types.js +23 -0
  195. package/dist/types.js.map +1 -0
  196. package/dist/unified-session.d.ts +42 -0
  197. package/dist/unified-session.d.ts.map +1 -0
  198. package/dist/unified-session.js +271 -0
  199. package/dist/unified-session.js.map +1 -0
  200. package/dist/update.d.ts +30 -0
  201. package/dist/update.d.ts.map +1 -0
  202. package/dist/update.js +211 -0
  203. package/dist/update.js.map +1 -0
  204. package/dist/workflow.d.ts +53 -0
  205. package/dist/workflow.d.ts.map +1 -0
  206. package/dist/workflow.js +405 -0
  207. package/dist/workflow.js.map +1 -0
  208. package/docs/architecture/mcp-integration-guide.md +131 -0
  209. package/docs/architecture/overview.md +93 -0
  210. package/docs/architecture/tool-system-design.md +89 -0
  211. package/docs/cli/commands.md +189 -0
  212. package/docs/smart-mode.md +257 -0
  213. package/docs/third-party-models.md +449 -0
  214. package/package.json +85 -0
  215. package/scripts/init-skills-path.js +58 -0
  216. package/skills/.claude-plugin/marketplace.json +45 -0
  217. package/skills/README.md +94 -0
  218. package/skills/THIRD_PARTY_NOTICES.md +405 -0
  219. package/skills/skills/algorithmic-art/LICENSE.txt +202 -0
  220. package/skills/skills/algorithmic-art/SKILL.md +405 -0
  221. package/skills/skills/algorithmic-art/templates/generator_template.js +223 -0
  222. package/skills/skills/algorithmic-art/templates/viewer.html +599 -0
  223. package/skills/skills/brand-guidelines/LICENSE.txt +202 -0
  224. package/skills/skills/brand-guidelines/SKILL.md +73 -0
  225. package/skills/skills/canvas-design/LICENSE.txt +202 -0
  226. package/skills/skills/canvas-design/SKILL.md +130 -0
  227. package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  228. package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  229. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  230. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  231. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  232. package/skills/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  233. package/skills/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  234. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  235. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  236. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  237. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  238. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  239. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  240. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  241. package/skills/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  242. package/skills/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  243. package/skills/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  244. package/skills/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  245. package/skills/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  246. package/skills/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  247. package/skills/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  248. package/skills/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  249. package/skills/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  250. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  251. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  252. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  253. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  254. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  255. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  256. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  257. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  258. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  259. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  260. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  261. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  262. package/skills/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  263. package/skills/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  264. package/skills/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  265. package/skills/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  266. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  267. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  268. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  269. package/skills/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  270. package/skills/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  271. package/skills/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  272. package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  273. package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  274. package/skills/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  275. package/skills/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  276. package/skills/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  277. package/skills/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  278. package/skills/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  279. package/skills/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  280. package/skills/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  281. package/skills/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  282. package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  283. package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  284. package/skills/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  285. package/skills/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  286. package/skills/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  287. package/skills/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  288. package/skills/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  289. package/skills/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  290. package/skills/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  291. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  292. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  293. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  294. package/skills/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  295. package/skills/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  296. package/skills/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  297. package/skills/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  298. package/skills/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  299. package/skills/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  300. package/skills/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  301. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  302. package/skills/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  303. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  304. package/skills/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  305. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  306. package/skills/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  307. package/skills/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  308. package/skills/skills/doc-coauthoring/SKILL.md +375 -0
  309. package/skills/skills/docx/LICENSE.txt +30 -0
  310. package/skills/skills/docx/SKILL.md +197 -0
  311. package/skills/skills/docx/docx-js.md +350 -0
  312. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  313. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  314. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  315. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  316. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  317. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  318. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  319. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  320. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  321. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  322. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  323. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  324. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  325. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  326. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  327. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  328. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  329. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  330. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  331. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  332. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  333. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  334. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  335. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  336. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  337. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  338. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  339. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  340. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  341. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  342. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  343. package/skills/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  344. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  345. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  346. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  347. package/skills/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  348. package/skills/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  349. package/skills/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  350. package/skills/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  351. package/skills/skills/docx/ooxml/scripts/pack.py +159 -0
  352. package/skills/skills/docx/ooxml/scripts/unpack.py +29 -0
  353. package/skills/skills/docx/ooxml/scripts/validate.py +69 -0
  354. package/skills/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  355. package/skills/skills/docx/ooxml/scripts/validation/base.py +951 -0
  356. package/skills/skills/docx/ooxml/scripts/validation/docx.py +274 -0
  357. package/skills/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  358. package/skills/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  359. package/skills/skills/docx/ooxml.md +610 -0
  360. package/skills/skills/docx/scripts/__init__.py +1 -0
  361. package/skills/skills/docx/scripts/document.py +1276 -0
  362. package/skills/skills/docx/scripts/templates/comments.xml +3 -0
  363. package/skills/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  364. package/skills/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  365. package/skills/skills/docx/scripts/templates/commentsIds.xml +3 -0
  366. package/skills/skills/docx/scripts/templates/people.xml +3 -0
  367. package/skills/skills/docx/scripts/utilities.py +374 -0
  368. package/skills/skills/frontend-design/LICENSE.txt +177 -0
  369. package/skills/skills/frontend-design/SKILL.md +42 -0
  370. package/skills/skills/internal-comms/LICENSE.txt +202 -0
  371. package/skills/skills/internal-comms/SKILL.md +32 -0
  372. package/skills/skills/internal-comms/examples/3p-updates.md +47 -0
  373. package/skills/skills/internal-comms/examples/company-newsletter.md +65 -0
  374. package/skills/skills/internal-comms/examples/faq-answers.md +30 -0
  375. package/skills/skills/internal-comms/examples/general-comms.md +16 -0
  376. package/skills/skills/mcp-builder/LICENSE.txt +202 -0
  377. package/skills/skills/mcp-builder/SKILL.md +236 -0
  378. package/skills/skills/mcp-builder/reference/evaluation.md +602 -0
  379. package/skills/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  380. package/skills/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  381. package/skills/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  382. package/skills/skills/mcp-builder/scripts/connections.py +151 -0
  383. package/skills/skills/mcp-builder/scripts/evaluation.py +373 -0
  384. package/skills/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  385. package/skills/skills/mcp-builder/scripts/requirements.txt +2 -0
  386. package/skills/skills/pdf/LICENSE.txt +30 -0
  387. package/skills/skills/pdf/SKILL.md +294 -0
  388. package/skills/skills/pdf/forms.md +205 -0
  389. package/skills/skills/pdf/reference.md +612 -0
  390. package/skills/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  391. package/skills/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  392. package/skills/skills/pdf/scripts/check_fillable_fields.py +12 -0
  393. package/skills/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  394. package/skills/skills/pdf/scripts/create_validation_image.py +41 -0
  395. package/skills/skills/pdf/scripts/extract_form_field_info.py +152 -0
  396. package/skills/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  397. package/skills/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  398. package/skills/skills/pptx/LICENSE.txt +30 -0
  399. package/skills/skills/pptx/SKILL.md +484 -0
  400. package/skills/skills/pptx/html2pptx.md +625 -0
  401. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  402. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  403. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  404. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  405. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  406. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  407. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  408. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  409. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  410. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  411. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  412. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  413. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  414. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  415. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  416. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  417. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  418. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  419. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  420. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  421. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  422. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  423. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  424. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  425. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  426. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  427. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  428. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  429. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  430. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  431. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  432. package/skills/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  433. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  434. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  435. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  436. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  437. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  438. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  439. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  440. package/skills/skills/pptx/ooxml/scripts/pack.py +159 -0
  441. package/skills/skills/pptx/ooxml/scripts/unpack.py +29 -0
  442. package/skills/skills/pptx/ooxml/scripts/validate.py +69 -0
  443. package/skills/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  444. package/skills/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  445. package/skills/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  446. package/skills/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  447. package/skills/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  448. package/skills/skills/pptx/ooxml.md +427 -0
  449. package/skills/skills/pptx/scripts/html2pptx.js +979 -0
  450. package/skills/skills/pptx/scripts/inventory.py +1020 -0
  451. package/skills/skills/pptx/scripts/rearrange.py +231 -0
  452. package/skills/skills/pptx/scripts/replace.py +385 -0
  453. package/skills/skills/pptx/scripts/thumbnail.py +450 -0
  454. package/skills/skills/skill-creator/LICENSE.txt +202 -0
  455. package/skills/skills/skill-creator/SKILL.md +356 -0
  456. package/skills/skills/skill-creator/references/output-patterns.md +82 -0
  457. package/skills/skills/skill-creator/references/workflows.md +28 -0
  458. package/skills/skills/skill-creator/scripts/init_skill.py +303 -0
  459. package/skills/skills/skill-creator/scripts/package_skill.py +110 -0
  460. package/skills/skills/skill-creator/scripts/quick_validate.py +95 -0
  461. package/skills/skills/slack-gif-creator/LICENSE.txt +202 -0
  462. package/skills/skills/slack-gif-creator/SKILL.md +254 -0
  463. package/skills/skills/slack-gif-creator/core/easing.py +234 -0
  464. package/skills/skills/slack-gif-creator/core/frame_composer.py +176 -0
  465. package/skills/skills/slack-gif-creator/core/gif_builder.py +269 -0
  466. package/skills/skills/slack-gif-creator/core/validators.py +136 -0
  467. package/skills/skills/slack-gif-creator/requirements.txt +4 -0
  468. package/skills/skills/theme-factory/LICENSE.txt +202 -0
  469. package/skills/skills/theme-factory/SKILL.md +59 -0
  470. package/skills/skills/theme-factory/theme-showcase.pdf +0 -0
  471. package/skills/skills/theme-factory/themes/arctic-frost.md +19 -0
  472. package/skills/skills/theme-factory/themes/botanical-garden.md +19 -0
  473. package/skills/skills/theme-factory/themes/desert-rose.md +19 -0
  474. package/skills/skills/theme-factory/themes/forest-canopy.md +19 -0
  475. package/skills/skills/theme-factory/themes/golden-hour.md +19 -0
  476. package/skills/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  477. package/skills/skills/theme-factory/themes/modern-minimalist.md +19 -0
  478. package/skills/skills/theme-factory/themes/ocean-depths.md +19 -0
  479. package/skills/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  480. package/skills/skills/theme-factory/themes/tech-innovation.md +19 -0
  481. package/skills/skills/web-artifacts-builder/LICENSE.txt +202 -0
  482. package/skills/skills/web-artifacts-builder/SKILL.md +74 -0
  483. package/skills/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  484. package/skills/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  485. package/skills/skills/webapp-testing/LICENSE.txt +202 -0
  486. package/skills/skills/webapp-testing/SKILL.md +96 -0
  487. package/skills/skills/webapp-testing/examples/console_logging.py +35 -0
  488. package/skills/skills/webapp-testing/examples/element_discovery.py +40 -0
  489. package/skills/skills/webapp-testing/examples/static_html_automation.py +33 -0
  490. package/skills/skills/webapp-testing/scripts/with_server.py +106 -0
  491. package/skills/skills/xlsx/LICENSE.txt +30 -0
  492. package/skills/skills/xlsx/SKILL.md +289 -0
  493. package/skills/skills/xlsx/recalc.py +178 -0
  494. package/skills/spec/agent-skills-spec.md +3 -0
  495. package/skills/template/SKILL.md +6 -0
  496. package/src/agents.ts +504 -0
  497. package/src/ai-client.ts +1456 -0
  498. package/src/auth.ts +648 -0
  499. package/src/cancellation.ts +176 -0
  500. package/src/checkpoint.ts +219 -0
  501. package/src/cli.ts +384 -0
  502. package/src/config.ts +248 -0
  503. package/src/context-compressor.ts +290 -0
  504. package/src/conversation.ts +288 -0
  505. package/src/gui-subagent/action-parser/actionParser.ts +312 -0
  506. package/src/gui-subagent/action-parser/constants.ts +12 -0
  507. package/src/gui-subagent/action-parser/index.ts +6 -0
  508. package/src/gui-subagent/action-parser/types.ts +31 -0
  509. package/src/gui-subagent/agent/gui-agent.ts +982 -0
  510. package/src/gui-subagent/agent/index.ts +5 -0
  511. package/src/gui-subagent/index.ts +139 -0
  512. package/src/gui-subagent/operator/base-operator.ts +246 -0
  513. package/src/gui-subagent/operator/computer-operator.ts +520 -0
  514. package/src/gui-subagent/operator/index.ts +7 -0
  515. package/src/gui-subagent/types/actions.ts +263 -0
  516. package/src/gui-subagent/types/index.ts +6 -0
  517. package/src/gui-subagent/types/operator.ts +106 -0
  518. package/src/gui-subagent/utils.ts +51 -0
  519. package/src/index.ts +18 -0
  520. package/src/input-processor.ts +282 -0
  521. package/src/logger.ts +438 -0
  522. package/src/mcp.ts +563 -0
  523. package/src/memory.ts +303 -0
  524. package/src/session-manager.ts +308 -0
  525. package/src/session.ts +1280 -0
  526. package/src/skill-invoker.ts +1888 -0
  527. package/src/skill-loader.ts +476 -0
  528. package/src/slash-commands.ts +1150 -0
  529. package/src/smart-approval.ts +595 -0
  530. package/src/system-prompt-generator.ts +786 -0
  531. package/src/theme.ts +455 -0
  532. package/src/tools.ts +3398 -0
  533. package/src/types.ts +198 -0
  534. package/src/update.ts +270 -0
  535. package/src/workflow.ts +508 -0
  536. package/tsconfig.json +22 -0
  537. package/vitest.config.ts +19 -0
@@ -0,0 +1,595 @@
1
+ import inquirer from 'inquirer';
2
+ import { AIClient, Message } from './ai-client.js';
3
+ import { getConfigManager } from './config.js';
4
+ import { getLogger } from './logger.js';
5
+ import { colors, icons } from './theme.js';
6
+
7
+ const logger = getLogger();
8
+
9
+ /**
10
+ * Approval result type
11
+ */
12
+ export enum ApprovalDecision {
13
+ APPROVED = 'approved',
14
+ REJECTED = 'rejected',
15
+ REQUIRES_CONFIRMATION = 'requires_confirmation',
16
+ AI_REVIEW = 'ai_review'
17
+ }
18
+
19
+ /**
20
+ * Risk level
21
+ */
22
+ export enum RiskLevel {
23
+ LOW = 'LOW',
24
+ MEDIUM = 'MEDIUM',
25
+ HIGH = 'HIGH',
26
+ CRITICAL = 'CRITICAL'
27
+ }
28
+
29
+ /**
30
+ * Approval result
31
+ */
32
+ export interface ApprovalResult {
33
+ decision: ApprovalDecision;
34
+ riskLevel: RiskLevel;
35
+ detectionMethod: 'whitelist' | 'blacklist' | 'ai_review' | 'manual';
36
+ description: string;
37
+ latency: number;
38
+ aiAnalysis?: string;
39
+ }
40
+
41
+ /**
42
+ * Tool call context
43
+ */
44
+ export interface ToolCallContext {
45
+ toolName: string;
46
+ params: any;
47
+ timestamp: number;
48
+ }
49
+
50
+ /**
51
+ * Whitelist checker
52
+ */
53
+ export class WhitelistChecker {
54
+ private static readonly WHITELISTED_TOOLS: Set<string> = new Set([
55
+ // Information reading tools
56
+ 'Read',
57
+ 'ListDirectory',
58
+ 'SearchCodebase',
59
+ 'Grep',
60
+ 'image_read',
61
+
62
+ // Task management tools
63
+ 'todo_write',
64
+ 'todo_read',
65
+ 'task',
66
+ 'exit_plan_mode',
67
+ 'web_search',
68
+
69
+ // File editing tools
70
+ 'replace',
71
+ 'Write',
72
+
73
+ // Other safe tools
74
+ 'web_fetch',
75
+ 'ask_user_question',
76
+ 'save_memory',
77
+ 'xml_escape',
78
+ 'Skill'
79
+ ]);
80
+
81
+ /**
82
+ * Check if tool is in whitelist
83
+ */
84
+ check(toolName: string): boolean {
85
+ return WhitelistChecker.WHITELISTED_TOOLS.has(toolName);
86
+ }
87
+
88
+ /**
89
+ * Get list of whitelisted tools
90
+ */
91
+ getWhitelistedTools(): string[] {
92
+ return Array.from(WhitelistChecker.WHITELISTED_TOOLS);
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Blacklist rules
98
+ */
99
+ interface BlacklistRule {
100
+ pattern: RegExp;
101
+ category: string;
102
+ riskLevel: RiskLevel;
103
+ description: string;
104
+ }
105
+
106
+ /**
107
+ * Blacklist checker
108
+ */
109
+ export class BlacklistChecker {
110
+ private static readonly RULES: BlacklistRule[] = [
111
+ // System destruction
112
+ {
113
+ pattern: /rm\s+-rf\s+\/$/,
114
+ category: 'System destruction',
115
+ riskLevel: RiskLevel.CRITICAL,
116
+ description: 'Delete root directory'
117
+ },
118
+ {
119
+ pattern: /rm\s+-rf\s+(\/etc|\/usr|\/bin|\/sbin|\/lib|\/lib64)/,
120
+ category: 'System destruction',
121
+ riskLevel: RiskLevel.CRITICAL,
122
+ description: 'Delete system directories'
123
+ },
124
+ {
125
+ pattern: /rm\s+-rf\s+.*\*/,
126
+ category: 'System destruction',
127
+ riskLevel: RiskLevel.HIGH,
128
+ description: 'Batch delete files'
129
+ },
130
+ {
131
+ pattern: /(mkfs|format)\s+/,
132
+ category: 'System destruction',
133
+ riskLevel: RiskLevel.CRITICAL,
134
+ description: 'Format disk'
135
+ },
136
+ {
137
+ pattern: /dd\s+.*of=\/dev\/(sd[a-z]|nvme[0-9]n[0-9])/,
138
+ category: 'System destruction',
139
+ riskLevel: RiskLevel.CRITICAL,
140
+ description: 'Overwrite disk data'
141
+ },
142
+
143
+ // Privilege escalation
144
+ {
145
+ pattern: /chmod\s+777\s+/,
146
+ category: 'Privilege escalation',
147
+ riskLevel: RiskLevel.HIGH,
148
+ description: 'Set file permissions to 777'
149
+ },
150
+ {
151
+ pattern: /chmod\s+[45][0-9]{3}\s+/,
152
+ category: 'Privilege escalation',
153
+ riskLevel: RiskLevel.HIGH,
154
+ description: 'Set SUID/SGID permissions'
155
+ },
156
+ {
157
+ pattern: /vi\s+\/etc\/sudoers/,
158
+ category: 'Privilege escalation',
159
+ riskLevel: RiskLevel.CRITICAL,
160
+ description: 'Modify sudo permissions'
161
+ },
162
+ {
163
+ pattern: /echo.*>>.*\/etc\/sudoers/,
164
+ category: 'Privilege escalation',
165
+ riskLevel: RiskLevel.CRITICAL,
166
+ description: 'Modify sudo permissions'
167
+ },
168
+
169
+ // Data theft
170
+ {
171
+ pattern: /cat\s+\/etc\/passwd/,
172
+ category: 'Data theft',
173
+ riskLevel: RiskLevel.HIGH,
174
+ description: 'Read password file'
175
+ },
176
+ {
177
+ pattern: /cat\s+\/etc\/shadow/,
178
+ category: 'Data theft',
179
+ riskLevel: RiskLevel.CRITICAL,
180
+ description: 'Read shadow file'
181
+ },
182
+ {
183
+ pattern: /cat\s+.*\/\.ssh\/id_rsa/,
184
+ category: 'Data theft',
185
+ riskLevel: RiskLevel.CRITICAL,
186
+ description: 'Read SSH private key'
187
+ },
188
+ {
189
+ pattern: /grep\s+-[rRi].*password/,
190
+ category: 'Data theft',
191
+ riskLevel: RiskLevel.HIGH,
192
+ description: 'Search for password information'
193
+ },
194
+ {
195
+ pattern: /(curl|wget).*\|(sh|bash|python|perl)/,
196
+ category: 'Data theft',
197
+ riskLevel: RiskLevel.CRITICAL,
198
+ description: 'Remote code execution'
199
+ },
200
+
201
+ // Network attacks
202
+ {
203
+ pattern: /nmap\s+-[sS].*/,
204
+ category: 'Network attacks',
205
+ riskLevel: RiskLevel.MEDIUM,
206
+ description: 'Network scanning'
207
+ },
208
+ {
209
+ pattern: /nc\s+.*-l/,
210
+ category: 'Network attacks',
211
+ riskLevel: RiskLevel.HIGH,
212
+ description: 'Create network listener'
213
+ },
214
+ {
215
+ pattern: /iptables\s+-F/,
216
+ category: 'Network attacks',
217
+ riskLevel: RiskLevel.HIGH,
218
+ description: 'Clear firewall rules'
219
+ },
220
+
221
+ // Resource exhaustion
222
+ {
223
+ pattern: /:\)\s*{\s*:\s*\|\s*:&\s*};/,
224
+ category: 'Resource exhaustion',
225
+ riskLevel: RiskLevel.CRITICAL,
226
+ description: 'Fork bomb'
227
+ },
228
+ {
229
+ pattern: /while\s+true\s*;\s*do\s+.*done/,
230
+ category: 'Resource exhaustion',
231
+ riskLevel: RiskLevel.HIGH,
232
+ description: 'Infinite loop'
233
+ }
234
+ ];
235
+
236
+ /**
237
+ * Check if tool call matches blacklist rules
238
+ */
239
+ check(context: ToolCallContext): { matched: boolean; rule?: BlacklistRule } {
240
+ const { toolName, params } = context;
241
+
242
+ // For Bash tool, check command content
243
+ if (toolName === 'Bash' && params.command) {
244
+ const command = params.command as string;
245
+
246
+ for (const rule of BlacklistChecker.RULES) {
247
+ if (rule.pattern.test(command)) {
248
+ return { matched: true, rule };
249
+ }
250
+ }
251
+ }
252
+
253
+ // For file operation tools, check path
254
+ if (['Write', 'DeleteFile', 'replace'].includes(toolName)) {
255
+ const filePath = params.filePath || params.file_path || '';
256
+ if (this.isSystemPath(filePath)) {
257
+ return {
258
+ matched: true,
259
+ rule: {
260
+ pattern: /system-path/,
261
+ category: 'System destruction',
262
+ riskLevel: RiskLevel.HIGH,
263
+ description: 'Modify system files'
264
+ }
265
+ };
266
+ }
267
+ }
268
+
269
+ return { matched: false };
270
+ }
271
+
272
+ /**
273
+ * Check if it's a system path
274
+ */
275
+ private isSystemPath(filePath: string): boolean {
276
+ const systemPaths = [
277
+ '/etc',
278
+ '/usr',
279
+ '/bin',
280
+ '/sbin',
281
+ '/lib',
282
+ '/lib64',
283
+ '/boot',
284
+ '/sys',
285
+ '/proc',
286
+ '/dev'
287
+ ];
288
+
289
+ const normalizedPath = filePath.toLowerCase().replace(/\\/g, '/');
290
+ return systemPaths.some(sysPath => normalizedPath.startsWith(sysPath));
291
+ }
292
+
293
+ /**
294
+ * Get all blacklist rules
295
+ */
296
+ getRules(): BlacklistRule[] {
297
+ return [...BlacklistChecker.RULES];
298
+ }
299
+ }
300
+
301
+ /**
302
+ * AI approval checker
303
+ */
304
+ export class AIApprovalChecker {
305
+ private aiClient: AIClient | null = null;
306
+
307
+ constructor() {
308
+ this.initializeAIClient();
309
+ }
310
+
311
+ /**
312
+ * Initialize AI client
313
+ */
314
+ private async initializeAIClient(): Promise<void> {
315
+ try {
316
+ const configManager = getConfigManager();
317
+ const authConfig = configManager.getAuthConfig();
318
+
319
+ if (authConfig.apiKey) {
320
+ this.aiClient = new AIClient(authConfig);
321
+ }
322
+ } catch (error) {
323
+ logger.error('Failed to initialize AI approval checker', error instanceof Error ? error.message : String(error));
324
+ }
325
+ }
326
+
327
+ /**
328
+ * Use AI for intelligent review
329
+ */
330
+ async check(context: ToolCallContext): Promise<{ approved: boolean; analysis: string; riskLevel: RiskLevel }> {
331
+ if (!this.aiClient) {
332
+ // If AI client is not initialized, default to medium risk, requires user confirmation
333
+ return {
334
+ approved: false,
335
+ analysis: 'AI review not available, requires manual user confirmation',
336
+ riskLevel: RiskLevel.MEDIUM
337
+ };
338
+ }
339
+
340
+ const prompt = this.buildApprovalPrompt(context);
341
+
342
+ try {
343
+ const messages: Message[] = [
344
+ {
345
+ role: 'system',
346
+ content: `You are a security review expert. Your task is to evaluate the security of tool calls.
347
+
348
+ Please analyze from the following dimensions:
349
+ 1. Whether the operation has malicious intent
350
+ 2. Whether it may cause data leakage
351
+ 3. Whether it may compromise system integrity
352
+ 4. Whether it follows best practices
353
+
354
+ Please return results in JSON format:
355
+ {
356
+ "approved": boolean,
357
+ "riskLevel": "LOW" | "MEDIUM" | "HIGH" | "CRITICAL",
358
+ "analysis": "Detailed analysis description"
359
+ }`
360
+ },
361
+ {
362
+ role: 'user',
363
+ content: prompt
364
+ }
365
+ ];
366
+
367
+ const response = await this.aiClient.chatCompletion(messages, {
368
+ temperature: 0.3,
369
+ // maxTokens: 500
370
+ });
371
+
372
+ const content = typeof response.choices[0].message.content === 'string'
373
+ ? response.choices[0].message.content
374
+ : '{}';
375
+
376
+ // Parse AI response
377
+ const jsonMatch = content.match(/\{[\s\S]*\}/);
378
+ if (jsonMatch) {
379
+ const result = JSON.parse(jsonMatch[0]);
380
+ return {
381
+ approved: result.approved || false,
382
+ analysis: result.analysis || 'No detailed analysis',
383
+ riskLevel: result.riskLevel || RiskLevel.MEDIUM
384
+ };
385
+ }
386
+
387
+ // If unable to parse, return medium risk
388
+ return {
389
+ approved: false,
390
+ analysis: 'Unable to parse AI response, requires manual confirmation',
391
+ riskLevel: RiskLevel.MEDIUM
392
+ };
393
+ } catch (error: any) {
394
+ logger.error('AI approval check failed', error instanceof Error ? error.message : String(error));
395
+ return {
396
+ approved: false,
397
+ analysis: `AI review failed: ${error.message}, requires manual confirmation`,
398
+ riskLevel: RiskLevel.MEDIUM
399
+ };
400
+ }
401
+ }
402
+
403
+ /**
404
+ * Build review prompt
405
+ */
406
+ private buildApprovalPrompt(context: ToolCallContext): string {
407
+ const { toolName, params } = context;
408
+
409
+ let prompt = `Tool name: ${toolName}\n`;
410
+ prompt += `Parameters: ${JSON.stringify(params, null, 2)}\n\n`;
411
+
412
+ // Add specific analysis guidance based on tool type
413
+ if (toolName === 'Bash') {
414
+ prompt += `This is a Shell command execution request. Please check if the command contains:\n- Dangerous system operations (such as deletion, formatting)\n- Privilege escalation operations\n- Data theft operations\n- Remote code execution\n- Resource exhaustion attacks`;
415
+ } else if (['Write', 'replace', 'DeleteFile'].includes(toolName)) {
416
+ prompt += `This is a file operation request. Please check:\n- Whether the target path is a system path\n- Whether the operation may damage system files\n- Whether it involves sensitive configuration files`;
417
+ } else if (toolName === 'web_fetch' || toolName === 'web_search') {
418
+ prompt += `This is a network request. Please check:\n- Whether the URL is a malicious website\n- Whether it may leak sensitive information\n- Whether it may execute remote code`;
419
+ }
420
+
421
+ return prompt;
422
+ }
423
+ }
424
+
425
+ /**
426
+ * Smart approval engine
427
+ */
428
+ export class SmartApprovalEngine {
429
+ private whitelistChecker: WhitelistChecker;
430
+ private blacklistChecker: BlacklistChecker;
431
+ private aiChecker: AIApprovalChecker;
432
+ private debugMode: boolean;
433
+
434
+ constructor(debugMode: boolean = false) {
435
+ this.whitelistChecker = new WhitelistChecker();
436
+ this.blacklistChecker = new BlacklistChecker();
437
+ this.aiChecker = new AIApprovalChecker();
438
+ this.debugMode = debugMode;
439
+ }
440
+
441
+ /**
442
+ * Evaluate tool call
443
+ */
444
+ async evaluate(context: ToolCallContext): Promise<ApprovalResult> {
445
+ const startTime = Date.now();
446
+
447
+ if (this.debugMode) {
448
+ logger.debug(`[SmartApprovalEngine] Evaluating tool call: ${context.toolName}`);
449
+ }
450
+
451
+ // First layer: Whitelist check
452
+ const whitelistCheck = this.whitelistChecker.check(context.toolName);
453
+ if (whitelistCheck) {
454
+ const latency = Date.now() - startTime;
455
+ if (this.debugMode) {
456
+ logger.debug(`[WhitelistChecker] Tool '${context.toolName}' in whitelist, latency: ${latency}ms`);
457
+ }
458
+
459
+ return {
460
+ decision: ApprovalDecision.APPROVED,
461
+ riskLevel: RiskLevel.LOW,
462
+ detectionMethod: 'whitelist',
463
+ description: `Tool '${context.toolName}' is in the whitelist, executing directly`,
464
+ latency
465
+ };
466
+ }
467
+
468
+ if (this.debugMode) {
469
+ logger.debug(`[WhitelistChecker] Tool '${context.toolName}' not in whitelist`);
470
+ }
471
+
472
+ // Second layer: Blacklist check
473
+ const blacklistCheck = this.blacklistChecker.check(context);
474
+ if (blacklistCheck.matched && blacklistCheck.rule) {
475
+ const latency = Date.now() - startTime;
476
+ if (this.debugMode) {
477
+ logger.debug(`[BlacklistChecker] Matched rule: ${blacklistCheck.rule.description}, Risk: ${blacklistCheck.rule.riskLevel}, latency: ${latency}ms`);
478
+ }
479
+
480
+ return {
481
+ decision: ApprovalDecision.REQUIRES_CONFIRMATION,
482
+ riskLevel: blacklistCheck.rule.riskLevel,
483
+ detectionMethod: 'blacklist',
484
+ description: `Detected potentially risky operation: ${blacklistCheck.rule.description}`,
485
+ latency
486
+ };
487
+ }
488
+
489
+ if (this.debugMode) {
490
+ logger.debug(`[BlacklistChecker] No blacklist rule matched`);
491
+ }
492
+
493
+ // Third layer: AI intelligent review
494
+ const aiCheck = await this.aiChecker.check(context);
495
+ const latency = Date.now() - startTime;
496
+
497
+ if (this.debugMode) {
498
+ logger.debug(`[AIApprovalChecker] AI review result: approved=${aiCheck.approved}, risk=${aiCheck.riskLevel}, latency: ${latency}ms`);
499
+ }
500
+
501
+ return {
502
+ decision: aiCheck.approved ? ApprovalDecision.APPROVED : ApprovalDecision.REQUIRES_CONFIRMATION,
503
+ riskLevel: aiCheck.riskLevel,
504
+ detectionMethod: 'ai_review',
505
+ description: aiCheck.analysis,
506
+ latency,
507
+ aiAnalysis: aiCheck.analysis
508
+ };
509
+ }
510
+
511
+ /**
512
+ * Request user confirmation
513
+ */
514
+ async requestConfirmation(result: ApprovalResult): Promise<boolean> {
515
+ const separator = icons.separator.repeat(40);
516
+ console.log('');
517
+ console.log(colors.warning(`${icons.warning} [Smart Mode] Detected potentially risky operation`));
518
+ console.log(colors.border(separator));
519
+ console.log('');
520
+ console.log(colors.textMuted(`📊 Risk Level: ${this.getRiskLevelDisplay(result.riskLevel)}`));
521
+ console.log(colors.textMuted(`🔍 Detection Method: ${this.getDetectionMethodDisplay(result.detectionMethod)}`));
522
+ console.log('');
523
+
524
+ if (result.aiAnalysis) {
525
+ console.log(colors.textMuted(`🤖 AI Analysis:`));
526
+ console.log(colors.textDim(` ${result.aiAnalysis}`));
527
+ console.log('');
528
+ }
529
+
530
+ console.log(colors.textMuted(`⚠️ Risk Description: ${result.description}`));
531
+ console.log('');
532
+ console.log(colors.warning('Potentially risky operation detected, continue execution?'));
533
+
534
+ try {
535
+ const { confirmed } = await inquirer.prompt([
536
+ {
537
+ type: 'confirm',
538
+ name: 'confirmed',
539
+ message: 'Continue execution?',
540
+ default: false
541
+ }
542
+ ]);
543
+
544
+ return confirmed;
545
+ } catch (error) {
546
+ logger.error('Failed to get user confirmation', error instanceof Error ? error.message : String(error));
547
+ return false;
548
+ }
549
+ }
550
+
551
+ /**
552
+ * Get risk level display
553
+ */
554
+ private getRiskLevelDisplay(riskLevel: RiskLevel): string {
555
+ const displays = {
556
+ [RiskLevel.LOW]: colors.success('LOW'),
557
+ [RiskLevel.MEDIUM]: colors.warning('MEDIUM'),
558
+ [RiskLevel.HIGH]: colors.error('HIGH'),
559
+ [RiskLevel.CRITICAL]: colors.error('CRITICAL')
560
+ };
561
+ return displays[riskLevel];
562
+ }
563
+
564
+ /**
565
+ * Get detection method display
566
+ */
567
+ private getDetectionMethodDisplay(method: string): string {
568
+ const displays = {
569
+ whitelist: 'Whitelist rules',
570
+ blacklist: 'Blacklist rules',
571
+ ai_review: 'AI intelligent review',
572
+ manual: 'Manual review'
573
+ };
574
+ return displays[method as keyof typeof displays] || method;
575
+ }
576
+
577
+ /**
578
+ * Set debug mode
579
+ */
580
+ setDebugMode(enabled: boolean): void {
581
+ this.debugMode = enabled;
582
+ }
583
+ }
584
+
585
+ /**
586
+ * Get smart approval engine instance
587
+ */
588
+ let smartApprovalEngineInstance: SmartApprovalEngine | null = null;
589
+
590
+ export function getSmartApprovalEngine(debugMode: boolean = false): SmartApprovalEngine {
591
+ if (!smartApprovalEngineInstance) {
592
+ smartApprovalEngineInstance = new SmartApprovalEngine(debugMode);
593
+ }
594
+ return smartApprovalEngineInstance;
595
+ }