@agimon-ai/doompi-computer-use 0.0.1-alpha.2 → 0.0.1-alpha.21
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/README.md +11 -4
- package/dist/_virtual/_rolldown/runtime.cjs +23 -1
- package/dist/api-contracts.cjs +7 -0
- package/dist/api-contracts.d.cts +2 -0
- package/dist/api-contracts.d.mts +2 -0
- package/dist/api-contracts.mjs +2 -0
- package/dist/extensions/mcp.cjs +56 -0
- package/dist/extensions/mcp.cjs.map +1 -0
- package/dist/extensions/mcp.d.cts +5 -0
- package/dist/extensions/mcp.d.cts.map +1 -0
- package/dist/extensions/mcp.d.mts +5 -0
- package/dist/extensions/mcp.d.mts.map +1 -0
- package/dist/extensions/mcp.mjs +51 -0
- package/dist/extensions/mcp.mjs.map +1 -0
- package/dist/extensions/pi.cjs +51 -1
- package/dist/extensions/pi.cjs.map +1 -0
- package/dist/extensions/pi.d.cts +7 -2
- package/dist/extensions/pi.d.cts.map +1 -0
- package/dist/extensions/pi.d.mts +7 -2
- package/dist/extensions/pi.d.mts.map +1 -0
- package/dist/extensions/pi.mjs +46 -1
- package/dist/extensions/pi.mjs.map +1 -0
- package/dist/extensions/server.cjs +72 -0
- package/dist/extensions/server.cjs.map +1 -0
- package/dist/extensions/server.d.cts +5 -0
- package/dist/extensions/server.d.cts.map +1 -0
- package/dist/extensions/server.d.mts +5 -0
- package/dist/extensions/server.d.mts.map +1 -0
- package/dist/extensions/server.mjs +67 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/extensions/web.mjs +625 -0
- package/dist/extensions/web.mjs.map +1 -0
- package/dist/index.cjs +18 -1
- package/dist/index.d.cts +12 -10
- package/dist/index.d.mts +12 -10
- package/dist/index.mjs +8 -1
- package/dist/src/constants/computerUse.cjs +17 -0
- package/dist/src/constants/computerUse.cjs.map +1 -0
- package/dist/src/constants/computerUse.d.cts +5 -0
- package/dist/src/constants/computerUse.d.cts.map +1 -0
- package/dist/src/constants/computerUse.d.mts +5 -0
- package/dist/src/constants/computerUse.d.mts.map +1 -0
- package/dist/src/constants/computerUse.mjs +14 -0
- package/dist/src/constants/computerUse.mjs.map +1 -0
- package/dist/src/extensions/(backend)/channel/computer-use.server.cjs +7 -0
- package/dist/src/extensions/(backend)/channel/computer-use.server.cjs.map +1 -0
- package/dist/src/extensions/(backend)/channel/computer-use.server.mjs +8 -0
- package/dist/src/extensions/(backend)/channel/computer-use.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.cjs +8 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.mjs +8 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.server.cjs +11 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.server.mjs +11 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/api/computer-use/route.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/api/computer-use/route.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/api/computer-use/route.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/api/computer-use/route.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs +15 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs +16 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs +17 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs +18 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.server.mjs.map +1 -0
- package/dist/src/models/computerUseMode.cjs +43 -0
- package/dist/src/models/computerUseMode.cjs.map +1 -0
- package/dist/src/models/computerUseMode.mjs +42 -0
- package/dist/src/models/computerUseMode.mjs.map +1 -0
- package/dist/src/models/computerUseState.cjs +89 -0
- package/dist/src/models/computerUseState.cjs.map +1 -0
- package/dist/src/models/computerUseState.d.cts +6 -0
- package/dist/src/models/computerUseState.d.cts.map +1 -0
- package/dist/src/models/computerUseState.d.mts +6 -0
- package/dist/src/models/computerUseState.d.mts.map +1 -0
- package/dist/src/models/computerUseState.mjs +88 -0
- package/dist/src/models/computerUseState.mjs.map +1 -0
- package/dist/src/schemas/apiContracts.cjs +194 -0
- package/dist/src/schemas/apiContracts.cjs.map +1 -0
- package/dist/src/schemas/apiContracts.d.cts +53 -0
- package/dist/src/schemas/apiContracts.d.cts.map +1 -0
- package/dist/src/schemas/apiContracts.d.mts +53 -0
- package/dist/src/schemas/apiContracts.d.mts.map +1 -0
- package/dist/src/schemas/apiContracts.mjs +191 -0
- package/dist/src/schemas/apiContracts.mjs.map +1 -0
- package/dist/src/services/computerScriptRunner/index.cjs +171 -0
- package/dist/src/services/computerScriptRunner/index.cjs.map +1 -0
- package/dist/src/services/computerScriptRunner/index.d.cts +12 -0
- package/dist/src/services/computerScriptRunner/index.d.cts.map +1 -0
- package/dist/src/services/computerScriptRunner/index.d.mts +12 -0
- package/dist/src/services/computerScriptRunner/index.d.mts.map +1 -0
- package/dist/src/services/computerScriptRunner/index.mjs +171 -0
- package/dist/src/services/computerScriptRunner/index.mjs.map +1 -0
- package/dist/src/services/computerUseApi/index.cjs +291 -0
- package/dist/src/services/computerUseApi/index.cjs.map +1 -0
- package/dist/src/services/computerUseApi/index.mjs +289 -0
- package/dist/src/services/computerUseApi/index.mjs.map +1 -0
- package/dist/src/services/computerUseCommand/index.cjs +15 -0
- package/dist/src/services/computerUseCommand/index.cjs.map +1 -0
- package/dist/src/services/computerUseCommand/index.mjs +15 -0
- package/dist/src/services/computerUseCommand/index.mjs.map +1 -0
- package/dist/src/services/computerUseRuntime/index.cjs +300 -0
- package/dist/src/services/computerUseRuntime/index.cjs.map +1 -0
- package/dist/src/services/computerUseRuntime/index.mjs +299 -0
- package/dist/src/services/computerUseRuntime/index.mjs.map +1 -0
- package/dist/src/services/computerUseServer/index.cjs +350 -0
- package/dist/src/services/computerUseServer/index.cjs.map +1 -0
- package/dist/src/services/computerUseServer/index.mjs +348 -0
- package/dist/src/services/computerUseServer/index.mjs.map +1 -0
- package/dist/src/services/dependencies/index.cjs +27 -0
- package/dist/src/services/dependencies/index.cjs.map +1 -0
- package/dist/src/services/dependencies/index.d.cts +6 -0
- package/dist/src/services/dependencies/index.d.cts.map +1 -0
- package/dist/src/services/dependencies/index.d.mts +6 -0
- package/dist/src/services/dependencies/index.d.mts.map +1 -0
- package/dist/src/services/dependencies/index.mjs +24 -0
- package/dist/src/services/dependencies/index.mjs.map +1 -0
- package/dist/src/services/extensionService/index.cjs +21 -0
- package/dist/src/services/extensionService/index.cjs.map +1 -0
- package/dist/src/services/extensionService/index.d.cts +10 -0
- package/dist/src/services/extensionService/index.d.cts.map +1 -0
- package/dist/src/services/extensionService/index.d.mts +10 -0
- package/dist/src/services/extensionService/index.d.mts.map +1 -0
- package/dist/src/services/extensionService/index.mjs +21 -0
- package/dist/src/services/extensionService/index.mjs.map +1 -0
- package/dist/src/services/mcpTools/index.cjs +17 -0
- package/dist/src/services/mcpTools/index.cjs.map +1 -0
- package/dist/src/services/mcpTools/index.mjs +16 -0
- package/dist/src/services/mcpTools/index.mjs.map +1 -0
- package/dist/src/services/sessionApiClient/index.cjs +9 -0
- package/dist/src/services/sessionApiClient/index.cjs.map +1 -0
- package/dist/src/services/sessionApiClient/index.d.cts +15 -0
- package/dist/src/services/sessionApiClient/index.d.cts.map +1 -0
- package/dist/src/services/sessionApiClient/index.d.mts +15 -0
- package/dist/src/services/sessionApiClient/index.d.mts.map +1 -0
- package/dist/src/services/sessionApiClient/index.mjs +9 -0
- package/dist/src/services/sessionApiClient/index.mjs.map +1 -0
- package/dist/src/services/traceRedaction/index.cjs +19 -0
- package/dist/src/services/traceRedaction/index.cjs.map +1 -0
- package/dist/{services/traceRedaction.d.mts → src/services/traceRedaction/index.d.cts} +6 -7
- package/dist/src/services/traceRedaction/index.d.cts.map +1 -0
- package/dist/{services/traceRedaction.d.cts → src/services/traceRedaction/index.d.mts} +6 -7
- package/dist/src/services/traceRedaction/index.d.mts.map +1 -0
- package/dist/src/services/traceRedaction/index.mjs +19 -0
- package/dist/src/services/traceRedaction/index.mjs.map +1 -0
- package/dist/src/services/webComputerUseAvailability/index.cjs +13 -0
- package/dist/src/services/webComputerUseAvailability/index.cjs.map +1 -0
- package/dist/src/services/webComputerUseAvailability/index.mjs +12 -0
- package/dist/src/services/webComputerUseAvailability/index.mjs.map +1 -0
- package/dist/src/services/webComputerUseChannel/index.cjs +251 -0
- package/dist/src/services/webComputerUseChannel/index.cjs.map +1 -0
- package/dist/src/services/webComputerUseChannel/index.mjs +250 -0
- package/dist/src/services/webComputerUseChannel/index.mjs.map +1 -0
- package/dist/src/types/apiRoutes.cjs +84 -0
- package/dist/src/types/apiRoutes.cjs.map +1 -0
- package/dist/src/types/apiRoutes.mjs +84 -0
- package/dist/src/types/apiRoutes.mjs.map +1 -0
- package/dist/src/types/computerScript.d.cts +38 -0
- package/dist/src/types/computerScript.d.cts.map +1 -0
- package/dist/src/types/computerScript.d.mts +38 -0
- package/dist/src/types/computerScript.d.mts.map +1 -0
- package/dist/{types → src/types}/computerUse.d.cts +14 -14
- package/dist/src/types/computerUse.d.cts.map +1 -0
- package/dist/{types → src/types}/computerUse.d.mts +14 -14
- package/dist/src/types/computerUse.d.mts.map +1 -0
- package/dist/src/types/computerUseApi.cjs +41 -0
- package/dist/src/types/computerUseApi.cjs.map +1 -0
- package/dist/{types → src/types}/computerUseApi.d.cts +28 -20
- package/dist/src/types/computerUseApi.d.cts.map +1 -0
- package/dist/{types → src/types}/computerUseApi.d.mts +28 -20
- package/dist/src/types/computerUseApi.d.mts.map +1 -0
- package/dist/src/types/computerUseApi.mjs +33 -0
- package/dist/src/types/computerUseApi.mjs.map +1 -0
- package/dist/src/types/extension.d.cts +19 -0
- package/dist/src/types/extension.d.cts.map +1 -0
- package/dist/src/types/extension.d.mts +19 -0
- package/dist/src/types/extension.d.mts.map +1 -0
- package/docs/computer-scripts.md +37 -0
- package/llms.txt +1 -0
- package/package.json +55 -33
- package/src/prompts/doompi-use-computer-use/SKILL.md +1 -1
- package/src/types/computerUse.ts +3 -2
- package/src/types/computerUseApi.ts +9 -6
- package/dist/adapters/computerUseApi.cjs +0 -2
- package/dist/adapters/computerUseApi.cjs.map +0 -1
- package/dist/adapters/computerUseApi.d.cts +0 -37
- package/dist/adapters/computerUseApi.d.cts.map +0 -1
- package/dist/adapters/computerUseApi.d.mts +0 -37
- package/dist/adapters/computerUseApi.d.mts.map +0 -1
- package/dist/adapters/computerUseApi.mjs +0 -2
- package/dist/adapters/computerUseApi.mjs.map +0 -1
- package/dist/adapters/pi/extension.cjs +0 -3
- package/dist/adapters/pi/extension.cjs.map +0 -1
- package/dist/adapters/pi/extension.d.cts +0 -12
- package/dist/adapters/pi/extension.d.cts.map +0 -1
- package/dist/adapters/pi/extension.d.mts +0 -12
- package/dist/adapters/pi/extension.d.mts.map +0 -1
- package/dist/adapters/pi/extension.mjs +0 -3
- package/dist/adapters/pi/extension.mjs.map +0 -1
- package/dist/adapters/pi/sessionApiClient.cjs +0 -2
- package/dist/adapters/pi/sessionApiClient.cjs.map +0 -1
- package/dist/adapters/pi/sessionApiClient.d.cts +0 -26
- package/dist/adapters/pi/sessionApiClient.d.cts.map +0 -1
- package/dist/adapters/pi/sessionApiClient.d.mts +0 -26
- package/dist/adapters/pi/sessionApiClient.d.mts.map +0 -1
- package/dist/adapters/pi/sessionApiClient.mjs +0 -2
- package/dist/adapters/pi/sessionApiClient.mjs.map +0 -1
- package/dist/adapters/webComputerUseAvailability.cjs +0 -2
- package/dist/adapters/webComputerUseAvailability.cjs.map +0 -1
- package/dist/adapters/webComputerUseAvailability.mjs +0 -2
- package/dist/adapters/webComputerUseAvailability.mjs.map +0 -1
- package/dist/adapters/webComputerUseChannel.cjs +0 -2
- package/dist/adapters/webComputerUseChannel.cjs.map +0 -1
- package/dist/adapters/webComputerUseChannel.d.cts +0 -10
- package/dist/adapters/webComputerUseChannel.d.cts.map +0 -1
- package/dist/adapters/webComputerUseChannel.d.mts +0 -10
- package/dist/adapters/webComputerUseChannel.d.mts.map +0 -1
- package/dist/adapters/webComputerUseChannel.mjs +0 -2
- package/dist/adapters/webComputerUseChannel.mjs.map +0 -1
- package/dist/commands/computerUseCommand.cjs +0 -2
- package/dist/commands/computerUseCommand.cjs.map +0 -1
- package/dist/commands/computerUseCommand.mjs +0 -2
- package/dist/commands/computerUseCommand.mjs.map +0 -1
- package/dist/container/index.cjs +0 -2
- package/dist/container/index.cjs.map +0 -1
- package/dist/container/index.d.cts +0 -6
- package/dist/container/index.d.cts.map +0 -1
- package/dist/container/index.d.mts +0 -6
- package/dist/container/index.d.mts.map +0 -1
- package/dist/container/index.mjs +0 -2
- package/dist/container/index.mjs.map +0 -1
- package/dist/services/extensionService.cjs +0 -2
- package/dist/services/extensionService.cjs.map +0 -1
- package/dist/services/extensionService.d.cts +0 -11
- package/dist/services/extensionService.d.cts.map +0 -1
- package/dist/services/extensionService.d.mts +0 -11
- package/dist/services/extensionService.d.mts.map +0 -1
- package/dist/services/extensionService.mjs +0 -2
- package/dist/services/extensionService.mjs.map +0 -1
- package/dist/services/sessionController.cjs +0 -2
- package/dist/services/sessionController.cjs.map +0 -1
- package/dist/services/sessionController.d.cts +0 -7
- package/dist/services/sessionController.d.cts.map +0 -1
- package/dist/services/sessionController.d.mts +0 -7
- package/dist/services/sessionController.d.mts.map +0 -1
- package/dist/services/sessionController.mjs +0 -2
- package/dist/services/sessionController.mjs.map +0 -1
- package/dist/services/traceRedaction.cjs +0 -2
- package/dist/services/traceRedaction.cjs.map +0 -1
- package/dist/services/traceRedaction.d.cts.map +0 -1
- package/dist/services/traceRedaction.d.mts.map +0 -1
- package/dist/services/traceRedaction.mjs +0 -2
- package/dist/services/traceRedaction.mjs.map +0 -1
- package/dist/sessionApi.cjs +0 -1
- package/dist/sessionApi.d.cts +0 -2
- package/dist/sessionApi.d.mts +0 -2
- package/dist/sessionApi.mjs +0 -1
- package/dist/types/computerUse.d.cts.map +0 -1
- package/dist/types/computerUse.d.mts.map +0 -1
- package/dist/types/computerUseApi.cjs +0 -2
- package/dist/types/computerUseApi.cjs.map +0 -1
- package/dist/types/computerUseApi.d.cts.map +0 -1
- package/dist/types/computerUseApi.d.mts.map +0 -1
- package/dist/types/computerUseApi.mjs +0 -2
- package/dist/types/computerUseApi.mjs.map +0 -1
- package/dist/types/extension.d.cts +0 -17
- package/dist/types/extension.d.cts.map +0 -1
- package/dist/types/extension.d.mts +0 -17
- package/dist/types/extension.d.mts.map +0 -1
- package/dist/webHub.cjs +0 -1
- package/dist/webHub.d.cts +0 -3
- package/dist/webHub.d.mts +0 -3
- package/dist/webHub.mjs +0 -1
- package/src/exports/webClient.ts +0 -2
- package/src/web/ComputerActionToolCard.tsx +0 -51
- package/src/web/ComputerStateToolCard.tsx +0 -51
- package/src/web/ComputerUsePanel.tsx +0 -136
- package/src/web/computerActionToolRender.ts +0 -20
- package/src/web/computerStateToolRender.ts +0 -18
- package/src/web/computerUseStore.ts +0 -26
- package/src/web/index.ts +0 -41
- package/src/web/tsconfig.json +0 -28
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["createComputerUseSessionClient","path","ComputerScriptRunner","DefaultComputerUseExtensionService","COMPUTER_USE_MODE_ID","COMPUTER_USE_STATUS_KEY","defineMinorMode","modeState","serverMinorModes","COMPUTER_USE_TOOL_NAMES","COMMAND_NAME","COMMAND_DESCRIPTION"],"sources":["../../../../src/services/computerUseServer/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { type DoomHeadlessToolResult } from '@agimon-ai/doompi-core/headless';\nimport { serverMinorModes } from '@agimon-ai/doompi-minor-mode';\nimport { defineMinorMode, type MinorModeOwner } from '@agimon-ai/doompi-minor-mode';\n\nimport { COMMAND_NAME, COMMAND_DESCRIPTION } from '../../constants/computerUse';\nimport { COMPUTER_USE_TOOL_NAMES } from '../../constants/computerUse';\nimport { modeState } from '../../models/computerUseMode';\nimport { ComputerScriptRunner } from '../../services/computerScriptRunner';\nimport { DefaultComputerUseExtensionService } from '../../services/extensionService';\nimport { createComputerUseSessionClient } from '../../services/sessionApiClient';\nimport type { ComputerUseAction, ComputerUseObservation } from '../../types/computerUse';\nimport { COMPUTER_USE_MODE_ID, COMPUTER_USE_STATUS_KEY } from '../../types/computerUseApi';\nimport type { ComputerUseSessionView } from '../../types/computerUseApi';\n\n/** This package's identity for mode, activity and restriction ownership, not a status key. */\nconst SOURCE = '@agimon-ai/doompi-computer-use';\n\nconst SCRIPT_PATHS_ENV = 'DOOMPI_COMPUTER_USE_SCRIPT_PATHS';\nconst GUIDANCE =\n '[COMPUTER USE ACTIVE]\\nUse computer_state before acting and after any action that may change the interface. Use only element refs and snapshot ids returned by computer_state. Never infer coordinates or bypass secure elements.';\n\nfunction output(value: unknown, isError = false): DoomHeadlessToolResult {\n return {\n content: [{ type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) }],\n details: value,\n ...(isError ? { isError: true } : {}),\n };\n}\n\nfunction observationOutput(value: ComputerUseObservation): DoomHeadlessToolResult {\n return {\n content: [\n { type: 'text', text: JSON.stringify({ ...value, screenshot: undefined }, null, 2) },\n { type: 'image', data: value.screenshot.data, mimeType: value.screenshot.mimeType },\n ],\n details: value,\n };\n}\n\nimport {\n type DoomHeadlessHostService,\n type DoomHeadlessTool,\n type DoomHeadlessCommand,\n} from '@agimon-ai/doompi-core/headless';\nimport { type DoomServerSessionPlugin } from '@agimon-ai/doompi-core/server-facet';\nexport function createComputerUseServer(host: DoomHeadlessHostService): Omit<\n DoomServerSessionPlugin,\n 'tools' | 'commands'\n> & {\n tools: readonly DoomHeadlessTool[];\n commands: readonly DoomHeadlessCommand[];\n} {\n const client = createComputerUseSessionClient();\n const allowedScriptPaths = (host.context.environment[SCRIPT_PATHS_ENV] ?? '')\n .split(path.delimiter)\n .filter((entry) => entry.length > 0);\n const scriptRunner = client === undefined ? undefined : new ComputerScriptRunner({ client, allowedScriptPaths });\n const service = new DefaultComputerUseExtensionService(client);\n const dependencies = { client, scriptRunner, service };\n let state: ComputerUseSessionView | undefined;\n let stopActivity: (() => void) | undefined;\n let modeOwner: MinorModeOwner | undefined;\n const modeSelected = (): boolean =>\n (host.context.selection.state?.['minor-mode'] ?? []).includes(COMPUTER_USE_MODE_ID);\n const publishMode = (): void => modeOwner?.publish();\n const applyState = (next: ComputerUseSessionView | undefined): void => {\n state = next;\n host.context.client.setStatus(\n COMPUTER_USE_STATUS_KEY,\n next === undefined || next.phase === 'inactive' ? undefined : `computer use: ${next.phase}`,\n );\n publishMode();\n };\n const selectMode = async (enabled: boolean): Promise<void> => {\n const modes = (host.context.selection.state?.['minor-mode'] ?? []).filter((mode) => mode !== COMPUTER_USE_MODE_ID);\n await host.changeSelection({\n axis: 'state',\n key: 'minor-mode',\n values: enabled ? [...modes, COMPUTER_USE_MODE_ID] : modes,\n });\n publishMode();\n };\n const refresh = async (signal?: AbortSignal): Promise<void> => {\n if (!client) {\n applyState(undefined);\n return;\n }\n try {\n applyState(await client.state(signal));\n } catch {\n applyState(undefined);\n }\n };\n const requireActive = (): NonNullable<typeof client> => {\n if (!client || state?.phase !== 'active') throw new Error('Computer use is not active for this session.');\n return client;\n };\n modeOwner = defineMinorMode<undefined>({\n descriptor: {\n source: SOURCE,\n id: COMPUTER_USE_MODE_ID,\n label: 'Computer Use',\n description: 'Session-scoped semantic control through DoomPi Desktop.',\n order: 450,\n actions: [\n {\n id: 'activate',\n label: 'Activate',\n description: 'Enable computer use for this session.',\n contexts: ['headless'],\n parameters: [],\n },\n {\n id: 'deactivate',\n label: 'Deactivate',\n description: 'Stop this session computer-use run.',\n contexts: ['headless'],\n parameters: [],\n },\n {\n id: 'doctor',\n label: 'Doctor',\n description: 'Report Desktop availability and session state.',\n contexts: ['headless'],\n parameters: [],\n },\n ],\n },\n state: () => modeState(state, modeSelected()),\n async handleAction(_runtime, actionId, _argumentsValue, execution) {\n execution.signal.throwIfAborted();\n if (actionId === 'activate') {\n if (!client) throw new Error('DoomPi Desktop computer use is unavailable.');\n await selectMode(true);\n await refresh(execution.signal);\n return { message: 'Computer use activated.' };\n }\n if (actionId === 'doctor') {\n await refresh(execution.signal);\n return {\n message: client\n ? `Computer use is ${state?.phase ?? 'unavailable'}.`\n : 'DoomPi Desktop session API is unavailable.',\n };\n }\n if (actionId === 'deactivate') {\n if (client && state?.phase !== undefined && state.phase !== 'inactive' && state.phase !== 'failed')\n await client.stop(execution.signal);\n await selectMode(false);\n await refresh(execution.signal);\n return { message: 'Computer use deactivated.' };\n }\n throw new Error(`Unknown computer-use action: ${actionId}`);\n },\n }).createOwner(undefined);\n return {\n services: [serverMinorModes([modeOwner])],\n toolRestrictions: [\n {\n when: { state: { 'minor-mode': COMPUTER_USE_MODE_ID } },\n allowedTools: [...COMPUTER_USE_TOOL_NAMES],\n },\n ],\n activities: [\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: SOURCE,\n async start() {\n await refresh();\n const unsubscribe = client?.subscribeStatus?.(applyState);\n stopActivity = () => {\n unsubscribe?.();\n applyState(undefined);\n };\n return () => {\n stopActivity?.();\n stopActivity = undefined;\n };\n },\n },\n ],\n tools: [\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: 'computer_state',\n label: 'Computer State',\n description: 'Observe the authorized application window and return semantic accessibility state.',\n parameters: { type: 'object', properties: {}, additionalProperties: false },\n executionMode: 'serial',\n async execute(_toolCallId, _parameters, signal) {\n try {\n const session = requireActive();\n const observation = await session.observe(signal);\n return observationOutput(observation);\n } catch (error) {\n return output(error instanceof Error ? error.message : String(error), true);\n }\n },\n },\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: 'computer_action',\n label: 'Computer Action',\n description: 'Perform one constrained semantic action in the authorized application window.',\n parameters: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['press', 'focus', 'set_value', 'scroll'] },\n snapshotId: { type: 'string', minLength: 1 },\n elementRef: { type: 'string', minLength: 1 },\n value: { type: 'string' },\n direction: { type: 'string', enum: ['up', 'down', 'left', 'right'] },\n amount: { type: 'string', enum: ['line', 'page'] },\n },\n required: ['kind', 'snapshotId', 'elementRef'],\n additionalProperties: false,\n },\n executionMode: 'serial',\n async execute(_toolCallId, parameters, signal) {\n try {\n const result = await requireActive().act(parameters as unknown as ComputerUseAction, signal);\n await refresh(signal);\n return output(result);\n } catch (error) {\n return output(error instanceof Error ? error.message : String(error), true);\n }\n },\n },\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: 'computer_exec',\n label: 'Computer Script',\n description:\n 'Run a trusted, explicitly allowed local TypeScript script against the authorized application session.',\n parameters: {\n type: 'object',\n properties: { scriptPath: { type: 'string', minLength: 1 }, input: {} },\n required: ['scriptPath', 'input'],\n additionalProperties: false,\n },\n executionMode: 'serial',\n async execute(_toolCallId, parameters, signal) {\n try {\n if (!dependencies.scriptRunner) throw new Error('Computer script execution is unavailable.');\n const input = parameters as { scriptPath: string; input: unknown };\n return output(await dependencies.scriptRunner.execute(input.scriptPath, input.input, signal));\n } catch (error) {\n return output(error instanceof Error ? error.message : String(error), true);\n }\n },\n },\n ],\n commands: [\n {\n name: COMMAND_NAME,\n description: COMMAND_DESCRIPTION,\n async execute(args, execution) {\n const result = await dependencies.service.execute();\n await execution.client.notify({ body: result.message, level: result.level });\n if (args.trim() === 'deactivate' && client && state?.phase !== 'inactive' && state?.phase !== 'failed') {\n await client.stop();\n await host.changeSelection({\n axis: 'state',\n key: 'minor-mode',\n values: (execution.selection.state?.['minor-mode'] ?? []).filter((mode) => mode !== COMPUTER_USE_MODE_ID),\n });\n await refresh();\n }\n },\n },\n ],\n hooks: [\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n event: 'before_agent_start',\n handle(event) {\n if (state?.phase !== 'active') return undefined;\n const prompt = typeof event.systemPrompt === 'string' ? event.systemPrompt : '';\n return { systemPrompt: `${prompt}\\n\\n${GUIDANCE}`.trim() };\n },\n },\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n event: 'session_shutdown',\n handle: async () => {\n stopActivity?.();\n if (client && state?.phase !== 'inactive' && state?.phase !== 'failed') await client.stop();\n },\n },\n ],\n onDispose() {\n stopActivity?.();\n stopActivity = undefined;\n host.context.client.setStatus(COMPUTER_USE_STATUS_KEY, undefined);\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { COMMAND_DESCRIPTION, COMMAND_NAME, COMPUTER_USE_TOOL_NAMES } from "../../constants/computerUse.mjs";
|
|
2
|
+
import { createComputerUseSessionClient } from "../sessionApiClient/index.mjs";
|
|
3
|
+
import { ComputerScriptRunner } from "../computerScriptRunner/index.mjs";
|
|
4
|
+
import { DefaultComputerUseExtensionService } from "../extensionService/index.mjs";
|
|
5
|
+
import { COMPUTER_USE_MODE_ID, COMPUTER_USE_STATUS_KEY } from "../../types/computerUseApi.mjs";
|
|
6
|
+
import { modeState } from "../../models/computerUseMode.mjs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { defineMinorMode, serverMinorModes } from "@agimon-ai/doompi-minor-mode";
|
|
9
|
+
//#region src/services/computerUseServer/index.ts
|
|
10
|
+
/** This package's identity for mode, activity and restriction ownership, not a status key. */
|
|
11
|
+
const SOURCE = "@agimon-ai/doompi-computer-use";
|
|
12
|
+
const SCRIPT_PATHS_ENV = "DOOMPI_COMPUTER_USE_SCRIPT_PATHS";
|
|
13
|
+
const GUIDANCE = "[COMPUTER USE ACTIVE]\nUse computer_state before acting and after any action that may change the interface. Use only element refs and snapshot ids returned by computer_state. Never infer coordinates or bypass secure elements.";
|
|
14
|
+
function output(value, isError = false) {
|
|
15
|
+
return {
|
|
16
|
+
content: [{
|
|
17
|
+
type: "text",
|
|
18
|
+
text: typeof value === "string" ? value : JSON.stringify(value, null, 2)
|
|
19
|
+
}],
|
|
20
|
+
details: value,
|
|
21
|
+
...isError ? { isError: true } : {}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function observationOutput(value) {
|
|
25
|
+
return {
|
|
26
|
+
content: [{
|
|
27
|
+
type: "text",
|
|
28
|
+
text: JSON.stringify({
|
|
29
|
+
...value,
|
|
30
|
+
screenshot: void 0
|
|
31
|
+
}, null, 2)
|
|
32
|
+
}, {
|
|
33
|
+
type: "image",
|
|
34
|
+
data: value.screenshot.data,
|
|
35
|
+
mimeType: value.screenshot.mimeType
|
|
36
|
+
}],
|
|
37
|
+
details: value
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function createComputerUseServer(host) {
|
|
41
|
+
const client = createComputerUseSessionClient();
|
|
42
|
+
const allowedScriptPaths = (host.context.environment[SCRIPT_PATHS_ENV] ?? "").split(path.delimiter).filter((entry) => entry.length > 0);
|
|
43
|
+
const dependencies = {
|
|
44
|
+
client,
|
|
45
|
+
scriptRunner: client === void 0 ? void 0 : new ComputerScriptRunner({
|
|
46
|
+
client,
|
|
47
|
+
allowedScriptPaths
|
|
48
|
+
}),
|
|
49
|
+
service: new DefaultComputerUseExtensionService(client)
|
|
50
|
+
};
|
|
51
|
+
let state;
|
|
52
|
+
let stopActivity;
|
|
53
|
+
let modeOwner;
|
|
54
|
+
const modeSelected = () => (host.context.selection.state?.["minor-mode"] ?? []).includes(COMPUTER_USE_MODE_ID);
|
|
55
|
+
const publishMode = () => modeOwner?.publish();
|
|
56
|
+
const applyState = (next) => {
|
|
57
|
+
state = next;
|
|
58
|
+
host.context.client.setStatus(COMPUTER_USE_STATUS_KEY, next === void 0 || next.phase === "inactive" ? void 0 : `computer use: ${next.phase}`);
|
|
59
|
+
publishMode();
|
|
60
|
+
};
|
|
61
|
+
const selectMode = async (enabled) => {
|
|
62
|
+
const modes = (host.context.selection.state?.["minor-mode"] ?? []).filter((mode) => mode !== COMPUTER_USE_MODE_ID);
|
|
63
|
+
await host.changeSelection({
|
|
64
|
+
axis: "state",
|
|
65
|
+
key: "minor-mode",
|
|
66
|
+
values: enabled ? [...modes, COMPUTER_USE_MODE_ID] : modes
|
|
67
|
+
});
|
|
68
|
+
publishMode();
|
|
69
|
+
};
|
|
70
|
+
const refresh = async (signal) => {
|
|
71
|
+
if (!client) {
|
|
72
|
+
applyState(void 0);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
applyState(await client.state(signal));
|
|
77
|
+
} catch {
|
|
78
|
+
applyState(void 0);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const requireActive = () => {
|
|
82
|
+
if (!client || state?.phase !== "active") throw new Error("Computer use is not active for this session.");
|
|
83
|
+
return client;
|
|
84
|
+
};
|
|
85
|
+
modeOwner = defineMinorMode({
|
|
86
|
+
descriptor: {
|
|
87
|
+
source: SOURCE,
|
|
88
|
+
id: COMPUTER_USE_MODE_ID,
|
|
89
|
+
label: "Computer Use",
|
|
90
|
+
description: "Session-scoped semantic control through DoomPi Desktop.",
|
|
91
|
+
order: 450,
|
|
92
|
+
actions: [
|
|
93
|
+
{
|
|
94
|
+
id: "activate",
|
|
95
|
+
label: "Activate",
|
|
96
|
+
description: "Enable computer use for this session.",
|
|
97
|
+
contexts: ["headless"],
|
|
98
|
+
parameters: []
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
id: "deactivate",
|
|
102
|
+
label: "Deactivate",
|
|
103
|
+
description: "Stop this session computer-use run.",
|
|
104
|
+
contexts: ["headless"],
|
|
105
|
+
parameters: []
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
id: "doctor",
|
|
109
|
+
label: "Doctor",
|
|
110
|
+
description: "Report Desktop availability and session state.",
|
|
111
|
+
contexts: ["headless"],
|
|
112
|
+
parameters: []
|
|
113
|
+
}
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
state: () => modeState(state, modeSelected()),
|
|
117
|
+
async handleAction(_runtime, actionId, _argumentsValue, execution) {
|
|
118
|
+
execution.signal.throwIfAborted();
|
|
119
|
+
if (actionId === "activate") {
|
|
120
|
+
if (!client) throw new Error("DoomPi Desktop computer use is unavailable.");
|
|
121
|
+
await selectMode(true);
|
|
122
|
+
await refresh(execution.signal);
|
|
123
|
+
return { message: "Computer use activated." };
|
|
124
|
+
}
|
|
125
|
+
if (actionId === "doctor") {
|
|
126
|
+
await refresh(execution.signal);
|
|
127
|
+
return { message: client ? `Computer use is ${state?.phase ?? "unavailable"}.` : "DoomPi Desktop session API is unavailable." };
|
|
128
|
+
}
|
|
129
|
+
if (actionId === "deactivate") {
|
|
130
|
+
if (client && state?.phase !== void 0 && state.phase !== "inactive" && state.phase !== "failed") await client.stop(execution.signal);
|
|
131
|
+
await selectMode(false);
|
|
132
|
+
await refresh(execution.signal);
|
|
133
|
+
return { message: "Computer use deactivated." };
|
|
134
|
+
}
|
|
135
|
+
throw new Error(`Unknown computer-use action: ${actionId}`);
|
|
136
|
+
}
|
|
137
|
+
}).createOwner(void 0);
|
|
138
|
+
return {
|
|
139
|
+
services: [serverMinorModes([modeOwner])],
|
|
140
|
+
toolRestrictions: [{
|
|
141
|
+
when: { state: { "minor-mode": COMPUTER_USE_MODE_ID } },
|
|
142
|
+
allowedTools: [...COMPUTER_USE_TOOL_NAMES]
|
|
143
|
+
}],
|
|
144
|
+
activities: [{
|
|
145
|
+
when: {
|
|
146
|
+
state: { "minor-mode": COMPUTER_USE_MODE_ID },
|
|
147
|
+
attribution: {
|
|
148
|
+
kind: "minor",
|
|
149
|
+
mode: COMPUTER_USE_MODE_ID
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
name: SOURCE,
|
|
153
|
+
async start() {
|
|
154
|
+
await refresh();
|
|
155
|
+
const unsubscribe = client?.subscribeStatus?.(applyState);
|
|
156
|
+
stopActivity = () => {
|
|
157
|
+
unsubscribe?.();
|
|
158
|
+
applyState(void 0);
|
|
159
|
+
};
|
|
160
|
+
return () => {
|
|
161
|
+
stopActivity?.();
|
|
162
|
+
stopActivity = void 0;
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}],
|
|
166
|
+
tools: [
|
|
167
|
+
{
|
|
168
|
+
when: {
|
|
169
|
+
state: { "minor-mode": COMPUTER_USE_MODE_ID },
|
|
170
|
+
attribution: {
|
|
171
|
+
kind: "minor",
|
|
172
|
+
mode: COMPUTER_USE_MODE_ID
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
name: "computer_state",
|
|
176
|
+
label: "Computer State",
|
|
177
|
+
description: "Observe the authorized application window and return semantic accessibility state.",
|
|
178
|
+
parameters: {
|
|
179
|
+
type: "object",
|
|
180
|
+
properties: {},
|
|
181
|
+
additionalProperties: false
|
|
182
|
+
},
|
|
183
|
+
executionMode: "serial",
|
|
184
|
+
async execute(_toolCallId, _parameters, signal) {
|
|
185
|
+
try {
|
|
186
|
+
return observationOutput(await requireActive().observe(signal));
|
|
187
|
+
} catch (error) {
|
|
188
|
+
return output(error instanceof Error ? error.message : String(error), true);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
when: {
|
|
194
|
+
state: { "minor-mode": COMPUTER_USE_MODE_ID },
|
|
195
|
+
attribution: {
|
|
196
|
+
kind: "minor",
|
|
197
|
+
mode: COMPUTER_USE_MODE_ID
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
name: "computer_action",
|
|
201
|
+
label: "Computer Action",
|
|
202
|
+
description: "Perform one constrained semantic action in the authorized application window.",
|
|
203
|
+
parameters: {
|
|
204
|
+
type: "object",
|
|
205
|
+
properties: {
|
|
206
|
+
kind: {
|
|
207
|
+
type: "string",
|
|
208
|
+
enum: [
|
|
209
|
+
"press",
|
|
210
|
+
"focus",
|
|
211
|
+
"set_value",
|
|
212
|
+
"scroll"
|
|
213
|
+
]
|
|
214
|
+
},
|
|
215
|
+
snapshotId: {
|
|
216
|
+
type: "string",
|
|
217
|
+
minLength: 1
|
|
218
|
+
},
|
|
219
|
+
elementRef: {
|
|
220
|
+
type: "string",
|
|
221
|
+
minLength: 1
|
|
222
|
+
},
|
|
223
|
+
value: { type: "string" },
|
|
224
|
+
direction: {
|
|
225
|
+
type: "string",
|
|
226
|
+
enum: [
|
|
227
|
+
"up",
|
|
228
|
+
"down",
|
|
229
|
+
"left",
|
|
230
|
+
"right"
|
|
231
|
+
]
|
|
232
|
+
},
|
|
233
|
+
amount: {
|
|
234
|
+
type: "string",
|
|
235
|
+
enum: ["line", "page"]
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
required: [
|
|
239
|
+
"kind",
|
|
240
|
+
"snapshotId",
|
|
241
|
+
"elementRef"
|
|
242
|
+
],
|
|
243
|
+
additionalProperties: false
|
|
244
|
+
},
|
|
245
|
+
executionMode: "serial",
|
|
246
|
+
async execute(_toolCallId, parameters, signal) {
|
|
247
|
+
try {
|
|
248
|
+
const result = await requireActive().act(parameters, signal);
|
|
249
|
+
await refresh(signal);
|
|
250
|
+
return output(result);
|
|
251
|
+
} catch (error) {
|
|
252
|
+
return output(error instanceof Error ? error.message : String(error), true);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
when: {
|
|
258
|
+
state: { "minor-mode": COMPUTER_USE_MODE_ID },
|
|
259
|
+
attribution: {
|
|
260
|
+
kind: "minor",
|
|
261
|
+
mode: COMPUTER_USE_MODE_ID
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
name: "computer_exec",
|
|
265
|
+
label: "Computer Script",
|
|
266
|
+
description: "Run a trusted, explicitly allowed local TypeScript script against the authorized application session.",
|
|
267
|
+
parameters: {
|
|
268
|
+
type: "object",
|
|
269
|
+
properties: {
|
|
270
|
+
scriptPath: {
|
|
271
|
+
type: "string",
|
|
272
|
+
minLength: 1
|
|
273
|
+
},
|
|
274
|
+
input: {}
|
|
275
|
+
},
|
|
276
|
+
required: ["scriptPath", "input"],
|
|
277
|
+
additionalProperties: false
|
|
278
|
+
},
|
|
279
|
+
executionMode: "serial",
|
|
280
|
+
async execute(_toolCallId, parameters, signal) {
|
|
281
|
+
try {
|
|
282
|
+
if (!dependencies.scriptRunner) throw new Error("Computer script execution is unavailable.");
|
|
283
|
+
const input = parameters;
|
|
284
|
+
return output(await dependencies.scriptRunner.execute(input.scriptPath, input.input, signal));
|
|
285
|
+
} catch (error) {
|
|
286
|
+
return output(error instanceof Error ? error.message : String(error), true);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
],
|
|
291
|
+
commands: [{
|
|
292
|
+
name: COMMAND_NAME,
|
|
293
|
+
description: COMMAND_DESCRIPTION,
|
|
294
|
+
async execute(args, execution) {
|
|
295
|
+
const result = await dependencies.service.execute();
|
|
296
|
+
await execution.client.notify({
|
|
297
|
+
body: result.message,
|
|
298
|
+
level: result.level
|
|
299
|
+
});
|
|
300
|
+
if (args.trim() === "deactivate" && client && state?.phase !== "inactive" && state?.phase !== "failed") {
|
|
301
|
+
await client.stop();
|
|
302
|
+
await host.changeSelection({
|
|
303
|
+
axis: "state",
|
|
304
|
+
key: "minor-mode",
|
|
305
|
+
values: (execution.selection.state?.["minor-mode"] ?? []).filter((mode) => mode !== COMPUTER_USE_MODE_ID)
|
|
306
|
+
});
|
|
307
|
+
await refresh();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}],
|
|
311
|
+
hooks: [{
|
|
312
|
+
when: {
|
|
313
|
+
state: { "minor-mode": COMPUTER_USE_MODE_ID },
|
|
314
|
+
attribution: {
|
|
315
|
+
kind: "minor",
|
|
316
|
+
mode: COMPUTER_USE_MODE_ID
|
|
317
|
+
}
|
|
318
|
+
},
|
|
319
|
+
event: "before_agent_start",
|
|
320
|
+
handle(event) {
|
|
321
|
+
if (state?.phase !== "active") return void 0;
|
|
322
|
+
return { systemPrompt: `${typeof event.systemPrompt === "string" ? event.systemPrompt : ""}\n\n${GUIDANCE}`.trim() };
|
|
323
|
+
}
|
|
324
|
+
}, {
|
|
325
|
+
when: {
|
|
326
|
+
state: { "minor-mode": COMPUTER_USE_MODE_ID },
|
|
327
|
+
attribution: {
|
|
328
|
+
kind: "minor",
|
|
329
|
+
mode: COMPUTER_USE_MODE_ID
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
event: "session_shutdown",
|
|
333
|
+
handle: async () => {
|
|
334
|
+
stopActivity?.();
|
|
335
|
+
if (client && state?.phase !== "inactive" && state?.phase !== "failed") await client.stop();
|
|
336
|
+
}
|
|
337
|
+
}],
|
|
338
|
+
onDispose() {
|
|
339
|
+
stopActivity?.();
|
|
340
|
+
stopActivity = void 0;
|
|
341
|
+
host.context.client.setStatus(COMPUTER_USE_STATUS_KEY, void 0);
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
//#endregion
|
|
346
|
+
export { createComputerUseServer };
|
|
347
|
+
|
|
348
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/computerUseServer/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { type DoomHeadlessToolResult } from '@agimon-ai/doompi-core/headless';\nimport { serverMinorModes } from '@agimon-ai/doompi-minor-mode';\nimport { defineMinorMode, type MinorModeOwner } from '@agimon-ai/doompi-minor-mode';\n\nimport { COMMAND_NAME, COMMAND_DESCRIPTION } from '../../constants/computerUse';\nimport { COMPUTER_USE_TOOL_NAMES } from '../../constants/computerUse';\nimport { modeState } from '../../models/computerUseMode';\nimport { ComputerScriptRunner } from '../../services/computerScriptRunner';\nimport { DefaultComputerUseExtensionService } from '../../services/extensionService';\nimport { createComputerUseSessionClient } from '../../services/sessionApiClient';\nimport type { ComputerUseAction, ComputerUseObservation } from '../../types/computerUse';\nimport { COMPUTER_USE_MODE_ID, COMPUTER_USE_STATUS_KEY } from '../../types/computerUseApi';\nimport type { ComputerUseSessionView } from '../../types/computerUseApi';\n\n/** This package's identity for mode, activity and restriction ownership, not a status key. */\nconst SOURCE = '@agimon-ai/doompi-computer-use';\n\nconst SCRIPT_PATHS_ENV = 'DOOMPI_COMPUTER_USE_SCRIPT_PATHS';\nconst GUIDANCE =\n '[COMPUTER USE ACTIVE]\\nUse computer_state before acting and after any action that may change the interface. Use only element refs and snapshot ids returned by computer_state. Never infer coordinates or bypass secure elements.';\n\nfunction output(value: unknown, isError = false): DoomHeadlessToolResult {\n return {\n content: [{ type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) }],\n details: value,\n ...(isError ? { isError: true } : {}),\n };\n}\n\nfunction observationOutput(value: ComputerUseObservation): DoomHeadlessToolResult {\n return {\n content: [\n { type: 'text', text: JSON.stringify({ ...value, screenshot: undefined }, null, 2) },\n { type: 'image', data: value.screenshot.data, mimeType: value.screenshot.mimeType },\n ],\n details: value,\n };\n}\n\nimport {\n type DoomHeadlessHostService,\n type DoomHeadlessTool,\n type DoomHeadlessCommand,\n} from '@agimon-ai/doompi-core/headless';\nimport { type DoomServerSessionPlugin } from '@agimon-ai/doompi-core/server-facet';\nexport function createComputerUseServer(host: DoomHeadlessHostService): Omit<\n DoomServerSessionPlugin,\n 'tools' | 'commands'\n> & {\n tools: readonly DoomHeadlessTool[];\n commands: readonly DoomHeadlessCommand[];\n} {\n const client = createComputerUseSessionClient();\n const allowedScriptPaths = (host.context.environment[SCRIPT_PATHS_ENV] ?? '')\n .split(path.delimiter)\n .filter((entry) => entry.length > 0);\n const scriptRunner = client === undefined ? undefined : new ComputerScriptRunner({ client, allowedScriptPaths });\n const service = new DefaultComputerUseExtensionService(client);\n const dependencies = { client, scriptRunner, service };\n let state: ComputerUseSessionView | undefined;\n let stopActivity: (() => void) | undefined;\n let modeOwner: MinorModeOwner | undefined;\n const modeSelected = (): boolean =>\n (host.context.selection.state?.['minor-mode'] ?? []).includes(COMPUTER_USE_MODE_ID);\n const publishMode = (): void => modeOwner?.publish();\n const applyState = (next: ComputerUseSessionView | undefined): void => {\n state = next;\n host.context.client.setStatus(\n COMPUTER_USE_STATUS_KEY,\n next === undefined || next.phase === 'inactive' ? undefined : `computer use: ${next.phase}`,\n );\n publishMode();\n };\n const selectMode = async (enabled: boolean): Promise<void> => {\n const modes = (host.context.selection.state?.['minor-mode'] ?? []).filter((mode) => mode !== COMPUTER_USE_MODE_ID);\n await host.changeSelection({\n axis: 'state',\n key: 'minor-mode',\n values: enabled ? [...modes, COMPUTER_USE_MODE_ID] : modes,\n });\n publishMode();\n };\n const refresh = async (signal?: AbortSignal): Promise<void> => {\n if (!client) {\n applyState(undefined);\n return;\n }\n try {\n applyState(await client.state(signal));\n } catch {\n applyState(undefined);\n }\n };\n const requireActive = (): NonNullable<typeof client> => {\n if (!client || state?.phase !== 'active') throw new Error('Computer use is not active for this session.');\n return client;\n };\n modeOwner = defineMinorMode<undefined>({\n descriptor: {\n source: SOURCE,\n id: COMPUTER_USE_MODE_ID,\n label: 'Computer Use',\n description: 'Session-scoped semantic control through DoomPi Desktop.',\n order: 450,\n actions: [\n {\n id: 'activate',\n label: 'Activate',\n description: 'Enable computer use for this session.',\n contexts: ['headless'],\n parameters: [],\n },\n {\n id: 'deactivate',\n label: 'Deactivate',\n description: 'Stop this session computer-use run.',\n contexts: ['headless'],\n parameters: [],\n },\n {\n id: 'doctor',\n label: 'Doctor',\n description: 'Report Desktop availability and session state.',\n contexts: ['headless'],\n parameters: [],\n },\n ],\n },\n state: () => modeState(state, modeSelected()),\n async handleAction(_runtime, actionId, _argumentsValue, execution) {\n execution.signal.throwIfAborted();\n if (actionId === 'activate') {\n if (!client) throw new Error('DoomPi Desktop computer use is unavailable.');\n await selectMode(true);\n await refresh(execution.signal);\n return { message: 'Computer use activated.' };\n }\n if (actionId === 'doctor') {\n await refresh(execution.signal);\n return {\n message: client\n ? `Computer use is ${state?.phase ?? 'unavailable'}.`\n : 'DoomPi Desktop session API is unavailable.',\n };\n }\n if (actionId === 'deactivate') {\n if (client && state?.phase !== undefined && state.phase !== 'inactive' && state.phase !== 'failed')\n await client.stop(execution.signal);\n await selectMode(false);\n await refresh(execution.signal);\n return { message: 'Computer use deactivated.' };\n }\n throw new Error(`Unknown computer-use action: ${actionId}`);\n },\n }).createOwner(undefined);\n return {\n services: [serverMinorModes([modeOwner])],\n toolRestrictions: [\n {\n when: { state: { 'minor-mode': COMPUTER_USE_MODE_ID } },\n allowedTools: [...COMPUTER_USE_TOOL_NAMES],\n },\n ],\n activities: [\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: SOURCE,\n async start() {\n await refresh();\n const unsubscribe = client?.subscribeStatus?.(applyState);\n stopActivity = () => {\n unsubscribe?.();\n applyState(undefined);\n };\n return () => {\n stopActivity?.();\n stopActivity = undefined;\n };\n },\n },\n ],\n tools: [\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: 'computer_state',\n label: 'Computer State',\n description: 'Observe the authorized application window and return semantic accessibility state.',\n parameters: { type: 'object', properties: {}, additionalProperties: false },\n executionMode: 'serial',\n async execute(_toolCallId, _parameters, signal) {\n try {\n const session = requireActive();\n const observation = await session.observe(signal);\n return observationOutput(observation);\n } catch (error) {\n return output(error instanceof Error ? error.message : String(error), true);\n }\n },\n },\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: 'computer_action',\n label: 'Computer Action',\n description: 'Perform one constrained semantic action in the authorized application window.',\n parameters: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['press', 'focus', 'set_value', 'scroll'] },\n snapshotId: { type: 'string', minLength: 1 },\n elementRef: { type: 'string', minLength: 1 },\n value: { type: 'string' },\n direction: { type: 'string', enum: ['up', 'down', 'left', 'right'] },\n amount: { type: 'string', enum: ['line', 'page'] },\n },\n required: ['kind', 'snapshotId', 'elementRef'],\n additionalProperties: false,\n },\n executionMode: 'serial',\n async execute(_toolCallId, parameters, signal) {\n try {\n const result = await requireActive().act(parameters as unknown as ComputerUseAction, signal);\n await refresh(signal);\n return output(result);\n } catch (error) {\n return output(error instanceof Error ? error.message : String(error), true);\n }\n },\n },\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: 'computer_exec',\n label: 'Computer Script',\n description:\n 'Run a trusted, explicitly allowed local TypeScript script against the authorized application session.',\n parameters: {\n type: 'object',\n properties: { scriptPath: { type: 'string', minLength: 1 }, input: {} },\n required: ['scriptPath', 'input'],\n additionalProperties: false,\n },\n executionMode: 'serial',\n async execute(_toolCallId, parameters, signal) {\n try {\n if (!dependencies.scriptRunner) throw new Error('Computer script execution is unavailable.');\n const input = parameters as { scriptPath: string; input: unknown };\n return output(await dependencies.scriptRunner.execute(input.scriptPath, input.input, signal));\n } catch (error) {\n return output(error instanceof Error ? error.message : String(error), true);\n }\n },\n },\n ],\n commands: [\n {\n name: COMMAND_NAME,\n description: COMMAND_DESCRIPTION,\n async execute(args, execution) {\n const result = await dependencies.service.execute();\n await execution.client.notify({ body: result.message, level: result.level });\n if (args.trim() === 'deactivate' && client && state?.phase !== 'inactive' && state?.phase !== 'failed') {\n await client.stop();\n await host.changeSelection({\n axis: 'state',\n key: 'minor-mode',\n values: (execution.selection.state?.['minor-mode'] ?? []).filter((mode) => mode !== COMPUTER_USE_MODE_ID),\n });\n await refresh();\n }\n },\n },\n ],\n hooks: [\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n event: 'before_agent_start',\n handle(event) {\n if (state?.phase !== 'active') return undefined;\n const prompt = typeof event.systemPrompt === 'string' ? event.systemPrompt : '';\n return { systemPrompt: `${prompt}\\n\\n${GUIDANCE}`.trim() };\n },\n },\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n event: 'session_shutdown',\n handle: async () => {\n stopActivity?.();\n if (client && state?.phase !== 'inactive' && state?.phase !== 'failed') await client.stop();\n },\n },\n ],\n onDispose() {\n stopActivity?.();\n stopActivity = undefined;\n host.context.client.setStatus(COMPUTER_USE_STATUS_KEY, undefined);\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_index = require("../sessionApiClient/index.cjs");
|
|
3
|
+
const require_index$1 = require("../computerScriptRunner/index.cjs");
|
|
4
|
+
const require_index$2 = require("../extensionService/index.cjs");
|
|
5
|
+
let node_path = require("node:path");
|
|
6
|
+
node_path = require_runtime.__toESM(node_path, 1);
|
|
7
|
+
let _agimon_ai_doompi_config = require("@agimon-ai/doompi-config");
|
|
8
|
+
//#region src/services/dependencies/index.ts
|
|
9
|
+
const COMPUTER_USE_SCRIPT_PATHS_ENV = "DOOMPI_COMPUTER_USE_SCRIPT_PATHS";
|
|
10
|
+
function createComputerUseDependencies(overrides = {}) {
|
|
11
|
+
const client = overrides.client ?? require_index.createComputerUseSessionClient();
|
|
12
|
+
const allowedScriptPaths = (process.env["DOOMPI_COMPUTER_USE_SCRIPT_PATHS"] ?? "").split(node_path.default.delimiter).filter((entry) => entry.length > 0);
|
|
13
|
+
return {
|
|
14
|
+
service: overrides.service ?? new require_index$2.DefaultComputerUseExtensionService(client),
|
|
15
|
+
enabled: overrides.enabled ?? (() => (0, _agimon_ai_doompi_config.loadDoomConfig)(process.env.PI_PROJECT_ROOT ?? process.cwd()).computerUse?.enabled === true),
|
|
16
|
+
...client === void 0 ? {} : { client },
|
|
17
|
+
...overrides.scriptRunner !== void 0 ? { scriptRunner: overrides.scriptRunner } : client === void 0 ? {} : { scriptRunner: new require_index$1.ComputerScriptRunner({
|
|
18
|
+
client,
|
|
19
|
+
allowedScriptPaths
|
|
20
|
+
}) }
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
exports.COMPUTER_USE_SCRIPT_PATHS_ENV = COMPUTER_USE_SCRIPT_PATHS_ENV;
|
|
25
|
+
exports.createComputerUseDependencies = createComputerUseDependencies;
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["createComputerUseSessionClient","path","DefaultComputerUseExtensionService","loadDoomConfig","ComputerScriptRunner"],"sources":["../../../../src/services/dependencies/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { loadDoomConfig } from '@agimon-ai/doompi-config';\n\nimport type { ComputerUseExtensionDependencies } from '../../types/extension';\nimport { ComputerScriptRunner } from '../computerScriptRunner';\nimport { DefaultComputerUseExtensionService } from '../extensionService';\nimport { createComputerUseSessionClient } from '../sessionApiClient';\n\nexport const COMPUTER_USE_SCRIPT_PATHS_ENV = 'DOOMPI_COMPUTER_USE_SCRIPT_PATHS';\nexport function createComputerUseDependencies(\n overrides: Partial<ComputerUseExtensionDependencies> = {},\n): ComputerUseExtensionDependencies {\n const client = overrides.client ?? createComputerUseSessionClient();\n const allowedScriptPaths = (process.env[COMPUTER_USE_SCRIPT_PATHS_ENV] ?? '')\n .split(path.delimiter)\n .filter((entry) => entry.length > 0);\n return {\n service: overrides.service ?? new DefaultComputerUseExtensionService(client),\n enabled:\n overrides.enabled ??\n (() => loadDoomConfig(process.env.PI_PROJECT_ROOT ?? process.cwd()).computerUse?.enabled === true),\n ...(client === undefined ? {} : { client }),\n ...(overrides.scriptRunner !== undefined\n ? { scriptRunner: overrides.scriptRunner }\n : client === undefined\n ? {}\n : { scriptRunner: new ComputerScriptRunner({ client, allowedScriptPaths }) }),\n };\n}\n"],"mappings":";;;;;;;;AASA,MAAa,gCAAgC;AAC7C,SAAgB,8BACd,YAAuD,CAAC,GACtB;CAClC,MAAM,SAAS,UAAU,UAAUA,cAAAA,+BAA+B;CAClE,MAAM,sBAAsB,QAAQ,IAAA,uCAAsC,GAAA,CACvE,MAAMC,UAAAA,QAAK,SAAS,CAAC,CACrB,QAAQ,UAAU,MAAM,SAAS,CAAC;CACrC,OAAO;EACL,SAAS,UAAU,WAAW,IAAIC,gBAAAA,mCAAmC,MAAM;EAC3E,SACE,UAAU,mBAAA,GACHC,yBAAAA,eAAAA,CAAe,QAAQ,IAAI,mBAAmB,QAAQ,IAAI,CAAC,CAAC,CAAC,aAAa,YAAY;EAC/F,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO;EACzC,GAAI,UAAU,iBAAiB,KAAA,IAC3B,EAAE,cAAc,UAAU,aAAa,IACvC,WAAW,KAAA,IACT,CAAC,IACD,EAAE,cAAc,IAAIC,gBAAAA,qBAAqB;GAAE;GAAQ;EAAmB,CAAC,EAAE;CACjF;AACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ComputerUseExtensionDependencies } from "../../types/extension.cjs";
|
|
2
|
+
//#region src/services/dependencies/index.d.ts
|
|
3
|
+
export declare const COMPUTER_USE_SCRIPT_PATHS_ENV = "DOOMPI_COMPUTER_USE_SCRIPT_PATHS";
|
|
4
|
+
export declare function createComputerUseDependencies(overrides?: Partial<ComputerUseExtensionDependencies>): ComputerUseExtensionDependencies;
|
|
5
|
+
//#endregion
|
|
6
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../../src/services/dependencies/index.ts"],"mappings":";;qBASa;wBACG,8BACd,YAAW,QAAQ,oCAClB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ComputerUseExtensionDependencies } from "../../types/extension.mjs";
|
|
2
|
+
//#region src/services/dependencies/index.d.ts
|
|
3
|
+
export declare const COMPUTER_USE_SCRIPT_PATHS_ENV = "DOOMPI_COMPUTER_USE_SCRIPT_PATHS";
|
|
4
|
+
export declare function createComputerUseDependencies(overrides?: Partial<ComputerUseExtensionDependencies>): ComputerUseExtensionDependencies;
|
|
5
|
+
//#endregion
|
|
6
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/dependencies/index.ts"],"mappings":";;qBASa;wBACG,8BACd,YAAW,QAAQ,oCAClB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createComputerUseSessionClient } from "../sessionApiClient/index.mjs";
|
|
2
|
+
import { ComputerScriptRunner } from "../computerScriptRunner/index.mjs";
|
|
3
|
+
import { DefaultComputerUseExtensionService } from "../extensionService/index.mjs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { loadDoomConfig } from "@agimon-ai/doompi-config";
|
|
6
|
+
//#region src/services/dependencies/index.ts
|
|
7
|
+
const COMPUTER_USE_SCRIPT_PATHS_ENV = "DOOMPI_COMPUTER_USE_SCRIPT_PATHS";
|
|
8
|
+
function createComputerUseDependencies(overrides = {}) {
|
|
9
|
+
const client = overrides.client ?? createComputerUseSessionClient();
|
|
10
|
+
const allowedScriptPaths = (process.env["DOOMPI_COMPUTER_USE_SCRIPT_PATHS"] ?? "").split(path.delimiter).filter((entry) => entry.length > 0);
|
|
11
|
+
return {
|
|
12
|
+
service: overrides.service ?? new DefaultComputerUseExtensionService(client),
|
|
13
|
+
enabled: overrides.enabled ?? (() => loadDoomConfig(process.env.PI_PROJECT_ROOT ?? process.cwd()).computerUse?.enabled === true),
|
|
14
|
+
...client === void 0 ? {} : { client },
|
|
15
|
+
...overrides.scriptRunner !== void 0 ? { scriptRunner: overrides.scriptRunner } : client === void 0 ? {} : { scriptRunner: new ComputerScriptRunner({
|
|
16
|
+
client,
|
|
17
|
+
allowedScriptPaths
|
|
18
|
+
}) }
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { COMPUTER_USE_SCRIPT_PATHS_ENV, createComputerUseDependencies };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/dependencies/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { loadDoomConfig } from '@agimon-ai/doompi-config';\n\nimport type { ComputerUseExtensionDependencies } from '../../types/extension';\nimport { ComputerScriptRunner } from '../computerScriptRunner';\nimport { DefaultComputerUseExtensionService } from '../extensionService';\nimport { createComputerUseSessionClient } from '../sessionApiClient';\n\nexport const COMPUTER_USE_SCRIPT_PATHS_ENV = 'DOOMPI_COMPUTER_USE_SCRIPT_PATHS';\nexport function createComputerUseDependencies(\n overrides: Partial<ComputerUseExtensionDependencies> = {},\n): ComputerUseExtensionDependencies {\n const client = overrides.client ?? createComputerUseSessionClient();\n const allowedScriptPaths = (process.env[COMPUTER_USE_SCRIPT_PATHS_ENV] ?? '')\n .split(path.delimiter)\n .filter((entry) => entry.length > 0);\n return {\n service: overrides.service ?? new DefaultComputerUseExtensionService(client),\n enabled:\n overrides.enabled ??\n (() => loadDoomConfig(process.env.PI_PROJECT_ROOT ?? process.cwd()).computerUse?.enabled === true),\n ...(client === undefined ? {} : { client }),\n ...(overrides.scriptRunner !== undefined\n ? { scriptRunner: overrides.scriptRunner }\n : client === undefined\n ? {}\n : { scriptRunner: new ComputerScriptRunner({ client, allowedScriptPaths }) }),\n };\n}\n"],"mappings":";;;;;;AASA,MAAa,gCAAgC;AAC7C,SAAgB,8BACd,YAAuD,CAAC,GACtB;CAClC,MAAM,SAAS,UAAU,UAAU,+BAA+B;CAClE,MAAM,sBAAsB,QAAQ,IAAA,uCAAsC,GAAA,CACvE,MAAM,KAAK,SAAS,CAAC,CACrB,QAAQ,UAAU,MAAM,SAAS,CAAC;CACrC,OAAO;EACL,SAAS,UAAU,WAAW,IAAI,mCAAmC,MAAM;EAC3E,SACE,UAAU,kBACH,eAAe,QAAQ,IAAI,mBAAmB,QAAQ,IAAI,CAAC,CAAC,CAAC,aAAa,YAAY;EAC/F,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO;EACzC,GAAI,UAAU,iBAAiB,KAAA,IAC3B,EAAE,cAAc,UAAU,aAAa,IACvC,WAAW,KAAA,IACT,CAAC,IACD,EAAE,cAAc,IAAI,qBAAqB;GAAE;GAAQ;EAAmB,CAAC,EAAE;CACjF;AACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/services/extensionService/index.ts
|
|
2
|
+
var DefaultComputerUseExtensionService = class {
|
|
3
|
+
client;
|
|
4
|
+
constructor(client) {
|
|
5
|
+
this.client = client;
|
|
6
|
+
}
|
|
7
|
+
async execute() {
|
|
8
|
+
if (this.client === void 0) return {
|
|
9
|
+
message: "Computer use requires a DoomPi Desktop session.",
|
|
10
|
+
level: "error"
|
|
11
|
+
};
|
|
12
|
+
return {
|
|
13
|
+
message: `Computer use is ${(await this.client.state()).phase.replaceAll("_", " ")}.`,
|
|
14
|
+
level: "info"
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
//#endregion
|
|
19
|
+
exports.DefaultComputerUseExtensionService = DefaultComputerUseExtensionService;
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/services/extensionService/index.ts"],"sourcesContent":["import type { ComputerUseExtensionResult, ComputerUseExtensionService } from '../../types/extension';\nimport type { ComputerUseSessionClient } from '../sessionApiClient';\n\nexport class DefaultComputerUseExtensionService implements ComputerUseExtensionService {\n public constructor(private readonly client?: ComputerUseSessionClient) {}\n\n public async execute(): Promise<ComputerUseExtensionResult> {\n if (this.client === undefined)\n return { message: 'Computer use requires a DoomPi Desktop session.', level: 'error' };\n const state = await this.client.state();\n return { message: `Computer use is ${state.phase.replaceAll('_', ' ')}.`, level: 'info' };\n }\n}\n"],"mappings":";AAGA,IAAa,qCAAb,MAAuF;CACjD;CAApC,YAAmB,QAAoD;EAAnC,KAAA,SAAA;CAAoC;CAExE,MAAa,UAA+C;EAC1D,IAAI,KAAK,WAAW,KAAA,GAClB,OAAO;GAAE,SAAS;GAAmD,OAAO;EAAQ;EAEtF,OAAO;GAAE,SAAS,oBAAmB,MADjB,KAAK,OAAO,MAAM,EAAA,CACK,MAAM,WAAW,KAAK,GAAG,EAAE;GAAI,OAAO;EAAO;CAC1F;AACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ComputerUseSessionClient } from "../sessionApiClient/index.cjs";
|
|
2
|
+
import { ComputerUseExtensionResult, ComputerUseExtensionService } from "../../types/extension.cjs";
|
|
3
|
+
//#region src/services/extensionService/index.d.ts
|
|
4
|
+
export declare class DefaultComputerUseExtensionService implements ComputerUseExtensionService {
|
|
5
|
+
private readonly client?;
|
|
6
|
+
constructor(client?: ComputerUseSessionClient | undefined);
|
|
7
|
+
execute(): Promise<ComputerUseExtensionResult>;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../../src/services/extensionService/index.ts"],"mappings":";;;qBAGa,8CAA8C;mBACrB;EAApC,YAAoC,SAAS;EAEhC,WAAW,QAAQ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ComputerUseSessionClient } from "../sessionApiClient/index.mjs";
|
|
2
|
+
import { ComputerUseExtensionResult, ComputerUseExtensionService } from "../../types/extension.mjs";
|
|
3
|
+
//#region src/services/extensionService/index.d.ts
|
|
4
|
+
export declare class DefaultComputerUseExtensionService implements ComputerUseExtensionService {
|
|
5
|
+
private readonly client?;
|
|
6
|
+
constructor(client?: ComputerUseSessionClient | undefined);
|
|
7
|
+
execute(): Promise<ComputerUseExtensionResult>;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/extensionService/index.ts"],"mappings":";;;qBAGa,8CAA8C;mBACrB;EAApC,YAAoC,SAAS;EAEhC,WAAW,QAAQ"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/services/extensionService/index.ts
|
|
2
|
+
var DefaultComputerUseExtensionService = class {
|
|
3
|
+
client;
|
|
4
|
+
constructor(client) {
|
|
5
|
+
this.client = client;
|
|
6
|
+
}
|
|
7
|
+
async execute() {
|
|
8
|
+
if (this.client === void 0) return {
|
|
9
|
+
message: "Computer use requires a DoomPi Desktop session.",
|
|
10
|
+
level: "error"
|
|
11
|
+
};
|
|
12
|
+
return {
|
|
13
|
+
message: `Computer use is ${(await this.client.state()).phase.replaceAll("_", " ")}.`,
|
|
14
|
+
level: "info"
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
//#endregion
|
|
19
|
+
export { DefaultComputerUseExtensionService };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/extensionService/index.ts"],"sourcesContent":["import type { ComputerUseExtensionResult, ComputerUseExtensionService } from '../../types/extension';\nimport type { ComputerUseSessionClient } from '../sessionApiClient';\n\nexport class DefaultComputerUseExtensionService implements ComputerUseExtensionService {\n public constructor(private readonly client?: ComputerUseSessionClient) {}\n\n public async execute(): Promise<ComputerUseExtensionResult> {\n if (this.client === undefined)\n return { message: 'Computer use requires a DoomPi Desktop session.', level: 'error' };\n const state = await this.client.state();\n return { message: `Computer use is ${state.phase.replaceAll('_', ' ')}.`, level: 'info' };\n }\n}\n"],"mappings":";AAGA,IAAa,qCAAb,MAAuF;CACjD;CAApC,YAAmB,QAAoD;EAAnC,KAAA,SAAA;CAAoC;CAExE,MAAa,UAA+C;EAC1D,IAAI,KAAK,WAAW,KAAA,GAClB,OAAO;GAAE,SAAS;GAAmD,OAAO;EAAQ;EAEtF,OAAO;GAAE,SAAS,oBAAmB,MADjB,KAAK,OAAO,MAAM,EAAA,CACK,MAAM,WAAW,KAAK,GAAG,EAAE;GAAI,OAAO;EAAO;CAC1F;AACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/services/mcpTools/index.ts
|
|
2
|
+
const COMPUTER_USE_MCP_TOOLS_SERVICE = "doom/computer-use-mcp-tools";
|
|
3
|
+
function mountMcpTools(tools) {
|
|
4
|
+
return (context) => {
|
|
5
|
+
context.plugin((providerContext) => {
|
|
6
|
+
providerContext.provide(COMPUTER_USE_MCP_TOOLS_SERVICE, {
|
|
7
|
+
get: (name) => tools.find((tool) => tool.name === name),
|
|
8
|
+
names: () => tools.map((tool) => tool.name)
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
exports.COMPUTER_USE_MCP_TOOLS_SERVICE = COMPUTER_USE_MCP_TOOLS_SERVICE;
|
|
15
|
+
exports.mountMcpTools = mountMcpTools;
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/services/mcpTools/index.ts"],"sourcesContent":["import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcp-facet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { COMPUTER_USE_MODE_ID } from '../../types/computerUseApi';\n\nexport const COMPUTER_USE_MCP_TOOLS_SERVICE = 'doom/computer-use-mcp-tools';\n\nconst MODE_LABEL = 'Computer Use';\n\nexport interface McpToolCatalog {\n get(name: string): DoomHeadlessTool | undefined;\n names(): readonly string[];\n}\n\nexport function mountMcpTools(tools: readonly DoomHeadlessTool[]) {\n return (context: Context): void => {\n context.plugin((providerContext) => {\n providerContext.provide(COMPUTER_USE_MCP_TOOLS_SERVICE, {\n get: (name) => tools.find((tool) => tool.name === name),\n names: () => tools.map((tool) => tool.name),\n } satisfies McpToolCatalog);\n });\n };\n}\n\nexport function bindMcpTool(context: DoomMcpPluginContext, name: string): DoomHeadlessTool {\n const catalog = context.services.get<McpToolCatalog>(COMPUTER_USE_MCP_TOOLS_SERVICE);\n const tool = catalog?.get(name);\n if (!tool || !catalog) throw new Error(`Computer use tool is unavailable: ${name}`);\n return {\n ...tool,\n execute(toolCallId, parameters, signal, onUpdate) {\n const activeModes = context.selection.read().state?.['minor-mode'] ?? [];\n if (!activeModes.includes(COMPUTER_USE_MODE_ID)) {\n const inactiveTools = [...catalog.names()].sort().join(', ');\n throw new Error(`${MODE_LABEL} minor mode is inactive. Inactive ${MODE_LABEL} tools: ${inactiveTools}.`);\n }\n const executionSignal = AbortSignal.any([context.signal, signal ?? context.signal]);\n return tool.execute(toolCallId, parameters, executionSignal, onUpdate, context.execution);\n },\n };\n}\n"],"mappings":";AAMA,MAAa,iCAAiC;AAS9C,SAAgB,cAAc,OAAoC;CAChE,QAAQ,YAA2B;EACjC,QAAQ,QAAQ,oBAAoB;GAClC,gBAAgB,QAAQ,gCAAgC;IACtD,MAAM,SAAS,MAAM,MAAM,SAAS,KAAK,SAAS,IAAI;IACtD,aAAa,MAAM,KAAK,SAAS,KAAK,IAAI;GAC5C,CAA0B;EAC5B,CAAC;CACH;AACF"}
|