@xagent-ai/cli 1.2.2 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug_report.md +38 -38
- package/.github/ISSUE_TEMPLATE/feature_request.md +20 -20
- package/.github/release.yml +76 -0
- package/.github/workflows/ci.yml +75 -0
- package/.github/workflows/release.yml +103 -0
- package/.gitmodules +3 -3
- package/README.md +326 -280
- package/README_CN.md +325 -279
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +7 -3
- package/dist/agents.js.map +1 -1
- package/dist/ai-client/factory.d.ts +40 -0
- package/dist/ai-client/factory.d.ts.map +1 -0
- package/dist/ai-client/factory.js +100 -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 +406 -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 +290 -0
- package/dist/ai-client/providers/openai.js.map +1 -0
- package/dist/ai-client/providers/remote.d.ts +110 -0
- package/dist/ai-client/providers/remote.d.ts.map +1 -0
- package/dist/ai-client/providers/remote.js +352 -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 +274 -0
- package/dist/ai-client/types.d.ts.map +1 -0
- package/dist/ai-client/types.js +90 -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 +164 -174
- 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 +53 -32
- package/dist/cancellation.js.map +1 -1
- package/dist/checkpoint.d.ts +2 -1
- package/dist/checkpoint.d.ts.map +1 -1
- package/dist/checkpoint.js +39 -6
- package/dist/checkpoint.js.map +1 -1
- package/dist/cli.js +742 -29
- 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 +82 -18
- package/dist/context-compressor.d.ts.map +1 -1
- package/dist/context-compressor.js +718 -154
- package/dist/context-compressor.js.map +1 -1
- package/dist/conversation.d.ts +1 -1
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +8 -7
- package/dist/conversation.js.map +1 -1
- package/dist/gui-subagent/action-parser/actionParser.d.ts.map +1 -1
- package/dist/gui-subagent/action-parser/actionParser.js +6 -4
- package/dist/gui-subagent/action-parser/actionParser.js.map +1 -1
- package/dist/gui-subagent/agent/gui-agent.d.ts +39 -2
- package/dist/gui-subagent/agent/gui-agent.d.ts.map +1 -1
- package/dist/gui-subagent/agent/gui-agent.js +189 -74
- package/dist/gui-subagent/agent/gui-agent.js.map +1 -1
- package/dist/gui-subagent/index.d.ts +23 -1
- package/dist/gui-subagent/index.d.ts.map +1 -1
- package/dist/gui-subagent/index.js +6 -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 +31 -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 +8 -5
- package/dist/input-processor.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +1 -1
- package/dist/logger.js.map +1 -1
- package/dist/mcp.d.ts +7 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +157 -49
- package/dist/mcp.js.map +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +3 -3
- package/dist/memory.js.map +1 -1
- package/dist/output-util.d.ts +27 -0
- package/dist/output-util.d.ts.map +1 -0
- package/dist/output-util.js +74 -0
- package/dist/output-util.js.map +1 -0
- package/dist/retry.js +1 -1
- package/dist/retry.js.map +1 -1
- package/dist/ripgrep.d.ts +29 -0
- package/dist/ripgrep.d.ts.map +1 -0
- package/dist/ripgrep.js +294 -0
- package/dist/ripgrep.js.map +1 -0
- package/dist/sdk-output-adapter.d.ts +34 -1
- package/dist/sdk-output-adapter.d.ts.map +1 -1
- package/dist/sdk-output-adapter.js +67 -2
- package/dist/sdk-output-adapter.js.map +1 -1
- package/dist/sdk-session.d.ts.map +1 -1
- package/dist/sdk-session.js +2 -0
- package/dist/sdk-session.js.map +1 -1
- package/dist/session-manager.js +3 -3
- package/dist/session-manager.js.map +1 -1
- package/dist/session.d.ts +116 -6
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +1416 -448
- 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 +126 -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 +8 -2
- package/dist/skill-invoker.d.ts.map +1 -1
- package/dist/skill-invoker.js +36 -15
- 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 +51 -48
- 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 +341 -0
- package/dist/skill-manager.js.map +1 -0
- package/dist/slash-commands.d.ts +39 -2
- package/dist/slash-commands.d.ts.map +1 -1
- package/dist/slash-commands.js +934 -305
- package/dist/slash-commands.js.map +1 -1
- package/dist/smart-approval.d.ts +20 -1
- package/dist/smart-approval.d.ts.map +1 -1
- package/dist/smart-approval.js +125 -56
- 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 +86 -36
- 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/theme.d.ts.map +1 -1
- package/dist/theme.js +8 -7
- package/dist/theme.js.map +1 -1
- package/dist/tools.d.ts +38 -7
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +1249 -617
- 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 +84 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +49 -0
- package/dist/types.js.map +1 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +28 -36
- 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 +61 -49
- 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 +440 -439
- package/find-skills/SKILL.md +133 -0
- package/package.json +91 -90
- package/scripts/install-ripgrep.js +241 -0
- package/src/agents.ts +7 -3
- package/src/ai-client/factory.ts +116 -0
- package/src/ai-client/index.ts +61 -0
- package/src/ai-client/providers/anthropic.ts +475 -0
- package/src/ai-client/providers/openai.ts +348 -0
- package/src/ai-client/providers/remote.ts +439 -0
- package/src/ai-client/registry.ts +97 -0
- package/src/ai-client/types.ts +364 -0
- package/src/ai-client-factory.ts +204 -0
- package/src/auth.ts +661 -614
- package/src/cancellation.ts +202 -176
- package/src/checkpoint.ts +255 -219
- package/src/cli.ts +1523 -743
- package/src/config.ts +341 -297
- package/src/context-compressor.ts +987 -290
- package/src/conversation.ts +290 -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 +1234 -1089
- package/src/gui-subagent/agent/index.ts +5 -5
- package/src/gui-subagent/index.ts +185 -163
- package/src/gui-subagent/operator/base-operator.ts +244 -245
- package/src/gui-subagent/operator/computer-operator.ts +541 -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 +8 -5
- package/src/logger.ts +436 -438
- package/src/mcp.ts +793 -682
- package/src/memory.ts +343 -344
- package/src/output-util.ts +80 -0
- package/src/retry.ts +1 -1
- package/src/ripgrep.ts +370 -0
- package/src/sdk-output-adapter.ts +842 -0
- package/src/sdk-session.ts +62 -0
- package/src/session-manager.ts +308 -308
- package/src/session.ts +1775 -573
- package/src/shell.ts +134 -0
- package/src/skill-installer.ts +518 -0
- package/src/skill-invoker.ts +959 -935
- package/src/skill-loader.ts +501 -496
- package/src/skill-manager.ts +385 -0
- package/src/slash-commands.ts +2189 -1389
- package/src/smart-approval.ts +193 -74
- package/src/system-prompt-generator.ts +91 -36
- package/src/terminal.ts +96 -0
- package/src/theme.ts +739 -738
- package/src/tools.ts +1790 -931
- package/src/truncate.ts +173 -0
- package/src/types.ts +337 -198
- package/src/update.ts +33 -40
- package/src/workflow.ts +521 -508
- package/test/cli-launch.test.ts +279 -0
- package/tsconfig.json +22 -22
- package/vitest.config.ts +21 -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-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/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/{.eslintrc.js → .eslintrc.cjs} +0 -0
package/src/smart-approval.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
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';
|
|
9
|
+
import { SdkOutputAdapter } from './sdk-output-adapter.js';
|
|
7
10
|
|
|
8
11
|
const logger = getLogger();
|
|
9
12
|
|
|
@@ -14,7 +17,7 @@ export enum ApprovalDecision {
|
|
|
14
17
|
APPROVED = 'approved',
|
|
15
18
|
REJECTED = 'rejected',
|
|
16
19
|
REQUIRES_CONFIRMATION = 'requires_confirmation',
|
|
17
|
-
AI_REVIEW = 'ai_review'
|
|
20
|
+
AI_REVIEW = 'ai_review',
|
|
18
21
|
}
|
|
19
22
|
|
|
20
23
|
/**
|
|
@@ -24,7 +27,7 @@ export enum RiskLevel {
|
|
|
24
27
|
LOW = 'LOW',
|
|
25
28
|
MEDIUM = 'MEDIUM',
|
|
26
29
|
HIGH = 'HIGH',
|
|
27
|
-
CRITICAL = 'CRITICAL'
|
|
30
|
+
CRITICAL = 'CRITICAL',
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
/**
|
|
@@ -77,7 +80,7 @@ export class WhitelistChecker {
|
|
|
77
80
|
'ask_user_question',
|
|
78
81
|
'save_memory',
|
|
79
82
|
'xml_escape',
|
|
80
|
-
'Skill'
|
|
83
|
+
'Skill',
|
|
81
84
|
]);
|
|
82
85
|
|
|
83
86
|
/**
|
|
@@ -115,31 +118,31 @@ export class BlacklistChecker {
|
|
|
115
118
|
pattern: /rm\s+-rf\s+\/$/,
|
|
116
119
|
category: 'System destruction',
|
|
117
120
|
riskLevel: RiskLevel.CRITICAL,
|
|
118
|
-
description: 'Delete root directory'
|
|
121
|
+
description: 'Delete root directory',
|
|
119
122
|
},
|
|
120
123
|
{
|
|
121
124
|
pattern: /rm\s+-rf\s+(\/etc|\/usr|\/bin|\/sbin|\/lib|\/lib64)/,
|
|
122
125
|
category: 'System destruction',
|
|
123
126
|
riskLevel: RiskLevel.CRITICAL,
|
|
124
|
-
description: 'Delete system directories'
|
|
127
|
+
description: 'Delete system directories',
|
|
125
128
|
},
|
|
126
129
|
{
|
|
127
130
|
pattern: /rm\s+-rf\s+.*\*/,
|
|
128
131
|
category: 'System destruction',
|
|
129
132
|
riskLevel: RiskLevel.HIGH,
|
|
130
|
-
description: 'Batch delete files'
|
|
133
|
+
description: 'Batch delete files',
|
|
131
134
|
},
|
|
132
135
|
{
|
|
133
136
|
pattern: /(mkfs|format)\s+/,
|
|
134
137
|
category: 'System destruction',
|
|
135
138
|
riskLevel: RiskLevel.CRITICAL,
|
|
136
|
-
description: 'Format disk'
|
|
139
|
+
description: 'Format disk',
|
|
137
140
|
},
|
|
138
141
|
{
|
|
139
142
|
pattern: /dd\s+.*of=\/dev\/(sd[a-z]|nvme[0-9]n[0-9])/,
|
|
140
143
|
category: 'System destruction',
|
|
141
144
|
riskLevel: RiskLevel.CRITICAL,
|
|
142
|
-
description: 'Overwrite disk data'
|
|
145
|
+
description: 'Overwrite disk data',
|
|
143
146
|
},
|
|
144
147
|
|
|
145
148
|
// Privilege escalation
|
|
@@ -147,25 +150,25 @@ export class BlacklistChecker {
|
|
|
147
150
|
pattern: /chmod\s+777\s+/,
|
|
148
151
|
category: 'Privilege escalation',
|
|
149
152
|
riskLevel: RiskLevel.HIGH,
|
|
150
|
-
description: 'Set file permissions to 777'
|
|
153
|
+
description: 'Set file permissions to 777',
|
|
151
154
|
},
|
|
152
155
|
{
|
|
153
156
|
pattern: /chmod\s+[45][0-9]{3}\s+/,
|
|
154
157
|
category: 'Privilege escalation',
|
|
155
158
|
riskLevel: RiskLevel.HIGH,
|
|
156
|
-
description: 'Set SUID/SGID permissions'
|
|
159
|
+
description: 'Set SUID/SGID permissions',
|
|
157
160
|
},
|
|
158
161
|
{
|
|
159
162
|
pattern: /vi\s+\/etc\/sudoers/,
|
|
160
163
|
category: 'Privilege escalation',
|
|
161
164
|
riskLevel: RiskLevel.CRITICAL,
|
|
162
|
-
description: 'Modify sudo permissions'
|
|
165
|
+
description: 'Modify sudo permissions',
|
|
163
166
|
},
|
|
164
167
|
{
|
|
165
168
|
pattern: /echo.*>>.*\/etc\/sudoers/,
|
|
166
169
|
category: 'Privilege escalation',
|
|
167
170
|
riskLevel: RiskLevel.CRITICAL,
|
|
168
|
-
description: 'Modify sudo permissions'
|
|
171
|
+
description: 'Modify sudo permissions',
|
|
169
172
|
},
|
|
170
173
|
|
|
171
174
|
// Data theft
|
|
@@ -173,31 +176,31 @@ export class BlacklistChecker {
|
|
|
173
176
|
pattern: /cat\s+\/etc\/passwd/,
|
|
174
177
|
category: 'Data theft',
|
|
175
178
|
riskLevel: RiskLevel.HIGH,
|
|
176
|
-
description: 'Read password file'
|
|
179
|
+
description: 'Read password file',
|
|
177
180
|
},
|
|
178
181
|
{
|
|
179
182
|
pattern: /cat\s+\/etc\/shadow/,
|
|
180
183
|
category: 'Data theft',
|
|
181
184
|
riskLevel: RiskLevel.CRITICAL,
|
|
182
|
-
description: 'Read shadow file'
|
|
185
|
+
description: 'Read shadow file',
|
|
183
186
|
},
|
|
184
187
|
{
|
|
185
188
|
pattern: /cat\s+.*\/\.ssh\/id_rsa/,
|
|
186
189
|
category: 'Data theft',
|
|
187
190
|
riskLevel: RiskLevel.CRITICAL,
|
|
188
|
-
description: 'Read SSH private key'
|
|
191
|
+
description: 'Read SSH private key',
|
|
189
192
|
},
|
|
190
193
|
{
|
|
191
194
|
pattern: /grep\s+-[rRi].*password/,
|
|
192
195
|
category: 'Data theft',
|
|
193
196
|
riskLevel: RiskLevel.HIGH,
|
|
194
|
-
description: 'Search for password information'
|
|
197
|
+
description: 'Search for password information',
|
|
195
198
|
},
|
|
196
199
|
{
|
|
197
200
|
pattern: /(curl|wget).*\|(sh|bash|python|perl)/,
|
|
198
201
|
category: 'Data theft',
|
|
199
202
|
riskLevel: RiskLevel.CRITICAL,
|
|
200
|
-
description: 'Remote code execution'
|
|
203
|
+
description: 'Remote code execution',
|
|
201
204
|
},
|
|
202
205
|
|
|
203
206
|
// Network attacks
|
|
@@ -205,19 +208,19 @@ export class BlacklistChecker {
|
|
|
205
208
|
pattern: /nmap\s+-[sS].*/,
|
|
206
209
|
category: 'Network attacks',
|
|
207
210
|
riskLevel: RiskLevel.MEDIUM,
|
|
208
|
-
description: 'Network scanning'
|
|
211
|
+
description: 'Network scanning',
|
|
209
212
|
},
|
|
210
213
|
{
|
|
211
214
|
pattern: /nc\s+.*-l/,
|
|
212
215
|
category: 'Network attacks',
|
|
213
216
|
riskLevel: RiskLevel.HIGH,
|
|
214
|
-
description: 'Create network listener'
|
|
217
|
+
description: 'Create network listener',
|
|
215
218
|
},
|
|
216
219
|
{
|
|
217
220
|
pattern: /iptables\s+-F/,
|
|
218
221
|
category: 'Network attacks',
|
|
219
222
|
riskLevel: RiskLevel.HIGH,
|
|
220
|
-
description: 'Clear firewall rules'
|
|
223
|
+
description: 'Clear firewall rules',
|
|
221
224
|
},
|
|
222
225
|
|
|
223
226
|
// Resource exhaustion
|
|
@@ -225,14 +228,14 @@ export class BlacklistChecker {
|
|
|
225
228
|
pattern: /:\)\s*{\s*:\s*\|\s*:&\s*};/,
|
|
226
229
|
category: 'Resource exhaustion',
|
|
227
230
|
riskLevel: RiskLevel.CRITICAL,
|
|
228
|
-
description: 'Fork bomb'
|
|
231
|
+
description: 'Fork bomb',
|
|
229
232
|
},
|
|
230
233
|
{
|
|
231
234
|
pattern: /while\s+true\s*;\s*do\s+.*done/,
|
|
232
235
|
category: 'Resource exhaustion',
|
|
233
236
|
riskLevel: RiskLevel.HIGH,
|
|
234
|
-
description: 'Infinite loop'
|
|
235
|
-
}
|
|
237
|
+
description: 'Infinite loop',
|
|
238
|
+
},
|
|
236
239
|
];
|
|
237
240
|
|
|
238
241
|
/**
|
|
@@ -262,8 +265,8 @@ export class BlacklistChecker {
|
|
|
262
265
|
pattern: /system-path/,
|
|
263
266
|
category: 'System destruction',
|
|
264
267
|
riskLevel: RiskLevel.HIGH,
|
|
265
|
-
description: 'Modify system files'
|
|
266
|
-
}
|
|
268
|
+
description: 'Modify system files',
|
|
269
|
+
},
|
|
267
270
|
};
|
|
268
271
|
}
|
|
269
272
|
}
|
|
@@ -285,11 +288,11 @@ export class BlacklistChecker {
|
|
|
285
288
|
'/boot',
|
|
286
289
|
'/sys',
|
|
287
290
|
'/proc',
|
|
288
|
-
'/dev'
|
|
291
|
+
'/dev',
|
|
289
292
|
];
|
|
290
293
|
|
|
291
294
|
const normalizedPath = filePath.toLowerCase().replace(/\\/g, '/');
|
|
292
|
-
return systemPaths.some(sysPath => normalizedPath.startsWith(sysPath));
|
|
295
|
+
return systemPaths.some((sysPath) => normalizedPath.startsWith(sysPath));
|
|
293
296
|
}
|
|
294
297
|
|
|
295
298
|
/**
|
|
@@ -304,7 +307,7 @@ export class BlacklistChecker {
|
|
|
304
307
|
* AI approval checker
|
|
305
308
|
*/
|
|
306
309
|
export class AIApprovalChecker {
|
|
307
|
-
private aiClient:
|
|
310
|
+
private aiClient: AIClientInterface | null = null;
|
|
308
311
|
private isRemoteMode: boolean = false;
|
|
309
312
|
|
|
310
313
|
constructor() {
|
|
@@ -325,24 +328,29 @@ export class AIApprovalChecker {
|
|
|
325
328
|
// Remote mode: AI review handled by remote LLM, no local AIClient needed
|
|
326
329
|
// Local mode: use local AIClient
|
|
327
330
|
if (!this.isRemoteMode && authConfig.apiKey) {
|
|
328
|
-
this.aiClient =
|
|
331
|
+
this.aiClient = createAIClient(authConfig);
|
|
329
332
|
}
|
|
330
333
|
} catch (error) {
|
|
331
|
-
logger.error(
|
|
334
|
+
logger.error(
|
|
335
|
+
'Failed to initialize AI approval checker',
|
|
336
|
+
error instanceof Error ? error.message : String(error)
|
|
337
|
+
);
|
|
332
338
|
}
|
|
333
339
|
}
|
|
334
340
|
|
|
335
341
|
/**
|
|
336
342
|
* Use AI for intelligent review
|
|
337
343
|
*/
|
|
338
|
-
async check(
|
|
344
|
+
async check(
|
|
345
|
+
context: ToolCallContext
|
|
346
|
+
): Promise<{ approved: boolean; analysis: string; riskLevel: RiskLevel }> {
|
|
339
347
|
// In Remote mode, the remote LLM has already approved the tool_calls
|
|
340
348
|
// Local AI review approves directly, no need to repeat
|
|
341
349
|
if (this.isRemoteMode) {
|
|
342
350
|
return {
|
|
343
351
|
approved: true,
|
|
344
352
|
analysis: 'Remote mode: tool approval handled by remote LLM',
|
|
345
|
-
riskLevel: RiskLevel.LOW
|
|
353
|
+
riskLevel: RiskLevel.LOW,
|
|
346
354
|
};
|
|
347
355
|
}
|
|
348
356
|
|
|
@@ -350,8 +358,9 @@ export class AIApprovalChecker {
|
|
|
350
358
|
// If AI client is not initialized, default to medium risk, requires user confirmation
|
|
351
359
|
return {
|
|
352
360
|
approved: false,
|
|
353
|
-
analysis:
|
|
354
|
-
|
|
361
|
+
analysis:
|
|
362
|
+
'AI review not available (no local LLM configured), requires manual user confirmation',
|
|
363
|
+
riskLevel: RiskLevel.MEDIUM,
|
|
355
364
|
};
|
|
356
365
|
}
|
|
357
366
|
|
|
@@ -374,22 +383,27 @@ Please return results in JSON format:
|
|
|
374
383
|
"approved": boolean,
|
|
375
384
|
"riskLevel": "LOW" | "MEDIUM" | "HIGH" | "CRITICAL",
|
|
376
385
|
"analysis": "Detailed analysis description"
|
|
377
|
-
}
|
|
386
|
+
}`,
|
|
378
387
|
},
|
|
379
388
|
{
|
|
380
389
|
role: 'user',
|
|
381
|
-
content: prompt
|
|
382
|
-
}
|
|
390
|
+
content: prompt,
|
|
391
|
+
},
|
|
383
392
|
];
|
|
384
393
|
|
|
385
|
-
const
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
394
|
+
const controller = new AbortController();
|
|
395
|
+
const response = await getCancellationManager().withCancellation(
|
|
396
|
+
this.aiClient.chatCompletion(messages, {
|
|
397
|
+
temperature: 0.3,
|
|
398
|
+
signal: controller.signal,
|
|
399
|
+
}),
|
|
400
|
+
'smart-approval'
|
|
401
|
+
);
|
|
389
402
|
|
|
390
|
-
const content =
|
|
391
|
-
|
|
392
|
-
|
|
403
|
+
const content =
|
|
404
|
+
typeof response.choices[0].message.content === 'string'
|
|
405
|
+
? response.choices[0].message.content
|
|
406
|
+
: '{}';
|
|
393
407
|
|
|
394
408
|
// Parse AI response
|
|
395
409
|
const jsonMatch = content.match(/\{[\s\S]*\}/);
|
|
@@ -398,7 +412,7 @@ Please return results in JSON format:
|
|
|
398
412
|
return {
|
|
399
413
|
approved: result.approved || false,
|
|
400
414
|
analysis: result.analysis || 'No detailed analysis',
|
|
401
|
-
riskLevel: result.riskLevel || RiskLevel.MEDIUM
|
|
415
|
+
riskLevel: result.riskLevel || RiskLevel.MEDIUM,
|
|
402
416
|
};
|
|
403
417
|
}
|
|
404
418
|
|
|
@@ -406,10 +420,22 @@ Please return results in JSON format:
|
|
|
406
420
|
return {
|
|
407
421
|
approved: false,
|
|
408
422
|
analysis: 'Unable to parse AI response, requires manual confirmation',
|
|
409
|
-
riskLevel: RiskLevel.MEDIUM
|
|
423
|
+
riskLevel: RiskLevel.MEDIUM,
|
|
410
424
|
};
|
|
411
425
|
} catch (error: any) {
|
|
412
|
-
|
|
426
|
+
// Check if it was cancelled by user first - don't log error for cancellations
|
|
427
|
+
const isCancelled = error.message === 'Operation cancelled by user' ||
|
|
428
|
+
error.message.includes('cancelled') ||
|
|
429
|
+
error.message.includes('aborted');
|
|
430
|
+
|
|
431
|
+
if (isCancelled) {
|
|
432
|
+
throw new Error('Operation cancelled by user');
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
logger.error(
|
|
436
|
+
'AI approval check failed',
|
|
437
|
+
error instanceof Error ? error.message : String(error)
|
|
438
|
+
);
|
|
413
439
|
|
|
414
440
|
// In Remote mode, remote LLM already approved, local failure means auto-approve
|
|
415
441
|
const configManager = getConfigManager();
|
|
@@ -420,14 +446,21 @@ Please return results in JSON format:
|
|
|
420
446
|
return {
|
|
421
447
|
approved: true,
|
|
422
448
|
analysis: 'Remote mode: approved (remote LLM handled approval)',
|
|
423
|
-
riskLevel: RiskLevel.LOW
|
|
449
|
+
riskLevel: RiskLevel.LOW,
|
|
424
450
|
};
|
|
425
451
|
}
|
|
426
452
|
|
|
453
|
+
// If user cancelled the AI review, directly cancel the entire task
|
|
454
|
+
// instead of just canceling the AI review and continuing
|
|
455
|
+
if (isCancelled) {
|
|
456
|
+
throw new Error('Operation cancelled by user');
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// Other errors require manual confirmation
|
|
427
460
|
return {
|
|
428
461
|
approved: false,
|
|
429
462
|
analysis: `AI review failed: ${error.message}, requires manual confirmation`,
|
|
430
|
-
riskLevel: RiskLevel.MEDIUM
|
|
463
|
+
riskLevel: RiskLevel.MEDIUM,
|
|
431
464
|
};
|
|
432
465
|
}
|
|
433
466
|
}
|
|
@@ -462,6 +495,8 @@ export class SmartApprovalEngine {
|
|
|
462
495
|
private blacklistChecker: BlacklistChecker;
|
|
463
496
|
private aiChecker: AIApprovalChecker;
|
|
464
497
|
private debugMode: boolean;
|
|
498
|
+
private sdkAdapter: SdkOutputAdapter | null = null;
|
|
499
|
+
private isSdkMode: boolean = false;
|
|
465
500
|
|
|
466
501
|
constructor(debugMode: boolean = false) {
|
|
467
502
|
this.whitelistChecker = new WhitelistChecker();
|
|
@@ -470,6 +505,28 @@ export class SmartApprovalEngine {
|
|
|
470
505
|
this.debugMode = debugMode;
|
|
471
506
|
}
|
|
472
507
|
|
|
508
|
+
/**
|
|
509
|
+
* Set SDK mode and output adapter for SDK mode support
|
|
510
|
+
*/
|
|
511
|
+
setSdkMode(enabled: boolean, adapter: SdkOutputAdapter | null): void {
|
|
512
|
+
this.isSdkMode = enabled;
|
|
513
|
+
this.sdkAdapter = adapter;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Check if in SDK mode
|
|
518
|
+
*/
|
|
519
|
+
getIsSdkMode(): boolean {
|
|
520
|
+
return this.isSdkMode;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* Get SDK adapter
|
|
525
|
+
*/
|
|
526
|
+
getSdkAdapter(): SdkOutputAdapter | null {
|
|
527
|
+
return this.sdkAdapter;
|
|
528
|
+
}
|
|
529
|
+
|
|
473
530
|
/**
|
|
474
531
|
* Evaluate tool call
|
|
475
532
|
*/
|
|
@@ -485,7 +542,9 @@ export class SmartApprovalEngine {
|
|
|
485
542
|
if (whitelistCheck) {
|
|
486
543
|
const latency = Date.now() - startTime;
|
|
487
544
|
if (this.debugMode) {
|
|
488
|
-
logger.debug(
|
|
545
|
+
logger.debug(
|
|
546
|
+
`[WhitelistChecker] Tool '${context.toolName}' in whitelist, latency: ${latency}ms`
|
|
547
|
+
);
|
|
489
548
|
}
|
|
490
549
|
|
|
491
550
|
return {
|
|
@@ -493,7 +552,7 @@ export class SmartApprovalEngine {
|
|
|
493
552
|
riskLevel: RiskLevel.LOW,
|
|
494
553
|
detectionMethod: 'whitelist',
|
|
495
554
|
description: `Tool '${context.toolName}' is in the whitelist, executing directly`,
|
|
496
|
-
latency
|
|
555
|
+
latency,
|
|
497
556
|
};
|
|
498
557
|
}
|
|
499
558
|
|
|
@@ -506,7 +565,9 @@ export class SmartApprovalEngine {
|
|
|
506
565
|
if (blacklistCheck.matched && blacklistCheck.rule) {
|
|
507
566
|
const latency = Date.now() - startTime;
|
|
508
567
|
if (this.debugMode) {
|
|
509
|
-
logger.debug(
|
|
568
|
+
logger.debug(
|
|
569
|
+
`[BlacklistChecker] Matched rule: ${blacklistCheck.rule.description}, Risk: ${blacklistCheck.rule.riskLevel}, latency: ${latency}ms`
|
|
570
|
+
);
|
|
510
571
|
}
|
|
511
572
|
|
|
512
573
|
return {
|
|
@@ -514,7 +575,7 @@ export class SmartApprovalEngine {
|
|
|
514
575
|
riskLevel: blacklistCheck.rule.riskLevel,
|
|
515
576
|
detectionMethod: 'blacklist',
|
|
516
577
|
description: `Detected potentially risky operation: ${blacklistCheck.rule.description}`,
|
|
517
|
-
latency
|
|
578
|
+
latency,
|
|
518
579
|
};
|
|
519
580
|
}
|
|
520
581
|
|
|
@@ -527,30 +588,50 @@ export class SmartApprovalEngine {
|
|
|
527
588
|
const latency = Date.now() - startTime;
|
|
528
589
|
|
|
529
590
|
if (this.debugMode) {
|
|
530
|
-
logger.debug(
|
|
591
|
+
logger.debug(
|
|
592
|
+
`[AIApprovalChecker] AI review result: approved=${aiCheck.approved}, risk=${aiCheck.riskLevel}, latency: ${latency}ms`
|
|
593
|
+
);
|
|
531
594
|
}
|
|
532
595
|
|
|
533
596
|
return {
|
|
534
|
-
decision: aiCheck.approved
|
|
597
|
+
decision: aiCheck.approved
|
|
598
|
+
? ApprovalDecision.APPROVED
|
|
599
|
+
: ApprovalDecision.REQUIRES_CONFIRMATION,
|
|
535
600
|
riskLevel: aiCheck.riskLevel,
|
|
536
601
|
detectionMethod: 'ai_review',
|
|
537
602
|
description: aiCheck.analysis,
|
|
538
603
|
latency,
|
|
539
|
-
aiAnalysis: aiCheck.analysis
|
|
604
|
+
aiAnalysis: aiCheck.analysis,
|
|
540
605
|
};
|
|
541
606
|
}
|
|
542
607
|
|
|
543
608
|
/**
|
|
544
609
|
* Request user confirmation
|
|
545
610
|
*/
|
|
546
|
-
async requestConfirmation(
|
|
611
|
+
async requestConfirmation(
|
|
612
|
+
result: ApprovalResult,
|
|
613
|
+
toolName?: string,
|
|
614
|
+
toolParams?: Record<string, unknown>
|
|
615
|
+
): Promise<boolean> {
|
|
616
|
+
// Check if in SDK mode with adapter
|
|
617
|
+
if (this.isSdkMode && this.sdkAdapter) {
|
|
618
|
+
return this.requestConfirmationSdk(result, toolName, toolParams);
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
// Regular TUI mode
|
|
547
622
|
const separator = icons.separator.repeat(40);
|
|
548
623
|
console.log('');
|
|
549
|
-
console.log(
|
|
624
|
+
console.log(
|
|
625
|
+
colors.warning(`${icons.warning} [Smart Mode] Detected potentially risky operation`)
|
|
626
|
+
);
|
|
550
627
|
console.log(colors.border(separator));
|
|
551
628
|
console.log('');
|
|
552
629
|
console.log(colors.textMuted(`📊 Risk Level: ${this.getRiskLevelDisplay(result.riskLevel)}`));
|
|
553
|
-
console.log(
|
|
630
|
+
console.log(
|
|
631
|
+
colors.textMuted(
|
|
632
|
+
`🔍 Detection Method: ${this.getDetectionMethodDisplay(result.detectionMethod)}`
|
|
633
|
+
)
|
|
634
|
+
);
|
|
554
635
|
console.log('');
|
|
555
636
|
|
|
556
637
|
if (result.aiAnalysis) {
|
|
@@ -564,18 +645,56 @@ export class SmartApprovalEngine {
|
|
|
564
645
|
console.log(colors.warning('Potentially risky operation detected, continue execution?'));
|
|
565
646
|
|
|
566
647
|
try {
|
|
567
|
-
const
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
name: 'confirmed',
|
|
571
|
-
message: 'Continue execution?',
|
|
572
|
-
default: false
|
|
573
|
-
}
|
|
574
|
-
]);
|
|
648
|
+
const confirmed = await confirm({
|
|
649
|
+
message: 'Continue execution?',
|
|
650
|
+
});
|
|
575
651
|
|
|
576
|
-
return confirmed;
|
|
652
|
+
return confirmed === true;
|
|
577
653
|
} catch (error) {
|
|
578
|
-
logger.error(
|
|
654
|
+
logger.error(
|
|
655
|
+
'Failed to get user confirmation',
|
|
656
|
+
error instanceof Error ? error.message : String(error)
|
|
657
|
+
);
|
|
658
|
+
return false;
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
/**
|
|
663
|
+
* Request user confirmation in SDK mode
|
|
664
|
+
*/
|
|
665
|
+
private async requestConfirmationSdk(
|
|
666
|
+
result: ApprovalResult,
|
|
667
|
+
toolName?: string,
|
|
668
|
+
toolParams?: Record<string, unknown>
|
|
669
|
+
): Promise<boolean> {
|
|
670
|
+
const requestId = `approval_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
671
|
+
|
|
672
|
+
// Output approval request through SDK adapter
|
|
673
|
+
this.sdkAdapter!.outputApprovalRequest({
|
|
674
|
+
requestId,
|
|
675
|
+
toolName: toolName || 'unknown',
|
|
676
|
+
params: toolParams || {},
|
|
677
|
+
riskLevel: result.riskLevel,
|
|
678
|
+
description: result.description,
|
|
679
|
+
aiAnalysis: result.aiAnalysis
|
|
680
|
+
});
|
|
681
|
+
|
|
682
|
+
// Wait for SDK response using session
|
|
683
|
+
try {
|
|
684
|
+
const { getSingletonSession } = await import('./session.js');
|
|
685
|
+
const session = getSingletonSession();
|
|
686
|
+
if (!session) {
|
|
687
|
+
logger.error('SDK session not available');
|
|
688
|
+
return false;
|
|
689
|
+
}
|
|
690
|
+
const approved = await session.waitForApprovalResponse(requestId);
|
|
691
|
+
this.sdkAdapter!.outputApprovalResponse(requestId, approved);
|
|
692
|
+
return approved;
|
|
693
|
+
} catch (error) {
|
|
694
|
+
logger.error(
|
|
695
|
+
'Failed to get SDK approval response',
|
|
696
|
+
error instanceof Error ? error.message : String(error)
|
|
697
|
+
);
|
|
579
698
|
return false;
|
|
580
699
|
}
|
|
581
700
|
}
|
|
@@ -588,7 +707,7 @@ export class SmartApprovalEngine {
|
|
|
588
707
|
[RiskLevel.LOW]: colors.success('LOW'),
|
|
589
708
|
[RiskLevel.MEDIUM]: colors.warning('MEDIUM'),
|
|
590
709
|
[RiskLevel.HIGH]: colors.error('HIGH'),
|
|
591
|
-
[RiskLevel.CRITICAL]: colors.error('CRITICAL')
|
|
710
|
+
[RiskLevel.CRITICAL]: colors.error('CRITICAL'),
|
|
592
711
|
};
|
|
593
712
|
return displays[riskLevel];
|
|
594
713
|
}
|
|
@@ -601,7 +720,7 @@ export class SmartApprovalEngine {
|
|
|
601
720
|
whitelist: 'Whitelist rules',
|
|
602
721
|
blacklist: 'Blacklist rules',
|
|
603
722
|
ai_review: 'AI intelligent review',
|
|
604
|
-
manual: 'Manual review'
|
|
723
|
+
manual: 'Manual review',
|
|
605
724
|
};
|
|
606
725
|
return displays[method as keyof typeof displays] || method;
|
|
607
726
|
}
|
|
@@ -624,4 +743,4 @@ export function getSmartApprovalEngine(debugMode: boolean = false): SmartApprova
|
|
|
624
743
|
smartApprovalEngineInstance = new SmartApprovalEngine(debugMode);
|
|
625
744
|
}
|
|
626
745
|
return smartApprovalEngineInstance;
|
|
627
|
-
}
|
|
746
|
+
}
|