orquesta-cli 0.1.12
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.json +26 -0
- package/.prettierrc.json +10 -0
- package/CLAUDE.md +199 -0
- package/LICENSE +21 -0
- package/README.md +280 -0
- package/SECURITY.md +290 -0
- package/TEST_LOCAL.md +245 -0
- package/dist/agents/base/base-agent.d.ts +38 -0
- package/dist/agents/base/base-agent.d.ts.map +1 -0
- package/dist/agents/base/base-agent.js +69 -0
- package/dist/agents/base/base-agent.js.map +1 -0
- package/dist/agents/docs-search/index.d.ts +33 -0
- package/dist/agents/docs-search/index.d.ts.map +1 -0
- package/dist/agents/docs-search/index.js +244 -0
- package/dist/agents/docs-search/index.js.map +1 -0
- package/dist/agents/index.d.ts +4 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +4 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/planner/index.d.ts +17 -0
- package/dist/agents/planner/index.d.ts.map +1 -0
- package/dist/agents/planner/index.js +250 -0
- package/dist/agents/planner/index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +144 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/compact/compact-manager.d.ts +22 -0
- package/dist/core/compact/compact-manager.d.ts.map +1 -0
- package/dist/core/compact/compact-manager.js +75 -0
- package/dist/core/compact/compact-manager.js.map +1 -0
- package/dist/core/compact/compact-prompts.d.ts +11 -0
- package/dist/core/compact/compact-prompts.d.ts.map +1 -0
- package/dist/core/compact/compact-prompts.js +90 -0
- package/dist/core/compact/compact-prompts.js.map +1 -0
- package/dist/core/compact/context-tracker.d.ts +28 -0
- package/dist/core/compact/context-tracker.d.ts.map +1 -0
- package/dist/core/compact/context-tracker.js +71 -0
- package/dist/core/compact/context-tracker.js.map +1 -0
- package/dist/core/compact/index.d.ts +4 -0
- package/dist/core/compact/index.d.ts.map +1 -0
- package/dist/core/compact/index.js +4 -0
- package/dist/core/compact/index.js.map +1 -0
- package/dist/core/config/config-manager.d.ts +44 -0
- package/dist/core/config/config-manager.d.ts.map +1 -0
- package/dist/core/config/config-manager.js +259 -0
- package/dist/core/config/config-manager.js.map +1 -0
- package/dist/core/config/index.d.ts +2 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/index.js +2 -0
- package/dist/core/config/index.js.map +1 -0
- package/dist/core/docs-manager.d.ts +46 -0
- package/dist/core/docs-manager.d.ts.map +1 -0
- package/dist/core/docs-manager.js +475 -0
- package/dist/core/docs-manager.js.map +1 -0
- package/dist/core/git-auto-updater.d.ts +58 -0
- package/dist/core/git-auto-updater.d.ts.map +1 -0
- package/dist/core/git-auto-updater.js +374 -0
- package/dist/core/git-auto-updater.js.map +1 -0
- package/dist/core/llm/index.d.ts +2 -0
- package/dist/core/llm/index.d.ts.map +1 -0
- package/dist/core/llm/index.js +2 -0
- package/dist/core/llm/index.js.map +1 -0
- package/dist/core/llm/llm-client.d.ts +97 -0
- package/dist/core/llm/llm-client.d.ts.map +1 -0
- package/dist/core/llm/llm-client.js +1000 -0
- package/dist/core/llm/llm-client.js.map +1 -0
- package/dist/core/session/index.d.ts +2 -0
- package/dist/core/session/index.d.ts.map +1 -0
- package/dist/core/session/index.js +2 -0
- package/dist/core/session/index.js.map +1 -0
- package/dist/core/session/session-manager.d.ts +71 -0
- package/dist/core/session/session-manager.d.ts.map +1 -0
- package/dist/core/session/session-manager.js +250 -0
- package/dist/core/session/session-manager.js.map +1 -0
- package/dist/core/slash-command-handler.d.ts +31 -0
- package/dist/core/slash-command-handler.d.ts.map +1 -0
- package/dist/core/slash-command-handler.js +302 -0
- package/dist/core/slash-command-handler.js.map +1 -0
- package/dist/core/usage-tracker.d.ts +70 -0
- package/dist/core/usage-tracker.d.ts.map +1 -0
- package/dist/core/usage-tracker.js +251 -0
- package/dist/core/usage-tracker.js.map +1 -0
- package/dist/errors/base.d.ts +22 -0
- package/dist/errors/base.d.ts.map +1 -0
- package/dist/errors/base.js +43 -0
- package/dist/errors/base.js.map +1 -0
- package/dist/errors/file.d.ts +31 -0
- package/dist/errors/file.d.ts.map +1 -0
- package/dist/errors/file.js +110 -0
- package/dist/errors/file.js.map +1 -0
- package/dist/errors/index.d.ts +10 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +41 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/llm.d.ts +26 -0
- package/dist/errors/llm.d.ts.map +1 -0
- package/dist/errors/llm.js +86 -0
- package/dist/errors/llm.js.map +1 -0
- package/dist/errors/network.d.ts +19 -0
- package/dist/errors/network.d.ts.map +1 -0
- package/dist/errors/network.js +82 -0
- package/dist/errors/network.js.map +1 -0
- package/dist/errors/validation.d.ts +19 -0
- package/dist/errors/validation.d.ts.map +1 -0
- package/dist/errors/validation.js +62 -0
- package/dist/errors/validation.js.map +1 -0
- package/dist/eval/eval-runner.d.ts +24 -0
- package/dist/eval/eval-runner.d.ts.map +1 -0
- package/dist/eval/eval-runner.js +309 -0
- package/dist/eval/eval-runner.js.map +1 -0
- package/dist/eval/index.d.ts +3 -0
- package/dist/eval/index.d.ts.map +1 -0
- package/dist/eval/index.js +3 -0
- package/dist/eval/index.js.map +1 -0
- package/dist/eval/types.d.ts +77 -0
- package/dist/eval/types.d.ts.map +1 -0
- package/dist/eval/types.js +2 -0
- package/dist/eval/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestration/index.d.ts +4 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +3 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/plan-executor.d.ts +28 -0
- package/dist/orchestration/plan-executor.d.ts.map +1 -0
- package/dist/orchestration/plan-executor.js +382 -0
- package/dist/orchestration/plan-executor.js.map +1 -0
- package/dist/orchestration/types.d.ts +66 -0
- package/dist/orchestration/types.d.ts.map +1 -0
- package/dist/orchestration/types.js +2 -0
- package/dist/orchestration/types.js.map +1 -0
- package/dist/orchestration/utils.d.ts +13 -0
- package/dist/orchestration/utils.d.ts.map +1 -0
- package/dist/orchestration/utils.js +78 -0
- package/dist/orchestration/utils.js.map +1 -0
- package/dist/orquesta/connection.d.ts +35 -0
- package/dist/orquesta/connection.d.ts.map +1 -0
- package/dist/orquesta/connection.js +189 -0
- package/dist/orquesta/connection.js.map +1 -0
- package/dist/prompts/agents/docs-search-decision.d.ts +6 -0
- package/dist/prompts/agents/docs-search-decision.d.ts.map +1 -0
- package/dist/prompts/agents/docs-search-decision.js +46 -0
- package/dist/prompts/agents/docs-search-decision.js.map +1 -0
- package/dist/prompts/agents/docs-search.d.ts +4 -0
- package/dist/prompts/agents/docs-search.d.ts.map +1 -0
- package/dist/prompts/agents/docs-search.js +70 -0
- package/dist/prompts/agents/docs-search.js.map +1 -0
- package/dist/prompts/agents/planning.d.ts +4 -0
- package/dist/prompts/agents/planning.d.ts.map +1 -0
- package/dist/prompts/agents/planning.js +119 -0
- package/dist/prompts/agents/planning.js.map +1 -0
- package/dist/prompts/index.d.ts +10 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +10 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/shared/codebase-rules.d.ts +4 -0
- package/dist/prompts/shared/codebase-rules.d.ts.map +1 -0
- package/dist/prompts/shared/codebase-rules.js +16 -0
- package/dist/prompts/shared/codebase-rules.js.map +1 -0
- package/dist/prompts/shared/git-rules.d.ts +2 -0
- package/dist/prompts/shared/git-rules.d.ts.map +1 -0
- package/dist/prompts/shared/git-rules.js +87 -0
- package/dist/prompts/shared/git-rules.js.map +1 -0
- package/dist/prompts/shared/language-rules.d.ts +4 -0
- package/dist/prompts/shared/language-rules.d.ts.map +1 -0
- package/dist/prompts/shared/language-rules.js +22 -0
- package/dist/prompts/shared/language-rules.js.map +1 -0
- package/dist/prompts/shared/tool-usage.d.ts +12 -0
- package/dist/prompts/shared/tool-usage.d.ts.map +1 -0
- package/dist/prompts/shared/tool-usage.js +51 -0
- package/dist/prompts/shared/tool-usage.js.map +1 -0
- package/dist/prompts/system/compact.d.ts +3 -0
- package/dist/prompts/system/compact.d.ts.map +1 -0
- package/dist/prompts/system/compact.js +73 -0
- package/dist/prompts/system/compact.js.map +1 -0
- package/dist/prompts/system/plan-execute.d.ts +3 -0
- package/dist/prompts/system/plan-execute.d.ts.map +1 -0
- package/dist/prompts/system/plan-execute.js +83 -0
- package/dist/prompts/system/plan-execute.js.map +1 -0
- package/dist/tools/browser/browser-client.d.ts +107 -0
- package/dist/tools/browser/browser-client.d.ts.map +1 -0
- package/dist/tools/browser/browser-client.js +958 -0
- package/dist/tools/browser/browser-client.js.map +1 -0
- package/dist/tools/browser/browser-tools.d.ts +17 -0
- package/dist/tools/browser/browser-tools.d.ts.map +1 -0
- package/dist/tools/browser/browser-tools.js +972 -0
- package/dist/tools/browser/browser-tools.js.map +1 -0
- package/dist/tools/browser/index.d.ts +7 -0
- package/dist/tools/browser/index.d.ts.map +1 -0
- package/dist/tools/browser/index.js +17 -0
- package/dist/tools/browser/index.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/llm/agents/docs-search-tools.d.ts +17 -0
- package/dist/tools/llm/agents/docs-search-tools.d.ts.map +1 -0
- package/dist/tools/llm/agents/docs-search-tools.js +265 -0
- package/dist/tools/llm/agents/docs-search-tools.js.map +1 -0
- package/dist/tools/llm/agents/index.d.ts +4 -0
- package/dist/tools/llm/agents/index.d.ts.map +1 -0
- package/dist/tools/llm/agents/index.js +3 -0
- package/dist/tools/llm/agents/index.js.map +1 -0
- package/dist/tools/llm/index.d.ts +3 -0
- package/dist/tools/llm/index.d.ts.map +1 -0
- package/dist/tools/llm/index.js +3 -0
- package/dist/tools/llm/index.js.map +1 -0
- package/dist/tools/llm/simple/ask-user-tool.d.ts +5 -0
- package/dist/tools/llm/simple/ask-user-tool.d.ts.map +1 -0
- package/dist/tools/llm/simple/ask-user-tool.js +7 -0
- package/dist/tools/llm/simple/ask-user-tool.js.map +1 -0
- package/dist/tools/llm/simple/background-bash-tool.d.ts +30 -0
- package/dist/tools/llm/simple/background-bash-tool.d.ts.map +1 -0
- package/dist/tools/llm/simple/background-bash-tool.js +323 -0
- package/dist/tools/llm/simple/background-bash-tool.js.map +1 -0
- package/dist/tools/llm/simple/background-powershell-tool.d.ts +30 -0
- package/dist/tools/llm/simple/background-powershell-tool.d.ts.map +1 -0
- package/dist/tools/llm/simple/background-powershell-tool.js +305 -0
- package/dist/tools/llm/simple/background-powershell-tool.js.map +1 -0
- package/dist/tools/llm/simple/bash-tool.d.ts +4 -0
- package/dist/tools/llm/simple/bash-tool.d.ts.map +1 -0
- package/dist/tools/llm/simple/bash-tool.js +178 -0
- package/dist/tools/llm/simple/bash-tool.js.map +1 -0
- package/dist/tools/llm/simple/docs-search-agent-tool.d.ts +6 -0
- package/dist/tools/llm/simple/docs-search-agent-tool.d.ts.map +1 -0
- package/dist/tools/llm/simple/docs-search-agent-tool.js +104 -0
- package/dist/tools/llm/simple/docs-search-agent-tool.js.map +1 -0
- package/dist/tools/llm/simple/file-tools.d.ts +13 -0
- package/dist/tools/llm/simple/file-tools.d.ts.map +1 -0
- package/dist/tools/llm/simple/file-tools.js +785 -0
- package/dist/tools/llm/simple/file-tools.js.map +1 -0
- package/dist/tools/llm/simple/final-response-tool.d.ts +12 -0
- package/dist/tools/llm/simple/final-response-tool.d.ts.map +1 -0
- package/dist/tools/llm/simple/final-response-tool.js +107 -0
- package/dist/tools/llm/simple/final-response-tool.js.map +1 -0
- package/dist/tools/llm/simple/index.d.ts +11 -0
- package/dist/tools/llm/simple/index.d.ts.map +1 -0
- package/dist/tools/llm/simple/index.js +20 -0
- package/dist/tools/llm/simple/index.js.map +1 -0
- package/dist/tools/llm/simple/planning-tools.d.ts +5 -0
- package/dist/tools/llm/simple/planning-tools.d.ts.map +1 -0
- package/dist/tools/llm/simple/planning-tools.js +117 -0
- package/dist/tools/llm/simple/planning-tools.js.map +1 -0
- package/dist/tools/llm/simple/powershell-tool.d.ts +4 -0
- package/dist/tools/llm/simple/powershell-tool.d.ts.map +1 -0
- package/dist/tools/llm/simple/powershell-tool.js +178 -0
- package/dist/tools/llm/simple/powershell-tool.js.map +1 -0
- package/dist/tools/llm/simple/simple-tool-executor.d.ts +38 -0
- package/dist/tools/llm/simple/simple-tool-executor.d.ts.map +1 -0
- package/dist/tools/llm/simple/simple-tool-executor.js +134 -0
- package/dist/tools/llm/simple/simple-tool-executor.js.map +1 -0
- package/dist/tools/llm/simple/todo-tools.d.ts +15 -0
- package/dist/tools/llm/simple/todo-tools.d.ts.map +1 -0
- package/dist/tools/llm/simple/todo-tools.js +145 -0
- package/dist/tools/llm/simple/todo-tools.js.map +1 -0
- package/dist/tools/llm/simple/user-interaction-tools.d.ts +22 -0
- package/dist/tools/llm/simple/user-interaction-tools.d.ts.map +1 -0
- package/dist/tools/llm/simple/user-interaction-tools.js +168 -0
- package/dist/tools/llm/simple/user-interaction-tools.js.map +1 -0
- package/dist/tools/office/common/constants.d.ts +194 -0
- package/dist/tools/office/common/constants.d.ts.map +1 -0
- package/dist/tools/office/common/constants.js +169 -0
- package/dist/tools/office/common/constants.js.map +1 -0
- package/dist/tools/office/common/index.d.ts +4 -0
- package/dist/tools/office/common/index.d.ts.map +1 -0
- package/dist/tools/office/common/index.js +3 -0
- package/dist/tools/office/common/index.js.map +1 -0
- package/dist/tools/office/common/types.d.ts +82 -0
- package/dist/tools/office/common/types.d.ts.map +1 -0
- package/dist/tools/office/common/types.js +2 -0
- package/dist/tools/office/common/types.js.map +1 -0
- package/dist/tools/office/common/utils.d.ts +14 -0
- package/dist/tools/office/common/utils.d.ts.map +1 -0
- package/dist/tools/office/common/utils.js +58 -0
- package/dist/tools/office/common/utils.js.map +1 -0
- package/dist/tools/office/excel-client.d.ts +123 -0
- package/dist/tools/office/excel-client.d.ts.map +1 -0
- package/dist/tools/office/excel-client.js +1037 -0
- package/dist/tools/office/excel-client.js.map +1 -0
- package/dist/tools/office/excel-tools/cells.d.ts +10 -0
- package/dist/tools/office/excel-tools/cells.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/cells.js +279 -0
- package/dist/tools/office/excel-tools/cells.js.map +1 -0
- package/dist/tools/office/excel-tools/charts.d.ts +6 -0
- package/dist/tools/office/excel-tools/charts.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/charts.js +124 -0
- package/dist/tools/office/excel-tools/charts.js.map +1 -0
- package/dist/tools/office/excel-tools/comments.d.ts +6 -0
- package/dist/tools/office/excel-tools/comments.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/comments.js +114 -0
- package/dist/tools/office/excel-tools/comments.js.map +1 -0
- package/dist/tools/office/excel-tools/data-ops.d.ts +10 -0
- package/dist/tools/office/excel-tools/data-ops.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/data-ops.js +266 -0
- package/dist/tools/office/excel-tools/data-ops.js.map +1 -0
- package/dist/tools/office/excel-tools/export.d.ts +5 -0
- package/dist/tools/office/excel-tools/export.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/export.js +75 -0
- package/dist/tools/office/excel-tools/export.js.map +1 -0
- package/dist/tools/office/excel-tools/formatting.d.ts +10 -0
- package/dist/tools/office/excel-tools/formatting.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/formatting.js +276 -0
- package/dist/tools/office/excel-tools/formatting.js.map +1 -0
- package/dist/tools/office/excel-tools/index.d.ts +16 -0
- package/dist/tools/office/excel-tools/index.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/index.js +42 -0
- package/dist/tools/office/excel-tools/index.js.map +1 -0
- package/dist/tools/office/excel-tools/launch.d.ts +10 -0
- package/dist/tools/office/excel-tools/launch.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/launch.js +248 -0
- package/dist/tools/office/excel-tools/launch.js.map +1 -0
- package/dist/tools/office/excel-tools/media.d.ts +5 -0
- package/dist/tools/office/excel-tools/media.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/media.js +84 -0
- package/dist/tools/office/excel-tools/media.js.map +1 -0
- package/dist/tools/office/excel-tools/named-ranges.d.ts +6 -0
- package/dist/tools/office/excel-tools/named-ranges.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/named-ranges.js +113 -0
- package/dist/tools/office/excel-tools/named-ranges.js.map +1 -0
- package/dist/tools/office/excel-tools/protection.d.ts +5 -0
- package/dist/tools/office/excel-tools/protection.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/protection.js +75 -0
- package/dist/tools/office/excel-tools/protection.js.map +1 -0
- package/dist/tools/office/excel-tools/rows-columns.d.ts +11 -0
- package/dist/tools/office/excel-tools/rows-columns.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/rows-columns.js +293 -0
- package/dist/tools/office/excel-tools/rows-columns.js.map +1 -0
- package/dist/tools/office/excel-tools/sheets.d.ts +8 -0
- package/dist/tools/office/excel-tools/sheets.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/sheets.js +177 -0
- package/dist/tools/office/excel-tools/sheets.js.map +1 -0
- package/dist/tools/office/excel-tools/validation.d.ts +7 -0
- package/dist/tools/office/excel-tools/validation.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/validation.js +175 -0
- package/dist/tools/office/excel-tools/validation.js.map +1 -0
- package/dist/tools/office/excel-tools.d.ts +3 -0
- package/dist/tools/office/excel-tools.d.ts.map +1 -0
- package/dist/tools/office/excel-tools.js +3 -0
- package/dist/tools/office/excel-tools.js.map +1 -0
- package/dist/tools/office/index.d.ts +6 -0
- package/dist/tools/office/index.d.ts.map +1 -0
- package/dist/tools/office/index.js +9 -0
- package/dist/tools/office/index.js.map +1 -0
- package/dist/tools/office/office-client-base.d.ts +31 -0
- package/dist/tools/office/office-client-base.d.ts.map +1 -0
- package/dist/tools/office/office-client-base.js +154 -0
- package/dist/tools/office/office-client-base.js.map +1 -0
- package/dist/tools/office/office-client.d.ts +196 -0
- package/dist/tools/office/office-client.d.ts.map +1 -0
- package/dist/tools/office/office-client.js +200 -0
- package/dist/tools/office/office-client.js.map +1 -0
- package/dist/tools/office/powerpoint-client.d.ts +135 -0
- package/dist/tools/office/powerpoint-client.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-client.js +1136 -0
- package/dist/tools/office/powerpoint-client.js.map +1 -0
- package/dist/tools/office/powerpoint-tools/effects.d.ts +9 -0
- package/dist/tools/office/powerpoint-tools/effects.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-tools/effects.js +246 -0
- package/dist/tools/office/powerpoint-tools/effects.js.map +1 -0
- package/dist/tools/office/powerpoint-tools/export.d.ts +6 -0
- package/dist/tools/office/powerpoint-tools/export.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-tools/export.js +108 -0
- package/dist/tools/office/powerpoint-tools/export.js.map +1 -0
- package/dist/tools/office/powerpoint-tools/index.d.ts +13 -0
- package/dist/tools/office/powerpoint-tools/index.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-tools/index.js +33 -0
- package/dist/tools/office/powerpoint-tools/index.js.map +1 -0
- package/dist/tools/office/powerpoint-tools/launch.d.ts +9 -0
- package/dist/tools/office/powerpoint-tools/launch.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-tools/launch.js +214 -0
- package/dist/tools/office/powerpoint-tools/launch.js.map +1 -0
- package/dist/tools/office/powerpoint-tools/media.d.ts +8 -0
- package/dist/tools/office/powerpoint-tools/media.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-tools/media.js +211 -0
- package/dist/tools/office/powerpoint-tools/media.js.map +1 -0
- package/dist/tools/office/powerpoint-tools/notes.d.ts +8 -0
- package/dist/tools/office/powerpoint-tools/notes.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-tools/notes.js +171 -0
- package/dist/tools/office/powerpoint-tools/notes.js.map +1 -0
- package/dist/tools/office/powerpoint-tools/sections.d.ts +6 -0
- package/dist/tools/office/powerpoint-tools/sections.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-tools/sections.js +104 -0
- package/dist/tools/office/powerpoint-tools/sections.js.map +1 -0
- package/dist/tools/office/powerpoint-tools/shapes.d.ts +22 -0
- package/dist/tools/office/powerpoint-tools/shapes.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-tools/shapes.js +681 -0
- package/dist/tools/office/powerpoint-tools/shapes.js.map +1 -0
- package/dist/tools/office/powerpoint-tools/slides.d.ts +11 -0
- package/dist/tools/office/powerpoint-tools/slides.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-tools/slides.js +283 -0
- package/dist/tools/office/powerpoint-tools/slides.js.map +1 -0
- package/dist/tools/office/powerpoint-tools/tables.d.ts +6 -0
- package/dist/tools/office/powerpoint-tools/tables.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-tools/tables.js +132 -0
- package/dist/tools/office/powerpoint-tools/tables.js.map +1 -0
- package/dist/tools/office/powerpoint-tools/text.d.ts +12 -0
- package/dist/tools/office/powerpoint-tools/text.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-tools/text.js +366 -0
- package/dist/tools/office/powerpoint-tools/text.js.map +1 -0
- package/dist/tools/office/powerpoint-tools.d.ts +3 -0
- package/dist/tools/office/powerpoint-tools.d.ts.map +1 -0
- package/dist/tools/office/powerpoint-tools.js +3 -0
- package/dist/tools/office/powerpoint-tools.js.map +1 -0
- package/dist/tools/office/word-client.d.ts +147 -0
- package/dist/tools/office/word-client.d.ts.map +1 -0
- package/dist/tools/office/word-client.js +1341 -0
- package/dist/tools/office/word-client.js.map +1 -0
- package/dist/tools/office/word-tools/bookmarks.d.ts +7 -0
- package/dist/tools/office/word-tools/bookmarks.d.ts.map +1 -0
- package/dist/tools/office/word-tools/bookmarks.js +146 -0
- package/dist/tools/office/word-tools/bookmarks.js.map +1 -0
- package/dist/tools/office/word-tools/comments.d.ts +7 -0
- package/dist/tools/office/word-tools/comments.d.ts.map +1 -0
- package/dist/tools/office/word-tools/comments.js +146 -0
- package/dist/tools/office/word-tools/comments.js.map +1 -0
- package/dist/tools/office/word-tools/content.d.ts +7 -0
- package/dist/tools/office/word-tools/content.d.ts.map +1 -0
- package/dist/tools/office/word-tools/content.js +168 -0
- package/dist/tools/office/word-tools/content.js.map +1 -0
- package/dist/tools/office/word-tools/export.d.ts +5 -0
- package/dist/tools/office/word-tools/export.d.ts.map +1 -0
- package/dist/tools/office/word-tools/export.js +73 -0
- package/dist/tools/office/word-tools/export.js.map +1 -0
- package/dist/tools/office/word-tools/formatting.d.ts +6 -0
- package/dist/tools/office/word-tools/formatting.d.ts.map +1 -0
- package/dist/tools/office/word-tools/formatting.js +129 -0
- package/dist/tools/office/word-tools/formatting.js.map +1 -0
- package/dist/tools/office/word-tools/headers-footers.d.ts +6 -0
- package/dist/tools/office/word-tools/headers-footers.d.ts.map +1 -0
- package/dist/tools/office/word-tools/headers-footers.js +117 -0
- package/dist/tools/office/word-tools/headers-footers.js.map +1 -0
- package/dist/tools/office/word-tools/index.d.ts +16 -0
- package/dist/tools/office/word-tools/index.d.ts.map +1 -0
- package/dist/tools/office/word-tools/index.js +45 -0
- package/dist/tools/office/word-tools/index.js.map +1 -0
- package/dist/tools/office/word-tools/launch.d.ts +10 -0
- package/dist/tools/office/word-tools/launch.d.ts.map +1 -0
- package/dist/tools/office/word-tools/launch.js +255 -0
- package/dist/tools/office/word-tools/launch.js.map +1 -0
- package/dist/tools/office/word-tools/lists.d.ts +5 -0
- package/dist/tools/office/word-tools/lists.d.ts.map +1 -0
- package/dist/tools/office/word-tools/lists.js +73 -0
- package/dist/tools/office/word-tools/lists.js.map +1 -0
- package/dist/tools/office/word-tools/navigation.d.ts +5 -0
- package/dist/tools/office/word-tools/navigation.d.ts.map +1 -0
- package/dist/tools/office/word-tools/navigation.js +85 -0
- package/dist/tools/office/word-tools/navigation.js.map +1 -0
- package/dist/tools/office/word-tools/page-setup.d.ts +7 -0
- package/dist/tools/office/word-tools/page-setup.d.ts.map +1 -0
- package/dist/tools/office/word-tools/page-setup.js +152 -0
- package/dist/tools/office/word-tools/page-setup.js.map +1 -0
- package/dist/tools/office/word-tools/tables.d.ts +8 -0
- package/dist/tools/office/word-tools/tables.d.ts.map +1 -0
- package/dist/tools/office/word-tools/tables.js +197 -0
- package/dist/tools/office/word-tools/tables.js.map +1 -0
- package/dist/tools/office/word-tools/text.d.ts +9 -0
- package/dist/tools/office/word-tools/text.d.ts.map +1 -0
- package/dist/tools/office/word-tools/text.js +235 -0
- package/dist/tools/office/word-tools/text.js.map +1 -0
- package/dist/tools/office/word-tools/undo-redo.d.ts +5 -0
- package/dist/tools/office/word-tools/undo-redo.d.ts.map +1 -0
- package/dist/tools/office/word-tools/undo-redo.js +73 -0
- package/dist/tools/office/word-tools/undo-redo.js.map +1 -0
- package/dist/tools/office/word-tools/watermarks.d.ts +5 -0
- package/dist/tools/office/word-tools/watermarks.d.ts.map +1 -0
- package/dist/tools/office/word-tools/watermarks.js +81 -0
- package/dist/tools/office/word-tools/watermarks.js.map +1 -0
- package/dist/tools/office/word-tools.d.ts +3 -0
- package/dist/tools/office/word-tools.d.ts.map +1 -0
- package/dist/tools/office/word-tools.js +3 -0
- package/dist/tools/office/word-tools.js.map +1 -0
- package/dist/tools/registry.d.ts +53 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +278 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +88 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +19 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/types/index.d.ts +126 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/PlanExecuteView.d.ts +11 -0
- package/dist/ui/PlanExecuteView.d.ts.map +1 -0
- package/dist/ui/PlanExecuteView.js +29 -0
- package/dist/ui/PlanExecuteView.js.map +1 -0
- package/dist/ui/TodoPanel.d.ts +13 -0
- package/dist/ui/TodoPanel.d.ts.map +1 -0
- package/dist/ui/TodoPanel.js +135 -0
- package/dist/ui/TodoPanel.js.map +1 -0
- package/dist/ui/UpdateNotification.d.ts +13 -0
- package/dist/ui/UpdateNotification.d.ts.map +1 -0
- package/dist/ui/UpdateNotification.js +42 -0
- package/dist/ui/UpdateNotification.js.map +1 -0
- package/dist/ui/components/ActivityIndicator.d.ts +25 -0
- package/dist/ui/components/ActivityIndicator.d.ts.map +1 -0
- package/dist/ui/components/ActivityIndicator.js +115 -0
- package/dist/ui/components/ActivityIndicator.js.map +1 -0
- package/dist/ui/components/CommandBrowser.d.ts +10 -0
- package/dist/ui/components/CommandBrowser.d.ts.map +1 -0
- package/dist/ui/components/CommandBrowser.js +53 -0
- package/dist/ui/components/CommandBrowser.js.map +1 -0
- package/dist/ui/components/CustomTextInput.d.ts +13 -0
- package/dist/ui/components/CustomTextInput.d.ts.map +1 -0
- package/dist/ui/components/CustomTextInput.js +245 -0
- package/dist/ui/components/CustomTextInput.js.map +1 -0
- package/dist/ui/components/DocsSearchProgress.d.ts +13 -0
- package/dist/ui/components/DocsSearchProgress.d.ts.map +1 -0
- package/dist/ui/components/DocsSearchProgress.js +37 -0
- package/dist/ui/components/DocsSearchProgress.js.map +1 -0
- package/dist/ui/components/FileBrowser.d.ts +11 -0
- package/dist/ui/components/FileBrowser.d.ts.map +1 -0
- package/dist/ui/components/FileBrowser.js +45 -0
- package/dist/ui/components/FileBrowser.js.map +1 -0
- package/dist/ui/components/LLMSetupWizard.d.ts +8 -0
- package/dist/ui/components/LLMSetupWizard.d.ts.map +1 -0
- package/dist/ui/components/LLMSetupWizard.js +192 -0
- package/dist/ui/components/LLMSetupWizard.js.map +1 -0
- package/dist/ui/components/Logo.d.ts +19 -0
- package/dist/ui/components/Logo.d.ts.map +1 -0
- package/dist/ui/components/Logo.js +55 -0
- package/dist/ui/components/Logo.js.map +1 -0
- package/dist/ui/components/MarkdownRenderer.d.ts +9 -0
- package/dist/ui/components/MarkdownRenderer.d.ts.map +1 -0
- package/dist/ui/components/MarkdownRenderer.js +198 -0
- package/dist/ui/components/MarkdownRenderer.js.map +1 -0
- package/dist/ui/components/ModelSelector.d.ts +8 -0
- package/dist/ui/components/ModelSelector.d.ts.map +1 -0
- package/dist/ui/components/ModelSelector.js +111 -0
- package/dist/ui/components/ModelSelector.js.map +1 -0
- package/dist/ui/components/PlanExecuteApp.d.ts +23 -0
- package/dist/ui/components/PlanExecuteApp.d.ts.map +1 -0
- package/dist/ui/components/PlanExecuteApp.js +1324 -0
- package/dist/ui/components/PlanExecuteApp.js.map +1 -0
- package/dist/ui/components/ProgressBar.d.ts +10 -0
- package/dist/ui/components/ProgressBar.d.ts.map +1 -0
- package/dist/ui/components/ProgressBar.js +26 -0
- package/dist/ui/components/ProgressBar.js.map +1 -0
- package/dist/ui/components/StatusBar.d.ts +23 -0
- package/dist/ui/components/StatusBar.d.ts.map +1 -0
- package/dist/ui/components/StatusBar.js +162 -0
- package/dist/ui/components/StatusBar.js.map +1 -0
- package/dist/ui/components/ThinkingIndicator.d.ts +14 -0
- package/dist/ui/components/ThinkingIndicator.d.ts.map +1 -0
- package/dist/ui/components/ThinkingIndicator.js +63 -0
- package/dist/ui/components/ThinkingIndicator.js.map +1 -0
- package/dist/ui/components/TodoListView.d.ts +11 -0
- package/dist/ui/components/TodoListView.d.ts.map +1 -0
- package/dist/ui/components/TodoListView.js +69 -0
- package/dist/ui/components/TodoListView.js.map +1 -0
- package/dist/ui/components/ToolSelector.d.ts +7 -0
- package/dist/ui/components/ToolSelector.d.ts.map +1 -0
- package/dist/ui/components/ToolSelector.js +111 -0
- package/dist/ui/components/ToolSelector.js.map +1 -0
- package/dist/ui/components/dialogs/ApprovalDialog.d.ts +13 -0
- package/dist/ui/components/dialogs/ApprovalDialog.d.ts.map +1 -0
- package/dist/ui/components/dialogs/ApprovalDialog.js +173 -0
- package/dist/ui/components/dialogs/ApprovalDialog.js.map +1 -0
- package/dist/ui/components/dialogs/AskUserDialog.d.ts +9 -0
- package/dist/ui/components/dialogs/AskUserDialog.d.ts.map +1 -0
- package/dist/ui/components/dialogs/AskUserDialog.js +111 -0
- package/dist/ui/components/dialogs/AskUserDialog.js.map +1 -0
- package/dist/ui/components/dialogs/DocsBrowser.d.ts +8 -0
- package/dist/ui/components/dialogs/DocsBrowser.d.ts.map +1 -0
- package/dist/ui/components/dialogs/DocsBrowser.js +127 -0
- package/dist/ui/components/dialogs/DocsBrowser.js.map +1 -0
- package/dist/ui/components/dialogs/SettingsDialog.d.ts +10 -0
- package/dist/ui/components/dialogs/SettingsDialog.d.ts.map +1 -0
- package/dist/ui/components/dialogs/SettingsDialog.js +563 -0
- package/dist/ui/components/dialogs/SettingsDialog.js.map +1 -0
- package/dist/ui/components/dialogs/index.d.ts +4 -0
- package/dist/ui/components/dialogs/index.d.ts.map +1 -0
- package/dist/ui/components/dialogs/index.js +4 -0
- package/dist/ui/components/dialogs/index.js.map +1 -0
- package/dist/ui/components/index.d.ts +12 -0
- package/dist/ui/components/index.d.ts.map +1 -0
- package/dist/ui/components/index.js +9 -0
- package/dist/ui/components/index.js.map +1 -0
- package/dist/ui/components/panels/LogPanel.d.ts +7 -0
- package/dist/ui/components/panels/LogPanel.d.ts.map +1 -0
- package/dist/ui/components/panels/LogPanel.js +280 -0
- package/dist/ui/components/panels/LogPanel.js.map +1 -0
- package/dist/ui/components/panels/SessionPanel.d.ts +8 -0
- package/dist/ui/components/panels/SessionPanel.d.ts.map +1 -0
- package/dist/ui/components/panels/SessionPanel.js +81 -0
- package/dist/ui/components/panels/SessionPanel.js.map +1 -0
- package/dist/ui/components/panels/index.d.ts +4 -0
- package/dist/ui/components/panels/index.d.ts.map +1 -0
- package/dist/ui/components/panels/index.js +4 -0
- package/dist/ui/components/panels/index.js.map +1 -0
- package/dist/ui/components/views/ChatView.d.ts +12 -0
- package/dist/ui/components/views/ChatView.d.ts.map +1 -0
- package/dist/ui/components/views/ChatView.js +289 -0
- package/dist/ui/components/views/ChatView.js.map +1 -0
- package/dist/ui/components/views/index.d.ts +2 -0
- package/dist/ui/components/views/index.d.ts.map +1 -0
- package/dist/ui/components/views/index.js +2 -0
- package/dist/ui/components/views/index.js.map +1 -0
- package/dist/ui/contexts/TokenContext.d.ts +29 -0
- package/dist/ui/contexts/TokenContext.d.ts.map +1 -0
- package/dist/ui/contexts/TokenContext.js +79 -0
- package/dist/ui/contexts/TokenContext.js.map +1 -0
- package/dist/ui/hooks/atFileProcessor.d.ts +15 -0
- package/dist/ui/hooks/atFileProcessor.d.ts.map +1 -0
- package/dist/ui/hooks/atFileProcessor.js +88 -0
- package/dist/ui/hooks/atFileProcessor.js.map +1 -0
- package/dist/ui/hooks/index.d.ts +8 -0
- package/dist/ui/hooks/index.d.ts.map +1 -0
- package/dist/ui/hooks/index.js +8 -0
- package/dist/ui/hooks/index.js.map +1 -0
- package/dist/ui/hooks/slashCommandProcessor.d.ts +21 -0
- package/dist/ui/hooks/slashCommandProcessor.d.ts.map +1 -0
- package/dist/ui/hooks/slashCommandProcessor.js +100 -0
- package/dist/ui/hooks/slashCommandProcessor.js.map +1 -0
- package/dist/ui/hooks/useCommandBrowserState.d.ts +12 -0
- package/dist/ui/hooks/useCommandBrowserState.d.ts.map +1 -0
- package/dist/ui/hooks/useCommandBrowserState.js +66 -0
- package/dist/ui/hooks/useCommandBrowserState.js.map +1 -0
- package/dist/ui/hooks/useFileBrowserState.d.ts +15 -0
- package/dist/ui/hooks/useFileBrowserState.d.ts.map +1 -0
- package/dist/ui/hooks/useFileBrowserState.js +80 -0
- package/dist/ui/hooks/useFileBrowserState.js.map +1 -0
- package/dist/ui/hooks/useFileList.d.ts +20 -0
- package/dist/ui/hooks/useFileList.d.ts.map +1 -0
- package/dist/ui/hooks/useFileList.js +57 -0
- package/dist/ui/hooks/useFileList.js.map +1 -0
- package/dist/ui/hooks/useInputHistory.d.ts +9 -0
- package/dist/ui/hooks/useInputHistory.d.ts.map +1 -0
- package/dist/ui/hooks/useInputHistory.js +68 -0
- package/dist/ui/hooks/useInputHistory.js.map +1 -0
- package/dist/ui/hooks/usePlanExecution.d.ts +8 -0
- package/dist/ui/hooks/usePlanExecution.d.ts.map +1 -0
- package/dist/ui/hooks/usePlanExecution.js +214 -0
- package/dist/ui/hooks/usePlanExecution.js.map +1 -0
- package/dist/ui/index.d.ts +7 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +7 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/ink-entry.d.ts +3 -0
- package/dist/ui/ink-entry.d.ts.map +1 -0
- package/dist/ui/ink-entry.js +22 -0
- package/dist/ui/ink-entry.js.map +1 -0
- package/dist/utils/env-filter.d.ts +4 -0
- package/dist/utils/env-filter.d.ts.map +1 -0
- package/dist/utils/env-filter.js +101 -0
- package/dist/utils/env-filter.js.map +1 -0
- package/dist/utils/file-system.d.ts +9 -0
- package/dist/utils/file-system.d.ts.map +1 -0
- package/dist/utils/file-system.js +99 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/git-utils.d.ts +2 -0
- package/dist/utils/git-utils.d.ts.map +1 -0
- package/dist/utils/git-utils.js +16 -0
- package/dist/utils/git-utils.js.map +1 -0
- package/dist/utils/json-stream-logger.d.ts +74 -0
- package/dist/utils/json-stream-logger.d.ts.map +1 -0
- package/dist/utils/json-stream-logger.js +808 -0
- package/dist/utils/json-stream-logger.js.map +1 -0
- package/dist/utils/logger.d.ts +152 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +1672 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/platform-utils.d.ts +19 -0
- package/dist/utils/platform-utils.d.ts.map +1 -0
- package/dist/utils/platform-utils.js +134 -0
- package/dist/utils/platform-utils.js.map +1 -0
- package/dist/utils/wsl-utils.d.ts +4 -0
- package/dist/utils/wsl-utils.d.ts.map +1 -0
- package/dist/utils/wsl-utils.js +72 -0
- package/dist/utils/wsl-utils.js.map +1 -0
- package/electron.vite.config.ts +63 -0
- package/google374b9eba0c52b043.html +1 -0
- package/package.json +122 -0
- package/src/agents/base/base-agent.ts +159 -0
- package/src/agents/docs-search/index.ts +365 -0
- package/src/agents/index.ts +34 -0
- package/src/agents/planner/index.ts +544 -0
- package/src/cli.ts +201 -0
- package/src/constants.ts +47 -0
- package/src/core/compact/compact-manager.ts +160 -0
- package/src/core/compact/compact-prompts.ts +150 -0
- package/src/core/compact/context-tracker.ts +164 -0
- package/src/core/compact/index.ts +25 -0
- package/src/core/config/config-manager.ts +460 -0
- package/src/core/config/index.ts +5 -0
- package/src/core/docs-manager.ts +678 -0
- package/src/core/llm/index.ts +7 -0
- package/src/core/llm/llm-client.ts +1550 -0
- package/src/core/session/index.ts +5 -0
- package/src/core/session/session-manager.ts +464 -0
- package/src/core/slash-command-handler.ts +410 -0
- package/src/core/usage-tracker.ts +438 -0
- package/src/errors/base.ts +81 -0
- package/src/errors/file.ts +183 -0
- package/src/errors/index.ts +95 -0
- package/src/errors/llm.ts +151 -0
- package/src/errors/network.ts +124 -0
- package/src/errors/validation.ts +111 -0
- package/src/eval/eval-runner.ts +456 -0
- package/src/eval/index.ts +8 -0
- package/src/eval/types.ts +139 -0
- package/src/index.ts +22 -0
- package/src/orchestration/index.ts +30 -0
- package/src/orchestration/plan-executor.ts +652 -0
- package/src/orchestration/types.ts +127 -0
- package/src/orchestration/utils.ts +119 -0
- package/src/orquesta/connection.ts +291 -0
- package/src/prompts/agents/docs-search-decision.ts +74 -0
- package/src/prompts/agents/docs-search.ts +84 -0
- package/src/prompts/agents/planning.ts +143 -0
- package/src/prompts/index.ts +31 -0
- package/src/prompts/shared/codebase-rules.ts +29 -0
- package/src/prompts/shared/git-rules.ts +94 -0
- package/src/prompts/shared/language-rules.ts +36 -0
- package/src/prompts/shared/tool-usage.ts +72 -0
- package/src/prompts/system/compact.ts +80 -0
- package/src/prompts/system/plan-execute.ts +89 -0
- package/src/tools/browser/browser-client.ts +1363 -0
- package/src/tools/browser/browser-tools.ts +1139 -0
- package/src/tools/browser/index.ts +65 -0
- package/src/tools/index.ts +23 -0
- package/src/tools/llm/agents/docs-search-tools.ts +368 -0
- package/src/tools/llm/agents/index.ts +22 -0
- package/src/tools/llm/index.ts +11 -0
- package/src/tools/llm/simple/ask-user-tool.ts +25 -0
- package/src/tools/llm/simple/background-bash-tool.ts +443 -0
- package/src/tools/llm/simple/background-powershell-tool.ts +421 -0
- package/src/tools/llm/simple/bash-tool.ts +238 -0
- package/src/tools/llm/simple/docs-search-agent-tool.ts +146 -0
- package/src/tools/llm/simple/file-tools.ts +1051 -0
- package/src/tools/llm/simple/final-response-tool.ts +180 -0
- package/src/tools/llm/simple/index.ts +42 -0
- package/src/tools/llm/simple/planning-tools.ts +143 -0
- package/src/tools/llm/simple/powershell-tool.ts +241 -0
- package/src/tools/llm/simple/simple-tool-executor.ts +279 -0
- package/src/tools/llm/simple/todo-tools.ts +207 -0
- package/src/tools/llm/simple/user-interaction-tools.ts +277 -0
- package/src/tools/office/common/constants.ts +335 -0
- package/src/tools/office/common/index.ts +133 -0
- package/src/tools/office/common/types.ts +286 -0
- package/src/tools/office/common/utils.ts +116 -0
- package/src/tools/office/excel-client.ts +1336 -0
- package/src/tools/office/excel-tools/cells.ts +359 -0
- package/src/tools/office/excel-tools/charts.ts +166 -0
- package/src/tools/office/excel-tools/comments.ts +155 -0
- package/src/tools/office/excel-tools/data-ops.ts +349 -0
- package/src/tools/office/excel-tools/export.ts +105 -0
- package/src/tools/office/excel-tools/formatting.ts +357 -0
- package/src/tools/office/excel-tools/index.ts +55 -0
- package/src/tools/office/excel-tools/launch.ts +303 -0
- package/src/tools/office/excel-tools/media.ts +117 -0
- package/src/tools/office/excel-tools/named-ranges.ts +148 -0
- package/src/tools/office/excel-tools/protection.ts +105 -0
- package/src/tools/office/excel-tools/rows-columns.ts +386 -0
- package/src/tools/office/excel-tools/sheets.ts +228 -0
- package/src/tools/office/excel-tools/validation.ts +226 -0
- package/src/tools/office/excel-tools.ts +9 -0
- package/src/tools/office/index.ts +259 -0
- package/src/tools/office/office-client-base.ts +242 -0
- package/src/tools/office/office-client.ts +377 -0
- package/src/tools/office/powerpoint-client.ts +1498 -0
- package/src/tools/office/powerpoint-tools/effects.ts +315 -0
- package/src/tools/office/powerpoint-tools/export.ts +138 -0
- package/src/tools/office/powerpoint-tools/index.ts +45 -0
- package/src/tools/office/powerpoint-tools/launch.ts +263 -0
- package/src/tools/office/powerpoint-tools/media.ts +291 -0
- package/src/tools/office/powerpoint-tools/notes.ts +220 -0
- package/src/tools/office/powerpoint-tools/sections.ts +140 -0
- package/src/tools/office/powerpoint-tools/shapes.ts +870 -0
- package/src/tools/office/powerpoint-tools/slides.ts +350 -0
- package/src/tools/office/powerpoint-tools/tables.ts +182 -0
- package/src/tools/office/powerpoint-tools/text.ts +473 -0
- package/src/tools/office/powerpoint-tools.ts +9 -0
- package/src/tools/office/word-client.ts +1697 -0
- package/src/tools/office/word-tools/bookmarks.ts +186 -0
- package/src/tools/office/word-tools/comments.ts +185 -0
- package/src/tools/office/word-tools/content.ts +229 -0
- package/src/tools/office/word-tools/export.ts +97 -0
- package/src/tools/office/word-tools/formatting.ts +161 -0
- package/src/tools/office/word-tools/headers-footers.ts +155 -0
- package/src/tools/office/word-tools/index.ts +57 -0
- package/src/tools/office/word-tools/launch.ts +312 -0
- package/src/tools/office/word-tools/lists.ts +97 -0
- package/src/tools/office/word-tools/navigation.ts +114 -0
- package/src/tools/office/word-tools/page-setup.ts +195 -0
- package/src/tools/office/word-tools/tables.ts +262 -0
- package/src/tools/office/word-tools/text.ts +294 -0
- package/src/tools/office/word-tools/undo-redo.ts +97 -0
- package/src/tools/office/word-tools/watermarks.ts +105 -0
- package/src/tools/office/word-tools.ts +9 -0
- package/src/tools/registry.ts +527 -0
- package/src/tools/types.ts +231 -0
- package/src/types/index.ts +181 -0
- package/src/ui/PlanExecuteView.tsx +119 -0
- package/src/ui/TodoPanel.tsx +240 -0
- package/src/ui/UpdateNotification.tsx +105 -0
- package/src/ui/components/ActivityIndicator.tsx +234 -0
- package/src/ui/components/CommandBrowser.tsx +114 -0
- package/src/ui/components/CustomTextInput.tsx +389 -0
- package/src/ui/components/DocsSearchProgress.tsx +85 -0
- package/src/ui/components/FileBrowser.tsx +93 -0
- package/src/ui/components/LLMSetupWizard.tsx +333 -0
- package/src/ui/components/Logo.tsx +125 -0
- package/src/ui/components/MarkdownRenderer.tsx +358 -0
- package/src/ui/components/ModelSelector.tsx +203 -0
- package/src/ui/components/PlanExecuteApp.tsx +2007 -0
- package/src/ui/components/ProgressBar.tsx +51 -0
- package/src/ui/components/StatusBar.tsx +302 -0
- package/src/ui/components/ThinkingIndicator.tsx +120 -0
- package/src/ui/components/TodoListView.tsx +140 -0
- package/src/ui/components/ToolSelector.tsx +215 -0
- package/src/ui/components/dialogs/ApprovalDialog.tsx +259 -0
- package/src/ui/components/dialogs/AskUserDialog.tsx +159 -0
- package/src/ui/components/dialogs/DocsBrowser.tsx +222 -0
- package/src/ui/components/dialogs/SettingsDialog.tsx +939 -0
- package/src/ui/components/dialogs/index.ts +13 -0
- package/src/ui/components/index.ts +27 -0
- package/src/ui/components/panels/LogPanel.tsx +385 -0
- package/src/ui/components/panels/SessionPanel.tsx +146 -0
- package/src/ui/components/panels/index.ts +13 -0
- package/src/ui/components/views/ChatView.tsx +447 -0
- package/src/ui/components/views/index.ts +5 -0
- package/src/ui/contexts/TokenContext.tsx +139 -0
- package/src/ui/hooks/atFileProcessor.ts +167 -0
- package/src/ui/hooks/index.ts +11 -0
- package/src/ui/hooks/slashCommandProcessor.ts +174 -0
- package/src/ui/hooks/useCommandBrowserState.ts +97 -0
- package/src/ui/hooks/useFileBrowserState.ts +116 -0
- package/src/ui/hooks/useFileList.ts +132 -0
- package/src/ui/hooks/useInputHistory.ts +89 -0
- package/src/ui/hooks/usePlanExecution.ts +339 -0
- package/src/ui/index.ts +10 -0
- package/src/ui/ink-entry.tsx +36 -0
- package/src/utils/env-filter.ts +164 -0
- package/src/utils/file-system.ts +133 -0
- package/src/utils/git-utils.ts +30 -0
- package/src/utils/json-stream-logger.ts +1259 -0
- package/src/utils/logger.ts +2767 -0
- package/src/utils/platform-utils.ts +256 -0
- package/src/utils/wsl-utils.ts +113 -0
- package/tsconfig.electron.json +39 -0
- package/tsconfig.json +64 -0
|
@@ -0,0 +1,1139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Automation Tools (LLM Simple)
|
|
3
|
+
*
|
|
4
|
+
* Tools that allow LLM to control the browser
|
|
5
|
+
* Category: LLM Simple Tools - LLM calls via tool_call, no Sub-LLM
|
|
6
|
+
*
|
|
7
|
+
* Uses CDP (Chrome DevTools Protocol) via Playwright
|
|
8
|
+
* Launches browser via PowerShell and controls it with Playwright.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { ToolDefinition } from '../../types/index.js';
|
|
12
|
+
import { LLMSimpleTool, ToolResult, ToolCategory } from '../types.js';
|
|
13
|
+
import { browserClient } from './browser-client.js';
|
|
14
|
+
import { logger } from '../../utils/logger.js';
|
|
15
|
+
|
|
16
|
+
const BROWSER_CATEGORIES: ToolCategory[] = ['llm-simple'];
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* browser_launch Tool Definition
|
|
20
|
+
*/
|
|
21
|
+
const BROWSER_LAUNCH_DEFINITION: ToolDefinition = {
|
|
22
|
+
type: 'function',
|
|
23
|
+
function: {
|
|
24
|
+
name: 'browser_launch',
|
|
25
|
+
description: `Launch Chrome/Edge browser for web testing and automation.
|
|
26
|
+
Use this tool to start a browser session before navigating to pages.
|
|
27
|
+
The browser runs on Windows via CDP (Chrome DevTools Protocol).`,
|
|
28
|
+
parameters: {
|
|
29
|
+
type: 'object',
|
|
30
|
+
properties: {
|
|
31
|
+
reason: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
description: 'Explanation of why you are launching the browser',
|
|
34
|
+
},
|
|
35
|
+
headless: {
|
|
36
|
+
type: 'boolean',
|
|
37
|
+
description: 'Run browser in headless mode (default: false). Set to true to hide the browser window.',
|
|
38
|
+
},
|
|
39
|
+
browser: {
|
|
40
|
+
type: 'string',
|
|
41
|
+
enum: ['chrome', 'edge'],
|
|
42
|
+
description: 'Browser to use (default: chrome). Falls back to edge if chrome is not available.',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
required: ['reason'],
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
async function executeBrowserLaunch(args: Record<string, unknown>): Promise<ToolResult> {
|
|
51
|
+
const headless = args['headless'] === true;
|
|
52
|
+
const browser = (args['browser'] as 'chrome' | 'edge') || 'chrome';
|
|
53
|
+
|
|
54
|
+
logger.toolStart('browser_launch', { headless, browser });
|
|
55
|
+
|
|
56
|
+
try {
|
|
57
|
+
// Check if browser is already active
|
|
58
|
+
if (await browserClient.isBrowserActive()) {
|
|
59
|
+
logger.toolSuccess('browser_launch', args, { alreadyRunning: true }, 0);
|
|
60
|
+
return {
|
|
61
|
+
success: true,
|
|
62
|
+
result: 'Browser is already running.',
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Ensure server is running
|
|
67
|
+
await browserClient.startServer();
|
|
68
|
+
|
|
69
|
+
// Launch browser
|
|
70
|
+
const response = await browserClient.launch({ headless, browser });
|
|
71
|
+
|
|
72
|
+
if (!response.success) {
|
|
73
|
+
logger.toolError('browser_launch', args, new Error(response.error || 'Failed to launch browser'), 0);
|
|
74
|
+
return {
|
|
75
|
+
success: false,
|
|
76
|
+
error: response.error || 'Failed to launch browser',
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
logger.toolSuccess('browser_launch', args, { browser: response['browser'] || browser, headless }, 0);
|
|
81
|
+
return {
|
|
82
|
+
success: true,
|
|
83
|
+
result: `${response['browser'] || browser} launched successfully (headless: ${headless})`,
|
|
84
|
+
};
|
|
85
|
+
} catch (error) {
|
|
86
|
+
logger.toolError('browser_launch', args, error as Error, 0);
|
|
87
|
+
return {
|
|
88
|
+
success: false,
|
|
89
|
+
error: `Failed to launch browser: ${error instanceof Error ? error.message : String(error)}`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export const browserLaunchTool: LLMSimpleTool = {
|
|
95
|
+
definition: BROWSER_LAUNCH_DEFINITION,
|
|
96
|
+
execute: executeBrowserLaunch,
|
|
97
|
+
categories: BROWSER_CATEGORIES,
|
|
98
|
+
description: 'Launch Chrome/Edge browser',
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* browser_navigate Tool Definition
|
|
103
|
+
*/
|
|
104
|
+
const BROWSER_NAVIGATE_DEFINITION: ToolDefinition = {
|
|
105
|
+
type: 'function',
|
|
106
|
+
function: {
|
|
107
|
+
name: 'browser_navigate',
|
|
108
|
+
description: `Navigate browser to a URL. Use this to open web pages for testing.
|
|
109
|
+
Common URLs:
|
|
110
|
+
- http://localhost:3000 - Local development server
|
|
111
|
+
- http://localhost:8080 - Alternative local server
|
|
112
|
+
- https://example.com - External website`,
|
|
113
|
+
parameters: {
|
|
114
|
+
type: 'object',
|
|
115
|
+
properties: {
|
|
116
|
+
reason: {
|
|
117
|
+
type: 'string',
|
|
118
|
+
description: 'Explanation of why you are navigating to this URL',
|
|
119
|
+
},
|
|
120
|
+
url: {
|
|
121
|
+
type: 'string',
|
|
122
|
+
description: 'The URL to navigate to (e.g., http://localhost:3000)',
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
required: ['reason', 'url'],
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
async function executeBrowserNavigate(args: Record<string, unknown>): Promise<ToolResult> {
|
|
131
|
+
const url = args['url'] as string;
|
|
132
|
+
|
|
133
|
+
logger.toolStart('browser_navigate', { url });
|
|
134
|
+
|
|
135
|
+
try {
|
|
136
|
+
// Auto-launch if not running
|
|
137
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
138
|
+
logger.flow('Browser not active, auto-launching');
|
|
139
|
+
await browserClient.startServer();
|
|
140
|
+
await browserClient.launch({ headless: false });
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const response = await browserClient.navigate(url);
|
|
144
|
+
|
|
145
|
+
if (!response.success) {
|
|
146
|
+
logger.toolError('browser_navigate', args, new Error(response.error || 'Failed to navigate'), 0);
|
|
147
|
+
return {
|
|
148
|
+
success: false,
|
|
149
|
+
error: response.error || 'Failed to navigate',
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
logger.toolSuccess('browser_navigate', args, { url: response.url, title: response.title }, 0);
|
|
154
|
+
return {
|
|
155
|
+
success: true,
|
|
156
|
+
result: `Navigated to ${response.url}\nPage title: ${response.title}`,
|
|
157
|
+
};
|
|
158
|
+
} catch (error) {
|
|
159
|
+
logger.toolError('browser_navigate', args, error as Error, 0);
|
|
160
|
+
return {
|
|
161
|
+
success: false,
|
|
162
|
+
error: `Failed to navigate: ${error instanceof Error ? error.message : String(error)}`,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export const browserNavigateTool: LLMSimpleTool = {
|
|
168
|
+
definition: BROWSER_NAVIGATE_DEFINITION,
|
|
169
|
+
execute: executeBrowserNavigate,
|
|
170
|
+
categories: BROWSER_CATEGORIES,
|
|
171
|
+
description: 'Navigate browser to URL',
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* browser_screenshot Tool Definition
|
|
176
|
+
*/
|
|
177
|
+
const BROWSER_SCREENSHOT_DEFINITION: ToolDefinition = {
|
|
178
|
+
type: 'function',
|
|
179
|
+
function: {
|
|
180
|
+
name: 'browser_screenshot',
|
|
181
|
+
description: `Take a screenshot of the current browser page.
|
|
182
|
+
Returns a base64-encoded PNG image that you can analyze to understand the page state.
|
|
183
|
+
Screenshots are also saved to ~/.local-cli/screenshots/browser/
|
|
184
|
+
Use this to verify that pages loaded correctly or to check UI elements.`,
|
|
185
|
+
parameters: {
|
|
186
|
+
type: 'object',
|
|
187
|
+
properties: {
|
|
188
|
+
reason: {
|
|
189
|
+
type: 'string',
|
|
190
|
+
description: 'Explanation of why you are taking a screenshot',
|
|
191
|
+
},
|
|
192
|
+
full_page: {
|
|
193
|
+
type: 'boolean',
|
|
194
|
+
description: 'Capture the full scrollable page (default: false, captures viewport only)',
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
required: ['reason'],
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
async function executeBrowserScreenshot(args: Record<string, unknown>): Promise<ToolResult> {
|
|
203
|
+
const fullPage = args['full_page'] === true;
|
|
204
|
+
|
|
205
|
+
logger.toolStart('browser_screenshot', { fullPage });
|
|
206
|
+
|
|
207
|
+
try {
|
|
208
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
209
|
+
logger.toolError('browser_screenshot', args, new Error('Browser not running'), 0);
|
|
210
|
+
return {
|
|
211
|
+
success: false,
|
|
212
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const response = await browserClient.screenshot(fullPage);
|
|
217
|
+
|
|
218
|
+
if (!response.success || !response.image) {
|
|
219
|
+
logger.toolError('browser_screenshot', args, new Error(response.error || 'Failed to take screenshot'), 0);
|
|
220
|
+
return {
|
|
221
|
+
success: false,
|
|
222
|
+
error: response.error || 'Failed to take screenshot',
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Save screenshot to file
|
|
227
|
+
const savedPath = browserClient.saveScreenshot(response.image, 'browser');
|
|
228
|
+
|
|
229
|
+
logger.toolSuccess('browser_screenshot', args, { savedPath, url: response.url, title: response.title }, 0);
|
|
230
|
+
return {
|
|
231
|
+
success: true,
|
|
232
|
+
result: `Screenshot captured of "${response.title}" (${response.url})\nSaved to: ${savedPath}`,
|
|
233
|
+
metadata: {
|
|
234
|
+
image: response.image,
|
|
235
|
+
imageType: 'image/png',
|
|
236
|
+
encoding: 'base64',
|
|
237
|
+
url: response.url,
|
|
238
|
+
title: response.title,
|
|
239
|
+
savedPath,
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
} catch (error) {
|
|
243
|
+
logger.toolError('browser_screenshot', args, error as Error, 0);
|
|
244
|
+
return {
|
|
245
|
+
success: false,
|
|
246
|
+
error: `Failed to take screenshot: ${error instanceof Error ? error.message : String(error)}`,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export const browserScreenshotTool: LLMSimpleTool = {
|
|
252
|
+
definition: BROWSER_SCREENSHOT_DEFINITION,
|
|
253
|
+
execute: executeBrowserScreenshot,
|
|
254
|
+
categories: BROWSER_CATEGORIES,
|
|
255
|
+
description: 'Take screenshot of browser',
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* browser_click Tool Definition
|
|
260
|
+
*/
|
|
261
|
+
const BROWSER_CLICK_DEFINITION: ToolDefinition = {
|
|
262
|
+
type: 'function',
|
|
263
|
+
function: {
|
|
264
|
+
name: 'browser_click',
|
|
265
|
+
description: `Click an element on the page by CSS selector.
|
|
266
|
+
Examples:
|
|
267
|
+
- button[type="submit"] - Submit button
|
|
268
|
+
- #login-btn - Element with id "login-btn"
|
|
269
|
+
- .nav-link - Element with class "nav-link"
|
|
270
|
+
- a[href="/about"] - Link to /about`,
|
|
271
|
+
parameters: {
|
|
272
|
+
type: 'object',
|
|
273
|
+
properties: {
|
|
274
|
+
reason: {
|
|
275
|
+
type: 'string',
|
|
276
|
+
description: 'Explanation of why you are clicking this element',
|
|
277
|
+
},
|
|
278
|
+
selector: {
|
|
279
|
+
type: 'string',
|
|
280
|
+
description: 'CSS selector of the element to click',
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
required: ['reason', 'selector'],
|
|
284
|
+
},
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
async function executeBrowserClick(args: Record<string, unknown>): Promise<ToolResult> {
|
|
289
|
+
const selector = args['selector'] as string;
|
|
290
|
+
const startTime = Date.now();
|
|
291
|
+
|
|
292
|
+
logger.toolStart('browser_click', { selector });
|
|
293
|
+
|
|
294
|
+
try {
|
|
295
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
296
|
+
logger.toolError('browser_click', args, new Error('Browser not running'), Date.now() - startTime);
|
|
297
|
+
return {
|
|
298
|
+
success: false,
|
|
299
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
const response = await browserClient.click(selector);
|
|
304
|
+
|
|
305
|
+
if (!response.success) {
|
|
306
|
+
logger.toolError('browser_click', args, new Error(response.error || `Failed to click: ${selector}`), Date.now() - startTime);
|
|
307
|
+
return {
|
|
308
|
+
success: false,
|
|
309
|
+
error: response.error || `Failed to click: ${selector}`,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
logger.toolSuccess('browser_click', args, { selector, currentUrl: response['current_url'] }, Date.now() - startTime);
|
|
314
|
+
return {
|
|
315
|
+
success: true,
|
|
316
|
+
result: `Clicked element: ${selector}\nCurrent URL: ${response['current_url'] || 'unknown'}`,
|
|
317
|
+
};
|
|
318
|
+
} catch (error) {
|
|
319
|
+
logger.toolError('browser_click', args, error as Error, Date.now() - startTime);
|
|
320
|
+
return {
|
|
321
|
+
success: false,
|
|
322
|
+
error: `Failed to click: ${error instanceof Error ? error.message : String(error)}`,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
export const browserClickTool: LLMSimpleTool = {
|
|
328
|
+
definition: BROWSER_CLICK_DEFINITION,
|
|
329
|
+
execute: executeBrowserClick,
|
|
330
|
+
categories: BROWSER_CATEGORIES,
|
|
331
|
+
description: 'Click element on page',
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* browser_fill Tool Definition
|
|
336
|
+
*/
|
|
337
|
+
const BROWSER_FILL_DEFINITION: ToolDefinition = {
|
|
338
|
+
type: 'function',
|
|
339
|
+
function: {
|
|
340
|
+
name: 'browser_fill',
|
|
341
|
+
description: `Fill an input field with text.
|
|
342
|
+
The existing content will be cleared before typing.
|
|
343
|
+
Examples:
|
|
344
|
+
- input[name="email"] - Email input field
|
|
345
|
+
- #password - Password field by id
|
|
346
|
+
- textarea.comment - Comment textarea`,
|
|
347
|
+
parameters: {
|
|
348
|
+
type: 'object',
|
|
349
|
+
properties: {
|
|
350
|
+
reason: {
|
|
351
|
+
type: 'string',
|
|
352
|
+
description: 'Explanation of why you are filling this field',
|
|
353
|
+
},
|
|
354
|
+
selector: {
|
|
355
|
+
type: 'string',
|
|
356
|
+
description: 'CSS selector of the input field',
|
|
357
|
+
},
|
|
358
|
+
value: {
|
|
359
|
+
type: 'string',
|
|
360
|
+
description: 'Text to type into the field',
|
|
361
|
+
},
|
|
362
|
+
},
|
|
363
|
+
required: ['reason', 'selector', 'value'],
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
async function executeBrowserFill(args: Record<string, unknown>): Promise<ToolResult> {
|
|
369
|
+
const selector = args['selector'] as string;
|
|
370
|
+
const value = args['value'] as string;
|
|
371
|
+
const startTime = Date.now();
|
|
372
|
+
|
|
373
|
+
logger.toolStart('browser_fill', { selector, valueLength: value?.length });
|
|
374
|
+
|
|
375
|
+
try {
|
|
376
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
377
|
+
logger.toolError('browser_fill', args, new Error('Browser not running'), Date.now() - startTime);
|
|
378
|
+
return {
|
|
379
|
+
success: false,
|
|
380
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
const response = await browserClient.fill(selector, value);
|
|
385
|
+
|
|
386
|
+
if (!response.success) {
|
|
387
|
+
logger.toolError('browser_fill', args, new Error(response.error || `Failed to fill: ${selector}`), Date.now() - startTime);
|
|
388
|
+
return {
|
|
389
|
+
success: false,
|
|
390
|
+
error: response.error || `Failed to fill: ${selector}`,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
logger.toolSuccess('browser_fill', args, { selector, valueLength: value.length }, Date.now() - startTime);
|
|
395
|
+
return {
|
|
396
|
+
success: true,
|
|
397
|
+
result: `Filled "${selector}" with text (${value.length} characters)`,
|
|
398
|
+
};
|
|
399
|
+
} catch (error) {
|
|
400
|
+
logger.toolError('browser_fill', args, error as Error, Date.now() - startTime);
|
|
401
|
+
return {
|
|
402
|
+
success: false,
|
|
403
|
+
error: `Failed to fill: ${error instanceof Error ? error.message : String(error)}`,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
export const browserFillTool: LLMSimpleTool = {
|
|
409
|
+
definition: BROWSER_FILL_DEFINITION,
|
|
410
|
+
execute: executeBrowserFill,
|
|
411
|
+
categories: BROWSER_CATEGORIES,
|
|
412
|
+
description: 'Fill input field with text',
|
|
413
|
+
};
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* browser_get_text Tool Definition
|
|
417
|
+
*/
|
|
418
|
+
const BROWSER_GET_TEXT_DEFINITION: ToolDefinition = {
|
|
419
|
+
type: 'function',
|
|
420
|
+
function: {
|
|
421
|
+
name: 'browser_get_text',
|
|
422
|
+
description: `Get the text content of an element.
|
|
423
|
+
Use this to read content from the page, like error messages or confirmation text.`,
|
|
424
|
+
parameters: {
|
|
425
|
+
type: 'object',
|
|
426
|
+
properties: {
|
|
427
|
+
reason: {
|
|
428
|
+
type: 'string',
|
|
429
|
+
description: 'Explanation of why you are reading this element',
|
|
430
|
+
},
|
|
431
|
+
selector: {
|
|
432
|
+
type: 'string',
|
|
433
|
+
description: 'CSS selector of the element to read',
|
|
434
|
+
},
|
|
435
|
+
},
|
|
436
|
+
required: ['reason', 'selector'],
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
};
|
|
440
|
+
|
|
441
|
+
async function executeBrowserGetText(args: Record<string, unknown>): Promise<ToolResult> {
|
|
442
|
+
const selector = args['selector'] as string;
|
|
443
|
+
const startTime = Date.now();
|
|
444
|
+
|
|
445
|
+
logger.toolStart('browser_get_text', { selector });
|
|
446
|
+
|
|
447
|
+
try {
|
|
448
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
449
|
+
logger.toolError('browser_get_text', args, new Error('Browser not running'), Date.now() - startTime);
|
|
450
|
+
return {
|
|
451
|
+
success: false,
|
|
452
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
const response = await browserClient.getText(selector);
|
|
457
|
+
|
|
458
|
+
if (!response.success) {
|
|
459
|
+
logger.toolError('browser_get_text', args, new Error(response.error || `Failed to get text: ${selector}`), Date.now() - startTime);
|
|
460
|
+
return {
|
|
461
|
+
success: false,
|
|
462
|
+
error: response.error || `Failed to get text: ${selector}`,
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
const text = (response['text'] as string) || '(empty)';
|
|
467
|
+
logger.toolSuccess('browser_get_text', args, { selector, textLength: text.length }, Date.now() - startTime);
|
|
468
|
+
return {
|
|
469
|
+
success: true,
|
|
470
|
+
result: text,
|
|
471
|
+
};
|
|
472
|
+
} catch (error) {
|
|
473
|
+
logger.toolError('browser_get_text', args, error as Error, Date.now() - startTime);
|
|
474
|
+
return {
|
|
475
|
+
success: false,
|
|
476
|
+
error: `Failed to get text: ${error instanceof Error ? error.message : String(error)}`,
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
export const browserGetTextTool: LLMSimpleTool = {
|
|
482
|
+
definition: BROWSER_GET_TEXT_DEFINITION,
|
|
483
|
+
execute: executeBrowserGetText,
|
|
484
|
+
categories: BROWSER_CATEGORIES,
|
|
485
|
+
description: 'Get text content of element',
|
|
486
|
+
};
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* browser_close Tool Definition
|
|
490
|
+
*/
|
|
491
|
+
const BROWSER_CLOSE_DEFINITION: ToolDefinition = {
|
|
492
|
+
type: 'function',
|
|
493
|
+
function: {
|
|
494
|
+
name: 'browser_close',
|
|
495
|
+
description: `Close the browser and end the automation session.
|
|
496
|
+
Use this when you are done testing.`,
|
|
497
|
+
parameters: {
|
|
498
|
+
type: 'object',
|
|
499
|
+
properties: {
|
|
500
|
+
reason: {
|
|
501
|
+
type: 'string',
|
|
502
|
+
description: 'Explanation of why you are closing the browser',
|
|
503
|
+
},
|
|
504
|
+
},
|
|
505
|
+
required: ['reason'],
|
|
506
|
+
},
|
|
507
|
+
},
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
async function executeBrowserClose(args: Record<string, unknown>): Promise<ToolResult> {
|
|
511
|
+
const startTime = Date.now();
|
|
512
|
+
|
|
513
|
+
logger.toolStart('browser_close', {});
|
|
514
|
+
|
|
515
|
+
try {
|
|
516
|
+
await browserClient.close();
|
|
517
|
+
|
|
518
|
+
logger.toolSuccess('browser_close', args, { closed: true }, Date.now() - startTime);
|
|
519
|
+
return {
|
|
520
|
+
success: true,
|
|
521
|
+
result: 'Browser closed successfully',
|
|
522
|
+
};
|
|
523
|
+
} catch (error) {
|
|
524
|
+
logger.toolError('browser_close', args, error as Error, Date.now() - startTime);
|
|
525
|
+
return {
|
|
526
|
+
success: false,
|
|
527
|
+
error: `Failed to close browser: ${error instanceof Error ? error.message : String(error)}`,
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
export const browserCloseTool: LLMSimpleTool = {
|
|
533
|
+
definition: BROWSER_CLOSE_DEFINITION,
|
|
534
|
+
execute: executeBrowserClose,
|
|
535
|
+
categories: BROWSER_CATEGORIES,
|
|
536
|
+
description: 'Close browser',
|
|
537
|
+
};
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* browser_get_content Tool Definition
|
|
541
|
+
*/
|
|
542
|
+
const BROWSER_GET_CONTENT_DEFINITION: ToolDefinition = {
|
|
543
|
+
type: 'function',
|
|
544
|
+
function: {
|
|
545
|
+
name: 'browser_get_content',
|
|
546
|
+
description: `Get the HTML content of the current page.
|
|
547
|
+
Returns page URL, title, and HTML source.
|
|
548
|
+
|
|
549
|
+
Use this tool when you need to:
|
|
550
|
+
- Find elements and their selectors
|
|
551
|
+
- Understand the page structure
|
|
552
|
+
- Check form fields
|
|
553
|
+
- Debug page issues`,
|
|
554
|
+
parameters: {
|
|
555
|
+
type: 'object',
|
|
556
|
+
properties: {
|
|
557
|
+
reason: {
|
|
558
|
+
type: 'string',
|
|
559
|
+
description: 'Explanation of why you need the page content',
|
|
560
|
+
},
|
|
561
|
+
},
|
|
562
|
+
required: ['reason'],
|
|
563
|
+
},
|
|
564
|
+
},
|
|
565
|
+
};
|
|
566
|
+
|
|
567
|
+
async function executeBrowserGetContent(args: Record<string, unknown>): Promise<ToolResult> {
|
|
568
|
+
const startTime = Date.now();
|
|
569
|
+
|
|
570
|
+
logger.toolStart('browser_get_content', {});
|
|
571
|
+
|
|
572
|
+
try {
|
|
573
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
574
|
+
logger.toolError('browser_get_content', args, new Error('Browser not running'), Date.now() - startTime);
|
|
575
|
+
return {
|
|
576
|
+
success: false,
|
|
577
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
578
|
+
};
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
const response = await browserClient.getHtml();
|
|
582
|
+
|
|
583
|
+
if (!response.success) {
|
|
584
|
+
logger.toolError('browser_get_content', args, new Error(response.error || 'Failed to get page content'), Date.now() - startTime);
|
|
585
|
+
return {
|
|
586
|
+
success: false,
|
|
587
|
+
error: response.error || 'Failed to get page content',
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
const html = response.html || '';
|
|
592
|
+
// Truncate HTML if too long
|
|
593
|
+
const maxLen = 10000;
|
|
594
|
+
const truncatedHtml = html.length > maxLen
|
|
595
|
+
? html.substring(0, maxLen) + `\n...(truncated, ${html.length} total chars)`
|
|
596
|
+
: html;
|
|
597
|
+
|
|
598
|
+
logger.toolSuccess('browser_get_content', args, { url: response.url, title: response.title, htmlLength: html.length }, Date.now() - startTime);
|
|
599
|
+
return {
|
|
600
|
+
success: true,
|
|
601
|
+
result: `Page: ${response.title} (${response.url})\n\nHTML:\n${truncatedHtml}`,
|
|
602
|
+
};
|
|
603
|
+
} catch (error) {
|
|
604
|
+
logger.toolError('browser_get_content', args, error as Error, Date.now() - startTime);
|
|
605
|
+
return {
|
|
606
|
+
success: false,
|
|
607
|
+
error: `Failed to get page content: ${error instanceof Error ? error.message : String(error)}`,
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
export const browserGetContentTool: LLMSimpleTool = {
|
|
613
|
+
definition: BROWSER_GET_CONTENT_DEFINITION,
|
|
614
|
+
execute: executeBrowserGetContent,
|
|
615
|
+
categories: BROWSER_CATEGORIES,
|
|
616
|
+
description: 'Get page HTML content',
|
|
617
|
+
};
|
|
618
|
+
|
|
619
|
+
/**
|
|
620
|
+
* browser_get_console Tool Definition
|
|
621
|
+
*/
|
|
622
|
+
const BROWSER_GET_CONSOLE_DEFINITION: ToolDefinition = {
|
|
623
|
+
type: 'function',
|
|
624
|
+
function: {
|
|
625
|
+
name: 'browser_get_console',
|
|
626
|
+
description: `Get console logs from the browser.
|
|
627
|
+
Returns console.log, console.error, console.warn messages.
|
|
628
|
+
|
|
629
|
+
Use this tool to:
|
|
630
|
+
- Debug JavaScript errors on the page
|
|
631
|
+
- Check API response logs
|
|
632
|
+
- Verify application behavior
|
|
633
|
+
- Find error messages that might explain UI issues`,
|
|
634
|
+
parameters: {
|
|
635
|
+
type: 'object',
|
|
636
|
+
properties: {
|
|
637
|
+
reason: {
|
|
638
|
+
type: 'string',
|
|
639
|
+
description: 'Explanation of why you need the console logs',
|
|
640
|
+
},
|
|
641
|
+
},
|
|
642
|
+
required: ['reason'],
|
|
643
|
+
},
|
|
644
|
+
},
|
|
645
|
+
};
|
|
646
|
+
|
|
647
|
+
async function executeBrowserGetConsole(args: Record<string, unknown>): Promise<ToolResult> {
|
|
648
|
+
const startTime = Date.now();
|
|
649
|
+
|
|
650
|
+
logger.toolStart('browser_get_console', {});
|
|
651
|
+
|
|
652
|
+
try {
|
|
653
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
654
|
+
logger.toolError('browser_get_console', args, new Error('Browser not running'), Date.now() - startTime);
|
|
655
|
+
return {
|
|
656
|
+
success: false,
|
|
657
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
658
|
+
};
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
const response = await browserClient.getConsole();
|
|
662
|
+
|
|
663
|
+
if (!response.success) {
|
|
664
|
+
logger.toolError('browser_get_console', args, new Error(response.error || 'Failed to get console logs'), Date.now() - startTime);
|
|
665
|
+
return {
|
|
666
|
+
success: false,
|
|
667
|
+
error: response.error || 'Failed to get console logs',
|
|
668
|
+
};
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
const logs = response.logs || [];
|
|
672
|
+
if (logs.length === 0) {
|
|
673
|
+
logger.toolSuccess('browser_get_console', args, { logCount: 0 }, Date.now() - startTime);
|
|
674
|
+
return {
|
|
675
|
+
success: true,
|
|
676
|
+
result: 'No console messages captured.',
|
|
677
|
+
};
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
const formatted = logs.map(log => {
|
|
681
|
+
const timestamp = new Date(log.timestamp).toLocaleTimeString('en-GB');
|
|
682
|
+
const icon = log.level === 'SEVERE' ? '❌' : log.level === 'WARNING' ? '⚠️' : '📝';
|
|
683
|
+
return `[${timestamp}] ${icon} ${log.level}: ${log.message}`;
|
|
684
|
+
}).join('\n');
|
|
685
|
+
|
|
686
|
+
logger.toolSuccess('browser_get_console', args, { logCount: logs.length }, Date.now() - startTime);
|
|
687
|
+
return {
|
|
688
|
+
success: true,
|
|
689
|
+
result: `Console logs (${logs.length} messages):\n\n${formatted}`,
|
|
690
|
+
};
|
|
691
|
+
} catch (error) {
|
|
692
|
+
logger.toolError('browser_get_console', args, error as Error, Date.now() - startTime);
|
|
693
|
+
return {
|
|
694
|
+
success: false,
|
|
695
|
+
error: `Failed to get console logs: ${error instanceof Error ? error.message : String(error)}`,
|
|
696
|
+
};
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
export const browserGetConsoleTool: LLMSimpleTool = {
|
|
701
|
+
definition: BROWSER_GET_CONSOLE_DEFINITION,
|
|
702
|
+
execute: executeBrowserGetConsole,
|
|
703
|
+
categories: BROWSER_CATEGORIES,
|
|
704
|
+
description: 'Get browser console logs',
|
|
705
|
+
};
|
|
706
|
+
|
|
707
|
+
/**
|
|
708
|
+
* browser_get_network Tool Definition
|
|
709
|
+
*/
|
|
710
|
+
const BROWSER_GET_NETWORK_DEFINITION: ToolDefinition = {
|
|
711
|
+
type: 'function',
|
|
712
|
+
function: {
|
|
713
|
+
name: 'browser_get_network',
|
|
714
|
+
description: `Get network request logs from the browser.
|
|
715
|
+
Returns HTTP requests and responses captured during page interactions.
|
|
716
|
+
|
|
717
|
+
Use this tool to:
|
|
718
|
+
- Debug API calls and responses
|
|
719
|
+
- Check request/response status codes
|
|
720
|
+
- Verify network requests are being made correctly
|
|
721
|
+
- Analyze API endpoints being called
|
|
722
|
+
- Check for failed network requests`,
|
|
723
|
+
parameters: {
|
|
724
|
+
type: 'object',
|
|
725
|
+
properties: {
|
|
726
|
+
reason: {
|
|
727
|
+
type: 'string',
|
|
728
|
+
description: 'Explanation of why you need the network logs',
|
|
729
|
+
},
|
|
730
|
+
},
|
|
731
|
+
required: ['reason'],
|
|
732
|
+
},
|
|
733
|
+
},
|
|
734
|
+
};
|
|
735
|
+
|
|
736
|
+
async function executeBrowserGetNetwork(args: Record<string, unknown>): Promise<ToolResult> {
|
|
737
|
+
const startTime = Date.now();
|
|
738
|
+
|
|
739
|
+
logger.toolStart('browser_get_network', {});
|
|
740
|
+
|
|
741
|
+
try {
|
|
742
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
743
|
+
logger.toolError('browser_get_network', args, new Error('Browser not running'), Date.now() - startTime);
|
|
744
|
+
return {
|
|
745
|
+
success: false,
|
|
746
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
747
|
+
};
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
const response = await browserClient.getNetwork();
|
|
751
|
+
|
|
752
|
+
if (!response.success) {
|
|
753
|
+
logger.toolError('browser_get_network', args, new Error(response.error || 'Failed to get network logs'), Date.now() - startTime);
|
|
754
|
+
return {
|
|
755
|
+
success: false,
|
|
756
|
+
error: response.error || 'Failed to get network logs',
|
|
757
|
+
};
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
const logs = response.logs || [];
|
|
761
|
+
if (logs.length === 0) {
|
|
762
|
+
logger.toolSuccess('browser_get_network', args, { logCount: 0 }, Date.now() - startTime);
|
|
763
|
+
return {
|
|
764
|
+
success: true,
|
|
765
|
+
result: 'No network requests captured.',
|
|
766
|
+
};
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
const formatted = logs.map(log => {
|
|
770
|
+
if (log.type === 'request') {
|
|
771
|
+
return `➡️ ${log.method} ${log.url}`;
|
|
772
|
+
} else {
|
|
773
|
+
const statusIcon = log.status && log.status >= 400 ? '❌' : '✅';
|
|
774
|
+
return `${statusIcon} ${log.status} ${log.statusText} - ${log.url} (${log.mimeType || 'unknown'})`;
|
|
775
|
+
}
|
|
776
|
+
}).join('\n');
|
|
777
|
+
|
|
778
|
+
logger.toolSuccess('browser_get_network', args, { logCount: logs.length }, Date.now() - startTime);
|
|
779
|
+
return {
|
|
780
|
+
success: true,
|
|
781
|
+
result: `Network logs (${logs.length} entries):\n\n${formatted}`,
|
|
782
|
+
};
|
|
783
|
+
} catch (error) {
|
|
784
|
+
logger.toolError('browser_get_network', args, error as Error, Date.now() - startTime);
|
|
785
|
+
return {
|
|
786
|
+
success: false,
|
|
787
|
+
error: `Failed to get network logs: ${error instanceof Error ? error.message : String(error)}`,
|
|
788
|
+
};
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
export const browserGetNetworkTool: LLMSimpleTool = {
|
|
793
|
+
definition: BROWSER_GET_NETWORK_DEFINITION,
|
|
794
|
+
execute: executeBrowserGetNetwork,
|
|
795
|
+
categories: BROWSER_CATEGORIES,
|
|
796
|
+
description: 'Get browser network logs',
|
|
797
|
+
};
|
|
798
|
+
|
|
799
|
+
/**
|
|
800
|
+
* browser_focus Tool Definition
|
|
801
|
+
*/
|
|
802
|
+
const BROWSER_FOCUS_DEFINITION: ToolDefinition = {
|
|
803
|
+
type: 'function',
|
|
804
|
+
function: {
|
|
805
|
+
name: 'browser_focus',
|
|
806
|
+
description: `Bring the browser window to the foreground.
|
|
807
|
+
Use this to make the browser window visible and focused when needed.`,
|
|
808
|
+
parameters: {
|
|
809
|
+
type: 'object',
|
|
810
|
+
properties: {
|
|
811
|
+
reason: {
|
|
812
|
+
type: 'string',
|
|
813
|
+
description: 'Explanation of why you need to focus the browser window',
|
|
814
|
+
},
|
|
815
|
+
},
|
|
816
|
+
required: ['reason'],
|
|
817
|
+
},
|
|
818
|
+
},
|
|
819
|
+
};
|
|
820
|
+
|
|
821
|
+
async function executeBrowserFocus(args: Record<string, unknown>): Promise<ToolResult> {
|
|
822
|
+
const startTime = Date.now();
|
|
823
|
+
|
|
824
|
+
logger.toolStart('browser_focus', {});
|
|
825
|
+
|
|
826
|
+
try {
|
|
827
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
828
|
+
logger.toolError('browser_focus', args, new Error('Browser not running'), Date.now() - startTime);
|
|
829
|
+
return {
|
|
830
|
+
success: false,
|
|
831
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
832
|
+
};
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
const response = await browserClient.focus();
|
|
836
|
+
|
|
837
|
+
if (!response.success) {
|
|
838
|
+
logger.toolError('browser_focus', args, new Error(response.error || 'Failed to focus browser window'), Date.now() - startTime);
|
|
839
|
+
return {
|
|
840
|
+
success: false,
|
|
841
|
+
error: response.error || 'Failed to focus browser window',
|
|
842
|
+
};
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
logger.toolSuccess('browser_focus', args, { focused: true }, Date.now() - startTime);
|
|
846
|
+
return {
|
|
847
|
+
success: true,
|
|
848
|
+
result: 'Browser window brought to foreground.',
|
|
849
|
+
};
|
|
850
|
+
} catch (error) {
|
|
851
|
+
logger.toolError('browser_focus', args, error as Error, Date.now() - startTime);
|
|
852
|
+
return {
|
|
853
|
+
success: false,
|
|
854
|
+
error: `Failed to focus browser: ${error instanceof Error ? error.message : String(error)}`,
|
|
855
|
+
};
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
export const browserFocusTool: LLMSimpleTool = {
|
|
860
|
+
definition: BROWSER_FOCUS_DEFINITION,
|
|
861
|
+
execute: executeBrowserFocus,
|
|
862
|
+
categories: BROWSER_CATEGORIES,
|
|
863
|
+
description: 'Bring browser window to foreground',
|
|
864
|
+
};
|
|
865
|
+
|
|
866
|
+
/**
|
|
867
|
+
* browser_press_key Tool Definition
|
|
868
|
+
*/
|
|
869
|
+
const BROWSER_PRESS_KEY_DEFINITION: ToolDefinition = {
|
|
870
|
+
type: 'function',
|
|
871
|
+
function: {
|
|
872
|
+
name: 'browser_press_key',
|
|
873
|
+
description: `Press a keyboard key in the browser.
|
|
874
|
+
|
|
875
|
+
Supports special keys:
|
|
876
|
+
- Enter, Tab, Escape, Space
|
|
877
|
+
- ArrowUp, ArrowDown, ArrowLeft, ArrowRight
|
|
878
|
+
- Backspace, Delete, Home, End, PageUp, PageDown
|
|
879
|
+
- F1-F12
|
|
880
|
+
- Control, Alt, Shift, Meta
|
|
881
|
+
|
|
882
|
+
Key combinations (use + to combine):
|
|
883
|
+
- Control+A (select all)
|
|
884
|
+
- Control+C (copy)
|
|
885
|
+
- Control+V (paste)
|
|
886
|
+
- Shift+Tab (reverse tab)
|
|
887
|
+
|
|
888
|
+
Use this for form submission (Enter), navigation, or keyboard shortcuts.`,
|
|
889
|
+
parameters: {
|
|
890
|
+
type: 'object',
|
|
891
|
+
properties: {
|
|
892
|
+
reason: {
|
|
893
|
+
type: 'string',
|
|
894
|
+
description: 'Explanation of why you are pressing this key',
|
|
895
|
+
},
|
|
896
|
+
key: {
|
|
897
|
+
type: 'string',
|
|
898
|
+
description: 'Key to press (e.g., "Enter", "Tab", "Escape", "Control+A")',
|
|
899
|
+
},
|
|
900
|
+
selector: {
|
|
901
|
+
type: 'string',
|
|
902
|
+
description: 'Optional CSS selector of element to focus before pressing key',
|
|
903
|
+
},
|
|
904
|
+
},
|
|
905
|
+
required: ['reason', 'key'],
|
|
906
|
+
},
|
|
907
|
+
},
|
|
908
|
+
};
|
|
909
|
+
|
|
910
|
+
async function executeBrowserPressKey(args: Record<string, unknown>): Promise<ToolResult> {
|
|
911
|
+
const key = args['key'] as string;
|
|
912
|
+
const selector = args['selector'] as string | undefined;
|
|
913
|
+
const startTime = Date.now();
|
|
914
|
+
|
|
915
|
+
logger.toolStart('browser_press_key', { key, selector });
|
|
916
|
+
|
|
917
|
+
try {
|
|
918
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
919
|
+
logger.toolError('browser_press_key', args, new Error('Browser not running'), Date.now() - startTime);
|
|
920
|
+
return {
|
|
921
|
+
success: false,
|
|
922
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
923
|
+
};
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
const response = await browserClient.pressKey(key, selector);
|
|
927
|
+
|
|
928
|
+
if (!response.success) {
|
|
929
|
+
logger.toolError('browser_press_key', args, new Error(response.error || `Failed to press key: ${key}`), Date.now() - startTime);
|
|
930
|
+
return {
|
|
931
|
+
success: false,
|
|
932
|
+
error: response.error || `Failed to press key: ${key}`,
|
|
933
|
+
};
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
logger.toolSuccess('browser_press_key', args, { key, selector }, Date.now() - startTime);
|
|
937
|
+
return {
|
|
938
|
+
success: true,
|
|
939
|
+
result: `Key "${key}" pressed${selector ? ` on ${selector}` : ''}`,
|
|
940
|
+
};
|
|
941
|
+
} catch (error) {
|
|
942
|
+
logger.toolError('browser_press_key', args, error as Error, Date.now() - startTime);
|
|
943
|
+
return {
|
|
944
|
+
success: false,
|
|
945
|
+
error: `Failed to press key: ${error instanceof Error ? error.message : String(error)}`,
|
|
946
|
+
};
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
export const browserPressKeyTool: LLMSimpleTool = {
|
|
951
|
+
definition: BROWSER_PRESS_KEY_DEFINITION,
|
|
952
|
+
execute: executeBrowserPressKey,
|
|
953
|
+
categories: BROWSER_CATEGORIES,
|
|
954
|
+
description: 'Press keyboard key',
|
|
955
|
+
};
|
|
956
|
+
|
|
957
|
+
/**
|
|
958
|
+
* browser_type Tool Definition
|
|
959
|
+
*/
|
|
960
|
+
const BROWSER_TYPE_DEFINITION: ToolDefinition = {
|
|
961
|
+
type: 'function',
|
|
962
|
+
function: {
|
|
963
|
+
name: 'browser_type',
|
|
964
|
+
description: `Type text character by character (triggers key events).
|
|
965
|
+
Unlike browser_fill which sets value directly, this simulates actual typing.
|
|
966
|
+
Useful for inputs that have keystroke handlers or autocomplete.`,
|
|
967
|
+
parameters: {
|
|
968
|
+
type: 'object',
|
|
969
|
+
properties: {
|
|
970
|
+
reason: {
|
|
971
|
+
type: 'string',
|
|
972
|
+
description: 'Explanation of why you are typing this text',
|
|
973
|
+
},
|
|
974
|
+
text: {
|
|
975
|
+
type: 'string',
|
|
976
|
+
description: 'Text to type',
|
|
977
|
+
},
|
|
978
|
+
selector: {
|
|
979
|
+
type: 'string',
|
|
980
|
+
description: 'Optional CSS selector of element to type into',
|
|
981
|
+
},
|
|
982
|
+
},
|
|
983
|
+
required: ['reason', 'text'],
|
|
984
|
+
},
|
|
985
|
+
},
|
|
986
|
+
};
|
|
987
|
+
|
|
988
|
+
async function executeBrowserType(args: Record<string, unknown>): Promise<ToolResult> {
|
|
989
|
+
const text = args['text'] as string;
|
|
990
|
+
const selector = args['selector'] as string | undefined;
|
|
991
|
+
const startTime = Date.now();
|
|
992
|
+
|
|
993
|
+
logger.toolStart('browser_type', { textLength: text?.length, selector });
|
|
994
|
+
|
|
995
|
+
try {
|
|
996
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
997
|
+
logger.toolError('browser_type', args, new Error('Browser not running'), Date.now() - startTime);
|
|
998
|
+
return {
|
|
999
|
+
success: false,
|
|
1000
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
1001
|
+
};
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
const response = await browserClient.type(text, selector);
|
|
1005
|
+
|
|
1006
|
+
if (!response.success) {
|
|
1007
|
+
logger.toolError('browser_type', args, new Error(response.error || 'Failed to type text'), Date.now() - startTime);
|
|
1008
|
+
return {
|
|
1009
|
+
success: false,
|
|
1010
|
+
error: response.error || 'Failed to type text',
|
|
1011
|
+
};
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
logger.toolSuccess('browser_type', args, { textLength: text.length, selector }, Date.now() - startTime);
|
|
1015
|
+
return {
|
|
1016
|
+
success: true,
|
|
1017
|
+
result: `Typed ${text.length} characters${selector ? ` into ${selector}` : ''}`,
|
|
1018
|
+
};
|
|
1019
|
+
} catch (error) {
|
|
1020
|
+
logger.toolError('browser_type', args, error as Error, Date.now() - startTime);
|
|
1021
|
+
return {
|
|
1022
|
+
success: false,
|
|
1023
|
+
error: `Failed to type: ${error instanceof Error ? error.message : String(error)}`,
|
|
1024
|
+
};
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
export const browserTypeTool: LLMSimpleTool = {
|
|
1029
|
+
definition: BROWSER_TYPE_DEFINITION,
|
|
1030
|
+
execute: executeBrowserType,
|
|
1031
|
+
categories: BROWSER_CATEGORIES,
|
|
1032
|
+
description: 'Type text character by character',
|
|
1033
|
+
};
|
|
1034
|
+
|
|
1035
|
+
/**
|
|
1036
|
+
* browser_execute_script Tool Definition
|
|
1037
|
+
*/
|
|
1038
|
+
const BROWSER_EXECUTE_SCRIPT_DEFINITION: ToolDefinition = {
|
|
1039
|
+
type: 'function',
|
|
1040
|
+
function: {
|
|
1041
|
+
name: 'browser_execute_script',
|
|
1042
|
+
description: `Execute JavaScript code in the browser context.
|
|
1043
|
+
The script is automatically wrapped in an async function, so you can use 'return' statements and 'await'.
|
|
1044
|
+
Use this only when other browser tools don't cover your use case.
|
|
1045
|
+
Examples:
|
|
1046
|
+
- "return document.title;" - returns page title
|
|
1047
|
+
- "return document.querySelectorAll('a').length;" - count all links
|
|
1048
|
+
- "return await fetch('/api/data').then(r => r.json());" - async fetch`,
|
|
1049
|
+
parameters: {
|
|
1050
|
+
type: 'object',
|
|
1051
|
+
properties: {
|
|
1052
|
+
reason: {
|
|
1053
|
+
type: 'string',
|
|
1054
|
+
description: 'Explanation of why you need to execute this script',
|
|
1055
|
+
},
|
|
1056
|
+
script: {
|
|
1057
|
+
type: 'string',
|
|
1058
|
+
description: 'JavaScript code to execute (can use return and await)',
|
|
1059
|
+
},
|
|
1060
|
+
},
|
|
1061
|
+
required: ['reason', 'script'],
|
|
1062
|
+
},
|
|
1063
|
+
},
|
|
1064
|
+
};
|
|
1065
|
+
|
|
1066
|
+
async function executeBrowserExecuteScript(args: Record<string, unknown>): Promise<ToolResult> {
|
|
1067
|
+
const script = args['script'] as string;
|
|
1068
|
+
const startTime = Date.now();
|
|
1069
|
+
|
|
1070
|
+
logger.toolStart('browser_execute_script', { scriptLength: script?.length });
|
|
1071
|
+
|
|
1072
|
+
if (!script) {
|
|
1073
|
+
logger.toolError('browser_execute_script', args, new Error('Script argument required'), Date.now() - startTime);
|
|
1074
|
+
return {
|
|
1075
|
+
success: false,
|
|
1076
|
+
error: "The 'script' argument is required.",
|
|
1077
|
+
};
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
try {
|
|
1081
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
1082
|
+
logger.toolError('browser_execute_script', args, new Error('Browser not running'), Date.now() - startTime);
|
|
1083
|
+
return {
|
|
1084
|
+
success: false,
|
|
1085
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
1086
|
+
};
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
const response = await browserClient.executeScript(script);
|
|
1090
|
+
|
|
1091
|
+
if (!response.success) {
|
|
1092
|
+
logger.toolError('browser_execute_script', args, new Error(response.error || 'Failed to execute script'), Date.now() - startTime);
|
|
1093
|
+
return {
|
|
1094
|
+
success: false,
|
|
1095
|
+
error: response.error || 'Failed to execute script',
|
|
1096
|
+
result: response['details'] as string,
|
|
1097
|
+
};
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
logger.toolSuccess('browser_execute_script', args, { scriptLength: script.length }, Date.now() - startTime);
|
|
1101
|
+
return {
|
|
1102
|
+
success: true,
|
|
1103
|
+
result: JSON.stringify(response['result'], null, 2),
|
|
1104
|
+
};
|
|
1105
|
+
} catch (error) {
|
|
1106
|
+
logger.toolError('browser_execute_script', args, error as Error, Date.now() - startTime);
|
|
1107
|
+
return {
|
|
1108
|
+
success: false,
|
|
1109
|
+
error: `Failed to execute script: ${error instanceof Error ? error.message : String(error)}`,
|
|
1110
|
+
};
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
export const browserExecuteScriptTool: LLMSimpleTool = {
|
|
1115
|
+
definition: BROWSER_EXECUTE_SCRIPT_DEFINITION,
|
|
1116
|
+
execute: executeBrowserExecuteScript,
|
|
1117
|
+
categories: BROWSER_CATEGORIES,
|
|
1118
|
+
description: 'Execute JavaScript in browser',
|
|
1119
|
+
};
|
|
1120
|
+
|
|
1121
|
+
/**
|
|
1122
|
+
* All browser tools
|
|
1123
|
+
*/
|
|
1124
|
+
export const BROWSER_TOOLS: LLMSimpleTool[] = [
|
|
1125
|
+
browserLaunchTool,
|
|
1126
|
+
browserNavigateTool,
|
|
1127
|
+
browserScreenshotTool,
|
|
1128
|
+
browserClickTool,
|
|
1129
|
+
browserFillTool,
|
|
1130
|
+
browserGetTextTool,
|
|
1131
|
+
browserGetContentTool,
|
|
1132
|
+
browserGetConsoleTool,
|
|
1133
|
+
browserGetNetworkTool,
|
|
1134
|
+
browserFocusTool,
|
|
1135
|
+
browserPressKeyTool,
|
|
1136
|
+
browserTypeTool,
|
|
1137
|
+
browserExecuteScriptTool,
|
|
1138
|
+
browserCloseTool,
|
|
1139
|
+
];
|