@agimon-ai/doompi-computer-use 0.0.1-alpha.13 → 0.0.1-alpha.15
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 +5 -1
- package/dist/api-contracts.cjs +1 -0
- package/dist/api-contracts.d.cts +2 -0
- package/dist/api-contracts.d.mts +2 -0
- package/dist/api-contracts.mjs +1 -0
- package/dist/constants/computerUse.cjs +3 -0
- package/dist/constants/computerUse.cjs.map +1 -0
- package/dist/{adapters/pi/extension.d.cts → constants/computerUse.d.cts} +3 -10
- package/dist/constants/computerUse.d.cts.map +1 -0
- package/dist/{adapters/pi/extension.d.mts → constants/computerUse.d.mts} +3 -10
- package/dist/constants/computerUse.d.mts.map +1 -0
- package/dist/constants/computerUse.mjs +3 -0
- package/dist/constants/computerUse.mjs.map +1 -0
- package/dist/controllers/computerUseApi.cjs +2 -0
- package/dist/controllers/computerUseApi.cjs.map +1 -0
- package/dist/controllers/computerUseApi.mjs +2 -0
- package/dist/controllers/computerUseApi.mjs.map +1 -0
- package/dist/controllers/computerUseCommand.cjs +2 -0
- package/dist/controllers/computerUseCommand.cjs.map +1 -0
- package/dist/controllers/computerUseCommand.mjs +2 -0
- package/dist/controllers/computerUseCommand.mjs.map +1 -0
- package/dist/controllers/computerUseRuntime.cjs +2 -0
- package/dist/controllers/computerUseRuntime.cjs.map +1 -0
- package/dist/controllers/computerUseRuntime.mjs +2 -0
- package/dist/controllers/computerUseRuntime.mjs.map +1 -0
- package/dist/controllers/computerUseServer.cjs +3 -0
- package/dist/controllers/computerUseServer.cjs.map +1 -0
- package/dist/controllers/computerUseServer.mjs +3 -0
- package/dist/controllers/computerUseServer.mjs.map +1 -0
- package/dist/controllers/webComputerUseChannel.cjs +2 -0
- package/dist/controllers/webComputerUseChannel.cjs.map +1 -0
- package/dist/controllers/webComputerUseChannel.mjs +2 -0
- package/dist/controllers/webComputerUseChannel.mjs.map +1 -0
- package/dist/extensions/pi.cjs +2 -1
- package/dist/extensions/pi.cjs.map +1 -0
- package/dist/extensions/pi.d.cts +6 -2
- package/dist/extensions/pi.d.cts.map +1 -0
- package/dist/extensions/pi.d.mts +6 -2
- package/dist/extensions/pi.d.mts.map +1 -0
- package/dist/extensions/pi.mjs +2 -1
- package/dist/extensions/pi.mjs.map +1 -0
- package/dist/extensions/server.cjs +2 -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 +2 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +9 -9
- package/dist/index.d.mts +9 -9
- package/dist/index.mjs +1 -1
- package/dist/models/computerUseMode.cjs +2 -0
- package/dist/models/computerUseMode.cjs.map +1 -0
- package/dist/models/computerUseMode.mjs +2 -0
- package/dist/models/computerUseMode.mjs.map +1 -0
- package/dist/{services/sessionController.cjs → models/computerUseState.cjs} +1 -1
- package/dist/models/computerUseState.cjs.map +1 -0
- package/dist/{services/sessionController.d.cts → models/computerUseState.d.cts} +2 -2
- package/dist/models/computerUseState.d.cts.map +1 -0
- package/dist/{services/sessionController.d.mts → models/computerUseState.d.mts} +2 -2
- package/dist/models/computerUseState.d.mts.map +1 -0
- package/dist/{services/sessionController.mjs → models/computerUseState.mjs} +1 -1
- package/dist/models/computerUseState.mjs.map +1 -0
- package/dist/schemas/apiContracts.cjs +2 -0
- package/dist/schemas/apiContracts.cjs.map +1 -0
- package/dist/schemas/apiContracts.d.cts +53 -0
- package/dist/schemas/apiContracts.d.cts.map +1 -0
- package/dist/schemas/apiContracts.d.mts +53 -0
- package/dist/schemas/apiContracts.d.mts.map +1 -0
- package/dist/schemas/apiContracts.mjs +2 -0
- package/dist/schemas/apiContracts.mjs.map +1 -0
- package/dist/{adapters/pi/computerScriptRunner.cjs → services/computerScriptRunner/index.cjs} +1 -1
- package/dist/{adapters/pi/computerScriptRunner.mjs.map → services/computerScriptRunner/index.cjs.map} +1 -1
- package/dist/{adapters/pi/computerScriptRunner.d.cts → services/computerScriptRunner/index.d.cts} +2 -2
- package/dist/services/computerScriptRunner/index.d.cts.map +1 -0
- package/dist/{adapters/pi/computerScriptRunner.d.mts → services/computerScriptRunner/index.d.mts} +2 -2
- package/dist/services/computerScriptRunner/index.d.mts.map +1 -0
- package/dist/{adapters/pi/computerScriptRunner.mjs → services/computerScriptRunner/index.mjs} +1 -1
- package/dist/services/computerScriptRunner/index.mjs.map +1 -0
- package/dist/services/dependencies/index.cjs +2 -0
- package/dist/services/dependencies/index.cjs.map +1 -0
- package/dist/services/dependencies/index.d.cts +6 -0
- package/dist/services/dependencies/index.d.cts.map +1 -0
- package/dist/services/dependencies/index.d.mts +6 -0
- package/dist/services/dependencies/index.d.mts.map +1 -0
- package/dist/services/dependencies/index.mjs +2 -0
- package/dist/services/dependencies/index.mjs.map +1 -0
- package/dist/services/{extensionService.cjs → extensionService/index.cjs} +1 -1
- package/dist/services/extensionService/index.cjs.map +1 -0
- package/dist/services/{extensionService.d.mts → extensionService/index.d.cts} +4 -4
- package/dist/services/extensionService/index.d.cts.map +1 -0
- package/dist/services/{extensionService.d.cts → extensionService/index.d.mts} +4 -4
- package/dist/services/extensionService/index.d.mts.map +1 -0
- package/dist/services/{extensionService.mjs → extensionService/index.mjs} +1 -1
- package/dist/services/extensionService/index.mjs.map +1 -0
- package/dist/services/sessionApiClient/index.cjs +2 -0
- package/dist/services/sessionApiClient/index.cjs.map +1 -0
- package/dist/services/sessionApiClient/index.d.cts +15 -0
- package/dist/services/sessionApiClient/index.d.cts.map +1 -0
- package/dist/services/sessionApiClient/index.d.mts +15 -0
- package/dist/services/sessionApiClient/index.d.mts.map +1 -0
- package/dist/services/sessionApiClient/index.mjs +2 -0
- package/dist/services/sessionApiClient/index.mjs.map +1 -0
- package/dist/services/{traceRedaction.cjs → traceRedaction/index.cjs} +1 -1
- package/dist/services/{traceRedaction.cjs.map → traceRedaction/index.cjs.map} +1 -1
- package/dist/services/{traceRedaction.d.cts → traceRedaction/index.d.cts} +3 -3
- package/dist/services/traceRedaction/index.d.cts.map +1 -0
- package/dist/services/{traceRedaction.d.mts → traceRedaction/index.d.mts} +3 -3
- package/dist/services/traceRedaction/index.d.mts.map +1 -0
- package/dist/services/{traceRedaction.mjs → traceRedaction/index.mjs} +1 -1
- package/dist/services/{traceRedaction.mjs.map → traceRedaction/index.mjs.map} +1 -1
- package/dist/services/webComputerUseAvailability/index.cjs +2 -0
- package/dist/services/webComputerUseAvailability/index.cjs.map +1 -0
- package/dist/services/webComputerUseAvailability/index.mjs +2 -0
- package/dist/services/webComputerUseAvailability/index.mjs.map +1 -0
- package/dist/types/computerScript.d.cts +1 -1
- package/dist/types/computerScript.d.mts +1 -1
- package/dist/types/computerUseApi.cjs.map +1 -1
- package/dist/types/computerUseApi.d.cts +1 -1
- package/dist/types/computerUseApi.d.mts +1 -1
- package/dist/types/computerUseApi.mjs.map +1 -1
- package/dist/types/extension.d.cts +1 -1
- package/dist/types/extension.d.mts +1 -1
- package/package.json +29 -21
- package/src/extensions/web.ts +51 -0
- package/src/types/computerUseApi.ts +2 -2
- package/src/web/components/ComputerActionToolCard.tsx +3 -2
- package/src/web/components/ComputerExecToolCard.tsx +3 -2
- package/src/web/components/ComputerStateToolCard.tsx +3 -2
- package/src/web/components/ComputerUsePanel.tsx +4 -3
- package/src/web/lib/computerActionToolRender.ts +1 -1
- package/src/web/lib/computerExecToolRender.ts +1 -1
- package/src/web/lib/computerStateToolRender.ts +1 -1
- package/src/web/lib/computerUseSettings.ts +1 -1
- package/src/web/stores/computerUseStore.ts +4 -3
- package/src/web/tsconfig.json +1 -7
- package/dist/adapters/computerUseApi.cjs +0 -2
- package/dist/adapters/computerUseApi.cjs.map +0 -1
- package/dist/adapters/computerUseApi.d.cts +0 -41
- package/dist/adapters/computerUseApi.d.cts.map +0 -1
- package/dist/adapters/computerUseApi.d.mts +0 -41
- 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/computerScriptRunner.cjs.map +0 -1
- package/dist/adapters/pi/computerScriptRunner.d.cts.map +0 -1
- package/dist/adapters/pi/computerScriptRunner.d.mts.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.map +0 -1
- 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 -25
- package/dist/adapters/pi/sessionApiClient.d.cts.map +0 -1
- package/dist/adapters/pi/sessionApiClient.d.mts +0 -25
- 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.map +0 -1
- package/dist/services/extensionService.d.cts.map +0 -1
- package/dist/services/extensionService.d.mts.map +0 -1
- package/dist/services/extensionService.mjs.map +0 -1
- package/dist/services/sessionController.cjs.map +0 -1
- package/dist/services/sessionController.d.cts.map +0 -1
- package/dist/services/sessionController.d.mts.map +0 -1
- package/dist/services/sessionController.mjs.map +0 -1
- package/dist/services/traceRedaction.d.cts.map +0 -1
- package/dist/services/traceRedaction.d.mts.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/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/index.ts +0 -47
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiContracts.mjs","names":[],"sources":["../../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses, type DoomHttpContract } from '@agimon-ai/doompi-core/api-contracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst N = Type.Number();\nconst O = Type.Optional;\nconst values = <T extends string>(items: T[]) => Type.Union(items.map((item) => Type.Literal(item)));\nconst Json = Type.Unknown({\n description:\n 'Desktop provider JSON value. Targets, observations and action results are supplied by the admitted Desktop provider.',\n});\nconst Target = Type.Record(S, Json);\nconst Error = Type.Object({ code: S, message: S });\nconst Artifact = Type.Object({\n artifactId: S,\n status: values(['ready', 'failed']),\n downloadUrl: O(S),\n previewUrl: O(S),\n actionCount: O(N),\n completedAt: O(S),\n failure: O(Error),\n});\nexport const ComputerStateSchema = Type.Object({\n sessionId: S,\n revision: N,\n wake: N,\n phase: values(['inactive', 'awaiting_confirmation', 'activating', 'active', 'stopping', 'failed']),\n requestId: O(S),\n target: O(Target),\n durationMs: O(N),\n expiresAt: O(N),\n failure: O(Error),\n artifact: O(Artifact),\n});\nconst Reference = { snapshotId: Type.String({ minLength: 1 }), elementRef: Type.String({ minLength: 1 }) };\nexport const ComputerActionSchema = Type.Union([\n Type.Object({ kind: values(['press', 'focus']), ...Reference }, { additionalProperties: false }),\n Type.Object({ kind: Type.Literal('set_value'), ...Reference, value: S }, { additionalProperties: false }),\n Type.Object(\n {\n kind: Type.Literal('scroll'),\n ...Reference,\n direction: values(['up', 'down', 'left', 'right']),\n amount: values(['line', 'page']),\n },\n { additionalProperties: false },\n ),\n]);\nconst internal = (\n method: 'GET' | 'POST',\n path: string,\n output: object,\n body?: object,\n status = 200,\n): DoomHttpContract => ({\n id: `computer.${path.slice(1).replaceAll('/', '.')}`,\n scope: 'session',\n basePath: 'computer-use',\n path,\n method,\n authentication: 'owner',\n description: `Computer use broker ${path}. Requires the host-issued ${path.startsWith('/agent/') ? 'agent' : 'hub'} bearer token.`,\n availability: 'Internal broker route; ordinary browser credentials are insufficient.',\n parameters: [{ name: 'Authorization', in: 'header', required: true, schema: Type.String({ pattern: '^Bearer .+' }) }],\n ...(body ? { body: { required: true, contentType: 'application/json', schema: body } } : {}),\n responses: jsonApiResponses(output, status),\n});\nexport const apiContracts = defineApiContract({\n version: 1,\n dynamic: ['Desktop provider target extensions, observations and operation results are runtime-defined JSON.'],\n http: [\n {\n id: 'computer.activate',\n scope: 'session',\n basePath: 'computer-use',\n path: '/activate',\n method: 'POST',\n authentication: 'owner',\n description: 'Request confirmed Desktop access with admitted caller and remote step-up context.',\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Object({\n target: Type.Object({ windowId: S, bundleId: S }),\n durationMs: Type.Integer({ minimum: 1000, maximum: 1800000 }),\n }),\n },\n responses: jsonApiResponses(ComputerStateSchema, 202),\n },\n internal('GET', '/agent/state', ComputerStateSchema),\n internal('GET', '/hub/state', ComputerStateSchema),\n internal('POST', '/agent/observe', Json),\n internal('POST', '/agent/action', Json, ComputerActionSchema),\n internal('POST', '/agent/stop', ComputerStateSchema, undefined, 202),\n internal(\n 'GET',\n '/hub/activation',\n Type.Union([\n Type.Null(),\n Type.Object({\n requestId: S,\n target: Target,\n durationSeconds: N,\n createdAt: N,\n confirmationExpiresAt: N,\n caller: Type.Object({ locality: values(['local', 'remote']), stepUp: S }),\n }),\n ]),\n ),\n internal('GET', '/hub/authorization', Type.Union([Type.Null(), Type.Object({ grantId: S, expiresAt: O(N) })])),\n internal(\n 'GET',\n '/hub/next',\n Type.Union([\n Type.Null(),\n Type.Object({ id: S, operation: values(['observe', 'act']), payload: O(Json), grantId: S, sequence: O(N) }),\n ]),\n ),\n internal('POST', '/hub/complete', ComputerStateSchema, Type.Object({ id: S, error: O(S), result: O(Json) })),\n internal(\n 'POST',\n '/hub/stop',\n ComputerStateSchema,\n Type.Object({ error: O(S), host: O(Type.Object({ grantId: S, expiresAt: N })), artifact: O(Artifact) }),\n ),\n ],\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'computer.state',\n scope,\n service: 'doompi.hub.v1',\n member: 'computer_use_state',\n kind: 'channel',\n direction: 'server-to-client',\n description: 'Computer use channel payload.',\n input: Type.Object({ state: ComputerStateSchema, targets: Type.Array(Target), busy: O(Type.Literal(true)) }),\n },\n {\n id: 'computer.command',\n scope,\n service: 'doompi.hub.v1',\n member: 'computer_use_state',\n kind: 'channel',\n direction: 'client-to-server',\n description: 'Computer use browser channel command.',\n input: Type.Object({ action: values(['status', 'targets', 'stop', 'artifacts']) }),\n },\n ]),\n});\nexport default apiContracts;\n"],"mappings":"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"}
|
package/dist/{adapters/pi/computerScriptRunner.cjs → services/computerScriptRunner/index.cjs}
RENAMED
|
@@ -42,4 +42,4 @@ process.on('message', async (message) => {
|
|
|
42
42
|
}
|
|
43
43
|
});
|
|
44
44
|
`;var r=class{client;allowedScriptPaths;timeoutMs;maxOutputBytes;constructor(e){this.client=e.client,this.allowedScriptPaths=e.allowedScriptPaths,this.timeoutMs=e.timeoutMs??3e4,this.maxOutputBytes=e.maxOutputBytes??262144}async execute(r,i,a){let o=await(0,t.realpath)(r);if(!(await Promise.all(this.allowedScriptPaths.map(async e=>(0,t.realpath)(e).catch(()=>``)))).includes(o))throw Error(`Computer script path is not explicitly allowed.`);if(!o.endsWith(`.ts`))throw Error(`Computer scripts must be TypeScript files.`);let s=JSON.stringify(i);if(s===void 0)throw Error(`Computer script input must be JSON serializable.`);if(Buffer.byteLength(s)>this.maxOutputBytes)throw Error(`Computer script input exceeds the size limit.`);return new Promise((t,r)=>{let i=(0,e.spawn)(process.execPath,[`--input-type=module`,`--eval`,n],{stdio:[`ignore`,`pipe`,`pipe`,`ipc`]}),c=new AbortController,l=[],u=0,d=!1,f=Promise.resolve(),p=()=>{c.abort(),i.kill(`SIGTERM`),setTimeout(()=>i.kill(`SIGKILL`),250).unref?.()},m=(e,n)=>{d||(d=!0,clearTimeout(_),a?.removeEventListener(`abort`,g),p(),e===void 0?t(n):r(e))},h=e=>(u+=Buffer.byteLength(e),u<=this.maxOutputBytes||(m(Error(`Computer script output exceeded the size limit.`)),!1)),g=()=>m(Error(`Computer script execution was cancelled.`)),_=setTimeout(()=>m(Error(`Computer script execution timed out.`)),this.timeoutMs);if(_.unref?.(),a?.addEventListener(`abort`,g,{once:!0}),a?.aborted===!0)return g();i.stdout?.on(`data`,e=>h(e.toString(`utf8`))),i.stderr?.on(`data`,e=>h(e.toString(`utf8`))),i.on(`error`,e=>m(e)),i.on(`exit`,(e,t)=>{d||m(Error(`Computer script worker exited before completion (${t??e??`unknown`}).`))}),i.on(`message`,e=>{if(!d){if(e.type===`log`&&typeof e.message==`string`){let t=`[${String(e.level)}] ${e.message}`;h(t)&&l.push(t);return}if(e.type===`program`&&typeof e.id==`string`&&(e.operation===`observe`||e.operation===`act`)){f=f.then(async()=>{try{let t=e.operation===`observe`?await this.client.observe(c.signal):await this.client.act(e.payload,c.signal);i.send({type:`response`,id:e.id,value:t})}catch(t){i.send({type:`response`,id:e.id,error:t instanceof Error?t.message:String(t)})}});return}if(e.type===`failed`&&typeof e.error==`string`){m(Error(e.error));return}e.type===`complete`&&(f=f.then(async()=>{let t=e.resultJson;if(t!==void 0&&typeof t!=`string`){m(Error(`Computer script returned an invalid result.`));return}if(typeof t==`string`&&!h(t))return;let n=await this.client.observe(c.signal);m(void 0,{...typeof t==`string`?{result:JSON.parse(t)}:{},observation:n,logs:l})}).catch(e=>m(e instanceof Error?e:Error(String(e)))))}}),i.send({type:`start`,scriptPath:o,input:JSON.parse(s)})})}};exports.ComputerScriptRunner=r;
|
|
45
|
-
//# sourceMappingURL=
|
|
45
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computerScriptRunner.mjs","names":[],"sources":["../../../src/adapters/pi/computerScriptRunner.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport { realpath } from 'node:fs/promises';\nimport type { ComputerScriptExecutionResult, ComputerScriptRunnerOptions } from '../../types/computerScript.ts';\nimport type { ComputerUseAction } from '../../types/computerUse.ts';\nimport type { ComputerUseSessionClient } from './sessionApiClient.ts';\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst DEFAULT_MAX_OUTPUT_BYTES = 256 * 1024;\n\nconst WORKER_SOURCE = String.raw`\nimport { readFile } from 'node:fs/promises';\nimport { stripTypeScriptTypes } from 'node:module';\n\nlet nextRequestId = 0;\nconst pending = new Map();\nconst call = (operation, payload) => new Promise((resolve, reject) => {\n const id = String(++nextRequestId);\n pending.set(id, { resolve, reject });\n process.send({ type: 'program', id, operation, payload });\n});\nprocess.on('message', async (message) => {\n if (message?.type === 'response') {\n const request = pending.get(message.id);\n if (!request) return;\n pending.delete(message.id);\n if (message.error) request.reject(new Error(message.error));\n else request.resolve(message.value);\n return;\n }\n if (message?.type !== 'start') return;\n const controller = new AbortController();\n process.once('SIGTERM', () => controller.abort());\n const logger = Object.fromEntries(['debug', 'info', 'warn', 'error'].map((level) => [level, (value) => {\n process.send({ type: 'log', level, message: String(value) });\n }]));\n try {\n const source = await readFile(message.scriptPath, 'utf8');\n const compiled = stripTypeScriptTypes(source, { mode: 'strip' });\n const moduleUrl = 'data:text/javascript;base64,' + Buffer.from(compiled).toString('base64');\n const loaded = await import(moduleUrl);\n if (typeof loaded.run !== 'function') throw new Error('Computer script must export a named run function.');\n const program = {\n observe: () => call('observe'),\n act: (action) => call('act', action),\n };\n const result = await loaded.run({ context: { program }, input: message.input, logger, signal: controller.signal });\n const resultJson = result === undefined ? undefined : JSON.stringify(result);\n process.send({ type: 'complete', resultJson });\n } catch (error) {\n process.send({ type: 'failed', error: error instanceof Error ? error.message : String(error) });\n }\n});\n`;\n\ninterface WorkerMessage {\n readonly type?: unknown;\n readonly id?: unknown;\n readonly operation?: unknown;\n readonly payload?: unknown;\n readonly level?: unknown;\n readonly message?: unknown;\n readonly resultJson?: unknown;\n readonly error?: unknown;\n}\n\nexport class ComputerScriptRunner {\n private readonly client: ComputerUseSessionClient;\n private readonly allowedScriptPaths: readonly string[];\n private readonly timeoutMs: number;\n private readonly maxOutputBytes: number;\n\n public constructor(options: ComputerScriptRunnerOptions) {\n this.client = options.client;\n this.allowedScriptPaths = options.allowedScriptPaths;\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;\n }\n\n public async execute(\n scriptPath: string,\n input: unknown,\n signal?: AbortSignal,\n ): Promise<ComputerScriptExecutionResult> {\n const resolvedPath = await realpath(scriptPath);\n const allowedPaths = await Promise.all(\n this.allowedScriptPaths.map(async (candidate) => realpath(candidate).catch(() => '')),\n );\n if (!allowedPaths.includes(resolvedPath)) throw new Error('Computer script path is not explicitly allowed.');\n if (!resolvedPath.endsWith('.ts')) throw new Error('Computer scripts must be TypeScript files.');\n\n const serializedInput = JSON.stringify(input);\n if (serializedInput === undefined) throw new Error('Computer script input must be JSON serializable.');\n if (Buffer.byteLength(serializedInput) > this.maxOutputBytes)\n throw new Error('Computer script input exceeds the size limit.');\n\n return new Promise((resolve, reject) => {\n const child = spawn(process.execPath, ['--input-type=module', '--eval', WORKER_SOURCE], {\n stdio: ['ignore', 'pipe', 'pipe', 'ipc'],\n });\n const controller = new AbortController();\n const logs: string[] = [];\n let outputBytes = 0;\n let settled = false;\n let operation = Promise.resolve();\n\n const terminate = (): void => {\n controller.abort();\n child.kill('SIGTERM');\n const killTimer = setTimeout(() => child.kill('SIGKILL'), 250);\n killTimer.unref?.();\n };\n const finish = (error?: Error, value?: ComputerScriptExecutionResult): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n signal?.removeEventListener('abort', onAbort);\n terminate();\n if (error !== undefined) reject(error);\n else resolve(value as ComputerScriptExecutionResult);\n };\n const addOutput = (value: string): boolean => {\n outputBytes += Buffer.byteLength(value);\n if (outputBytes <= this.maxOutputBytes) return true;\n finish(new Error('Computer script output exceeded the size limit.'));\n return false;\n };\n const onAbort = () => finish(new Error('Computer script execution was cancelled.'));\n const timeout = setTimeout(() => finish(new Error('Computer script execution timed out.')), this.timeoutMs);\n timeout.unref?.();\n signal?.addEventListener('abort', onAbort, { once: true });\n if (signal?.aborted === true) return onAbort();\n\n child.stdout?.on('data', (chunk: Buffer) => addOutput(chunk.toString('utf8')));\n child.stderr?.on('data', (chunk: Buffer) => addOutput(chunk.toString('utf8')));\n child.on('error', (error) => finish(error));\n child.on('exit', (code, exitSignal) => {\n if (!settled)\n finish(new Error(`Computer script worker exited before completion (${exitSignal ?? code ?? 'unknown'}).`));\n });\n child.on('message', (rawMessage: WorkerMessage) => {\n if (settled) return;\n if (rawMessage.type === 'log' && typeof rawMessage.message === 'string') {\n const line = `[${String(rawMessage.level)}] ${rawMessage.message}`;\n if (addOutput(line)) logs.push(line);\n return;\n }\n if (\n rawMessage.type === 'program' &&\n typeof rawMessage.id === 'string' &&\n (rawMessage.operation === 'observe' || rawMessage.operation === 'act')\n ) {\n operation = operation.then(async () => {\n try {\n const value =\n rawMessage.operation === 'observe'\n ? await this.client.observe(controller.signal)\n : await this.client.act(rawMessage.payload as ComputerUseAction, controller.signal);\n child.send({ type: 'response', id: rawMessage.id, value });\n } catch (error) {\n child.send({\n type: 'response',\n id: rawMessage.id,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n });\n return;\n }\n if (rawMessage.type === 'failed' && typeof rawMessage.error === 'string') {\n finish(new Error(rawMessage.error));\n return;\n }\n if (rawMessage.type === 'complete') {\n operation = operation\n .then(async () => {\n const resultJson = rawMessage.resultJson;\n if (resultJson !== undefined && typeof resultJson !== 'string') {\n finish(new Error('Computer script returned an invalid result.'));\n return;\n }\n if (typeof resultJson === 'string' && !addOutput(resultJson)) return;\n const observation = await this.client.observe(controller.signal);\n finish(undefined, {\n ...(typeof resultJson === 'string' ? { result: JSON.parse(resultJson) as unknown } : {}),\n observation,\n logs,\n });\n })\n .catch((error: unknown) => finish(error instanceof Error ? error : new Error(String(error))));\n }\n });\n child.send({ type: 'start', scriptPath: resolvedPath, input: JSON.parse(serializedInput) as unknown });\n });\n }\n}\n"],"mappings":"uFAMA,MAGM,EAAgB,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwDhC,IAAa,EAAb,KAAkC,CAChC,OACA,mBACA,UACA,eAEA,YAAmB,EAAsC,CACvD,KAAK,OAAS,EAAQ,OACtB,KAAK,mBAAqB,EAAQ,mBAClC,KAAK,UAAY,EAAQ,WAAa,IACtC,KAAK,eAAiB,EAAQ,gBAAkB,MAClD,CAEA,MAAa,QACX,EACA,EACA,EACwC,CACxC,IAAM,EAAe,MAAM,EAAS,CAAU,EAI9C,GAAI,EAAC,MAHsB,QAAQ,IACjC,KAAK,mBAAmB,IAAI,KAAO,IAAc,EAAS,CAAS,CAAC,CAAC,UAAY,EAAE,CAAC,CACtF,EAAA,CACkB,SAAS,CAAY,EAAG,MAAU,MAAM,iDAAiD,EAC3G,GAAI,CAAC,EAAa,SAAS,KAAK,EAAG,MAAU,MAAM,4CAA4C,EAE/F,IAAM,EAAkB,KAAK,UAAU,CAAK,EAC5C,GAAI,IAAoB,IAAA,GAAW,MAAU,MAAM,kDAAkD,EACrG,GAAI,OAAO,WAAW,CAAe,EAAI,KAAK,eAC5C,MAAU,MAAM,+CAA+C,EAEjE,OAAO,IAAI,SAAS,EAAS,IAAW,CACtC,IAAM,EAAQ,EAAM,QAAQ,SAAU,CAAC,sBAAuB,SAAU,CAAa,EAAG,CACtF,MAAO,CAAC,SAAU,OAAQ,OAAQ,KAAK,CACzC,CAAC,EACK,EAAa,IAAI,gBACjB,EAAiB,CAAC,EACpB,EAAc,EACd,EAAU,GACV,EAAY,QAAQ,QAAQ,EAE1B,MAAwB,CAC5B,EAAW,MAAM,EACjB,EAAM,KAAK,SAAS,EAEpB,eADmC,EAAM,KAAK,SAAS,EAAG,GAClD,CAAC,CAAC,QAAQ,CACpB,EACM,GAAU,EAAe,IAAgD,CACzE,IACJ,EAAU,GACV,aAAa,CAAO,EACpB,GAAQ,oBAAoB,QAAS,CAAO,EAC5C,EAAU,EACN,IAAU,IAAA,GACT,EAAQ,CAAsC,EAD1B,EAAO,CAAK,EAEvC,EACM,EAAa,IACjB,GAAe,OAAO,WAAW,CAAK,EAClC,GAAe,KAAK,iBACxB,EAAW,MAAM,iDAAiD,CAAC,EAC5D,KAEH,MAAgB,EAAW,MAAM,0CAA0C,CAAC,EAC5E,EAAU,eAAiB,EAAW,MAAM,sCAAsC,CAAC,EAAG,KAAK,SAAS,EAG1G,GAFA,EAAQ,QAAQ,EAChB,GAAQ,iBAAiB,QAAS,EAAS,CAAE,KAAM,EAAK,CAAC,EACrD,GAAQ,UAAY,GAAM,OAAO,EAAQ,EAE7C,EAAM,QAAQ,GAAG,OAAS,GAAkB,EAAU,EAAM,SAAS,MAAM,CAAC,CAAC,EAC7E,EAAM,QAAQ,GAAG,OAAS,GAAkB,EAAU,EAAM,SAAS,MAAM,CAAC,CAAC,EAC7E,EAAM,GAAG,QAAU,GAAU,EAAO,CAAK,CAAC,EAC1C,EAAM,GAAG,QAAS,EAAM,IAAe,CAChC,GACH,EAAW,MAAM,oDAAoD,GAAc,GAAQ,UAAU,GAAG,CAAC,CAC7G,CAAC,EACD,EAAM,GAAG,UAAY,GAA8B,CAC7C,MACJ,IAAI,EAAW,OAAS,OAAS,OAAO,EAAW,SAAY,SAAU,CACvE,IAAM,EAAO,IAAI,OAAO,EAAW,KAAK,EAAE,IAAI,EAAW,UACrD,EAAU,CAAI,GAAG,EAAK,KAAK,CAAI,EACnC,MACF,CACA,GACE,EAAW,OAAS,WACpB,OAAO,EAAW,IAAO,WACxB,EAAW,YAAc,WAAa,EAAW,YAAc,OAChE,CACA,EAAY,EAAU,KAAK,SAAY,CACrC,GAAI,CACF,IAAM,EACJ,EAAW,YAAc,UACrB,MAAM,KAAK,OAAO,QAAQ,EAAW,MAAM,EAC3C,MAAM,KAAK,OAAO,IAAI,EAAW,QAA8B,EAAW,MAAM,EACtF,EAAM,KAAK,CAAE,KAAM,WAAY,GAAI,EAAW,GAAI,OAAM,CAAC,CAC3D,OAAS,EAAO,CACd,EAAM,KAAK,CACT,KAAM,WACN,GAAI,EAAW,GACf,MAAO,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAC9D,CAAC,CACH,CACF,CAAC,EACD,MACF,CACA,GAAI,EAAW,OAAS,UAAY,OAAO,EAAW,OAAU,SAAU,CACxE,EAAW,MAAM,EAAW,KAAK,CAAC,EAClC,MACF,CACI,EAAW,OAAS,aACtB,EAAY,EACT,KAAK,SAAY,CAChB,IAAM,EAAa,EAAW,WAC9B,GAAI,IAAe,IAAA,IAAa,OAAO,GAAe,SAAU,CAC9D,EAAW,MAAM,6CAA6C,CAAC,EAC/D,MACF,CACA,GAAI,OAAO,GAAe,UAAY,CAAC,EAAU,CAAU,EAAG,OAC9D,IAAM,EAAc,MAAM,KAAK,OAAO,QAAQ,EAAW,MAAM,EAC/D,EAAO,IAAA,GAAW,CAChB,GAAI,OAAO,GAAe,SAAW,CAAE,OAAQ,KAAK,MAAM,CAAU,CAAa,EAAI,CAAC,EACtF,cACA,MACF,CAAC,CACH,CAAC,CAAC,CACD,MAAO,GAAmB,EAAO,aAAiB,MAAQ,EAAY,MAAM,OAAO,CAAK,CAAC,CAAC,CAAC,EA3ChG,CA6CF,CAAC,EACD,EAAM,KAAK,CAAE,KAAM,QAAS,WAAY,EAAc,MAAO,KAAK,MAAM,CAAe,CAAa,CAAC,CACvG,CAAC,CACH,CACF"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["realpath","spawn"],"sources":["../../../src/services/computerScriptRunner/index.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport { realpath } from 'node:fs/promises';\n\nimport type { ComputerScriptExecutionResult, ComputerScriptRunnerOptions } from '../../types/computerScript';\nimport type { ComputerUseAction } from '../../types/computerUse';\nimport type { ComputerUseSessionClient } from '../sessionApiClient';\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst DEFAULT_MAX_OUTPUT_BYTES = 256 * 1024;\n\nconst WORKER_SOURCE = String.raw`\nimport { readFile } from 'node:fs/promises';\nimport { stripTypeScriptTypes } from 'node:module';\n\nlet nextRequestId = 0;\nconst pending = new Map();\nconst call = (operation, payload) => new Promise((resolve, reject) => {\n const id = String(++nextRequestId);\n pending.set(id, { resolve, reject });\n process.send({ type: 'program', id, operation, payload });\n});\nprocess.on('message', async (message) => {\n if (message?.type === 'response') {\n const request = pending.get(message.id);\n if (!request) return;\n pending.delete(message.id);\n if (message.error) request.reject(new Error(message.error));\n else request.resolve(message.value);\n return;\n }\n if (message?.type !== 'start') return;\n const controller = new AbortController();\n process.once('SIGTERM', () => controller.abort());\n const logger = Object.fromEntries(['debug', 'info', 'warn', 'error'].map((level) => [level, (value) => {\n process.send({ type: 'log', level, message: String(value) });\n }]));\n try {\n const source = await readFile(message.scriptPath, 'utf8');\n const compiled = stripTypeScriptTypes(source, { mode: 'strip' });\n const moduleUrl = 'data:text/javascript;base64,' + Buffer.from(compiled).toString('base64');\n const loaded = await import(moduleUrl);\n if (typeof loaded.run !== 'function') throw new Error('Computer script must export a named run function.');\n const program = {\n observe: () => call('observe'),\n act: (action) => call('act', action),\n };\n const result = await loaded.run({ context: { program }, input: message.input, logger, signal: controller.signal });\n const resultJson = result === undefined ? undefined : JSON.stringify(result);\n process.send({ type: 'complete', resultJson });\n } catch (error) {\n process.send({ type: 'failed', error: error instanceof Error ? error.message : String(error) });\n }\n});\n`;\n\ninterface WorkerMessage {\n readonly type?: unknown;\n readonly id?: unknown;\n readonly operation?: unknown;\n readonly payload?: unknown;\n readonly level?: unknown;\n readonly message?: unknown;\n readonly resultJson?: unknown;\n readonly error?: unknown;\n}\n\nexport class ComputerScriptRunner {\n private readonly client: ComputerUseSessionClient;\n private readonly allowedScriptPaths: readonly string[];\n private readonly timeoutMs: number;\n private readonly maxOutputBytes: number;\n\n public constructor(options: ComputerScriptRunnerOptions) {\n this.client = options.client;\n this.allowedScriptPaths = options.allowedScriptPaths;\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;\n }\n\n public async execute(\n scriptPath: string,\n input: unknown,\n signal?: AbortSignal,\n ): Promise<ComputerScriptExecutionResult> {\n const resolvedPath = await realpath(scriptPath);\n const allowedPaths = await Promise.all(\n this.allowedScriptPaths.map(async (candidate) => realpath(candidate).catch(() => '')),\n );\n if (!allowedPaths.includes(resolvedPath)) throw new Error('Computer script path is not explicitly allowed.');\n if (!resolvedPath.endsWith('.ts')) throw new Error('Computer scripts must be TypeScript files.');\n\n const serializedInput = JSON.stringify(input);\n if (serializedInput === undefined) throw new Error('Computer script input must be JSON serializable.');\n if (Buffer.byteLength(serializedInput) > this.maxOutputBytes)\n throw new Error('Computer script input exceeds the size limit.');\n\n return new Promise((resolve, reject) => {\n const child = spawn(process.execPath, ['--input-type=module', '--eval', WORKER_SOURCE], {\n stdio: ['ignore', 'pipe', 'pipe', 'ipc'],\n });\n const controller = new AbortController();\n const logs: string[] = [];\n let outputBytes = 0;\n let settled = false;\n let operation = Promise.resolve();\n\n const terminate = (): void => {\n controller.abort();\n child.kill('SIGTERM');\n const killTimer = setTimeout(() => child.kill('SIGKILL'), 250);\n killTimer.unref?.();\n };\n const finish = (error?: Error, value?: ComputerScriptExecutionResult): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n signal?.removeEventListener('abort', onAbort);\n terminate();\n if (error !== undefined) reject(error);\n else resolve(value as ComputerScriptExecutionResult);\n };\n const addOutput = (value: string): boolean => {\n outputBytes += Buffer.byteLength(value);\n if (outputBytes <= this.maxOutputBytes) return true;\n finish(new Error('Computer script output exceeded the size limit.'));\n return false;\n };\n const onAbort = () => finish(new Error('Computer script execution was cancelled.'));\n const timeout = setTimeout(() => finish(new Error('Computer script execution timed out.')), this.timeoutMs);\n timeout.unref?.();\n signal?.addEventListener('abort', onAbort, { once: true });\n if (signal?.aborted === true) return onAbort();\n\n child.stdout?.on('data', (chunk: Buffer) => addOutput(chunk.toString('utf8')));\n child.stderr?.on('data', (chunk: Buffer) => addOutput(chunk.toString('utf8')));\n child.on('error', (error) => finish(error));\n child.on('exit', (code, exitSignal) => {\n if (!settled)\n finish(new Error(`Computer script worker exited before completion (${exitSignal ?? code ?? 'unknown'}).`));\n });\n child.on('message', (rawMessage: WorkerMessage) => {\n if (settled) return;\n if (rawMessage.type === 'log' && typeof rawMessage.message === 'string') {\n const line = `[${String(rawMessage.level)}] ${rawMessage.message}`;\n if (addOutput(line)) logs.push(line);\n return;\n }\n if (\n rawMessage.type === 'program' &&\n typeof rawMessage.id === 'string' &&\n (rawMessage.operation === 'observe' || rawMessage.operation === 'act')\n ) {\n operation = operation.then(async () => {\n try {\n const value =\n rawMessage.operation === 'observe'\n ? await this.client.observe(controller.signal)\n : await this.client.act(rawMessage.payload as ComputerUseAction, controller.signal);\n child.send({ type: 'response', id: rawMessage.id, value });\n } catch (error) {\n child.send({\n type: 'response',\n id: rawMessage.id,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n });\n return;\n }\n if (rawMessage.type === 'failed' && typeof rawMessage.error === 'string') {\n finish(new Error(rawMessage.error));\n return;\n }\n if (rawMessage.type === 'complete') {\n operation = operation\n .then(async () => {\n const resultJson = rawMessage.resultJson;\n if (resultJson !== undefined && typeof resultJson !== 'string') {\n finish(new Error('Computer script returned an invalid result.'));\n return;\n }\n if (typeof resultJson === 'string' && !addOutput(resultJson)) return;\n const observation = await this.client.observe(controller.signal);\n finish(undefined, {\n ...(typeof resultJson === 'string' ? { result: JSON.parse(resultJson) as unknown } : {}),\n observation,\n logs,\n });\n })\n .catch((error: unknown) => finish(error instanceof Error ? error : new Error(String(error))));\n }\n });\n child.send({ type: 'start', scriptPath: resolvedPath, input: JSON.parse(serializedInput) as unknown });\n });\n }\n}\n"],"mappings":"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"}
|
package/dist/{adapters/pi/computerScriptRunner.d.cts → services/computerScriptRunner/index.d.cts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComputerScriptExecutionResult, ComputerScriptRunnerOptions } from "../../types/computerScript.cjs";
|
|
2
|
-
//#region src/
|
|
2
|
+
//#region src/services/computerScriptRunner/index.d.ts
|
|
3
3
|
export declare class ComputerScriptRunner {
|
|
4
4
|
private readonly client;
|
|
5
5
|
private readonly allowedScriptPaths;
|
|
@@ -9,4 +9,4 @@ export declare class ComputerScriptRunner {
|
|
|
9
9
|
execute(scriptPath: string, input: unknown, signal?: AbortSignal): Promise<ComputerScriptExecutionResult>;
|
|
10
10
|
}
|
|
11
11
|
//#endregion
|
|
12
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/services/computerScriptRunner/index.ts"],"mappings":";;qBAkEa;mBACM;mBACA;mBACA;mBACA;EAEjB,YAAmB,SAAS;EAOf,QACX,oBACA,gBACA,SAAS,cACR,QAAQ"}
|
package/dist/{adapters/pi/computerScriptRunner.d.mts → services/computerScriptRunner/index.d.mts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComputerScriptExecutionResult, ComputerScriptRunnerOptions } from "../../types/computerScript.mjs";
|
|
2
|
-
//#region src/
|
|
2
|
+
//#region src/services/computerScriptRunner/index.d.ts
|
|
3
3
|
export declare class ComputerScriptRunner {
|
|
4
4
|
private readonly client;
|
|
5
5
|
private readonly allowedScriptPaths;
|
|
@@ -9,4 +9,4 @@ export declare class ComputerScriptRunner {
|
|
|
9
9
|
execute(scriptPath: string, input: unknown, signal?: AbortSignal): Promise<ComputerScriptExecutionResult>;
|
|
10
10
|
}
|
|
11
11
|
//#endregion
|
|
12
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/computerScriptRunner/index.ts"],"mappings":";;qBAkEa;mBACM;mBACA;mBACA;mBACA;EAEjB,YAAmB,SAAS;EAOf,QACX,oBACA,gBACA,SAAS,cACR,QAAQ"}
|
package/dist/{adapters/pi/computerScriptRunner.mjs → services/computerScriptRunner/index.mjs}
RENAMED
|
@@ -42,4 +42,4 @@ process.on('message', async (message) => {
|
|
|
42
42
|
}
|
|
43
43
|
});
|
|
44
44
|
`;var r=class{client;allowedScriptPaths;timeoutMs;maxOutputBytes;constructor(e){this.client=e.client,this.allowedScriptPaths=e.allowedScriptPaths,this.timeoutMs=e.timeoutMs??3e4,this.maxOutputBytes=e.maxOutputBytes??262144}async execute(r,i,a){let o=await t(r);if(!(await Promise.all(this.allowedScriptPaths.map(async e=>t(e).catch(()=>``)))).includes(o))throw Error(`Computer script path is not explicitly allowed.`);if(!o.endsWith(`.ts`))throw Error(`Computer scripts must be TypeScript files.`);let s=JSON.stringify(i);if(s===void 0)throw Error(`Computer script input must be JSON serializable.`);if(Buffer.byteLength(s)>this.maxOutputBytes)throw Error(`Computer script input exceeds the size limit.`);return new Promise((t,r)=>{let i=e(process.execPath,[`--input-type=module`,`--eval`,n],{stdio:[`ignore`,`pipe`,`pipe`,`ipc`]}),c=new AbortController,l=[],u=0,d=!1,f=Promise.resolve(),p=()=>{c.abort(),i.kill(`SIGTERM`),setTimeout(()=>i.kill(`SIGKILL`),250).unref?.()},m=(e,n)=>{d||(d=!0,clearTimeout(_),a?.removeEventListener(`abort`,g),p(),e===void 0?t(n):r(e))},h=e=>(u+=Buffer.byteLength(e),u<=this.maxOutputBytes||(m(Error(`Computer script output exceeded the size limit.`)),!1)),g=()=>m(Error(`Computer script execution was cancelled.`)),_=setTimeout(()=>m(Error(`Computer script execution timed out.`)),this.timeoutMs);if(_.unref?.(),a?.addEventListener(`abort`,g,{once:!0}),a?.aborted===!0)return g();i.stdout?.on(`data`,e=>h(e.toString(`utf8`))),i.stderr?.on(`data`,e=>h(e.toString(`utf8`))),i.on(`error`,e=>m(e)),i.on(`exit`,(e,t)=>{d||m(Error(`Computer script worker exited before completion (${t??e??`unknown`}).`))}),i.on(`message`,e=>{if(!d){if(e.type===`log`&&typeof e.message==`string`){let t=`[${String(e.level)}] ${e.message}`;h(t)&&l.push(t);return}if(e.type===`program`&&typeof e.id==`string`&&(e.operation===`observe`||e.operation===`act`)){f=f.then(async()=>{try{let t=e.operation===`observe`?await this.client.observe(c.signal):await this.client.act(e.payload,c.signal);i.send({type:`response`,id:e.id,value:t})}catch(t){i.send({type:`response`,id:e.id,error:t instanceof Error?t.message:String(t)})}});return}if(e.type===`failed`&&typeof e.error==`string`){m(Error(e.error));return}e.type===`complete`&&(f=f.then(async()=>{let t=e.resultJson;if(t!==void 0&&typeof t!=`string`){m(Error(`Computer script returned an invalid result.`));return}if(typeof t==`string`&&!h(t))return;let n=await this.client.observe(c.signal);m(void 0,{...typeof t==`string`?{result:JSON.parse(t)}:{},observation:n,logs:l})}).catch(e=>m(e instanceof Error?e:Error(String(e)))))}}),i.send({type:`start`,scriptPath:o,input:JSON.parse(s)})})}};export{r as ComputerScriptRunner};
|
|
45
|
-
//# sourceMappingURL=
|
|
45
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/computerScriptRunner/index.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport { realpath } from 'node:fs/promises';\n\nimport type { ComputerScriptExecutionResult, ComputerScriptRunnerOptions } from '../../types/computerScript';\nimport type { ComputerUseAction } from '../../types/computerUse';\nimport type { ComputerUseSessionClient } from '../sessionApiClient';\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst DEFAULT_MAX_OUTPUT_BYTES = 256 * 1024;\n\nconst WORKER_SOURCE = String.raw`\nimport { readFile } from 'node:fs/promises';\nimport { stripTypeScriptTypes } from 'node:module';\n\nlet nextRequestId = 0;\nconst pending = new Map();\nconst call = (operation, payload) => new Promise((resolve, reject) => {\n const id = String(++nextRequestId);\n pending.set(id, { resolve, reject });\n process.send({ type: 'program', id, operation, payload });\n});\nprocess.on('message', async (message) => {\n if (message?.type === 'response') {\n const request = pending.get(message.id);\n if (!request) return;\n pending.delete(message.id);\n if (message.error) request.reject(new Error(message.error));\n else request.resolve(message.value);\n return;\n }\n if (message?.type !== 'start') return;\n const controller = new AbortController();\n process.once('SIGTERM', () => controller.abort());\n const logger = Object.fromEntries(['debug', 'info', 'warn', 'error'].map((level) => [level, (value) => {\n process.send({ type: 'log', level, message: String(value) });\n }]));\n try {\n const source = await readFile(message.scriptPath, 'utf8');\n const compiled = stripTypeScriptTypes(source, { mode: 'strip' });\n const moduleUrl = 'data:text/javascript;base64,' + Buffer.from(compiled).toString('base64');\n const loaded = await import(moduleUrl);\n if (typeof loaded.run !== 'function') throw new Error('Computer script must export a named run function.');\n const program = {\n observe: () => call('observe'),\n act: (action) => call('act', action),\n };\n const result = await loaded.run({ context: { program }, input: message.input, logger, signal: controller.signal });\n const resultJson = result === undefined ? undefined : JSON.stringify(result);\n process.send({ type: 'complete', resultJson });\n } catch (error) {\n process.send({ type: 'failed', error: error instanceof Error ? error.message : String(error) });\n }\n});\n`;\n\ninterface WorkerMessage {\n readonly type?: unknown;\n readonly id?: unknown;\n readonly operation?: unknown;\n readonly payload?: unknown;\n readonly level?: unknown;\n readonly message?: unknown;\n readonly resultJson?: unknown;\n readonly error?: unknown;\n}\n\nexport class ComputerScriptRunner {\n private readonly client: ComputerUseSessionClient;\n private readonly allowedScriptPaths: readonly string[];\n private readonly timeoutMs: number;\n private readonly maxOutputBytes: number;\n\n public constructor(options: ComputerScriptRunnerOptions) {\n this.client = options.client;\n this.allowedScriptPaths = options.allowedScriptPaths;\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;\n }\n\n public async execute(\n scriptPath: string,\n input: unknown,\n signal?: AbortSignal,\n ): Promise<ComputerScriptExecutionResult> {\n const resolvedPath = await realpath(scriptPath);\n const allowedPaths = await Promise.all(\n this.allowedScriptPaths.map(async (candidate) => realpath(candidate).catch(() => '')),\n );\n if (!allowedPaths.includes(resolvedPath)) throw new Error('Computer script path is not explicitly allowed.');\n if (!resolvedPath.endsWith('.ts')) throw new Error('Computer scripts must be TypeScript files.');\n\n const serializedInput = JSON.stringify(input);\n if (serializedInput === undefined) throw new Error('Computer script input must be JSON serializable.');\n if (Buffer.byteLength(serializedInput) > this.maxOutputBytes)\n throw new Error('Computer script input exceeds the size limit.');\n\n return new Promise((resolve, reject) => {\n const child = spawn(process.execPath, ['--input-type=module', '--eval', WORKER_SOURCE], {\n stdio: ['ignore', 'pipe', 'pipe', 'ipc'],\n });\n const controller = new AbortController();\n const logs: string[] = [];\n let outputBytes = 0;\n let settled = false;\n let operation = Promise.resolve();\n\n const terminate = (): void => {\n controller.abort();\n child.kill('SIGTERM');\n const killTimer = setTimeout(() => child.kill('SIGKILL'), 250);\n killTimer.unref?.();\n };\n const finish = (error?: Error, value?: ComputerScriptExecutionResult): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n signal?.removeEventListener('abort', onAbort);\n terminate();\n if (error !== undefined) reject(error);\n else resolve(value as ComputerScriptExecutionResult);\n };\n const addOutput = (value: string): boolean => {\n outputBytes += Buffer.byteLength(value);\n if (outputBytes <= this.maxOutputBytes) return true;\n finish(new Error('Computer script output exceeded the size limit.'));\n return false;\n };\n const onAbort = () => finish(new Error('Computer script execution was cancelled.'));\n const timeout = setTimeout(() => finish(new Error('Computer script execution timed out.')), this.timeoutMs);\n timeout.unref?.();\n signal?.addEventListener('abort', onAbort, { once: true });\n if (signal?.aborted === true) return onAbort();\n\n child.stdout?.on('data', (chunk: Buffer) => addOutput(chunk.toString('utf8')));\n child.stderr?.on('data', (chunk: Buffer) => addOutput(chunk.toString('utf8')));\n child.on('error', (error) => finish(error));\n child.on('exit', (code, exitSignal) => {\n if (!settled)\n finish(new Error(`Computer script worker exited before completion (${exitSignal ?? code ?? 'unknown'}).`));\n });\n child.on('message', (rawMessage: WorkerMessage) => {\n if (settled) return;\n if (rawMessage.type === 'log' && typeof rawMessage.message === 'string') {\n const line = `[${String(rawMessage.level)}] ${rawMessage.message}`;\n if (addOutput(line)) logs.push(line);\n return;\n }\n if (\n rawMessage.type === 'program' &&\n typeof rawMessage.id === 'string' &&\n (rawMessage.operation === 'observe' || rawMessage.operation === 'act')\n ) {\n operation = operation.then(async () => {\n try {\n const value =\n rawMessage.operation === 'observe'\n ? await this.client.observe(controller.signal)\n : await this.client.act(rawMessage.payload as ComputerUseAction, controller.signal);\n child.send({ type: 'response', id: rawMessage.id, value });\n } catch (error) {\n child.send({\n type: 'response',\n id: rawMessage.id,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n });\n return;\n }\n if (rawMessage.type === 'failed' && typeof rawMessage.error === 'string') {\n finish(new Error(rawMessage.error));\n return;\n }\n if (rawMessage.type === 'complete') {\n operation = operation\n .then(async () => {\n const resultJson = rawMessage.resultJson;\n if (resultJson !== undefined && typeof resultJson !== 'string') {\n finish(new Error('Computer script returned an invalid result.'));\n return;\n }\n if (typeof resultJson === 'string' && !addOutput(resultJson)) return;\n const observation = await this.client.observe(controller.signal);\n finish(undefined, {\n ...(typeof resultJson === 'string' ? { result: JSON.parse(resultJson) as unknown } : {}),\n observation,\n logs,\n });\n })\n .catch((error: unknown) => finish(error instanceof Error ? error : new Error(String(error))));\n }\n });\n child.send({ type: 'start', scriptPath: resolvedPath, input: JSON.parse(serializedInput) as unknown });\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../sessionApiClient/index.cjs"),n=require("../computerScriptRunner/index.cjs"),r=require("../extensionService/index.cjs");let i=require("node:path");i=e.__toESM(i,1);let a=require("@agimon-ai/doompi-config");function o(e={}){let o=e.client??t.createComputerUseSessionClient(),s=(process.env.DOOMPI_COMPUTER_USE_SCRIPT_PATHS??``).split(i.default.delimiter).filter(e=>e.length>0);return{service:e.service??new r.DefaultComputerUseExtensionService(o),enabled:e.enabled??(()=>(0,a.loadDoomConfig)(process.env.PI_PROJECT_ROOT??process.cwd()).computerUse?.enabled===!0),...o===void 0?{}:{client:o},...e.scriptRunner===void 0?o===void 0?{}:{scriptRunner:new n.ComputerScriptRunner({client:o,allowedScriptPaths:s})}:{scriptRunner:e.scriptRunner}}}exports.COMPUTER_USE_SCRIPT_PATHS_ENV=`DOOMPI_COMPUTER_USE_SCRIPT_PATHS`,exports.createComputerUseDependencies=o;
|
|
2
|
+
//# 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":"mRAUA,SAAgB,EACd,EAAuD,CAAC,EACtB,CAClC,IAAM,EAAS,EAAU,QAAUA,EAAAA,+BAA+B,EAC5D,GAAsB,QAAQ,IAAA,kCAAsC,GAAA,CACvE,MAAMC,EAAAA,QAAK,SAAS,CAAC,CACrB,OAAQ,GAAU,EAAM,OAAS,CAAC,EACrC,MAAO,CACL,QAAS,EAAU,SAAW,IAAIC,EAAAA,mCAAmC,CAAM,EAC3E,QACE,EAAU,eAAA,EACHC,EAAAA,eAAAA,CAAe,QAAQ,IAAI,iBAAmB,QAAQ,IAAI,CAAC,CAAC,CAAC,aAAa,UAAY,IAC/F,GAAI,IAAW,IAAA,GAAY,CAAC,EAAI,CAAE,QAAO,EACzC,GAAI,EAAU,eAAiB,IAAA,GAE3B,IAAW,IAAA,GACT,CAAC,EACD,CAAE,aAAc,IAAIC,EAAAA,qBAAqB,CAAE,SAAQ,oBAAmB,CAAC,CAAE,EAH3E,CAAE,aAAc,EAAU,YAAa,CAI7C,CACF"}
|
|
@@ -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,2 @@
|
|
|
1
|
+
import{createComputerUseSessionClient as e}from"../sessionApiClient/index.mjs";import{ComputerScriptRunner as t}from"../computerScriptRunner/index.mjs";import{DefaultComputerUseExtensionService as n}from"../extensionService/index.mjs";import r from"node:path";import{loadDoomConfig as i}from"@agimon-ai/doompi-config";const a=`DOOMPI_COMPUTER_USE_SCRIPT_PATHS`;function o(a={}){let o=a.client??e(),s=(process.env.DOOMPI_COMPUTER_USE_SCRIPT_PATHS??``).split(r.delimiter).filter(e=>e.length>0);return{service:a.service??new n(o),enabled:a.enabled??(()=>i(process.env.PI_PROJECT_ROOT??process.cwd()).computerUse?.enabled===!0),...o===void 0?{}:{client:o},...a.scriptRunner===void 0?o===void 0?{}:{scriptRunner:new t({client:o,allowedScriptPaths:s})}:{scriptRunner:a.scriptRunner}}}export{a as COMPUTER_USE_SCRIPT_PATHS_ENV,o as createComputerUseDependencies};
|
|
2
|
+
//# 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":"8TASA,MAAa,EAAgC,mCAC7C,SAAgB,EACd,EAAuD,CAAC,EACtB,CAClC,IAAM,EAAS,EAAU,QAAU,EAA+B,EAC5D,GAAsB,QAAQ,IAAA,kCAAsC,GAAA,CACvE,MAAM,EAAK,SAAS,CAAC,CACrB,OAAQ,GAAU,EAAM,OAAS,CAAC,EACrC,MAAO,CACL,QAAS,EAAU,SAAW,IAAI,EAAmC,CAAM,EAC3E,QACE,EAAU,cACH,EAAe,QAAQ,IAAI,iBAAmB,QAAQ,IAAI,CAAC,CAAC,CAAC,aAAa,UAAY,IAC/F,GAAI,IAAW,IAAA,GAAY,CAAC,EAAI,CAAE,QAAO,EACzC,GAAI,EAAU,eAAiB,IAAA,GAE3B,IAAW,IAAA,GACT,CAAC,EACD,CAAE,aAAc,IAAI,EAAqB,CAAE,SAAQ,oBAAmB,CAAC,CAAE,EAH3E,CAAE,aAAc,EAAU,YAAa,CAI7C,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
var e=class{client;constructor(e){this.client=e}async execute(){return this.client===void 0?{message:`Computer use requires a DoomPi Desktop session.`,level:`error`}:{message:`Computer use is ${(await this.client.state()).phase.replaceAll(`_`,` `)}.`,level:`info`}}};exports.DefaultComputerUseExtensionService=e;
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# 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,EAAb,KAAuF,CACjD,OAApC,YAAmB,EAAoD,CAAnC,KAAA,OAAA,CAAoC,CAExE,MAAa,SAA+C,CAI1D,OAHI,KAAK,SAAW,IAAA,GACX,CAAE,QAAS,kDAAmD,MAAO,OAAQ,EAE/E,CAAE,QAAS,oBAAmB,MADjB,KAAK,OAAO,MAAM,EAAA,CACK,MAAM,WAAW,IAAK,GAAG,EAAE,GAAI,MAAO,MAAO,CAC1F,CACF"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { ComputerUseSessionClient } from "../
|
|
2
|
-
import { ComputerUseExtensionResult, ComputerUseExtensionService } from "
|
|
3
|
-
//#region src/services/extensionService.d.ts
|
|
1
|
+
import { ComputerUseSessionClient } from "../sessionApiClient/index.cjs";
|
|
2
|
+
import { ComputerUseExtensionResult, ComputerUseExtensionService } from "../../types/extension.cjs";
|
|
3
|
+
//#region src/services/extensionService/index.d.ts
|
|
4
4
|
export declare class DefaultComputerUseExtensionService implements ComputerUseExtensionService {
|
|
5
5
|
private readonly client?;
|
|
6
6
|
constructor(client?: ComputerUseSessionClient | undefined);
|
|
7
7
|
execute(): Promise<ComputerUseExtensionResult>;
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
10
|
-
//# sourceMappingURL=
|
|
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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { ComputerUseSessionClient } from "../
|
|
2
|
-
import { ComputerUseExtensionResult, ComputerUseExtensionService } from "
|
|
3
|
-
//#region src/services/extensionService.d.ts
|
|
1
|
+
import { ComputerUseSessionClient } from "../sessionApiClient/index.mjs";
|
|
2
|
+
import { ComputerUseExtensionResult, ComputerUseExtensionService } from "../../types/extension.mjs";
|
|
3
|
+
//#region src/services/extensionService/index.d.ts
|
|
4
4
|
export declare class DefaultComputerUseExtensionService implements ComputerUseExtensionService {
|
|
5
5
|
private readonly client?;
|
|
6
6
|
constructor(client?: ComputerUseSessionClient | undefined);
|
|
7
7
|
execute(): Promise<ComputerUseExtensionResult>;
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
10
|
-
//# sourceMappingURL=
|
|
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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
var e=class{client;constructor(e){this.client=e}async execute(){return this.client===void 0?{message:`Computer use requires a DoomPi Desktop session.`,level:`error`}:{message:`Computer use is ${(await this.client.state()).phase.replaceAll(`_`,` `)}.`,level:`info`}}};export{e as DefaultComputerUseExtensionService};
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# 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,EAAb,KAAuF,CACjD,OAApC,YAAmB,EAAoD,CAAnC,KAAA,OAAA,CAAoC,CAExE,MAAa,SAA+C,CAI1D,OAHI,KAAK,SAAW,IAAA,GACX,CAAE,QAAS,kDAAmD,MAAO,OAAQ,EAE/E,CAAE,QAAS,oBAAmB,MADjB,KAAK,OAAO,MAAM,EAAA,CACK,MAAM,WAAW,IAAK,GAAG,EAAE,GAAI,MAAO,MAAO,CAC1F,CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/services/sessionApiClient/index.ts"],"sourcesContent":["import type { ComputerUseAction, ComputerUseObservation } from '../../types/computerUse';\nimport type { ComputerUseSessionView } from '../../types/computerUseApi';\n\nexport interface ComputerUseSessionClient {\n state(signal?: AbortSignal): Promise<ComputerUseSessionView>;\n /** Subscribes to lifecycle-owned state changes, without polling the session API. */\n subscribeStatus?(listener: (state: ComputerUseSessionView) => void): () => void;\n observe(signal?: AbortSignal): Promise<ComputerUseObservation>;\n act(action: ComputerUseAction, signal?: AbortSignal): Promise<unknown>;\n stop(signal?: AbortSignal): Promise<ComputerUseSessionView>;\n}\n\n/** Uses the host-owned typed service directly. Internal package APIs are in-process. */\nexport function createComputerUseSessionClient(host?: ComputerUseSessionClient): ComputerUseSessionClient | undefined {\n return host;\n}\n"],"mappings":"AAaA,SAAgB,EAA+B,EAAuE,CACpH,OAAO,CACT"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ComputerUseAction, ComputerUseObservation } from "../../types/computerUse.cjs";
|
|
2
|
+
import { ComputerUseSessionView } from "../../types/computerUseApi.cjs";
|
|
3
|
+
//#region src/services/sessionApiClient/index.d.ts
|
|
4
|
+
export interface ComputerUseSessionClient {
|
|
5
|
+
state(signal?: AbortSignal): Promise<ComputerUseSessionView>;
|
|
6
|
+
/** Subscribes to lifecycle-owned state changes, without polling the session API. */
|
|
7
|
+
subscribeStatus?(listener: (state: ComputerUseSessionView) => void): () => void;
|
|
8
|
+
observe(signal?: AbortSignal): Promise<ComputerUseObservation>;
|
|
9
|
+
act(action: ComputerUseAction, signal?: AbortSignal): Promise<unknown>;
|
|
10
|
+
stop(signal?: AbortSignal): Promise<ComputerUseSessionView>;
|
|
11
|
+
}
|
|
12
|
+
/** Uses the host-owned typed service directly. Internal package APIs are in-process. */
|
|
13
|
+
export declare function createComputerUseSessionClient(host?: ComputerUseSessionClient): ComputerUseSessionClient | undefined;
|
|
14
|
+
//#endregion
|
|
15
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/services/sessionApiClient/index.ts"],"mappings":";;;iBAGiB;EACf,MAAM,SAAS,cAAc,QAAQ;;EAErC,iBAAiB,WAAW,OAAO;EACnC,QAAQ,SAAS,cAAc,QAAQ;EACvC,IAAI,QAAQ,mBAAmB,SAAS,cAAc;EACtD,KAAK,SAAS,cAAc,QAAQ;;;wBAItB,+BAA+B,OAAO,2BAA2B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ComputerUseAction, ComputerUseObservation } from "../../types/computerUse.mjs";
|
|
2
|
+
import { ComputerUseSessionView } from "../../types/computerUseApi.mjs";
|
|
3
|
+
//#region src/services/sessionApiClient/index.d.ts
|
|
4
|
+
export interface ComputerUseSessionClient {
|
|
5
|
+
state(signal?: AbortSignal): Promise<ComputerUseSessionView>;
|
|
6
|
+
/** Subscribes to lifecycle-owned state changes, without polling the session API. */
|
|
7
|
+
subscribeStatus?(listener: (state: ComputerUseSessionView) => void): () => void;
|
|
8
|
+
observe(signal?: AbortSignal): Promise<ComputerUseObservation>;
|
|
9
|
+
act(action: ComputerUseAction, signal?: AbortSignal): Promise<unknown>;
|
|
10
|
+
stop(signal?: AbortSignal): Promise<ComputerUseSessionView>;
|
|
11
|
+
}
|
|
12
|
+
/** Uses the host-owned typed service directly. Internal package APIs are in-process. */
|
|
13
|
+
export declare function createComputerUseSessionClient(host?: ComputerUseSessionClient): ComputerUseSessionClient | undefined;
|
|
14
|
+
//#endregion
|
|
15
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/sessionApiClient/index.ts"],"mappings":";;;iBAGiB;EACf,MAAM,SAAS,cAAc,QAAQ;;EAErC,iBAAiB,WAAW,OAAO;EACnC,QAAQ,SAAS,cAAc,QAAQ;EACvC,IAAI,QAAQ,mBAAmB,SAAS,cAAc;EACtD,KAAK,SAAS,cAAc,QAAQ;;;wBAItB,+BAA+B,OAAO,2BAA2B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/sessionApiClient/index.ts"],"sourcesContent":["import type { ComputerUseAction, ComputerUseObservation } from '../../types/computerUse';\nimport type { ComputerUseSessionView } from '../../types/computerUseApi';\n\nexport interface ComputerUseSessionClient {\n state(signal?: AbortSignal): Promise<ComputerUseSessionView>;\n /** Subscribes to lifecycle-owned state changes, without polling the session API. */\n subscribeStatus?(listener: (state: ComputerUseSessionView) => void): () => void;\n observe(signal?: AbortSignal): Promise<ComputerUseObservation>;\n act(action: ComputerUseAction, signal?: AbortSignal): Promise<unknown>;\n stop(signal?: AbortSignal): Promise<ComputerUseSessionView>;\n}\n\n/** Uses the host-owned typed service directly. Internal package APIs are in-process. */\nexport function createComputerUseSessionClient(host?: ComputerUseSessionClient): ComputerUseSessionClient | undefined {\n return host;\n}\n"],"mappings":"AAaA,SAAgB,EAA+B,EAAuE,CACpH,OAAO,CACT"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
function e(e){return{sequence:e.sequence,timestamp:e.timestamp,runId:e.runId,bundleId:e.bundleId,actionKind:e.action.kind,...e.role===void 0?{}:{role:e.role},...e.action.kind===`set_value`?{textLength:e.action.value.length}:{},durationMs:e.durationMs,outcome:e.outcome,...e.errorCode===void 0?{}:{errorCode:e.errorCode}}}exports.redactComputerUseTrace=e;
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/services/traceRedaction/index.ts"],"sourcesContent":["import type { ComputerUseAction, ComputerUseFailureCode } from '../../types/computerUse';\n\nexport interface ComputerUseTraceInput {\n readonly sequence: number;\n readonly timestamp: number;\n readonly runId: string;\n readonly bundleId: string;\n readonly action: ComputerUseAction;\n readonly role?: string;\n readonly durationMs: number;\n readonly outcome: 'succeeded' | 'failed' | 'uncertain';\n readonly errorCode?: ComputerUseFailureCode;\n}\n\nexport interface ComputerUseTraceRecord {\n readonly sequence: number;\n readonly timestamp: number;\n readonly runId: string;\n readonly bundleId: string;\n readonly actionKind: ComputerUseAction['kind'];\n readonly role?: string;\n readonly textLength?: number;\n readonly durationMs: number;\n readonly outcome: ComputerUseTraceInput['outcome'];\n readonly errorCode?: ComputerUseFailureCode;\n}\n\nexport function redactComputerUseTrace(input: ComputerUseTraceInput): ComputerUseTraceRecord {\n return {\n sequence: input.sequence,\n timestamp: input.timestamp,\n runId: input.runId,\n bundleId: input.bundleId,\n actionKind: input.action.kind,\n ...(input.role === undefined ? {} : { role: input.role }),\n ...(input.action.kind === 'set_value' ? { textLength: input.action.value.length } : {}),\n durationMs: input.durationMs,\n outcome: input.outcome,\n ...(input.errorCode === undefined ? {} : { errorCode: input.errorCode }),\n };\n}\n"],"mappings":"AA2BA,SAAgB,EAAuB,EAAsD,CAC3F,MAAO,CACL,SAAU,EAAM,SAChB,UAAW,EAAM,UACjB,MAAO,EAAM,MACb,SAAU,EAAM,SAChB,WAAY,EAAM,OAAO,KACzB,GAAI,EAAM,OAAS,IAAA,GAAY,CAAC,EAAI,CAAE,KAAM,EAAM,IAAK,EACvD,GAAI,EAAM,OAAO,OAAS,YAAc,CAAE,WAAY,EAAM,OAAO,MAAM,MAAO,EAAI,CAAC,EACrF,WAAY,EAAM,WAClB,QAAS,EAAM,QACf,GAAI,EAAM,YAAc,IAAA,GAAY,CAAC,EAAI,CAAE,UAAW,EAAM,SAAU,CACxE,CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ComputerUseAction, ComputerUseFailureCode } from "
|
|
2
|
-
//#region src/services/traceRedaction.d.ts
|
|
1
|
+
import { ComputerUseAction, ComputerUseFailureCode } from "../../types/computerUse.cjs";
|
|
2
|
+
//#region src/services/traceRedaction/index.d.ts
|
|
3
3
|
export interface ComputerUseTraceInput {
|
|
4
4
|
readonly sequence: number;
|
|
5
5
|
readonly timestamp: number;
|
|
@@ -25,4 +25,4 @@ export interface ComputerUseTraceRecord {
|
|
|
25
25
|
}
|
|
26
26
|
export declare function redactComputerUseTrace(input: ComputerUseTraceInput): ComputerUseTraceRecord;
|
|
27
27
|
//#endregion
|
|
28
|
-
//# sourceMappingURL=
|
|
28
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/services/traceRedaction/index.ts"],"mappings":";;iBAEiB;WACN;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA;WACA,YAAY;;iBAGN;WACN;WACA;WACA;WACA;WACA,YAAY;WACZ;WACA;WACA;WACA,SAAS;WACT,YAAY;;wBAGP,uBAAuB,OAAO,wBAAwB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ComputerUseAction, ComputerUseFailureCode } from "
|
|
2
|
-
//#region src/services/traceRedaction.d.ts
|
|
1
|
+
import { ComputerUseAction, ComputerUseFailureCode } from "../../types/computerUse.mjs";
|
|
2
|
+
//#region src/services/traceRedaction/index.d.ts
|
|
3
3
|
export interface ComputerUseTraceInput {
|
|
4
4
|
readonly sequence: number;
|
|
5
5
|
readonly timestamp: number;
|
|
@@ -25,4 +25,4 @@ export interface ComputerUseTraceRecord {
|
|
|
25
25
|
}
|
|
26
26
|
export declare function redactComputerUseTrace(input: ComputerUseTraceInput): ComputerUseTraceRecord;
|
|
27
27
|
//#endregion
|
|
28
|
-
//# sourceMappingURL=
|
|
28
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/traceRedaction/index.ts"],"mappings":";;iBAEiB;WACN;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA;WACA,YAAY;;iBAGN;WACN;WACA;WACA;WACA;WACA,YAAY;WACZ;WACA;WACA;WACA,SAAS;WACT,YAAY;;wBAGP,uBAAuB,OAAO,wBAAwB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
function e(e){return{sequence:e.sequence,timestamp:e.timestamp,runId:e.runId,bundleId:e.bundleId,actionKind:e.action.kind,...e.role===void 0?{}:{role:e.role},...e.action.kind===`set_value`?{textLength:e.action.value.length}:{},durationMs:e.durationMs,outcome:e.outcome,...e.errorCode===void 0?{}:{errorCode:e.errorCode}}}export{e as redactComputerUseTrace};
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/traceRedaction/index.ts"],"sourcesContent":["import type { ComputerUseAction, ComputerUseFailureCode } from '../../types/computerUse';\n\nexport interface ComputerUseTraceInput {\n readonly sequence: number;\n readonly timestamp: number;\n readonly runId: string;\n readonly bundleId: string;\n readonly action: ComputerUseAction;\n readonly role?: string;\n readonly durationMs: number;\n readonly outcome: 'succeeded' | 'failed' | 'uncertain';\n readonly errorCode?: ComputerUseFailureCode;\n}\n\nexport interface ComputerUseTraceRecord {\n readonly sequence: number;\n readonly timestamp: number;\n readonly runId: string;\n readonly bundleId: string;\n readonly actionKind: ComputerUseAction['kind'];\n readonly role?: string;\n readonly textLength?: number;\n readonly durationMs: number;\n readonly outcome: ComputerUseTraceInput['outcome'];\n readonly errorCode?: ComputerUseFailureCode;\n}\n\nexport function redactComputerUseTrace(input: ComputerUseTraceInput): ComputerUseTraceRecord {\n return {\n sequence: input.sequence,\n timestamp: input.timestamp,\n runId: input.runId,\n bundleId: input.bundleId,\n actionKind: input.action.kind,\n ...(input.role === undefined ? {} : { role: input.role }),\n ...(input.action.kind === 'set_value' ? { textLength: input.action.value.length } : {}),\n durationMs: input.durationMs,\n outcome: input.outcome,\n ...(input.errorCode === undefined ? {} : { errorCode: input.errorCode }),\n };\n}\n"],"mappings":"AA2BA,SAAgB,EAAuB,EAAsD,CAC3F,MAAO,CACL,SAAU,EAAM,SAChB,UAAW,EAAM,UACjB,MAAO,EAAM,MACb,SAAU,EAAM,SAChB,WAAY,EAAM,OAAO,KACzB,GAAI,EAAM,OAAS,IAAA,GAAY,CAAC,EAAI,CAAE,KAAM,EAAM,IAAK,EACvD,GAAI,EAAM,OAAO,OAAS,YAAc,CAAE,WAAY,EAAM,OAAO,MAAM,MAAO,EAAI,CAAC,EACrF,WAAY,EAAM,WAClB,QAAS,EAAM,QACf,GAAI,EAAM,YAAc,IAAA,GAAY,CAAC,EAAI,CAAE,UAAW,EAAM,SAAU,CACxE,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require("../../types/computerUseApi.cjs");var e=class extends Error{};function t(t,n){let r=typeof n==`object`&&n&&!Array.isArray(n)?n.error:void 0,i=typeof r==`string`?r:`HTTP ${String(t)}`;return t===404&&i===`No API 'computer-use' in this session.`?new e(i):Error(i)}exports.MissingComputerUseApiError=e,exports.computerUseSessionApiError=t;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/services/webComputerUseAvailability/index.ts"],"sourcesContent":["import { API_BASE_PATH } from '../../types/computerUseApi';\n\nexport class MissingComputerUseApiError extends Error {}\n\nexport function computerUseSessionApiError(status: number, value: unknown): Error {\n const error =\n typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>).error\n : undefined;\n const message = typeof error === 'string' ? error : `HTTP ${String(status)}`;\n return status === 404 && message === `No API '${API_BASE_PATH}' in this session.`\n ? new MissingComputerUseApiError(message)\n : new Error(message);\n}\n\nexport function missingComputerUseApiRetryAt(now: number): number {\n return now + 5_000;\n}\n"],"mappings":"0CAEA,IAAa,EAAb,cAAgD,KAAM,CAAC,EAEvD,SAAgB,EAA2B,EAAgB,EAAuB,CAChF,IAAM,EACJ,OAAO,GAAU,UAAY,GAAkB,CAAC,MAAM,QAAQ,CAAK,EAC9D,EAAkC,MACnC,IAAA,GACA,EAAU,OAAO,GAAU,SAAW,EAAQ,QAAQ,OAAO,CAAM,IACzE,OAAO,IAAW,KAAO,IAAY,yCACjC,IAAI,EAA2B,CAAO,EAClC,MAAM,CAAO,CACvB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"../../types/computerUseApi.mjs";var e=class extends Error{};function t(t,n){let r=typeof n==`object`&&n&&!Array.isArray(n)?n.error:void 0,i=typeof r==`string`?r:`HTTP ${String(t)}`;return t===404&&i===`No API 'computer-use' in this session.`?new e(i):Error(i)}export{e as MissingComputerUseApiError,t as computerUseSessionApiError};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/webComputerUseAvailability/index.ts"],"sourcesContent":["import { API_BASE_PATH } from '../../types/computerUseApi';\n\nexport class MissingComputerUseApiError extends Error {}\n\nexport function computerUseSessionApiError(status: number, value: unknown): Error {\n const error =\n typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>).error\n : undefined;\n const message = typeof error === 'string' ? error : `HTTP ${String(status)}`;\n return status === 404 && message === `No API '${API_BASE_PATH}' in this session.`\n ? new MissingComputerUseApiError(message)\n : new Error(message);\n}\n\nexport function missingComputerUseApiRetryAt(now: number): number {\n return now + 5_000;\n}\n"],"mappings":"uCAEA,IAAa,EAAb,cAAgD,KAAM,CAAC,EAEvD,SAAgB,EAA2B,EAAgB,EAAuB,CAChF,IAAM,EACJ,OAAO,GAAU,UAAY,GAAkB,CAAC,MAAM,QAAQ,CAAK,EAC9D,EAAkC,MACnC,IAAA,GACA,EAAU,OAAO,GAAU,SAAW,EAAQ,QAAQ,OAAO,CAAM,IACzE,OAAO,IAAW,KAAO,IAAY,yCACjC,IAAI,EAA2B,CAAO,EAClC,MAAM,CAAO,CACvB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComputerUseAction, ComputerUseObservation } from "./computerUse.cjs";
|
|
2
|
-
import { ComputerUseSessionClient } from "../
|
|
2
|
+
import { ComputerUseSessionClient } from "../services/sessionApiClient/index.cjs";
|
|
3
3
|
//#region src/types/computerScript.d.ts
|
|
4
4
|
export interface ComputerScriptProgram {
|
|
5
5
|
observe(): Promise<ComputerUseObservation>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComputerUseAction, ComputerUseObservation } from "./computerUse.mjs";
|
|
2
|
-
import { ComputerUseSessionClient } from "../
|
|
2
|
+
import { ComputerUseSessionClient } from "../services/sessionApiClient/index.mjs";
|
|
3
3
|
//#region src/types/computerScript.d.ts
|
|
4
4
|
export interface ComputerScriptProgram {
|
|
5
5
|
observe(): Promise<ComputerUseObservation>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computerUseApi.cjs","names":[],"sources":["../../src/types/computerUseApi.ts"],"sourcesContent":["import type { DoomApiCaller } from '@agimon-ai/doompi-
|
|
1
|
+
{"version":3,"file":"computerUseApi.cjs","names":[],"sources":["../../src/types/computerUseApi.ts"],"sourcesContent":["import type { DoomApiCaller } from '@agimon-ai/doompi-core/package-api';\n\nexport const API_BASE_PATH = 'computer-use';\nexport const computerUseChannelType = 'computer_use_state';\nexport const COMPUTER_USE_MODE_ID = 'computer-use';\nexport const COMPUTER_USE_STATUS_KEY = 'doom-computer-use';\nexport const COMPUTER_USE_MODE_STATUS_KEY = 'doom-computer-use-mode';\nexport const SESSION_QUERY_PARAM = 'session';\nexport const COMPUTER_USE_MAX_DURATION_MS = 1_800 * 1_000;\nexport const COMPUTER_USE_DEFAULT_DURATION_MS = 300 * 1_000;\nexport const COMPUTER_USE_CONFIRMATION_WINDOW_MS = 2 * 60 * 1_000;\n\nexport function activationUrl(sessionId: string): string {\n return `/api/sessions/${encodeURIComponent(sessionId)}/plugin/${API_BASE_PATH}/activate?${SESSION_QUERY_PARAM}=${encodeURIComponent(sessionId)}`;\n}\n\nexport const COMPUTER_USE_ROUTES = {\n activate: '/activate',\n agentState: '/agent/state',\n agentObserve: '/agent/observe',\n agentAction: '/agent/action',\n agentStop: '/agent/stop',\n hubState: '/hub/state',\n hubActivation: '/hub/activation',\n hubAuthorization: '/hub/authorization',\n hubNext: '/hub/next',\n hubComplete: '/hub/complete',\n hubStop: '/hub/stop',\n} as const;\n\nexport const COMPUTER_USE_WAKE_LIMIT = 1_000_000;\n\nexport interface ComputerUseArtifactView {\n readonly artifactId: string;\n readonly status: 'ready' | 'failed';\n readonly downloadUrl?: string;\n readonly previewUrl?: string;\n readonly actionCount?: number;\n readonly completedAt?: string;\n readonly failure?: { readonly code: string; readonly message: string };\n}\n\nexport interface ComputerUseSessionView {\n readonly sessionId: string;\n readonly revision: number;\n readonly wake: number;\n readonly phase: 'inactive' | 'awaiting_confirmation' | 'activating' | 'active' | 'stopping' | 'failed';\n readonly requestId?: string;\n readonly target?: Record<string, unknown>;\n readonly durationMs?: number;\n readonly expiresAt?: number;\n readonly failure?: { readonly code: string; readonly message: string };\n readonly artifact?: ComputerUseArtifactView;\n}\n\nexport interface ComputerUseActivationRequest {\n readonly requestId: string;\n readonly target: Record<string, unknown>;\n readonly durationSeconds: number;\n readonly createdAt: number;\n readonly confirmationExpiresAt: number;\n readonly caller: DoomApiCaller;\n}\n\nexport interface ComputerUseBrokerRequest {\n readonly id: string;\n readonly operation: 'observe' | 'act';\n readonly payload?: unknown;\n readonly grantId: string;\n readonly sequence?: number;\n}\n\nexport interface ComputerUseChannelPayload {\n readonly state: ComputerUseSessionView;\n readonly targets: readonly Record<string, unknown>[];\n readonly busy?: true;\n}\n\nexport type ComputerUseBrowserCommand = { readonly action: 'status' | 'targets' | 'stop' | 'artifacts' };\n"],"mappings":"AAEA,MAca,EAAsB,CACjC,SAAU,YACV,WAAY,eACZ,aAAc,iBACd,YAAa,gBACb,UAAW,cACX,SAAU,aACV,cAAe,kBACf,iBAAkB,qBAClB,QAAS,YACT,YAAa,gBACb,QAAS,WACX"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DoomApiCaller } from "@agimon-ai/doompi-
|
|
1
|
+
import { DoomApiCaller } from "@agimon-ai/doompi-core/package-api";
|
|
2
2
|
//#region src/types/computerUseApi.d.ts
|
|
3
3
|
export declare const API_BASE_PATH = "computer-use";
|
|
4
4
|
export declare const computerUseChannelType = "computer_use_state";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DoomApiCaller } from "@agimon-ai/doompi-
|
|
1
|
+
import { DoomApiCaller } from "@agimon-ai/doompi-core/package-api";
|
|
2
2
|
//#region src/types/computerUseApi.d.ts
|
|
3
3
|
export declare const API_BASE_PATH = "computer-use";
|
|
4
4
|
export declare const computerUseChannelType = "computer_use_state";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computerUseApi.mjs","names":[],"sources":["../../src/types/computerUseApi.ts"],"sourcesContent":["import type { DoomApiCaller } from '@agimon-ai/doompi-
|
|
1
|
+
{"version":3,"file":"computerUseApi.mjs","names":[],"sources":["../../src/types/computerUseApi.ts"],"sourcesContent":["import type { DoomApiCaller } from '@agimon-ai/doompi-core/package-api';\n\nexport const API_BASE_PATH = 'computer-use';\nexport const computerUseChannelType = 'computer_use_state';\nexport const COMPUTER_USE_MODE_ID = 'computer-use';\nexport const COMPUTER_USE_STATUS_KEY = 'doom-computer-use';\nexport const COMPUTER_USE_MODE_STATUS_KEY = 'doom-computer-use-mode';\nexport const SESSION_QUERY_PARAM = 'session';\nexport const COMPUTER_USE_MAX_DURATION_MS = 1_800 * 1_000;\nexport const COMPUTER_USE_DEFAULT_DURATION_MS = 300 * 1_000;\nexport const COMPUTER_USE_CONFIRMATION_WINDOW_MS = 2 * 60 * 1_000;\n\nexport function activationUrl(sessionId: string): string {\n return `/api/sessions/${encodeURIComponent(sessionId)}/plugin/${API_BASE_PATH}/activate?${SESSION_QUERY_PARAM}=${encodeURIComponent(sessionId)}`;\n}\n\nexport const COMPUTER_USE_ROUTES = {\n activate: '/activate',\n agentState: '/agent/state',\n agentObserve: '/agent/observe',\n agentAction: '/agent/action',\n agentStop: '/agent/stop',\n hubState: '/hub/state',\n hubActivation: '/hub/activation',\n hubAuthorization: '/hub/authorization',\n hubNext: '/hub/next',\n hubComplete: '/hub/complete',\n hubStop: '/hub/stop',\n} as const;\n\nexport const COMPUTER_USE_WAKE_LIMIT = 1_000_000;\n\nexport interface ComputerUseArtifactView {\n readonly artifactId: string;\n readonly status: 'ready' | 'failed';\n readonly downloadUrl?: string;\n readonly previewUrl?: string;\n readonly actionCount?: number;\n readonly completedAt?: string;\n readonly failure?: { readonly code: string; readonly message: string };\n}\n\nexport interface ComputerUseSessionView {\n readonly sessionId: string;\n readonly revision: number;\n readonly wake: number;\n readonly phase: 'inactive' | 'awaiting_confirmation' | 'activating' | 'active' | 'stopping' | 'failed';\n readonly requestId?: string;\n readonly target?: Record<string, unknown>;\n readonly durationMs?: number;\n readonly expiresAt?: number;\n readonly failure?: { readonly code: string; readonly message: string };\n readonly artifact?: ComputerUseArtifactView;\n}\n\nexport interface ComputerUseActivationRequest {\n readonly requestId: string;\n readonly target: Record<string, unknown>;\n readonly durationSeconds: number;\n readonly createdAt: number;\n readonly confirmationExpiresAt: number;\n readonly caller: DoomApiCaller;\n}\n\nexport interface ComputerUseBrokerRequest {\n readonly id: string;\n readonly operation: 'observe' | 'act';\n readonly payload?: unknown;\n readonly grantId: string;\n readonly sequence?: number;\n}\n\nexport interface ComputerUseChannelPayload {\n readonly state: ComputerUseSessionView;\n readonly targets: readonly Record<string, unknown>[];\n readonly busy?: true;\n}\n\nexport type ComputerUseBrowserCommand = { readonly action: 'status' | 'targets' | 'stop' | 'artifacts' };\n"],"mappings":"AAEA,MAAa,EAAgB,eAChB,EAAyB,qBACzB,EAAuB,eACvB,EAA0B,oBAC1B,EAA+B,yBAE/B,EAA+B,KAE/B,EAAsC,KAMtC,EAAsB,CACjC,SAAU,YACV,WAAY,eACZ,aAAc,iBACd,YAAa,gBACb,UAAW,cACX,SAAU,aACV,cAAe,kBACf,iBAAkB,qBAClB,QAAS,YACT,YAAa,gBACb,QAAS,WACX,EAEa,EAA0B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ComputerUseSessionClient } from "../
|
|
1
|
+
import { ComputerUseSessionClient } from "../services/sessionApiClient/index.cjs";
|
|
2
2
|
import { ComputerScriptExecutor } from "./computerScript.cjs";
|
|
3
3
|
//#region src/types/extension.d.ts
|
|
4
4
|
export type ComputerUseNotificationLevel = 'info' | 'error';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ComputerUseSessionClient } from "../
|
|
1
|
+
import { ComputerUseSessionClient } from "../services/sessionApiClient/index.mjs";
|
|
2
2
|
import { ComputerScriptExecutor } from "./computerScript.mjs";
|
|
3
3
|
//#region src/types/extension.d.ts
|
|
4
4
|
export type ComputerUseNotificationLevel = 'info' | 'error';
|