@xagent-ai/cli 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +25 -0
- package/.gitmodules +3 -0
- package/.prettierrc.json +8 -0
- package/CONTRIBUTING.md +167 -0
- package/LICENSE +21 -0
- package/README.md +280 -0
- package/README_CN.md +280 -0
- package/dist/agents.d.ts +21 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +463 -0
- package/dist/agents.js.map +1 -0
- package/dist/ai-client.d.ts +83 -0
- package/dist/ai-client.d.ts.map +1 -0
- package/dist/ai-client.js +1280 -0
- package/dist/ai-client.js.map +1 -0
- package/dist/auth.d.ts +25 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +573 -0
- package/dist/auth.js.map +1 -0
- package/dist/cancellation.d.ts +46 -0
- package/dist/cancellation.d.ts.map +1 -0
- package/dist/cancellation.js +154 -0
- package/dist/cancellation.js.map +1 -0
- package/dist/checkpoint.d.ts +28 -0
- package/dist/checkpoint.d.ts.map +1 -0
- package/dist/checkpoint.js +186 -0
- package/dist/checkpoint.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +364 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +49 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +205 -0
- package/dist/config.js.map +1 -0
- package/dist/context-compressor.d.ts +51 -0
- package/dist/context-compressor.d.ts.map +1 -0
- package/dist/context-compressor.js +231 -0
- package/dist/context-compressor.js.map +1 -0
- package/dist/conversation.d.ts +34 -0
- package/dist/conversation.d.ts.map +1 -0
- package/dist/conversation.js +221 -0
- package/dist/conversation.js.map +1 -0
- package/dist/gui-subagent/action-parser/actionParser.d.ts +19 -0
- package/dist/gui-subagent/action-parser/actionParser.d.ts.map +1 -0
- package/dist/gui-subagent/action-parser/actionParser.js +203 -0
- package/dist/gui-subagent/action-parser/actionParser.js.map +1 -0
- package/dist/gui-subagent/action-parser/constants.d.ts +8 -0
- package/dist/gui-subagent/action-parser/constants.d.ts.map +1 -0
- package/dist/gui-subagent/action-parser/constants.js +12 -0
- package/dist/gui-subagent/action-parser/constants.js.map +1 -0
- package/dist/gui-subagent/action-parser/index.d.ts +3 -0
- package/dist/gui-subagent/action-parser/index.d.ts.map +1 -0
- package/dist/gui-subagent/action-parser/index.js +6 -0
- package/dist/gui-subagent/action-parser/index.js.map +1 -0
- package/dist/gui-subagent/action-parser/types.d.ts +24 -0
- package/dist/gui-subagent/action-parser/types.d.ts.map +1 -0
- package/dist/gui-subagent/action-parser/types.js +12 -0
- package/dist/gui-subagent/action-parser/types.js.map +1 -0
- package/dist/gui-subagent/agent/gui-agent.d.ts +126 -0
- package/dist/gui-subagent/agent/gui-agent.d.ts.map +1 -0
- package/dist/gui-subagent/agent/gui-agent.js +820 -0
- package/dist/gui-subagent/agent/gui-agent.js.map +1 -0
- package/dist/gui-subagent/agent/index.d.ts +5 -0
- package/dist/gui-subagent/agent/index.d.ts.map +1 -0
- package/dist/gui-subagent/agent/index.js +5 -0
- package/dist/gui-subagent/agent/index.js.map +1 -0
- package/dist/gui-subagent/index.d.ts +43 -0
- package/dist/gui-subagent/index.d.ts.map +1 -0
- package/dist/gui-subagent/index.js +96 -0
- package/dist/gui-subagent/index.js.map +1 -0
- package/dist/gui-subagent/operator/base-operator.d.ts +108 -0
- package/dist/gui-subagent/operator/base-operator.d.ts.map +1 -0
- package/dist/gui-subagent/operator/base-operator.js +172 -0
- package/dist/gui-subagent/operator/base-operator.js.map +1 -0
- package/dist/gui-subagent/operator/browser-operator.d.ts +36 -0
- package/dist/gui-subagent/operator/browser-operator.d.ts.map +1 -0
- package/dist/gui-subagent/operator/browser-operator.js +306 -0
- package/dist/gui-subagent/operator/browser-operator.js.map +1 -0
- package/dist/gui-subagent/operator/computer-operator.d.ts +31 -0
- package/dist/gui-subagent/operator/computer-operator.d.ts.map +1 -0
- package/dist/gui-subagent/operator/computer-operator.js +441 -0
- package/dist/gui-subagent/operator/computer-operator.js.map +1 -0
- package/dist/gui-subagent/operator/desktop-operator.d.ts +55 -0
- package/dist/gui-subagent/operator/desktop-operator.d.ts.map +1 -0
- package/dist/gui-subagent/operator/desktop-operator.js +527 -0
- package/dist/gui-subagent/operator/desktop-operator.js.map +1 -0
- package/dist/gui-subagent/operator/index.d.ts +7 -0
- package/dist/gui-subagent/operator/index.d.ts.map +1 -0
- package/dist/gui-subagent/operator/index.js +6 -0
- package/dist/gui-subagent/operator/index.js.map +1 -0
- package/dist/gui-subagent/types/actions.d.ts +108 -0
- package/dist/gui-subagent/types/actions.d.ts.map +1 -0
- package/dist/gui-subagent/types/actions.js +39 -0
- package/dist/gui-subagent/types/actions.js.map +1 -0
- package/dist/gui-subagent/types/index.d.ts +6 -0
- package/dist/gui-subagent/types/index.d.ts.map +1 -0
- package/dist/gui-subagent/types/index.js +6 -0
- package/dist/gui-subagent/types/index.js.map +1 -0
- package/dist/gui-subagent/types/operator.d.ts +95 -0
- package/dist/gui-subagent/types/operator.d.ts.map +1 -0
- package/dist/gui-subagent/types/operator.js +16 -0
- package/dist/gui-subagent/types/operator.js.map +1 -0
- package/dist/gui-subagent/utils.d.ts +19 -0
- package/dist/gui-subagent/utils.d.ts.map +1 -0
- package/dist/gui-subagent/utils.js +42 -0
- package/dist/gui-subagent/utils.js.map +1 -0
- package/dist/hook.d.ts +73 -0
- package/dist/hook.d.ts.map +1 -0
- package/dist/hook.js +156 -0
- package/dist/hook.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/input-history.d.ts +24 -0
- package/dist/input-history.d.ts.map +1 -0
- package/dist/input-history.js +94 -0
- package/dist/input-history.js.map +1 -0
- package/dist/input-processor.d.ts +31 -0
- package/dist/input-processor.d.ts.map +1 -0
- package/dist/input-processor.js +233 -0
- package/dist/input-processor.js.map +1 -0
- package/dist/keyboard-manager.d.ts +151 -0
- package/dist/keyboard-manager.d.ts.map +1 -0
- package/dist/keyboard-manager.js +396 -0
- package/dist/keyboard-manager.js.map +1 -0
- package/dist/logger.d.ts +75 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +339 -0
- package/dist/logger.js.map +1 -0
- package/dist/mcp.d.ts +57 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +483 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +25 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +250 -0
- package/dist/memory.js.map +1 -0
- package/dist/print-system-prompt.d.ts +2 -0
- package/dist/print-system-prompt.d.ts.map +1 -0
- package/dist/print-system-prompt.js +40 -0
- package/dist/print-system-prompt.js.map +1 -0
- package/dist/session-manager.d.ts +41 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +234 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/session.d.ts +77 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +1081 -0
- package/dist/session.js.map +1 -0
- package/dist/skill-invoker.d.ts +177 -0
- package/dist/skill-invoker.d.ts.map +1 -0
- package/dist/skill-invoker.js +1643 -0
- package/dist/skill-invoker.js.map +1 -0
- package/dist/skill-loader.d.ts +76 -0
- package/dist/skill-loader.d.ts.map +1 -0
- package/dist/skill-loader.js +407 -0
- package/dist/skill-loader.js.map +1 -0
- package/dist/slash-commands.d.ts +60 -0
- package/dist/slash-commands.d.ts.map +1 -0
- package/dist/slash-commands.js +1021 -0
- package/dist/slash-commands.js.map +1 -0
- package/dist/smart-approval.d.ts +137 -0
- package/dist/smart-approval.d.ts.map +1 -0
- package/dist/smart-approval.js +512 -0
- package/dist/smart-approval.js.map +1 -0
- package/dist/system-prompt-generator.d.ts +35 -0
- package/dist/system-prompt-generator.d.ts.map +1 -0
- package/dist/system-prompt-generator.js +729 -0
- package/dist/system-prompt-generator.js.map +1 -0
- package/dist/test-boundary-conditions.d.ts.map +1 -0
- package/dist/test-boundary-conditions.js.map +1 -0
- package/dist/test-cancellation-fix.d.ts.map +1 -0
- package/dist/test-cancellation-fix.js.map +1 -0
- package/dist/test-input-history.d.ts.map +1 -0
- package/dist/test-input-history.js.map +1 -0
- package/dist/test-interaction-flow.d.ts.map +1 -0
- package/dist/test-interaction-flow.js.map +1 -0
- package/dist/test-quick.d.ts.map +1 -0
- package/dist/test-quick.js.map +1 -0
- package/dist/test-user-interaction.d.ts.map +1 -0
- package/dist/test-user-interaction.js.map +1 -0
- package/dist/theme.d.ts +353 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +383 -0
- package/dist/theme.js.map +1 -0
- package/dist/tools.d.ts +373 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +2906 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +180 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +23 -0
- package/dist/types.js.map +1 -0
- package/dist/unified-session.d.ts +42 -0
- package/dist/unified-session.d.ts.map +1 -0
- package/dist/unified-session.js +271 -0
- package/dist/unified-session.js.map +1 -0
- package/dist/update.d.ts +30 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +211 -0
- package/dist/update.js.map +1 -0
- package/dist/workflow.d.ts +53 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +405 -0
- package/dist/workflow.js.map +1 -0
- package/docs/architecture/mcp-integration-guide.md +131 -0
- package/docs/architecture/overview.md +93 -0
- package/docs/architecture/tool-system-design.md +89 -0
- package/docs/cli/commands.md +189 -0
- package/docs/smart-mode.md +257 -0
- package/docs/third-party-models.md +449 -0
- package/package.json +85 -0
- package/scripts/init-skills-path.js +58 -0
- package/skills/.claude-plugin/marketplace.json +45 -0
- package/skills/README.md +94 -0
- package/skills/THIRD_PARTY_NOTICES.md +405 -0
- package/skills/skills/algorithmic-art/LICENSE.txt +202 -0
- package/skills/skills/algorithmic-art/SKILL.md +405 -0
- package/skills/skills/algorithmic-art/templates/generator_template.js +223 -0
- package/skills/skills/algorithmic-art/templates/viewer.html +599 -0
- package/skills/skills/brand-guidelines/LICENSE.txt +202 -0
- package/skills/skills/brand-guidelines/SKILL.md +73 -0
- package/skills/skills/canvas-design/LICENSE.txt +202 -0
- package/skills/skills/canvas-design/SKILL.md +130 -0
- package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- 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 +93 -0
- package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- 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 +93 -0
- 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 +93 -0
- package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- 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 +93 -0
- package/skills/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- 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 +93 -0
- 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 +93 -0
- 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 +93 -0
- 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 +93 -0
- 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 +93 -0
- package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- 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 +93 -0
- 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 +93 -0
- package/skills/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- 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 +93 -0
- 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 +93 -0
- package/skills/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- 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 +93 -0
- package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- 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 +93 -0
- package/skills/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- 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 +93 -0
- package/skills/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/skills/doc-coauthoring/SKILL.md +375 -0
- package/skills/skills/docx/LICENSE.txt +30 -0
- package/skills/skills/docx/SKILL.md +197 -0
- package/skills/skills/docx/docx-js.md +350 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/skills/docx/ooxml/scripts/pack.py +159 -0
- package/skills/skills/docx/ooxml/scripts/unpack.py +29 -0
- package/skills/skills/docx/ooxml/scripts/validate.py +69 -0
- package/skills/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/skills/docx/ooxml/scripts/validation/base.py +951 -0
- package/skills/skills/docx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/skills/docx/ooxml.md +610 -0
- package/skills/skills/docx/scripts/__init__.py +1 -0
- package/skills/skills/docx/scripts/document.py +1276 -0
- package/skills/skills/docx/scripts/templates/comments.xml +3 -0
- package/skills/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/skills/docx/scripts/templates/people.xml +3 -0
- package/skills/skills/docx/scripts/utilities.py +374 -0
- package/skills/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/skills/frontend-design/SKILL.md +42 -0
- package/skills/skills/internal-comms/LICENSE.txt +202 -0
- package/skills/skills/internal-comms/SKILL.md +32 -0
- package/skills/skills/internal-comms/examples/3p-updates.md +47 -0
- package/skills/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/skills/skills/internal-comms/examples/faq-answers.md +30 -0
- package/skills/skills/internal-comms/examples/general-comms.md +16 -0
- package/skills/skills/mcp-builder/LICENSE.txt +202 -0
- package/skills/skills/mcp-builder/SKILL.md +236 -0
- package/skills/skills/mcp-builder/reference/evaluation.md +602 -0
- package/skills/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/skills/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/skills/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/skills/skills/mcp-builder/scripts/connections.py +151 -0
- package/skills/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/skills/pdf/LICENSE.txt +30 -0
- package/skills/skills/pdf/SKILL.md +294 -0
- package/skills/skills/pdf/forms.md +205 -0
- package/skills/skills/pdf/reference.md +612 -0
- package/skills/skills/pdf/scripts/check_bounding_boxes.py +70 -0
- package/skills/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/skills/skills/pdf/scripts/check_fillable_fields.py +12 -0
- package/skills/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
- package/skills/skills/pdf/scripts/create_validation_image.py +41 -0
- package/skills/skills/pdf/scripts/extract_form_field_info.py +152 -0
- package/skills/skills/pdf/scripts/fill_fillable_fields.py +114 -0
- package/skills/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/skills/skills/pptx/LICENSE.txt +30 -0
- package/skills/skills/pptx/SKILL.md +484 -0
- package/skills/skills/pptx/html2pptx.md +625 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/skills/pptx/ooxml/scripts/pack.py +159 -0
- package/skills/skills/pptx/ooxml/scripts/unpack.py +29 -0
- package/skills/skills/pptx/ooxml/scripts/validate.py +69 -0
- package/skills/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/skills/pptx/ooxml/scripts/validation/base.py +951 -0
- package/skills/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/skills/pptx/ooxml.md +427 -0
- package/skills/skills/pptx/scripts/html2pptx.js +979 -0
- package/skills/skills/pptx/scripts/inventory.py +1020 -0
- package/skills/skills/pptx/scripts/rearrange.py +231 -0
- package/skills/skills/pptx/scripts/replace.py +385 -0
- package/skills/skills/pptx/scripts/thumbnail.py +450 -0
- package/skills/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skills/skill-creator/SKILL.md +356 -0
- package/skills/skills/skill-creator/references/output-patterns.md +82 -0
- package/skills/skills/skill-creator/references/workflows.md +28 -0
- package/skills/skills/skill-creator/scripts/init_skill.py +303 -0
- package/skills/skills/skill-creator/scripts/package_skill.py +110 -0
- package/skills/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/skills/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/skills/skills/slack-gif-creator/SKILL.md +254 -0
- package/skills/skills/slack-gif-creator/core/easing.py +234 -0
- package/skills/skills/slack-gif-creator/core/frame_composer.py +176 -0
- package/skills/skills/slack-gif-creator/core/gif_builder.py +269 -0
- package/skills/skills/slack-gif-creator/core/validators.py +136 -0
- package/skills/skills/slack-gif-creator/requirements.txt +4 -0
- package/skills/skills/theme-factory/LICENSE.txt +202 -0
- package/skills/skills/theme-factory/SKILL.md +59 -0
- package/skills/skills/theme-factory/theme-showcase.pdf +0 -0
- package/skills/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/skills/theme-factory/themes/desert-rose.md +19 -0
- package/skills/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/skills/theme-factory/themes/golden-hour.md +19 -0
- package/skills/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/skills/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/skills/web-artifacts-builder/SKILL.md +74 -0
- package/skills/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/skills/webapp-testing/LICENSE.txt +202 -0
- package/skills/skills/webapp-testing/SKILL.md +96 -0
- package/skills/skills/webapp-testing/examples/console_logging.py +35 -0
- package/skills/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/skills/webapp-testing/scripts/with_server.py +106 -0
- package/skills/skills/xlsx/LICENSE.txt +30 -0
- package/skills/skills/xlsx/SKILL.md +289 -0
- package/skills/skills/xlsx/recalc.py +178 -0
- package/skills/spec/agent-skills-spec.md +3 -0
- package/skills/template/SKILL.md +6 -0
- package/src/agents.ts +504 -0
- package/src/ai-client.ts +1456 -0
- package/src/auth.ts +648 -0
- package/src/cancellation.ts +176 -0
- package/src/checkpoint.ts +219 -0
- package/src/cli.ts +384 -0
- package/src/config.ts +248 -0
- package/src/context-compressor.ts +290 -0
- package/src/conversation.ts +288 -0
- package/src/gui-subagent/action-parser/actionParser.ts +312 -0
- package/src/gui-subagent/action-parser/constants.ts +12 -0
- package/src/gui-subagent/action-parser/index.ts +6 -0
- package/src/gui-subagent/action-parser/types.ts +31 -0
- package/src/gui-subagent/agent/gui-agent.ts +982 -0
- package/src/gui-subagent/agent/index.ts +5 -0
- package/src/gui-subagent/index.ts +139 -0
- package/src/gui-subagent/operator/base-operator.ts +246 -0
- package/src/gui-subagent/operator/computer-operator.ts +520 -0
- package/src/gui-subagent/operator/index.ts +7 -0
- package/src/gui-subagent/types/actions.ts +263 -0
- package/src/gui-subagent/types/index.ts +6 -0
- package/src/gui-subagent/types/operator.ts +106 -0
- package/src/gui-subagent/utils.ts +51 -0
- package/src/index.ts +18 -0
- package/src/input-processor.ts +282 -0
- package/src/logger.ts +438 -0
- package/src/mcp.ts +563 -0
- package/src/memory.ts +303 -0
- package/src/session-manager.ts +308 -0
- package/src/session.ts +1280 -0
- package/src/skill-invoker.ts +1888 -0
- package/src/skill-loader.ts +476 -0
- package/src/slash-commands.ts +1150 -0
- package/src/smart-approval.ts +595 -0
- package/src/system-prompt-generator.ts +786 -0
- package/src/theme.ts +455 -0
- package/src/tools.ts +3398 -0
- package/src/types.ts +198 -0
- package/src/update.ts +270 -0
- package/src/workflow.ts +508 -0
- package/tsconfig.json +22 -0
- package/vitest.config.ts +19 -0
|
@@ -0,0 +1,1021 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { ExecutionMode } from './types.js';
|
|
5
|
+
import { getToolRegistry } from './tools.js';
|
|
6
|
+
import { getAgentManager } from './agents.js';
|
|
7
|
+
import { getMemoryManager } from './memory.js';
|
|
8
|
+
import { getMCPManager } from './mcp.js';
|
|
9
|
+
import { getCheckpointManager } from './checkpoint.js';
|
|
10
|
+
import { getConfigManager } from './config.js';
|
|
11
|
+
import { getLogger } from './logger.js';
|
|
12
|
+
import { getContextCompressor } from './context-compressor.js';
|
|
13
|
+
import { getConversationManager } from './conversation.js';
|
|
14
|
+
import { icons, colors } from './theme.js';
|
|
15
|
+
const logger = getLogger();
|
|
16
|
+
export class SlashCommandHandler {
|
|
17
|
+
configManager;
|
|
18
|
+
agentManager;
|
|
19
|
+
memoryManager;
|
|
20
|
+
mcpManager;
|
|
21
|
+
checkpointManager;
|
|
22
|
+
contextCompressor;
|
|
23
|
+
conversationManager;
|
|
24
|
+
conversationHistory = [];
|
|
25
|
+
onClearCallback = null;
|
|
26
|
+
onSystemPromptUpdate = null;
|
|
27
|
+
constructor() {
|
|
28
|
+
this.configManager = getConfigManager(process.cwd());
|
|
29
|
+
this.agentManager = getAgentManager(process.cwd());
|
|
30
|
+
this.memoryManager = getMemoryManager(process.cwd());
|
|
31
|
+
this.mcpManager = getMCPManager();
|
|
32
|
+
this.checkpointManager = getCheckpointManager(process.cwd());
|
|
33
|
+
this.contextCompressor = getContextCompressor();
|
|
34
|
+
this.conversationManager = getConversationManager();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 设置ęø
é¤åƹčÆēåč°å½ę°
|
|
38
|
+
*/
|
|
39
|
+
setClearCallback(callback) {
|
|
40
|
+
this.onClearCallback = callback;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 设置系ē»ę示ę“ę°ēåč°å½ę°
|
|
44
|
+
*/
|
|
45
|
+
setSystemPromptUpdateCallback(callback) {
|
|
46
|
+
this.onSystemPromptUpdate = callback;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Set current conversation history (includes all user/assistant/tool messages)
|
|
50
|
+
*/
|
|
51
|
+
setConversationHistory(messages) {
|
|
52
|
+
this.conversationHistory = messages;
|
|
53
|
+
}
|
|
54
|
+
async handleCommand(input) {
|
|
55
|
+
if (!input.startsWith('/')) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
const [command, ...args] = input.slice(1).split(' ');
|
|
59
|
+
switch (command.toLowerCase()) {
|
|
60
|
+
case 'help':
|
|
61
|
+
await this.showHelp();
|
|
62
|
+
break;
|
|
63
|
+
case 'init':
|
|
64
|
+
await this.handleInit();
|
|
65
|
+
break;
|
|
66
|
+
case 'clear':
|
|
67
|
+
await this.handleClear();
|
|
68
|
+
break;
|
|
69
|
+
case 'exit':
|
|
70
|
+
case 'quit':
|
|
71
|
+
await this.handleExit();
|
|
72
|
+
break;
|
|
73
|
+
case 'auth':
|
|
74
|
+
await this.handleAuth();
|
|
75
|
+
break;
|
|
76
|
+
case 'mode':
|
|
77
|
+
await this.handleMode(args);
|
|
78
|
+
break;
|
|
79
|
+
case 'think':
|
|
80
|
+
await this.handleThink(args);
|
|
81
|
+
break;
|
|
82
|
+
case 'agents':
|
|
83
|
+
await this.handleAgents(args);
|
|
84
|
+
break;
|
|
85
|
+
case 'mcp':
|
|
86
|
+
await this.handleMcp(args);
|
|
87
|
+
break;
|
|
88
|
+
case 'memory':
|
|
89
|
+
await this.handleMemory(args);
|
|
90
|
+
break;
|
|
91
|
+
case 'restore':
|
|
92
|
+
await this.handleRestore(args);
|
|
93
|
+
break;
|
|
94
|
+
case 'tools':
|
|
95
|
+
await this.handleToolsVerbose(args);
|
|
96
|
+
break;
|
|
97
|
+
case 'stats':
|
|
98
|
+
await this.handleStats();
|
|
99
|
+
break;
|
|
100
|
+
case 'theme':
|
|
101
|
+
await this.handleTheme();
|
|
102
|
+
break;
|
|
103
|
+
case 'language':
|
|
104
|
+
await this.handleLanguage();
|
|
105
|
+
break;
|
|
106
|
+
case 'about':
|
|
107
|
+
await this.handleAbout();
|
|
108
|
+
break;
|
|
109
|
+
case 'compress':
|
|
110
|
+
await this.handleCompress(args);
|
|
111
|
+
break;
|
|
112
|
+
default:
|
|
113
|
+
logger.warn(`Unknown command: /${command}`, 'Type /help for available commands');
|
|
114
|
+
}
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
async showHelp() {
|
|
118
|
+
const separator = icons.separator.repeat(Math.min(60, process.stdout.columns || 80));
|
|
119
|
+
console.log('');
|
|
120
|
+
console.log(colors.primaryBright('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
121
|
+
console.log(colors.primaryBright('ā') + ' '.repeat(56) + colors.primaryBright('ā'));
|
|
122
|
+
console.log(' '.repeat(14) + colors.gradient('š XAGENT CLI Help') + ' '.repeat(31) + colors.primaryBright('ā'));
|
|
123
|
+
console.log(colors.primaryBright('ā') + ' '.repeat(56) + colors.primaryBright('ā'));
|
|
124
|
+
console.log(colors.primaryBright('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
125
|
+
console.log('');
|
|
126
|
+
// Shortcuts
|
|
127
|
+
console.log(colors.accent('Shortcuts'));
|
|
128
|
+
console.log(colors.border(separator));
|
|
129
|
+
console.log('');
|
|
130
|
+
console.log(colors.textDim(` ${colors.accent('!')} - ${colors.textMuted('Enter bash mode')}`));
|
|
131
|
+
console.log(colors.textDim(` ${colors.accent('/')} - ${colors.textMuted('Commands')}`));
|
|
132
|
+
console.log(colors.textDim(` ${colors.accent('@')} - ${colors.textMuted('File paths')}`));
|
|
133
|
+
console.log('');
|
|
134
|
+
// Basic Commands
|
|
135
|
+
this.showHelpCategory('Basic Commands', [
|
|
136
|
+
{
|
|
137
|
+
cmd: '/help [command]',
|
|
138
|
+
desc: 'Show help information',
|
|
139
|
+
detail: 'View all available commands or detailed description of specific command',
|
|
140
|
+
example: '/help\n/help mode'
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
cmd: '/clear',
|
|
144
|
+
desc: 'Clear conversation history',
|
|
145
|
+
detail: 'Clear all conversation records of current session, start new conversation',
|
|
146
|
+
example: '/clear'
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
cmd: '/exit',
|
|
150
|
+
desc: 'Exit program',
|
|
151
|
+
detail: 'Safely exit XAGENT CLI',
|
|
152
|
+
example: '/exit'
|
|
153
|
+
}
|
|
154
|
+
]);
|
|
155
|
+
// Project Management
|
|
156
|
+
this.showHelpCategory('Project Management', [
|
|
157
|
+
{
|
|
158
|
+
cmd: '/init',
|
|
159
|
+
desc: 'Initialize project context',
|
|
160
|
+
detail: 'Create XAGENT.md file in current directory, used to store project context information',
|
|
161
|
+
example: '/init'
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
cmd: '/memory [show|add|refresh]',
|
|
165
|
+
desc: 'Manage project memory',
|
|
166
|
+
detail: 'View, add or refresh project memory information',
|
|
167
|
+
example: '/memory show\n/memory add "Project uses TypeScript"'
|
|
168
|
+
}
|
|
169
|
+
]);
|
|
170
|
+
// Authentication & Configuration
|
|
171
|
+
this.showHelpCategory('Authentication & Configuration', [
|
|
172
|
+
{
|
|
173
|
+
cmd: '/auth',
|
|
174
|
+
desc: 'Configure authentication information',
|
|
175
|
+
detail: 'Change or view current authentication configuration',
|
|
176
|
+
example: '/auth'
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
cmd: '/mode [mode]',
|
|
180
|
+
desc: 'Switch approval mode',
|
|
181
|
+
detail: 'Switch security approval mode for tool execution',
|
|
182
|
+
example: '/mode\n/mode smart\n/mode yolo',
|
|
183
|
+
modes: [
|
|
184
|
+
'yolo - Execute all operations without restriction',
|
|
185
|
+
'accept_edits - Automatically accept edit operations',
|
|
186
|
+
'plan - Plan before executing',
|
|
187
|
+
'default - Safe execution, requires confirmation',
|
|
188
|
+
'smart - Smart approval (recommended)'
|
|
189
|
+
]
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
cmd: '/think [on|off|display]',
|
|
193
|
+
desc: 'Control thinking mode',
|
|
194
|
+
detail: 'Enable/disable AI thinking process display',
|
|
195
|
+
example: '/think on\n/think off\n/think display compact'
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
cmd: '/language [zh|en]',
|
|
199
|
+
desc: 'Switch language',
|
|
200
|
+
detail: 'Switch between Chinese and English interface',
|
|
201
|
+
example: '/language zh\n/language en'
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
cmd: '/theme',
|
|
205
|
+
desc: 'Switch theme',
|
|
206
|
+
detail: 'Change UI theme style',
|
|
207
|
+
example: '/theme'
|
|
208
|
+
}
|
|
209
|
+
]);
|
|
210
|
+
// Feature Extensions
|
|
211
|
+
this.showHelpCategory('Feature Extensions', [
|
|
212
|
+
{
|
|
213
|
+
cmd: '/agents [list|online|install|remove]',
|
|
214
|
+
desc: 'Manage sub-agents',
|
|
215
|
+
detail: 'View, install or remove specialized AI sub-agents',
|
|
216
|
+
example: '/agents list\n/agents online\n/agents install explore-agent'
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
cmd: '/mcp [list|add|remove|refresh]',
|
|
220
|
+
desc: 'Manage MCP servers',
|
|
221
|
+
detail: 'Manage Model Context Protocol servers',
|
|
222
|
+
example: '/mcp list\n/mcp add server-name'
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
cmd: '/tools [verbose|simple]',
|
|
226
|
+
desc: 'Manage tool display',
|
|
227
|
+
detail: 'View available tools or switch tool call display mode',
|
|
228
|
+
example: '/tools\n/tools verbose\n/tools simple'
|
|
229
|
+
}
|
|
230
|
+
]);
|
|
231
|
+
// Advanced Features
|
|
232
|
+
this.showHelpCategory('Advanced Features', [
|
|
233
|
+
{
|
|
234
|
+
cmd: '/restore',
|
|
235
|
+
desc: 'Restore from checkpoint',
|
|
236
|
+
detail: 'Restore conversation state from historical checkpoints',
|
|
237
|
+
example: '/restore'
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
cmd: '/compress [on|off|max_message|max_token|exec]',
|
|
241
|
+
desc: 'Manage context compression',
|
|
242
|
+
detail: 'Configure compression settings or execute compression manually',
|
|
243
|
+
example: '/compress\n/compress exec\n/compress on\n/compress max_message 50\n/compress max_token 1500000'
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
cmd: '/stats',
|
|
247
|
+
desc: 'Show session statistics',
|
|
248
|
+
detail: 'View statistics information of current session',
|
|
249
|
+
example: '/stats'
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
cmd: '/about',
|
|
253
|
+
desc: 'Show version information',
|
|
254
|
+
detail: 'View version and related information of XAGENT CLI',
|
|
255
|
+
example: '/about'
|
|
256
|
+
}
|
|
257
|
+
]);
|
|
258
|
+
// Keyboard Shortcuts
|
|
259
|
+
console.log('');
|
|
260
|
+
console.log(colors.border(separator));
|
|
261
|
+
console.log(colors.primaryBright('Keyboard Shortcuts'));
|
|
262
|
+
console.log(colors.border(separator));
|
|
263
|
+
console.log('');
|
|
264
|
+
console.log(colors.textMuted(' ESC - Cancel current operation'));
|
|
265
|
+
console.log(colors.textMuted(' Ctrl+C - Exit program'));
|
|
266
|
+
console.log('');
|
|
267
|
+
}
|
|
268
|
+
showHelpCategory(title, commands) {
|
|
269
|
+
const separator = icons.separator.repeat(Math.min(60, process.stdout.columns || 80));
|
|
270
|
+
console.log('');
|
|
271
|
+
console.log(colors.border(separator));
|
|
272
|
+
console.log(colors.primaryBright(title));
|
|
273
|
+
console.log(colors.border(separator));
|
|
274
|
+
console.log('');
|
|
275
|
+
commands.forEach(cmd => {
|
|
276
|
+
console.log(colors.primaryBright(` ${cmd.cmd}`));
|
|
277
|
+
console.log(colors.textDim(` ${cmd.desc}`));
|
|
278
|
+
console.log(colors.textMuted(` ${cmd.detail}`));
|
|
279
|
+
if (cmd.modes) {
|
|
280
|
+
console.log(colors.textDim(` Available modes:`));
|
|
281
|
+
cmd.modes.forEach(mode => {
|
|
282
|
+
console.log(colors.textDim(` ⢠${mode}`));
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
console.log(colors.accent(` Examples:`));
|
|
286
|
+
cmd.example.split('\n').forEach(ex => {
|
|
287
|
+
console.log(colors.codeText(` ${ex}`));
|
|
288
|
+
});
|
|
289
|
+
console.log('');
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
async handleInit() {
|
|
293
|
+
const spinner = ora('Initializing project...').start();
|
|
294
|
+
try {
|
|
295
|
+
await this.memoryManager.initializeProject(process.cwd());
|
|
296
|
+
spinner.succeed('Project initialized successfully');
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
spinner.fail(`Initialization failed: ${error.message}`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
async handleClear() {
|
|
303
|
+
// ęø
空ę¬å°åƹčÆåå²
|
|
304
|
+
this.conversationHistory = [];
|
|
305
|
+
// ęø
空 ConversationManager äøēå½å对čÆ
|
|
306
|
+
await this.conversationManager.clearCurrentConversation();
|
|
307
|
+
// č°ēØåč°éē„ InteractiveSession ęø
空对čÆ
|
|
308
|
+
if (this.onClearCallback) {
|
|
309
|
+
this.onClearCallback();
|
|
310
|
+
}
|
|
311
|
+
logger.success('Conversation history cleared', 'Start a new conversation');
|
|
312
|
+
}
|
|
313
|
+
async handleExit() {
|
|
314
|
+
logger.info('Goodbye!', 'Thank you for using xAgent CLI');
|
|
315
|
+
process.exit(0);
|
|
316
|
+
}
|
|
317
|
+
async handleAuth() {
|
|
318
|
+
logger.section('Authentication Management');
|
|
319
|
+
const { action } = await inquirer.prompt([
|
|
320
|
+
{
|
|
321
|
+
type: 'list',
|
|
322
|
+
name: 'action',
|
|
323
|
+
message: 'Select action:',
|
|
324
|
+
choices: [
|
|
325
|
+
{ name: 'Change authentication method', value: 'change' },
|
|
326
|
+
{ name: 'Show current auth config', value: 'show' },
|
|
327
|
+
{ name: 'Back', value: 'back' }
|
|
328
|
+
]
|
|
329
|
+
}
|
|
330
|
+
]);
|
|
331
|
+
if (action === 'back') {
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
if (action === 'show') {
|
|
335
|
+
const authConfig = this.configManager.getAuthConfig();
|
|
336
|
+
logger.subsection('Current Authentication Configuration');
|
|
337
|
+
console.log(JSON.stringify(authConfig, null, 2));
|
|
338
|
+
}
|
|
339
|
+
else if (action === 'change') {
|
|
340
|
+
const { selectAuthType } = await inquirer.prompt([
|
|
341
|
+
{
|
|
342
|
+
type: 'confirm',
|
|
343
|
+
name: 'selectAuthType',
|
|
344
|
+
message: 'Do you want to change authentication type?',
|
|
345
|
+
default: false
|
|
346
|
+
}
|
|
347
|
+
]);
|
|
348
|
+
if (selectAuthType) {
|
|
349
|
+
logger.warn('Please restart xAgent CLI and run /auth again', 'Authentication changes require restart');
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
async handleMode(args) {
|
|
354
|
+
const modes = Object.values(ExecutionMode);
|
|
355
|
+
const currentMode = this.configManager.getApprovalMode() || this.configManager.getExecutionMode();
|
|
356
|
+
if (args.length > 0) {
|
|
357
|
+
const newMode = args[0].toLowerCase();
|
|
358
|
+
if (modes.includes(newMode)) {
|
|
359
|
+
this.configManager.setApprovalMode(newMode);
|
|
360
|
+
await this.configManager.save('global');
|
|
361
|
+
console.log(chalk.green(`ā
Approval mode changed to: ${newMode}`));
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
console.log(chalk.red(`ā Invalid mode: ${newMode}`));
|
|
365
|
+
console.log(chalk.gray(`Available modes: ${modes.join(', ')}`));
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
console.log(chalk.cyan('\nšÆ Approval Modes:\n'));
|
|
370
|
+
console.log(` Current: ${chalk.green(currentMode)}\n`);
|
|
371
|
+
const descriptions = [
|
|
372
|
+
{ mode: 'yolo', desc: 'Execute commands without confirmation' },
|
|
373
|
+
{ mode: 'accept_edits', desc: 'Accept all edits automatically' },
|
|
374
|
+
{ mode: 'plan', desc: 'Plan before executing' },
|
|
375
|
+
{ mode: 'default', desc: 'Safe execution with confirmations' },
|
|
376
|
+
{ mode: 'smart', desc: 'Smart approval with intelligent security checks' }
|
|
377
|
+
];
|
|
378
|
+
descriptions.forEach(({ mode, desc }) => {
|
|
379
|
+
const current = mode === currentMode ? chalk.green(' [current]') : '';
|
|
380
|
+
console.log(` ${chalk.yellow(mode)}${current}`);
|
|
381
|
+
console.log(` ${chalk.gray(desc)}`);
|
|
382
|
+
});
|
|
383
|
+
console.log();
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
async handleThink(args) {
|
|
387
|
+
const thinkingConfig = this.configManager.getThinkingConfig();
|
|
388
|
+
if (args.length > 0) {
|
|
389
|
+
const action = args[0].toLowerCase();
|
|
390
|
+
if (action === 'on' || action === 'true' || action === '1') {
|
|
391
|
+
thinkingConfig.enabled = true;
|
|
392
|
+
this.configManager.setThinkingConfig(thinkingConfig);
|
|
393
|
+
await this.configManager.save('global');
|
|
394
|
+
console.log(chalk.green('ā
Thinking mode enabled'));
|
|
395
|
+
}
|
|
396
|
+
else if (action === 'off' || action === 'false' || action === '0') {
|
|
397
|
+
thinkingConfig.enabled = false;
|
|
398
|
+
this.configManager.setThinkingConfig(thinkingConfig);
|
|
399
|
+
await this.configManager.save('global');
|
|
400
|
+
console.log(chalk.green('ā
Thinking mode disabled'));
|
|
401
|
+
}
|
|
402
|
+
else if (action === 'display' && args[1]) {
|
|
403
|
+
const displayMode = args[1].toLowerCase();
|
|
404
|
+
const validModes = ['full', 'compact', 'indicator'];
|
|
405
|
+
if (validModes.includes(displayMode)) {
|
|
406
|
+
thinkingConfig.displayMode = displayMode;
|
|
407
|
+
thinkingConfig.enabled = true; // Auto-enable when setting display mode
|
|
408
|
+
this.configManager.setThinkingConfig(thinkingConfig);
|
|
409
|
+
await this.configManager.save('global');
|
|
410
|
+
console.log(chalk.green(`ā
Thinking display mode set to: ${displayMode}`));
|
|
411
|
+
}
|
|
412
|
+
else {
|
|
413
|
+
console.log(chalk.red(`ā Invalid display mode: ${displayMode}`));
|
|
414
|
+
console.log(chalk.gray(`Valid modes: ${validModes.join(', ')}`));
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
console.log(chalk.red(`ā Invalid action: ${action}`));
|
|
419
|
+
console.log(chalk.gray('Usage: /think [on|off|display <mode>]'));
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
console.log(chalk.cyan('\nš§ Thinking Mode:\n'));
|
|
424
|
+
console.log(` Status: ${thinkingConfig.enabled ? chalk.green('Enabled') : chalk.red('Disabled')}`);
|
|
425
|
+
console.log(` Mode: ${chalk.yellow(thinkingConfig.mode)}`);
|
|
426
|
+
console.log(` Display: ${chalk.yellow(thinkingConfig.displayMode)}\n`);
|
|
427
|
+
console.log(chalk.gray('Usage:'));
|
|
428
|
+
console.log(chalk.gray(' /think on - Enable thinking mode'));
|
|
429
|
+
console.log(chalk.gray(' /think off - Disable thinking mode'));
|
|
430
|
+
console.log(chalk.gray(' /think display full - Show full thinking process'));
|
|
431
|
+
console.log(chalk.gray(' /think display compact - Show compact thinking (500 chars)'));
|
|
432
|
+
console.log(chalk.gray(' /think display indicator - Show only indicator'));
|
|
433
|
+
console.log();
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
async handleAgents(args) {
|
|
437
|
+
const action = args[0] || 'list';
|
|
438
|
+
switch (action) {
|
|
439
|
+
case 'list':
|
|
440
|
+
await this.listAgents();
|
|
441
|
+
break;
|
|
442
|
+
case 'online':
|
|
443
|
+
logger.warn('Online marketplace not implemented yet', 'Check back later for updates');
|
|
444
|
+
break;
|
|
445
|
+
case 'install':
|
|
446
|
+
logger.warn('Agent installation wizard not implemented yet', 'Use /agents install in interactive mode');
|
|
447
|
+
break;
|
|
448
|
+
case 'remove':
|
|
449
|
+
logger.warn('Agent removal not implemented yet', 'Use /agents remove in interactive mode');
|
|
450
|
+
break;
|
|
451
|
+
default:
|
|
452
|
+
logger.warn(`Unknown agents action: ${action}`, 'Use /agents list to see available actions');
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
async listAgents() {
|
|
456
|
+
const agents = this.agentManager.getAllAgents();
|
|
457
|
+
if (agents.length === 0) {
|
|
458
|
+
logger.warn('No agents configured', 'Use /agents install to add agents');
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
logger.section('Available Agents');
|
|
462
|
+
agents.forEach((agent) => {
|
|
463
|
+
const color = agent.color || '#FFFFFF';
|
|
464
|
+
logger.info(` ${chalk.hex(color)(agent.name || agent.agentType)}`);
|
|
465
|
+
logger.info(` Type: ${agent.agentType}`);
|
|
466
|
+
logger.info(` ${agent.whenToUse}`);
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
async handleMcp(args) {
|
|
470
|
+
const action = args[0] || 'list';
|
|
471
|
+
switch (action) {
|
|
472
|
+
case 'list':
|
|
473
|
+
await this.listMcpServers();
|
|
474
|
+
break;
|
|
475
|
+
case 'add':
|
|
476
|
+
if (args[1]) {
|
|
477
|
+
// Non-interactive mode: use command line arguments
|
|
478
|
+
await this.addMcpServerInteractive(args[1]);
|
|
479
|
+
}
|
|
480
|
+
else {
|
|
481
|
+
// Interactive mode
|
|
482
|
+
await this.addMcpServerInteractive();
|
|
483
|
+
}
|
|
484
|
+
break;
|
|
485
|
+
case 'remove':
|
|
486
|
+
if (args[1]) {
|
|
487
|
+
// Non-interactive mode
|
|
488
|
+
await this.removeMcpServer(args[1]);
|
|
489
|
+
}
|
|
490
|
+
else {
|
|
491
|
+
// Interactive mode
|
|
492
|
+
await this.removeMcpServerInteractive();
|
|
493
|
+
}
|
|
494
|
+
break;
|
|
495
|
+
case 'refresh':
|
|
496
|
+
await this.refreshMcpServers();
|
|
497
|
+
break;
|
|
498
|
+
default:
|
|
499
|
+
logger.warn(`Unknown MCP action: ${action}`, 'Use /mcp list to see available actions');
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
async listMcpServers() {
|
|
503
|
+
const serverConfigs = this.mcpManager.getAllServerConfigs();
|
|
504
|
+
if (serverConfigs.length === 0) {
|
|
505
|
+
logger.section('MCP Servers');
|
|
506
|
+
logger.warn('No MCP servers configured');
|
|
507
|
+
logger.info('Use /mcp add to add a new MCP server');
|
|
508
|
+
return;
|
|
509
|
+
}
|
|
510
|
+
logger.section('MCP Servers');
|
|
511
|
+
serverConfigs.forEach(({ name: serverName, config: serverConfig }) => {
|
|
512
|
+
const server = this.mcpManager.getServer(serverName);
|
|
513
|
+
const isConnected = server?.isServerConnected() || false;
|
|
514
|
+
const status = isConnected ? chalk.green('ā Connected') : chalk.red('ā Disconnected');
|
|
515
|
+
const tools = server?.getToolNames() || [];
|
|
516
|
+
const transport = serverConfig?.transport || serverConfig?.type || 'unknown';
|
|
517
|
+
const command = serverConfig?.command ? `${serverConfig.command} ${(serverConfig.args || []).join(' ')}` : serverConfig?.url || 'N/A';
|
|
518
|
+
console.log('');
|
|
519
|
+
console.log(` ${chalk.cyan(serverName)} ${status}`);
|
|
520
|
+
console.log(` Transport: ${transport}`);
|
|
521
|
+
console.log(` Command: ${command}`);
|
|
522
|
+
console.log(` Tools: ${isConnected ? tools.length : 'N/A'} (${isConnected ? tools.join(', ') : 'wait for connection'})`);
|
|
523
|
+
});
|
|
524
|
+
console.log('');
|
|
525
|
+
logger.info(`Total: ${serverConfigs.length} server(s)`);
|
|
526
|
+
}
|
|
527
|
+
async addMcpServerInteractive(serverName) {
|
|
528
|
+
const { name, command, args: serverArgs, transport, url, authToken, headers } = await inquirer.prompt([
|
|
529
|
+
{
|
|
530
|
+
type: 'input',
|
|
531
|
+
name: 'name',
|
|
532
|
+
message: 'Enter MCP server name:',
|
|
533
|
+
default: serverName,
|
|
534
|
+
validate: (input) => {
|
|
535
|
+
if (!input.trim()) {
|
|
536
|
+
return 'Server name is required';
|
|
537
|
+
}
|
|
538
|
+
const servers = this.mcpManager.getAllServers();
|
|
539
|
+
if (servers.some((s) => s.config?.name === input)) {
|
|
540
|
+
return 'Server with this name already exists';
|
|
541
|
+
}
|
|
542
|
+
return true;
|
|
543
|
+
}
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
type: 'list',
|
|
547
|
+
name: 'transport',
|
|
548
|
+
message: 'Select transport type:',
|
|
549
|
+
choices: [
|
|
550
|
+
{ name: 'Stdio (stdin/stdout)', value: 'stdio' },
|
|
551
|
+
{ name: 'HTTP/SSE', value: 'sse' },
|
|
552
|
+
{ name: 'HTTP (POST)', value: 'http' }
|
|
553
|
+
],
|
|
554
|
+
default: 'stdio'
|
|
555
|
+
},
|
|
556
|
+
{
|
|
557
|
+
type: 'input',
|
|
558
|
+
name: 'command',
|
|
559
|
+
message: 'Enter command (for stdio transport):',
|
|
560
|
+
when: (answers) => answers.transport === 'stdio',
|
|
561
|
+
validate: (input) => input.trim() ? true : 'Command is required'
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
type: 'input',
|
|
565
|
+
name: 'args',
|
|
566
|
+
message: 'Enter arguments (comma-separated, for stdio transport):',
|
|
567
|
+
when: (answers) => answers.transport === 'stdio',
|
|
568
|
+
filter: (input) => input ? input.split(',').map((a) => a.trim()) : []
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
type: 'input',
|
|
572
|
+
name: 'url',
|
|
573
|
+
message: 'Enter server URL (for HTTP/SSE/HTTP transport):',
|
|
574
|
+
when: (answers) => answers.transport === 'sse' || answers.transport === 'http',
|
|
575
|
+
validate: (input) => input.trim() ? true : 'URL is required'
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
type: 'password',
|
|
579
|
+
name: 'authToken',
|
|
580
|
+
message: 'Enter authentication token (optional):',
|
|
581
|
+
when: (answers) => answers.transport === 'sse' || answers.transport === 'http'
|
|
582
|
+
},
|
|
583
|
+
{
|
|
584
|
+
type: 'input',
|
|
585
|
+
name: 'headers',
|
|
586
|
+
message: 'Enter custom headers as JSON (optional, e.g., {"Authorization": "Bearer token"}):',
|
|
587
|
+
when: (answers) => answers.transport === 'sse' || answers.transport === 'http',
|
|
588
|
+
filter: (input) => {
|
|
589
|
+
if (!input.trim())
|
|
590
|
+
return undefined;
|
|
591
|
+
try {
|
|
592
|
+
return JSON.parse(input);
|
|
593
|
+
}
|
|
594
|
+
catch {
|
|
595
|
+
return undefined;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
]);
|
|
600
|
+
const config = {
|
|
601
|
+
transport: transport
|
|
602
|
+
};
|
|
603
|
+
if (transport === 'stdio') {
|
|
604
|
+
config.command = command;
|
|
605
|
+
if (serverArgs && serverArgs.length > 0) {
|
|
606
|
+
config.args = serverArgs;
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
else {
|
|
610
|
+
config.url = url;
|
|
611
|
+
if (authToken) {
|
|
612
|
+
config.authToken = authToken;
|
|
613
|
+
}
|
|
614
|
+
if (headers) {
|
|
615
|
+
config.headers = headers;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
try {
|
|
619
|
+
// Save to config file
|
|
620
|
+
this.configManager.addMcpServer(name, config);
|
|
621
|
+
await this.configManager.save('global');
|
|
622
|
+
// Register to MCP Manager
|
|
623
|
+
this.mcpManager.registerServer(name, config);
|
|
624
|
+
// Connect to server (with error handling)
|
|
625
|
+
let connected = false;
|
|
626
|
+
try {
|
|
627
|
+
await this.mcpManager.connectServer(name);
|
|
628
|
+
connected = true;
|
|
629
|
+
}
|
|
630
|
+
catch (error) {
|
|
631
|
+
// Connection failed - cleanup
|
|
632
|
+
this.mcpManager.disconnectServer(name);
|
|
633
|
+
this.configManager.removeMcpServer(name);
|
|
634
|
+
await this.configManager.save('global');
|
|
635
|
+
throw new Error(`Connection failed: ${error.message}`);
|
|
636
|
+
}
|
|
637
|
+
// Register MCP tools with simple names
|
|
638
|
+
const allMcpTools = this.mcpManager.getAllTools();
|
|
639
|
+
const toolRegistry = getToolRegistry();
|
|
640
|
+
toolRegistry.registerMCPTools(allMcpTools);
|
|
641
|
+
// Update system prompt to include new MCP tools
|
|
642
|
+
if (this.onSystemPromptUpdate) {
|
|
643
|
+
await this.onSystemPromptUpdate();
|
|
644
|
+
}
|
|
645
|
+
console.log(chalk.green(`ā
MCP server '${name}' added and connected successfully`));
|
|
646
|
+
}
|
|
647
|
+
catch (error) {
|
|
648
|
+
console.log(chalk.red(`ā Failed to add MCP server: ${error.message}`));
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
async removeMcpServerInteractive() {
|
|
652
|
+
const servers = this.mcpManager.getAllServers();
|
|
653
|
+
if (servers.length === 0) {
|
|
654
|
+
logger.warn('No MCP servers configured', 'Use /mcp add to add servers');
|
|
655
|
+
return;
|
|
656
|
+
}
|
|
657
|
+
const serverNames = servers.map((s) => {
|
|
658
|
+
const tools = s.getToolNames();
|
|
659
|
+
const status = s.isServerConnected() ? 'ā' : 'ā';
|
|
660
|
+
return {
|
|
661
|
+
name: `${status} ${s.config?.name || 'unknown'} (${tools.length} tools)`,
|
|
662
|
+
value: s.config?.name
|
|
663
|
+
};
|
|
664
|
+
});
|
|
665
|
+
const { serverName } = await inquirer.prompt([
|
|
666
|
+
{
|
|
667
|
+
type: 'list',
|
|
668
|
+
name: 'serverName',
|
|
669
|
+
message: 'Select MCP server to remove:',
|
|
670
|
+
choices: serverNames
|
|
671
|
+
}
|
|
672
|
+
]);
|
|
673
|
+
await this.removeMcpServer(serverName);
|
|
674
|
+
}
|
|
675
|
+
async removeMcpServer(serverName) {
|
|
676
|
+
try {
|
|
677
|
+
// Get server info before disconnecting to notify LLM
|
|
678
|
+
const server = this.mcpManager.getServer(serverName);
|
|
679
|
+
const removedTools = server ? server.getToolNames() : [];
|
|
680
|
+
const removedToolNames = removedTools.map((t) => `${serverName}__${t}`).join(', ');
|
|
681
|
+
// Disconnect
|
|
682
|
+
this.mcpManager.disconnectServer(serverName);
|
|
683
|
+
// Unregister MCP tools for this server
|
|
684
|
+
const toolRegistry = getToolRegistry();
|
|
685
|
+
toolRegistry.unregisterMCPTools(serverName);
|
|
686
|
+
// Remove from config
|
|
687
|
+
this.configManager.removeMcpServer(serverName);
|
|
688
|
+
await this.configManager.save('global');
|
|
689
|
+
// Update system prompt to reflect removed MCP tools
|
|
690
|
+
if (this.onSystemPromptUpdate) {
|
|
691
|
+
await this.onSystemPromptUpdate();
|
|
692
|
+
}
|
|
693
|
+
console.log(chalk.green(`ā
MCP server '${serverName}' removed successfully`));
|
|
694
|
+
}
|
|
695
|
+
catch (error) {
|
|
696
|
+
console.log(chalk.red(`ā Failed to remove MCP server: ${error.message}`));
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
async refreshMcpServers() {
|
|
700
|
+
const spinner = ora({ text: 'Refreshing MCP servers...', interval: 200 }).start();
|
|
701
|
+
try {
|
|
702
|
+
// Disconnect all existing connections
|
|
703
|
+
this.mcpManager.disconnectAllServers();
|
|
704
|
+
// Reconnect all servers
|
|
705
|
+
await this.mcpManager.connectAllServers();
|
|
706
|
+
spinner.succeed('MCP servers refreshed successfully');
|
|
707
|
+
// Show current server status
|
|
708
|
+
await this.listMcpServers();
|
|
709
|
+
}
|
|
710
|
+
catch (error) {
|
|
711
|
+
spinner.fail(`Failed to refresh MCP servers: ${error.message}`);
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
async handleMemory(args) {
|
|
715
|
+
const action = args[0] || 'show';
|
|
716
|
+
switch (action) {
|
|
717
|
+
case 'show':
|
|
718
|
+
await this.showMemory();
|
|
719
|
+
break;
|
|
720
|
+
case 'add':
|
|
721
|
+
logger.warn('Memory addition not implemented yet', 'Use /memory add in interactive mode');
|
|
722
|
+
break;
|
|
723
|
+
case 'refresh':
|
|
724
|
+
logger.warn('Memory refresh not implemented yet', 'Check back later for updates');
|
|
725
|
+
break;
|
|
726
|
+
default:
|
|
727
|
+
logger.warn(`Unknown memory action: ${action}`, 'Use /memory show to see available actions');
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
async showMemory() {
|
|
731
|
+
const memoryFiles = this.memoryManager.getMemoryFiles();
|
|
732
|
+
if (memoryFiles.length === 0) {
|
|
733
|
+
logger.warn('No memory files loaded', 'Use /init to initialize project context');
|
|
734
|
+
return;
|
|
735
|
+
}
|
|
736
|
+
logger.section('Memory Files');
|
|
737
|
+
memoryFiles.forEach((file) => {
|
|
738
|
+
const level = file.level === 'global' ? chalk.blue('[global]') :
|
|
739
|
+
file.level === 'project' ? chalk.green('[project]') :
|
|
740
|
+
chalk.yellow('[subdirectory]');
|
|
741
|
+
logger.info(` ${level} ${file.path}`);
|
|
742
|
+
});
|
|
743
|
+
}
|
|
744
|
+
async addMemory() {
|
|
745
|
+
const { entry } = await inquirer.prompt([
|
|
746
|
+
{
|
|
747
|
+
type: 'editor',
|
|
748
|
+
name: 'entry',
|
|
749
|
+
message: 'Enter memory entry (opens editor):'
|
|
750
|
+
}
|
|
751
|
+
]);
|
|
752
|
+
if (entry && entry.trim()) {
|
|
753
|
+
await this.memoryManager.addMemoryEntry(entry.trim());
|
|
754
|
+
console.log(chalk.green('ā
Memory entry added'));
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
async refreshMemory() {
|
|
758
|
+
const spinner = ora({ text: 'Refreshing memory...', interval: 200 }).start();
|
|
759
|
+
try {
|
|
760
|
+
await this.memoryManager.loadMemory();
|
|
761
|
+
spinner.succeed('Memory refreshed successfully');
|
|
762
|
+
}
|
|
763
|
+
catch (error) {
|
|
764
|
+
spinner.fail(`Failed to refresh memory: ${error.message}`);
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
async handleRestore(args) {
|
|
768
|
+
if (!this.checkpointManager.isEnabled()) {
|
|
769
|
+
logger.warn('Checkpointing is not enabled', 'Enable it with /mode or in settings');
|
|
770
|
+
return;
|
|
771
|
+
}
|
|
772
|
+
const checkpoints = this.checkpointManager.listCheckpoints();
|
|
773
|
+
if (checkpoints.length === 0) {
|
|
774
|
+
logger.warn('No checkpoints available', 'Create checkpoints during your session');
|
|
775
|
+
return;
|
|
776
|
+
}
|
|
777
|
+
if (args.length > 0) {
|
|
778
|
+
const checkpointId = args[0];
|
|
779
|
+
try {
|
|
780
|
+
await this.checkpointManager.restoreCheckpoint(checkpointId);
|
|
781
|
+
logger.success(`Checkpoint ${checkpointId} restored successfully!`);
|
|
782
|
+
}
|
|
783
|
+
catch (error) {
|
|
784
|
+
logger.error(error.message, 'Check if checkpoint ID is valid');
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
else {
|
|
788
|
+
const choices = checkpoints.map((cp) => ({
|
|
789
|
+
name: `${new Date(cp.timestamp).toLocaleString()} - ${cp.description}`,
|
|
790
|
+
value: cp.id
|
|
791
|
+
}));
|
|
792
|
+
const { checkpointId } = await inquirer.prompt([
|
|
793
|
+
{
|
|
794
|
+
type: 'list',
|
|
795
|
+
name: 'checkpointId',
|
|
796
|
+
message: 'Select checkpoint to restore:',
|
|
797
|
+
choices
|
|
798
|
+
}
|
|
799
|
+
]);
|
|
800
|
+
try {
|
|
801
|
+
await this.checkpointManager.restoreCheckpoint(checkpointId);
|
|
802
|
+
logger.success(`Checkpoint ${checkpointId} restored successfully!`);
|
|
803
|
+
}
|
|
804
|
+
catch (error) {
|
|
805
|
+
logger.error(error.message, 'Check if checkpoint ID is valid');
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
async handleTools() {
|
|
810
|
+
const toolRegistry = getToolRegistry();
|
|
811
|
+
const tools = toolRegistry.getAll();
|
|
812
|
+
logger.section('Available Tools');
|
|
813
|
+
tools.forEach(tool => {
|
|
814
|
+
logger.info(` ${tool.name}`);
|
|
815
|
+
logger.info(` ${tool.description}`);
|
|
816
|
+
});
|
|
817
|
+
console.log('');
|
|
818
|
+
const currentSetting = this.configManager.get('showToolDetails') ? 'verbose' : 'simple';
|
|
819
|
+
logger.info(`Current tool display mode: ${currentSetting}`);
|
|
820
|
+
logger.info('Use /tools verbose to switch to verbose mode');
|
|
821
|
+
logger.info('Use /tools simple to switch to simple mode');
|
|
822
|
+
}
|
|
823
|
+
async handleToolsVerbose(args) {
|
|
824
|
+
if (args.length === 0) {
|
|
825
|
+
const currentSetting = this.configManager.get('showToolDetails') ? 'verbose' : 'simple';
|
|
826
|
+
logger.info(`Current tool display mode: ${currentSetting}`);
|
|
827
|
+
return;
|
|
828
|
+
}
|
|
829
|
+
const mode = args[0].toLowerCase();
|
|
830
|
+
if (mode === 'verbose' || mode === 'detail' || mode === 'true' || mode === 'on') {
|
|
831
|
+
this.configManager.set('showToolDetails', true);
|
|
832
|
+
await this.configManager.save('global');
|
|
833
|
+
logger.success('Tool display mode switched to verbose mode', 'Will show complete tool call information');
|
|
834
|
+
}
|
|
835
|
+
else if (mode === 'simple' || mode === 'concise' || mode === 'false' || mode === 'off') {
|
|
836
|
+
this.configManager.set('showToolDetails', false);
|
|
837
|
+
await this.configManager.save('global');
|
|
838
|
+
logger.success('Tool display mode switched to simple mode', 'Only show tool execution status');
|
|
839
|
+
}
|
|
840
|
+
else {
|
|
841
|
+
logger.warn('Invalid mode', 'Use verbose or simple');
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
async handleStats() {
|
|
845
|
+
logger.section('Session Statistics');
|
|
846
|
+
logger.info(` Execution Mode: ${this.configManager.getExecutionMode()}`);
|
|
847
|
+
logger.info(` Language: ${this.configManager.getLanguage()}`);
|
|
848
|
+
logger.info(` Checkpointing: ${this.checkpointManager.isEnabled() ? 'Enabled' : 'Disabled'}`);
|
|
849
|
+
logger.info(` MCP Servers: ${this.mcpManager.getAllServers().length}`);
|
|
850
|
+
logger.info(` Agents: ${this.agentManager.getAllAgents().length}`);
|
|
851
|
+
}
|
|
852
|
+
async handleTheme() {
|
|
853
|
+
logger.warn('Theme switching not implemented yet', 'Check back later for updates');
|
|
854
|
+
}
|
|
855
|
+
async handleLanguage() {
|
|
856
|
+
const { language } = await inquirer.prompt([
|
|
857
|
+
{
|
|
858
|
+
type: 'list',
|
|
859
|
+
name: 'language',
|
|
860
|
+
message: 'Select language:',
|
|
861
|
+
choices: [
|
|
862
|
+
{ name: 'Chinese', value: 'zh' },
|
|
863
|
+
{ name: 'English', value: 'en' }
|
|
864
|
+
]
|
|
865
|
+
}
|
|
866
|
+
]);
|
|
867
|
+
this.configManager.setLanguage(language);
|
|
868
|
+
logger.success(`Language changed to: ${language === 'zh' ? 'Chinese' : 'English'}`, 'Restart CLI to apply changes');
|
|
869
|
+
}
|
|
870
|
+
async handleAbout() {
|
|
871
|
+
logger.section('xAgent CLI');
|
|
872
|
+
logger.info('Version: 1.0.0');
|
|
873
|
+
logger.info('A powerful AI-powered command-line assistant');
|
|
874
|
+
logger.blank();
|
|
875
|
+
logger.link('Documentation', 'https://platform.xagent.cn/');
|
|
876
|
+
logger.link('GitHub', 'https://github.com/xagent-ai/xagent-cli');
|
|
877
|
+
}
|
|
878
|
+
async handleCompress(args) {
|
|
879
|
+
const config = this.configManager.getContextCompressionConfig();
|
|
880
|
+
// If there are arguments, process config or execute
|
|
881
|
+
if (args.length > 0) {
|
|
882
|
+
const action = args[0].toLowerCase();
|
|
883
|
+
if (action === 'exec' || action === 'run' || action === 'now') {
|
|
884
|
+
await this.executeCompression(config);
|
|
885
|
+
return;
|
|
886
|
+
}
|
|
887
|
+
await this.setCompressConfig(args);
|
|
888
|
+
return;
|
|
889
|
+
}
|
|
890
|
+
// Display current configuration
|
|
891
|
+
console.log(chalk.cyan('\nš¦ Context Compression:\n'));
|
|
892
|
+
console.log(` Status: ${config.enabled ? chalk.green('Enabled') : chalk.red('Disabled')}`);
|
|
893
|
+
console.log(` Max Messages: ${chalk.yellow(config.maxMessages.toString())}`);
|
|
894
|
+
console.log(` Max Tokens: ${chalk.yellow(config.maxContextSize.toString())}`);
|
|
895
|
+
console.log('');
|
|
896
|
+
console.log(chalk.gray('Usage:'));
|
|
897
|
+
console.log(chalk.gray(' /compress - Show current configuration'));
|
|
898
|
+
console.log(chalk.gray(' /compress exec - Execute compression now'));
|
|
899
|
+
console.log(chalk.gray(' /compress on|off - Enable/disable compression'));
|
|
900
|
+
console.log(chalk.gray(' /compress max_message <n> - Set max messages before compression'));
|
|
901
|
+
console.log(chalk.gray(' /compress max_token <n> - Set max tokens before compression'));
|
|
902
|
+
console.log('');
|
|
903
|
+
}
|
|
904
|
+
async executeCompression(config) {
|
|
905
|
+
const messages = this.conversationHistory;
|
|
906
|
+
if (!messages || messages.length === 0) {
|
|
907
|
+
console.log(chalk.yellow('ā ļø No conversation to compress'));
|
|
908
|
+
return;
|
|
909
|
+
}
|
|
910
|
+
const { needsCompression, reason } = this.contextCompressor.needsCompression(messages, config);
|
|
911
|
+
if (!needsCompression) {
|
|
912
|
+
console.log(chalk.green('ā
No compression needed'));
|
|
913
|
+
console.log(chalk.gray(` ${reason}`));
|
|
914
|
+
return;
|
|
915
|
+
}
|
|
916
|
+
console.log(chalk.cyan('\nš Executing context compression...\n'));
|
|
917
|
+
const spinner = ora({
|
|
918
|
+
text: 'Compressing context...',
|
|
919
|
+
spinner: 'dots',
|
|
920
|
+
color: 'cyan'
|
|
921
|
+
}).start();
|
|
922
|
+
try {
|
|
923
|
+
const result = await this.contextCompressor.compressContext(messages, 'You are a helpful AI assistant.', config);
|
|
924
|
+
spinner.succeed(chalk.green('ā
Compression complete'));
|
|
925
|
+
console.log('');
|
|
926
|
+
console.log(` ${chalk.cyan('Original:')} ${chalk.yellow(result.originalMessageCount.toString())} messages (${result.originalSize} chars)`);
|
|
927
|
+
console.log(` ${chalk.cyan('Compressed:')} ${chalk.yellow(result.compressedMessageCount.toString())} messages (${result.compressedSize} chars)`);
|
|
928
|
+
console.log(` ${chalk.cyan('Reduction:')} ${chalk.green(Math.round((1 - result.compressedSize / result.originalSize) * 100) + '%')}`);
|
|
929
|
+
console.log(` ${chalk.cyan('Method:')} ${chalk.yellow(result.compressionMethod)}`);
|
|
930
|
+
console.log('');
|
|
931
|
+
console.log(chalk.gray('Use /clear to start a new conversation, or continue chatting to see the compressed summary.'));
|
|
932
|
+
console.log('');
|
|
933
|
+
}
|
|
934
|
+
catch (error) {
|
|
935
|
+
spinner.fail(chalk.red('Compression failed'));
|
|
936
|
+
console.log(chalk.red(` ${error.message}`));
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
async setCompressConfig(args) {
|
|
940
|
+
const config = this.configManager.getContextCompressionConfig();
|
|
941
|
+
const action = args[0].toLowerCase();
|
|
942
|
+
switch (action) {
|
|
943
|
+
case 'on':
|
|
944
|
+
config.enabled = true;
|
|
945
|
+
this.configManager.setContextCompressionConfig(config);
|
|
946
|
+
await this.configManager.save('global');
|
|
947
|
+
console.log(chalk.green('ā
Context compression enabled'));
|
|
948
|
+
break;
|
|
949
|
+
case 'off':
|
|
950
|
+
config.enabled = false;
|
|
951
|
+
this.configManager.setContextCompressionConfig(config);
|
|
952
|
+
await this.configManager.save('global');
|
|
953
|
+
console.log(chalk.green('ā
Context compression disabled'));
|
|
954
|
+
break;
|
|
955
|
+
case 'max_message':
|
|
956
|
+
if (args[1]) {
|
|
957
|
+
const maxMessages = parseInt(args[1], 10);
|
|
958
|
+
if (isNaN(maxMessages) || maxMessages < 1) {
|
|
959
|
+
console.log(chalk.red('ā Invalid value for max_message. Must be a positive number.'));
|
|
960
|
+
return;
|
|
961
|
+
}
|
|
962
|
+
config.maxMessages = maxMessages;
|
|
963
|
+
this.configManager.setContextCompressionConfig(config);
|
|
964
|
+
await this.configManager.save('global');
|
|
965
|
+
console.log(chalk.green(`ā
Max messages set to: ${maxMessages}`));
|
|
966
|
+
}
|
|
967
|
+
else {
|
|
968
|
+
console.log(chalk.gray('Usage: /compress max_message <number>'));
|
|
969
|
+
}
|
|
970
|
+
break;
|
|
971
|
+
case 'max_token':
|
|
972
|
+
if (args[1]) {
|
|
973
|
+
const maxContextSize = parseInt(args[1], 10);
|
|
974
|
+
if (isNaN(maxContextSize) || maxContextSize < 1000) {
|
|
975
|
+
console.log(chalk.red('ā Invalid value for max_token. Must be at least 1000.'));
|
|
976
|
+
return;
|
|
977
|
+
}
|
|
978
|
+
config.maxContextSize = maxContextSize;
|
|
979
|
+
this.configManager.setContextCompressionConfig(config);
|
|
980
|
+
await this.configManager.save('global');
|
|
981
|
+
console.log(chalk.green(`ā
Max tokens set to: ${maxContextSize}`));
|
|
982
|
+
}
|
|
983
|
+
else {
|
|
984
|
+
console.log(chalk.gray('Usage: /compress max_token <number>'));
|
|
985
|
+
}
|
|
986
|
+
break;
|
|
987
|
+
default:
|
|
988
|
+
console.log(chalk.red(`ā Unknown action: ${action}`));
|
|
989
|
+
console.log(chalk.gray('Available actions: on, off, max_message, max_token, exec'));
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
export function parseInput(input) {
|
|
994
|
+
const inputs = [];
|
|
995
|
+
let remaining = input;
|
|
996
|
+
const fileRefRegex = /@([^\s]+)/g;
|
|
997
|
+
let match;
|
|
998
|
+
while ((match = fileRefRegex.exec(remaining)) !== null) {
|
|
999
|
+
const filePath = match[1];
|
|
1000
|
+
const beforeMatch = remaining.substring(0, match.index);
|
|
1001
|
+
const afterMatch = remaining.substring(match.index + match[0].length);
|
|
1002
|
+
if (beforeMatch.trim()) {
|
|
1003
|
+
inputs.push({ type: 'text', content: beforeMatch.trim() });
|
|
1004
|
+
}
|
|
1005
|
+
inputs.push({ type: 'file', content: filePath });
|
|
1006
|
+
remaining = afterMatch;
|
|
1007
|
+
}
|
|
1008
|
+
if (remaining.trim()) {
|
|
1009
|
+
if (remaining.startsWith('!')) {
|
|
1010
|
+
inputs.push({ type: 'command', content: remaining.slice(1).trim() });
|
|
1011
|
+
}
|
|
1012
|
+
else {
|
|
1013
|
+
inputs.push({ type: 'text', content: remaining.trim() });
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
1016
|
+
return inputs;
|
|
1017
|
+
}
|
|
1018
|
+
export function detectImageInput(input) {
|
|
1019
|
+
return input.includes('[Pasted image') || input.includes('<image');
|
|
1020
|
+
}
|
|
1021
|
+
//# sourceMappingURL=slash-commands.js.map
|