@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,299 @@
|
|
|
1
|
+
import { COMPUTER_USE_GUIDANCE } from "../../constants/computerUse.mjs";
|
|
2
|
+
import { COMPUTER_USE_MODE_ID, COMPUTER_USE_MODE_STATUS_KEY, COMPUTER_USE_STATUS_KEY } from "../../types/computerUseApi.mjs";
|
|
3
|
+
import { createComputerUseCommand } from "../computerUseCommand/index.mjs";
|
|
4
|
+
import { computerUseRestriction, modeState } from "../../models/computerUseMode.mjs";
|
|
5
|
+
import { defineMinorMode, piMinorModes } from "@agimon-ai/doompi-minor-mode";
|
|
6
|
+
//#region src/services/computerUseRuntime/index.ts
|
|
7
|
+
const PACKAGE_SOURCE = "@agimon-ai/doompi-computer-use";
|
|
8
|
+
function createComputerUseRuntime(dependencies, signal) {
|
|
9
|
+
const client = dependencies.client;
|
|
10
|
+
let state;
|
|
11
|
+
let enabled = false;
|
|
12
|
+
let restriction = computerUseRestriction(false);
|
|
13
|
+
const restrictionListeners = /* @__PURE__ */ new Set();
|
|
14
|
+
const reconcileTools = (active) => {
|
|
15
|
+
restriction = computerUseRestriction(active);
|
|
16
|
+
for (const listener of restrictionListeners) listener();
|
|
17
|
+
};
|
|
18
|
+
let globallyEnabled = false;
|
|
19
|
+
let mode;
|
|
20
|
+
const modeListeners = /* @__PURE__ */ new Set();
|
|
21
|
+
let timer;
|
|
22
|
+
let activeContext;
|
|
23
|
+
let publishedMode = "";
|
|
24
|
+
let publishedModeStatus;
|
|
25
|
+
let publishedActivityStatus;
|
|
26
|
+
const publish = () => {
|
|
27
|
+
const phase = state?.phase ?? "inactive";
|
|
28
|
+
const projection = `${enabled}:${phase}:${state?.revision ?? "none"}`;
|
|
29
|
+
if (mode !== void 0 && projection !== publishedMode) {
|
|
30
|
+
mode.publish();
|
|
31
|
+
publishedMode = projection;
|
|
32
|
+
}
|
|
33
|
+
const modeStatus = state === void 0 ? void 0 : enabled || phase !== "inactive" ? phase : "";
|
|
34
|
+
if (activeContext !== void 0 && modeStatus !== publishedModeStatus) {
|
|
35
|
+
activeContext.ui.setStatus(COMPUTER_USE_MODE_STATUS_KEY, modeStatus);
|
|
36
|
+
publishedModeStatus = modeStatus;
|
|
37
|
+
}
|
|
38
|
+
const activityStatus = enabled || phase !== "inactive" ? `computer use: ${phase}` : void 0;
|
|
39
|
+
if (activeContext !== void 0 && activityStatus !== publishedActivityStatus) {
|
|
40
|
+
activeContext.ui.setStatus(COMPUTER_USE_STATUS_KEY, activityStatus);
|
|
41
|
+
publishedActivityStatus = activityStatus;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const refresh = async () => {
|
|
45
|
+
if (signal.aborted) return;
|
|
46
|
+
let nextGloballyEnabled = false;
|
|
47
|
+
try {
|
|
48
|
+
nextGloballyEnabled = await dependencies.enabled?.() === true;
|
|
49
|
+
} catch {
|
|
50
|
+
nextGloballyEnabled = false;
|
|
51
|
+
}
|
|
52
|
+
if (signal.aborted) return;
|
|
53
|
+
if (nextGloballyEnabled !== globallyEnabled) {
|
|
54
|
+
globallyEnabled = nextGloballyEnabled;
|
|
55
|
+
if (!globallyEnabled) {
|
|
56
|
+
if (client !== void 0 && state !== void 0 && state.phase !== "inactive" && state.phase !== "failed") try {
|
|
57
|
+
await client.stop();
|
|
58
|
+
} catch {}
|
|
59
|
+
enabled = false;
|
|
60
|
+
state = void 0;
|
|
61
|
+
reconcileTools(false);
|
|
62
|
+
}
|
|
63
|
+
publishedMode = "";
|
|
64
|
+
for (const listener of modeListeners) listener();
|
|
65
|
+
}
|
|
66
|
+
if (!globallyEnabled || client === void 0) {
|
|
67
|
+
state = void 0;
|
|
68
|
+
reconcileTools(false);
|
|
69
|
+
publish();
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const nextState = await client.state(signal);
|
|
74
|
+
if (signal.aborted) return;
|
|
75
|
+
state = nextState;
|
|
76
|
+
reconcileTools(state.phase === "active");
|
|
77
|
+
publish();
|
|
78
|
+
} catch {
|
|
79
|
+
state = void 0;
|
|
80
|
+
reconcileTools(false);
|
|
81
|
+
publish();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
mode = defineMinorMode({
|
|
85
|
+
descriptor: {
|
|
86
|
+
source: PACKAGE_SOURCE,
|
|
87
|
+
id: COMPUTER_USE_MODE_ID,
|
|
88
|
+
label: "Computer Use",
|
|
89
|
+
description: "Session-scoped semantic control through DoomPi Desktop.",
|
|
90
|
+
order: 450,
|
|
91
|
+
actions: [
|
|
92
|
+
{
|
|
93
|
+
id: "activate",
|
|
94
|
+
label: "Activate",
|
|
95
|
+
description: "Open the cockpit activation workflow and native confirmation.",
|
|
96
|
+
contexts: ["tui", "headless"],
|
|
97
|
+
parameters: []
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
id: "deactivate",
|
|
101
|
+
label: "Deactivate",
|
|
102
|
+
description: "Stop this session computer-use run.",
|
|
103
|
+
contexts: ["tui", "headless"],
|
|
104
|
+
parameters: []
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: "doctor",
|
|
108
|
+
label: "Doctor",
|
|
109
|
+
description: "Report Desktop availability and session state.",
|
|
110
|
+
contexts: ["tui", "headless"],
|
|
111
|
+
parameters: []
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
state: () => modeState(state, enabled),
|
|
116
|
+
async handleAction(_runtime, actionId, _argumentsValue, execution) {
|
|
117
|
+
activeContext = execution.context;
|
|
118
|
+
if (actionId === "activate") {
|
|
119
|
+
if (await dependencies.enabled?.() !== true) {
|
|
120
|
+
await refresh();
|
|
121
|
+
throw new Error("Enable computer use in global settings first.");
|
|
122
|
+
}
|
|
123
|
+
if (client === void 0) throw new Error("DoomPi Desktop computer use is unavailable.");
|
|
124
|
+
enabled = true;
|
|
125
|
+
await refresh();
|
|
126
|
+
publish();
|
|
127
|
+
return { message: "Computer use is ready to configure in Activity." };
|
|
128
|
+
}
|
|
129
|
+
if (actionId === "doctor") {
|
|
130
|
+
await refresh();
|
|
131
|
+
return { message: client === void 0 ? "DoomPi Desktop session API is unavailable." : `Computer use is ${state?.phase.replaceAll("_", " ") ?? "unavailable"}.` };
|
|
132
|
+
}
|
|
133
|
+
if (actionId === "deactivate") {
|
|
134
|
+
if (client === void 0) throw new Error("DoomPi Desktop computer use is unavailable.");
|
|
135
|
+
if (state !== void 0 && state.phase !== "inactive" && state.phase !== "failed") await client.stop(execution.signal);
|
|
136
|
+
enabled = false;
|
|
137
|
+
await refresh();
|
|
138
|
+
publish();
|
|
139
|
+
return { message: "Computer use is off." };
|
|
140
|
+
}
|
|
141
|
+
throw new Error(`Unknown computer-use action: ${actionId}`);
|
|
142
|
+
}
|
|
143
|
+
}).createOwner(void 0);
|
|
144
|
+
return {
|
|
145
|
+
commands: [createComputerUseCommand(dependencies.service)],
|
|
146
|
+
tools: [
|
|
147
|
+
{
|
|
148
|
+
name: "computer_state",
|
|
149
|
+
label: "Computer State",
|
|
150
|
+
description: "Observe the authorized application window and return its semantic accessibility state.",
|
|
151
|
+
promptSnippet: "Observe the authorized application before choosing a semantic action",
|
|
152
|
+
parameters: {
|
|
153
|
+
type: "object",
|
|
154
|
+
properties: {},
|
|
155
|
+
additionalProperties: false
|
|
156
|
+
},
|
|
157
|
+
async execute(_toolCallId, _params, signal) {
|
|
158
|
+
if (!globallyEnabled || client === void 0 || state?.phase !== "active") throw new Error("Computer use is not active for this session.");
|
|
159
|
+
const observation = await client.observe(signal);
|
|
160
|
+
return {
|
|
161
|
+
content: [{
|
|
162
|
+
type: "text",
|
|
163
|
+
text: JSON.stringify(observation, null, 2)
|
|
164
|
+
}],
|
|
165
|
+
details: observation
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: "computer_action",
|
|
171
|
+
label: "Computer Action",
|
|
172
|
+
description: "Perform one constrained semantic action in the authorized application window.",
|
|
173
|
+
promptSnippet: "Perform one action using a current computer_state snapshot and element ref",
|
|
174
|
+
parameters: {
|
|
175
|
+
type: "object",
|
|
176
|
+
properties: {
|
|
177
|
+
kind: {
|
|
178
|
+
type: "string",
|
|
179
|
+
enum: [
|
|
180
|
+
"press",
|
|
181
|
+
"focus",
|
|
182
|
+
"set_value",
|
|
183
|
+
"scroll"
|
|
184
|
+
]
|
|
185
|
+
},
|
|
186
|
+
snapshotId: { type: "string" },
|
|
187
|
+
elementRef: { type: "string" },
|
|
188
|
+
value: { type: "string" },
|
|
189
|
+
direction: {
|
|
190
|
+
type: "string",
|
|
191
|
+
enum: [
|
|
192
|
+
"up",
|
|
193
|
+
"down",
|
|
194
|
+
"left",
|
|
195
|
+
"right"
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
amount: {
|
|
199
|
+
type: "string",
|
|
200
|
+
enum: ["line", "page"]
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
required: [
|
|
204
|
+
"kind",
|
|
205
|
+
"snapshotId",
|
|
206
|
+
"elementRef"
|
|
207
|
+
],
|
|
208
|
+
additionalProperties: false
|
|
209
|
+
},
|
|
210
|
+
async execute(_toolCallId, params, signal) {
|
|
211
|
+
if (!globallyEnabled || client === void 0 || state?.phase !== "active") throw new Error("Computer use is not active for this session.");
|
|
212
|
+
const result = await client.act(params, signal);
|
|
213
|
+
return {
|
|
214
|
+
content: [{
|
|
215
|
+
type: "text",
|
|
216
|
+
text: JSON.stringify(result, null, 2)
|
|
217
|
+
}],
|
|
218
|
+
details: result
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
name: "computer_exec",
|
|
224
|
+
label: "Computer Script",
|
|
225
|
+
description: "Run a trusted, explicitly allowed local TypeScript script against the authorized application session.",
|
|
226
|
+
promptSnippet: "Run a trusted reusable computer script by its explicitly allowed path and JSON input",
|
|
227
|
+
parameters: {
|
|
228
|
+
type: "object",
|
|
229
|
+
properties: {
|
|
230
|
+
scriptPath: { type: "string" },
|
|
231
|
+
input: {}
|
|
232
|
+
},
|
|
233
|
+
required: ["scriptPath", "input"],
|
|
234
|
+
additionalProperties: false
|
|
235
|
+
},
|
|
236
|
+
async execute(_toolCallId, params, signal) {
|
|
237
|
+
if (!globallyEnabled || client === void 0 || state?.phase !== "active") throw new Error("Computer use is not active for this session.");
|
|
238
|
+
if (dependencies.scriptRunner === void 0) throw new Error("Computer script execution is unavailable.");
|
|
239
|
+
const input = params;
|
|
240
|
+
const result = await dependencies.scriptRunner.execute(input.scriptPath, input.input, signal);
|
|
241
|
+
return {
|
|
242
|
+
content: [{
|
|
243
|
+
type: "text",
|
|
244
|
+
text: JSON.stringify(result, null, 2)
|
|
245
|
+
}],
|
|
246
|
+
details: result
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
],
|
|
251
|
+
services: [piMinorModes({
|
|
252
|
+
snapshot: () => globallyEnabled ? [mode] : [],
|
|
253
|
+
subscribe(listener) {
|
|
254
|
+
modeListeners.add(listener);
|
|
255
|
+
return () => {
|
|
256
|
+
modeListeners.delete(listener);
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
})],
|
|
260
|
+
toolRestrictions: [{
|
|
261
|
+
source: PACKAGE_SOURCE,
|
|
262
|
+
restrict: (incoming, available) => restriction(incoming, available),
|
|
263
|
+
subscribe(listener) {
|
|
264
|
+
restrictionListeners.add(listener);
|
|
265
|
+
return () => {
|
|
266
|
+
restrictionListeners.delete(listener);
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
}],
|
|
270
|
+
events: {
|
|
271
|
+
before_agent_start: (event) => globallyEnabled && state?.phase === "active" ? { systemPrompt: `${event.systemPrompt}\n\n${COMPUTER_USE_GUIDANCE}` } : void 0,
|
|
272
|
+
session_start: (_event, context) => {
|
|
273
|
+
if (signal.aborted) return;
|
|
274
|
+
activeContext = context;
|
|
275
|
+
reconcileTools(false);
|
|
276
|
+
refresh();
|
|
277
|
+
if (timer) clearInterval(timer);
|
|
278
|
+
timer = setInterval(() => void refresh(), 250);
|
|
279
|
+
timer.unref?.();
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
onStop() {
|
|
283
|
+
if (timer) clearInterval(timer);
|
|
284
|
+
timer = void 0;
|
|
285
|
+
},
|
|
286
|
+
onDispose() {
|
|
287
|
+
if (timer) clearInterval(timer);
|
|
288
|
+
timer = void 0;
|
|
289
|
+
reconcileTools(false);
|
|
290
|
+
activeContext?.ui.setStatus(COMPUTER_USE_MODE_STATUS_KEY, void 0);
|
|
291
|
+
activeContext?.ui.setStatus(COMPUTER_USE_STATUS_KEY, void 0);
|
|
292
|
+
activeContext = void 0;
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
//#endregion
|
|
297
|
+
export { COMPUTER_USE_MODE_ID, createComputerUseRuntime };
|
|
298
|
+
|
|
299
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/computerUseRuntime/index.ts"],"sourcesContent":["import { type PiPluginContributions } from '@agimon-ai/doompi-core/pi-extension';\nimport { type DoomToolRestriction } from '@agimon-ai/doompi-core/tool-surface';\nimport { piMinorModes } from '@agimon-ai/doompi-minor-mode';\nimport { defineMinorMode, type MinorModeOwner, type MinorModeOwnerActionContext } from '@agimon-ai/doompi-minor-mode';\nimport type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\n\nimport { COMPUTER_USE_GUIDANCE } from '../../constants/computerUse';\nimport type { ComputerUseAction } from '../../types/computerUse';\nimport {\n COMPUTER_USE_MODE_ID,\n COMPUTER_USE_MODE_STATUS_KEY,\n COMPUTER_USE_STATUS_KEY,\n type ComputerUseSessionView,\n} from '../../types/computerUseApi';\nimport type { ComputerUseExtensionDependencies } from '../../types/extension';\nimport { createComputerUseCommand } from '../computerUseCommand';\n\nconst PACKAGE_SOURCE = '@agimon-ai/doompi-computer-use';\nexport { COMPUTER_USE_MODE_ID };\nimport { modeState, computerUseRestriction } from '../../models/computerUseMode';\n\nexport function createComputerUseRuntime(\n dependencies: ComputerUseExtensionDependencies,\n signal: AbortSignal,\n): PiPluginContributions<ComputerUseExtensionDependencies> & {\n tools: readonly Parameters<ExtensionAPI['registerTool']>[0][];\n} {\n const client = dependencies.client;\n let state: ComputerUseSessionView | undefined;\n let enabled = false;\n let restriction: DoomToolRestriction = computerUseRestriction(false);\n const restrictionListeners = new Set<() => void>();\n const reconcileTools = (active: boolean): void => {\n restriction = computerUseRestriction(active);\n for (const listener of restrictionListeners) listener();\n };\n let globallyEnabled = false;\n let mode: MinorModeOwner<MinorModeOwnerActionContext<ExtensionContext>>;\n const modeListeners = new Set<() => void>();\n let timer: ReturnType<typeof setInterval> | undefined;\n let activeContext: ExtensionContext | undefined;\n let publishedMode = '';\n let publishedModeStatus: string | undefined;\n let publishedActivityStatus: string | undefined;\n const publish = (): void => {\n const phase = state?.phase ?? 'inactive';\n const projection = `${enabled}:${phase}:${state?.revision ?? 'none'}`;\n if (mode !== undefined && projection !== publishedMode) {\n mode.publish();\n publishedMode = projection;\n }\n const modeStatus = state === undefined ? undefined : enabled || phase !== 'inactive' ? phase : '';\n if (activeContext !== undefined && modeStatus !== publishedModeStatus) {\n activeContext.ui.setStatus(COMPUTER_USE_MODE_STATUS_KEY, modeStatus);\n publishedModeStatus = modeStatus;\n }\n const activityStatus = enabled || phase !== 'inactive' ? `computer use: ${phase}` : undefined;\n if (activeContext !== undefined && activityStatus !== publishedActivityStatus) {\n activeContext.ui.setStatus(COMPUTER_USE_STATUS_KEY, activityStatus);\n publishedActivityStatus = activityStatus;\n }\n };\n const refresh = async (): Promise<void> => {\n if (signal.aborted) return;\n let nextGloballyEnabled = false;\n try {\n nextGloballyEnabled = (await dependencies.enabled?.()) === true;\n } catch {\n nextGloballyEnabled = false;\n }\n if (signal.aborted) return;\n if (nextGloballyEnabled !== globallyEnabled) {\n globallyEnabled = nextGloballyEnabled;\n if (!globallyEnabled) {\n if (client !== undefined && state !== undefined && state.phase !== 'inactive' && state.phase !== 'failed') {\n try {\n await client.stop();\n } catch {\n // The global opt-in is still authoritative even when remote cleanup fails.\n }\n }\n enabled = false;\n state = undefined;\n reconcileTools(false);\n }\n publishedMode = '';\n for (const listener of modeListeners) listener();\n }\n if (!globallyEnabled || client === undefined) {\n state = undefined;\n reconcileTools(false);\n publish();\n return;\n }\n try {\n const nextState = await client.state(signal);\n if (signal.aborted) return;\n state = nextState;\n reconcileTools(state.phase === 'active');\n publish();\n } catch {\n state = undefined;\n reconcileTools(false);\n publish();\n }\n };\n mode = defineMinorMode<undefined, MinorModeOwnerActionContext<ExtensionContext>>({\n descriptor: {\n source: PACKAGE_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: 'Open the cockpit activation workflow and native confirmation.',\n contexts: ['tui', 'headless'],\n parameters: [],\n },\n {\n id: 'deactivate',\n label: 'Deactivate',\n description: 'Stop this session computer-use run.',\n contexts: ['tui', 'headless'],\n parameters: [],\n },\n {\n id: 'doctor',\n label: 'Doctor',\n description: 'Report Desktop availability and session state.',\n contexts: ['tui', 'headless'],\n parameters: [],\n },\n ],\n },\n state: () => modeState(state, enabled),\n async handleAction(_runtime, actionId, _argumentsValue, execution) {\n activeContext = execution.context;\n if (actionId === 'activate') {\n if ((await dependencies.enabled?.()) !== true) {\n await refresh();\n throw new Error('Enable computer use in global settings first.');\n }\n if (client === undefined) throw new Error('DoomPi Desktop computer use is unavailable.');\n enabled = true;\n await refresh();\n publish();\n return { message: 'Computer use is ready to configure in Activity.' };\n }\n if (actionId === 'doctor') {\n await refresh();\n return {\n message:\n client === undefined\n ? 'DoomPi Desktop session API is unavailable.'\n : `Computer use is ${state?.phase.replaceAll('_', ' ') ?? 'unavailable'}.`,\n };\n }\n if (actionId === 'deactivate') {\n if (client === undefined) throw new Error('DoomPi Desktop computer use is unavailable.');\n if (state !== undefined && state.phase !== 'inactive' && state.phase !== 'failed')\n await client.stop(execution.signal);\n enabled = false;\n await refresh();\n publish();\n return { message: 'Computer use is off.' };\n }\n throw new Error(`Unknown computer-use action: ${actionId}`);\n },\n }).createOwner(undefined);\n return {\n commands: [createComputerUseCommand(dependencies.service)],\n tools: [\n {\n name: 'computer_state',\n label: 'Computer State',\n description: 'Observe the authorized application window and return its semantic accessibility state.',\n promptSnippet: 'Observe the authorized application before choosing a semantic action',\n parameters: { type: 'object', properties: {}, additionalProperties: false },\n async execute(_toolCallId, _params, signal) {\n if (!globallyEnabled || client === undefined || state?.phase !== 'active')\n throw new Error('Computer use is not active for this session.');\n const observation = await client.observe(signal);\n return { content: [{ type: 'text', text: JSON.stringify(observation, null, 2) }], details: observation };\n },\n },\n {\n name: 'computer_action',\n label: 'Computer Action',\n description: 'Perform one constrained semantic action in the authorized application window.',\n promptSnippet: 'Perform one action using a current computer_state snapshot and element ref',\n parameters: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['press', 'focus', 'set_value', 'scroll'] },\n snapshotId: { type: 'string' },\n elementRef: { type: 'string' },\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 async execute(_toolCallId, params, signal) {\n if (!globallyEnabled || client === undefined || state?.phase !== 'active')\n throw new Error('Computer use is not active for this session.');\n const result = await client.act(params as unknown as ComputerUseAction, signal);\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], details: result };\n },\n },\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 promptSnippet: 'Run a trusted reusable computer script by its explicitly allowed path and JSON input',\n parameters: {\n type: 'object',\n properties: {\n scriptPath: { type: 'string' },\n input: {},\n },\n required: ['scriptPath', 'input'],\n additionalProperties: false,\n },\n async execute(_toolCallId, params, signal) {\n if (!globallyEnabled || client === undefined || state?.phase !== 'active')\n throw new Error('Computer use is not active for this session.');\n if (dependencies.scriptRunner === undefined) throw new Error('Computer script execution is unavailable.');\n const input = params as { scriptPath: string; input: unknown };\n const result = await dependencies.scriptRunner.execute(input.scriptPath, input.input, signal);\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], details: result };\n },\n },\n ],\n services: [\n piMinorModes({\n snapshot: () => (globallyEnabled ? [mode] : []),\n subscribe(listener) {\n modeListeners.add(listener);\n return () => {\n modeListeners.delete(listener);\n };\n },\n }),\n ],\n toolRestrictions: [\n {\n source: PACKAGE_SOURCE,\n restrict: (incoming, available) => restriction(incoming, available),\n subscribe(listener) {\n restrictionListeners.add(listener);\n return () => {\n restrictionListeners.delete(listener);\n };\n },\n },\n ],\n events: {\n before_agent_start: (event) =>\n globallyEnabled && state?.phase === 'active'\n ? { systemPrompt: `${event.systemPrompt}\\n\\n${COMPUTER_USE_GUIDANCE}` }\n : undefined,\n session_start: (_event, context) => {\n if (signal.aborted) return;\n activeContext = context;\n reconcileTools(false);\n void refresh();\n if (timer) clearInterval(timer);\n timer = setInterval(() => void refresh(), 250);\n timer.unref?.();\n },\n },\n onStop() {\n if (timer) clearInterval(timer);\n timer = undefined;\n },\n onDispose() {\n if (timer) clearInterval(timer);\n timer = undefined;\n reconcileTools(false);\n activeContext?.ui.setStatus(COMPUTER_USE_MODE_STATUS_KEY, undefined);\n activeContext?.ui.setStatus(COMPUTER_USE_STATUS_KEY, undefined);\n activeContext = undefined;\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_computerUse = require("../../constants/computerUse.cjs");
|
|
3
|
+
const require_index = require("../sessionApiClient/index.cjs");
|
|
4
|
+
const require_index$1 = require("../computerScriptRunner/index.cjs");
|
|
5
|
+
const require_index$2 = require("../extensionService/index.cjs");
|
|
6
|
+
const require_computerUseApi = require("../../types/computerUseApi.cjs");
|
|
7
|
+
const require_computerUseMode = require("../../models/computerUseMode.cjs");
|
|
8
|
+
let node_path = require("node:path");
|
|
9
|
+
node_path = require_runtime.__toESM(node_path, 1);
|
|
10
|
+
let _agimon_ai_doompi_minor_mode = require("@agimon-ai/doompi-minor-mode");
|
|
11
|
+
//#region src/services/computerUseServer/index.ts
|
|
12
|
+
/** This package's identity for mode, activity and restriction ownership, not a status key. */
|
|
13
|
+
const SOURCE = "@agimon-ai/doompi-computer-use";
|
|
14
|
+
const SCRIPT_PATHS_ENV = "DOOMPI_COMPUTER_USE_SCRIPT_PATHS";
|
|
15
|
+
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.";
|
|
16
|
+
function output(value, isError = false) {
|
|
17
|
+
return {
|
|
18
|
+
content: [{
|
|
19
|
+
type: "text",
|
|
20
|
+
text: typeof value === "string" ? value : JSON.stringify(value, null, 2)
|
|
21
|
+
}],
|
|
22
|
+
details: value,
|
|
23
|
+
...isError ? { isError: true } : {}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function observationOutput(value) {
|
|
27
|
+
return {
|
|
28
|
+
content: [{
|
|
29
|
+
type: "text",
|
|
30
|
+
text: JSON.stringify({
|
|
31
|
+
...value,
|
|
32
|
+
screenshot: void 0
|
|
33
|
+
}, null, 2)
|
|
34
|
+
}, {
|
|
35
|
+
type: "image",
|
|
36
|
+
data: value.screenshot.data,
|
|
37
|
+
mimeType: value.screenshot.mimeType
|
|
38
|
+
}],
|
|
39
|
+
details: value
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function createComputerUseServer(host) {
|
|
43
|
+
const client = require_index.createComputerUseSessionClient();
|
|
44
|
+
const allowedScriptPaths = (host.context.environment[SCRIPT_PATHS_ENV] ?? "").split(node_path.default.delimiter).filter((entry) => entry.length > 0);
|
|
45
|
+
const dependencies = {
|
|
46
|
+
client,
|
|
47
|
+
scriptRunner: client === void 0 ? void 0 : new require_index$1.ComputerScriptRunner({
|
|
48
|
+
client,
|
|
49
|
+
allowedScriptPaths
|
|
50
|
+
}),
|
|
51
|
+
service: new require_index$2.DefaultComputerUseExtensionService(client)
|
|
52
|
+
};
|
|
53
|
+
let state;
|
|
54
|
+
let stopActivity;
|
|
55
|
+
let modeOwner;
|
|
56
|
+
const modeSelected = () => (host.context.selection.state?.["minor-mode"] ?? []).includes(require_computerUseApi.COMPUTER_USE_MODE_ID);
|
|
57
|
+
const publishMode = () => modeOwner?.publish();
|
|
58
|
+
const applyState = (next) => {
|
|
59
|
+
state = next;
|
|
60
|
+
host.context.client.setStatus(require_computerUseApi.COMPUTER_USE_STATUS_KEY, next === void 0 || next.phase === "inactive" ? void 0 : `computer use: ${next.phase}`);
|
|
61
|
+
publishMode();
|
|
62
|
+
};
|
|
63
|
+
const selectMode = async (enabled) => {
|
|
64
|
+
const modes = (host.context.selection.state?.["minor-mode"] ?? []).filter((mode) => mode !== require_computerUseApi.COMPUTER_USE_MODE_ID);
|
|
65
|
+
await host.changeSelection({
|
|
66
|
+
axis: "state",
|
|
67
|
+
key: "minor-mode",
|
|
68
|
+
values: enabled ? [...modes, require_computerUseApi.COMPUTER_USE_MODE_ID] : modes
|
|
69
|
+
});
|
|
70
|
+
publishMode();
|
|
71
|
+
};
|
|
72
|
+
const refresh = async (signal) => {
|
|
73
|
+
if (!client) {
|
|
74
|
+
applyState(void 0);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
applyState(await client.state(signal));
|
|
79
|
+
} catch {
|
|
80
|
+
applyState(void 0);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const requireActive = () => {
|
|
84
|
+
if (!client || state?.phase !== "active") throw new Error("Computer use is not active for this session.");
|
|
85
|
+
return client;
|
|
86
|
+
};
|
|
87
|
+
modeOwner = (0, _agimon_ai_doompi_minor_mode.defineMinorMode)({
|
|
88
|
+
descriptor: {
|
|
89
|
+
source: SOURCE,
|
|
90
|
+
id: require_computerUseApi.COMPUTER_USE_MODE_ID,
|
|
91
|
+
label: "Computer Use",
|
|
92
|
+
description: "Session-scoped semantic control through DoomPi Desktop.",
|
|
93
|
+
order: 450,
|
|
94
|
+
actions: [
|
|
95
|
+
{
|
|
96
|
+
id: "activate",
|
|
97
|
+
label: "Activate",
|
|
98
|
+
description: "Enable computer use for this session.",
|
|
99
|
+
contexts: ["headless"],
|
|
100
|
+
parameters: []
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: "deactivate",
|
|
104
|
+
label: "Deactivate",
|
|
105
|
+
description: "Stop this session computer-use run.",
|
|
106
|
+
contexts: ["headless"],
|
|
107
|
+
parameters: []
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
id: "doctor",
|
|
111
|
+
label: "Doctor",
|
|
112
|
+
description: "Report Desktop availability and session state.",
|
|
113
|
+
contexts: ["headless"],
|
|
114
|
+
parameters: []
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
state: () => require_computerUseMode.modeState(state, modeSelected()),
|
|
119
|
+
async handleAction(_runtime, actionId, _argumentsValue, execution) {
|
|
120
|
+
execution.signal.throwIfAborted();
|
|
121
|
+
if (actionId === "activate") {
|
|
122
|
+
if (!client) throw new Error("DoomPi Desktop computer use is unavailable.");
|
|
123
|
+
await selectMode(true);
|
|
124
|
+
await refresh(execution.signal);
|
|
125
|
+
return { message: "Computer use activated." };
|
|
126
|
+
}
|
|
127
|
+
if (actionId === "doctor") {
|
|
128
|
+
await refresh(execution.signal);
|
|
129
|
+
return { message: client ? `Computer use is ${state?.phase ?? "unavailable"}.` : "DoomPi Desktop session API is unavailable." };
|
|
130
|
+
}
|
|
131
|
+
if (actionId === "deactivate") {
|
|
132
|
+
if (client && state?.phase !== void 0 && state.phase !== "inactive" && state.phase !== "failed") await client.stop(execution.signal);
|
|
133
|
+
await selectMode(false);
|
|
134
|
+
await refresh(execution.signal);
|
|
135
|
+
return { message: "Computer use deactivated." };
|
|
136
|
+
}
|
|
137
|
+
throw new Error(`Unknown computer-use action: ${actionId}`);
|
|
138
|
+
}
|
|
139
|
+
}).createOwner(void 0);
|
|
140
|
+
return {
|
|
141
|
+
services: [(0, _agimon_ai_doompi_minor_mode.serverMinorModes)([modeOwner])],
|
|
142
|
+
toolRestrictions: [{
|
|
143
|
+
when: { state: { "minor-mode": require_computerUseApi.COMPUTER_USE_MODE_ID } },
|
|
144
|
+
allowedTools: [...require_computerUse.COMPUTER_USE_TOOL_NAMES]
|
|
145
|
+
}],
|
|
146
|
+
activities: [{
|
|
147
|
+
when: {
|
|
148
|
+
state: { "minor-mode": require_computerUseApi.COMPUTER_USE_MODE_ID },
|
|
149
|
+
attribution: {
|
|
150
|
+
kind: "minor",
|
|
151
|
+
mode: require_computerUseApi.COMPUTER_USE_MODE_ID
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
name: SOURCE,
|
|
155
|
+
async start() {
|
|
156
|
+
await refresh();
|
|
157
|
+
const unsubscribe = client?.subscribeStatus?.(applyState);
|
|
158
|
+
stopActivity = () => {
|
|
159
|
+
unsubscribe?.();
|
|
160
|
+
applyState(void 0);
|
|
161
|
+
};
|
|
162
|
+
return () => {
|
|
163
|
+
stopActivity?.();
|
|
164
|
+
stopActivity = void 0;
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}],
|
|
168
|
+
tools: [
|
|
169
|
+
{
|
|
170
|
+
when: {
|
|
171
|
+
state: { "minor-mode": require_computerUseApi.COMPUTER_USE_MODE_ID },
|
|
172
|
+
attribution: {
|
|
173
|
+
kind: "minor",
|
|
174
|
+
mode: require_computerUseApi.COMPUTER_USE_MODE_ID
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
name: "computer_state",
|
|
178
|
+
label: "Computer State",
|
|
179
|
+
description: "Observe the authorized application window and return semantic accessibility state.",
|
|
180
|
+
parameters: {
|
|
181
|
+
type: "object",
|
|
182
|
+
properties: {},
|
|
183
|
+
additionalProperties: false
|
|
184
|
+
},
|
|
185
|
+
executionMode: "serial",
|
|
186
|
+
async execute(_toolCallId, _parameters, signal) {
|
|
187
|
+
try {
|
|
188
|
+
return observationOutput(await requireActive().observe(signal));
|
|
189
|
+
} catch (error) {
|
|
190
|
+
return output(error instanceof Error ? error.message : String(error), true);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
when: {
|
|
196
|
+
state: { "minor-mode": require_computerUseApi.COMPUTER_USE_MODE_ID },
|
|
197
|
+
attribution: {
|
|
198
|
+
kind: "minor",
|
|
199
|
+
mode: require_computerUseApi.COMPUTER_USE_MODE_ID
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
name: "computer_action",
|
|
203
|
+
label: "Computer Action",
|
|
204
|
+
description: "Perform one constrained semantic action in the authorized application window.",
|
|
205
|
+
parameters: {
|
|
206
|
+
type: "object",
|
|
207
|
+
properties: {
|
|
208
|
+
kind: {
|
|
209
|
+
type: "string",
|
|
210
|
+
enum: [
|
|
211
|
+
"press",
|
|
212
|
+
"focus",
|
|
213
|
+
"set_value",
|
|
214
|
+
"scroll"
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
snapshotId: {
|
|
218
|
+
type: "string",
|
|
219
|
+
minLength: 1
|
|
220
|
+
},
|
|
221
|
+
elementRef: {
|
|
222
|
+
type: "string",
|
|
223
|
+
minLength: 1
|
|
224
|
+
},
|
|
225
|
+
value: { type: "string" },
|
|
226
|
+
direction: {
|
|
227
|
+
type: "string",
|
|
228
|
+
enum: [
|
|
229
|
+
"up",
|
|
230
|
+
"down",
|
|
231
|
+
"left",
|
|
232
|
+
"right"
|
|
233
|
+
]
|
|
234
|
+
},
|
|
235
|
+
amount: {
|
|
236
|
+
type: "string",
|
|
237
|
+
enum: ["line", "page"]
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
required: [
|
|
241
|
+
"kind",
|
|
242
|
+
"snapshotId",
|
|
243
|
+
"elementRef"
|
|
244
|
+
],
|
|
245
|
+
additionalProperties: false
|
|
246
|
+
},
|
|
247
|
+
executionMode: "serial",
|
|
248
|
+
async execute(_toolCallId, parameters, signal) {
|
|
249
|
+
try {
|
|
250
|
+
const result = await requireActive().act(parameters, signal);
|
|
251
|
+
await refresh(signal);
|
|
252
|
+
return output(result);
|
|
253
|
+
} catch (error) {
|
|
254
|
+
return output(error instanceof Error ? error.message : String(error), true);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
when: {
|
|
260
|
+
state: { "minor-mode": require_computerUseApi.COMPUTER_USE_MODE_ID },
|
|
261
|
+
attribution: {
|
|
262
|
+
kind: "minor",
|
|
263
|
+
mode: require_computerUseApi.COMPUTER_USE_MODE_ID
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
name: "computer_exec",
|
|
267
|
+
label: "Computer Script",
|
|
268
|
+
description: "Run a trusted, explicitly allowed local TypeScript script against the authorized application session.",
|
|
269
|
+
parameters: {
|
|
270
|
+
type: "object",
|
|
271
|
+
properties: {
|
|
272
|
+
scriptPath: {
|
|
273
|
+
type: "string",
|
|
274
|
+
minLength: 1
|
|
275
|
+
},
|
|
276
|
+
input: {}
|
|
277
|
+
},
|
|
278
|
+
required: ["scriptPath", "input"],
|
|
279
|
+
additionalProperties: false
|
|
280
|
+
},
|
|
281
|
+
executionMode: "serial",
|
|
282
|
+
async execute(_toolCallId, parameters, signal) {
|
|
283
|
+
try {
|
|
284
|
+
if (!dependencies.scriptRunner) throw new Error("Computer script execution is unavailable.");
|
|
285
|
+
const input = parameters;
|
|
286
|
+
return output(await dependencies.scriptRunner.execute(input.scriptPath, input.input, signal));
|
|
287
|
+
} catch (error) {
|
|
288
|
+
return output(error instanceof Error ? error.message : String(error), true);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
],
|
|
293
|
+
commands: [{
|
|
294
|
+
name: require_computerUse.COMMAND_NAME,
|
|
295
|
+
description: require_computerUse.COMMAND_DESCRIPTION,
|
|
296
|
+
async execute(args, execution) {
|
|
297
|
+
const result = await dependencies.service.execute();
|
|
298
|
+
await execution.client.notify({
|
|
299
|
+
body: result.message,
|
|
300
|
+
level: result.level
|
|
301
|
+
});
|
|
302
|
+
if (args.trim() === "deactivate" && client && state?.phase !== "inactive" && state?.phase !== "failed") {
|
|
303
|
+
await client.stop();
|
|
304
|
+
await host.changeSelection({
|
|
305
|
+
axis: "state",
|
|
306
|
+
key: "minor-mode",
|
|
307
|
+
values: (execution.selection.state?.["minor-mode"] ?? []).filter((mode) => mode !== require_computerUseApi.COMPUTER_USE_MODE_ID)
|
|
308
|
+
});
|
|
309
|
+
await refresh();
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}],
|
|
313
|
+
hooks: [{
|
|
314
|
+
when: {
|
|
315
|
+
state: { "minor-mode": require_computerUseApi.COMPUTER_USE_MODE_ID },
|
|
316
|
+
attribution: {
|
|
317
|
+
kind: "minor",
|
|
318
|
+
mode: require_computerUseApi.COMPUTER_USE_MODE_ID
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
event: "before_agent_start",
|
|
322
|
+
handle(event) {
|
|
323
|
+
if (state?.phase !== "active") return void 0;
|
|
324
|
+
return { systemPrompt: `${typeof event.systemPrompt === "string" ? event.systemPrompt : ""}\n\n${GUIDANCE}`.trim() };
|
|
325
|
+
}
|
|
326
|
+
}, {
|
|
327
|
+
when: {
|
|
328
|
+
state: { "minor-mode": require_computerUseApi.COMPUTER_USE_MODE_ID },
|
|
329
|
+
attribution: {
|
|
330
|
+
kind: "minor",
|
|
331
|
+
mode: require_computerUseApi.COMPUTER_USE_MODE_ID
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
event: "session_shutdown",
|
|
335
|
+
handle: async () => {
|
|
336
|
+
stopActivity?.();
|
|
337
|
+
if (client && state?.phase !== "inactive" && state?.phase !== "failed") await client.stop();
|
|
338
|
+
}
|
|
339
|
+
}],
|
|
340
|
+
onDispose() {
|
|
341
|
+
stopActivity?.();
|
|
342
|
+
stopActivity = void 0;
|
|
343
|
+
host.context.client.setStatus(require_computerUseApi.COMPUTER_USE_STATUS_KEY, void 0);
|
|
344
|
+
}
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
//#endregion
|
|
348
|
+
exports.createComputerUseServer = createComputerUseServer;
|
|
349
|
+
|
|
350
|
+
//# sourceMappingURL=index.cjs.map
|