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