@finalai/final-agent-provider 0.6.3 → 0.6.4

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.
@@ -6,7 +6,7 @@ import {
6
6
  processInspectionPageSchema,
7
7
  processInspectionRequestSchema
8
8
  } from "@finalai/agent-protocol/process-inspection";
9
- import { err, ok } from "@finalai/computers";
9
+ import { ComputerState, err, ok } from "@finalai/computers";
10
10
  import * as z from "zod";
11
11
  const outputStreamSchema = z.object({ dataB64: z.string(), offset: z.number(), eof: z.boolean() });
12
12
  const outputSchema = z.object({ stdout: outputStreamSchema, stderr: outputStreamSchema });
@@ -18,8 +18,10 @@ const inspectComputerProcesses = async (args) => {
18
18
  if (request.operation === ProcessInspectionOperation.Available) {
19
19
  const response2 = await args.transport.request({ method: "GET", path: args.computerPath });
20
20
  if (!response2.ok) return response2;
21
- const parsed = z.object({ computer: z.object({ state: z.string() }) }).safeParse(response2.data);
22
- return parsed.success ? ok({ available: parsed.data.computer.state === "running" }) : err("unexpected computer response shape");
21
+ const parsed = z.object({ computer: z.object({ state: z.union([z.number().int(), z.string()]) }) }).safeParse(response2.data);
22
+ return parsed.success ? ok({
23
+ available: parsed.data.computer.state === ComputerState.Running || parsed.data.computer.state === "running"
24
+ }) : err("unexpected computer response shape");
23
25
  }
24
26
  const path = args.computerPath + "/processes";
25
27
  const pagination = {};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/sandboxes/computer-processes.ts"],
4
- "sourcesContent": ["import {\n inspectedProcessMemberSchema,\n inspectedProcessSchema,\n processInspectionDetailSchema,\n ProcessInspectionOperation,\n processInspectionPageSchema,\n processInspectionRequestSchema,\n type ProcessInspectionRequestIface,\n type ProcessInspectionResultIface,\n} from '@finalai/agent-protocol/process-inspection';\nimport type { TransportIface } from '@finalai/computers';\nimport { err, ok, type ResultIface } from '@finalai/computers';\nimport * as z from 'zod';\n\nconst outputStreamSchema = z.object({ dataB64: z.string(), offset: z.number(), eof: z.boolean() });\nconst outputSchema = z.object({ stdout: outputStreamSchema, stderr: outputStreamSchema });\nconst decode = (value: string) =>\n new TextDecoder().decode(Uint8Array.from(atob(value), (byte) => byte.charCodeAt(0)));\n\nexport const inspectComputerProcesses = async (args: {\n transport: Pick<TransportIface, 'request'>;\n computerPath: string;\n request: ProcessInspectionRequestIface;\n}): Promise<ResultIface<ProcessInspectionResultIface>> => {\n const input = processInspectionRequestSchema.safeParse(args.request);\n if (!input.success) return err(input.error.message);\n const request = input.data;\n if (request.operation === ProcessInspectionOperation.Available) {\n const response = await args.transport.request({ method: 'GET', path: args.computerPath });\n if (!response.ok) return response;\n const parsed = z.object({ computer: z.object({ state: z.string() }) }).safeParse(response.data);\n return parsed.success\n ? ok({ available: parsed.data.computer.state === 'running' })\n : err('unexpected computer response shape');\n }\n const path = args.computerPath + '/processes';\n const pagination: NonNullable<Parameters<TransportIface['request']>[0]['query']> = {};\n if ('limit' in request && request.limit != null) pagination.limit = String(request.limit);\n if ('cursor' in request && request.cursor != null) pagination.cursor = request.cursor;\n if (request.operation === ProcessInspectionOperation.List) {\n const response = await args.transport.request({\n method: 'GET',\n path,\n query: { ...pagination, includeSystem: 'false' },\n });\n if (!response.ok) return response;\n const parsed = processInspectionPageSchema.safeParse(response.data);\n return parsed.success ? ok(parsed.data) : err('unexpected process inventory response shape');\n }\n const processPath = path + '/' + encodeURIComponent(request.processId);\n if (request.operation === ProcessInspectionOperation.Stop) {\n const response = await args.transport.request({\n method: 'POST',\n path: processPath + '/terminate',\n jsonBody: { bootId: request.bootId },\n });\n return response.ok ? ok({ stopped: true }) : response;\n }\n const detail = await args.transport.request({\n method: 'GET',\n path: processPath,\n query: { bootId: request.bootId, ...pagination },\n });\n if (!detail.ok) return detail;\n const process = z\n .object({\n process: inspectedProcessSchema,\n descendants: z.array(inspectedProcessMemberSchema),\n nextCursor: z.string().nullable(),\n })\n .safeParse(detail.data);\n if (!process.success) return err('unexpected process detail response shape');\n const response = await args.transport.request({\n method: 'GET',\n path: processPath + '/output',\n query: { bootId: request.bootId, stdoutOffset: '0', stderrOffset: '0', waitMs: '0' },\n });\n if (!response.ok) return response;\n const output = outputSchema.safeParse(response.data);\n if (!output.success) return err('unexpected process output response shape');\n try {\n return ok(\n processInspectionDetailSchema.parse({\n ...process.data,\n logs: {\n stdout: decode(output.data.stdout.dataB64),\n stderr: decode(output.data.stderr.dataB64),\n stdoutTruncated: output.data.stdout.offset > 0 || !output.data.stdout.eof,\n stderrTruncated: output.data.stderr.offset > 0 || !output.data.stderr.eof,\n },\n }),\n );\n } catch {\n return err('invalid process output encoding');\n }\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n inspectedProcessMemberSchema,\n inspectedProcessSchema,\n processInspectionDetailSchema,\n ProcessInspectionOperation,\n processInspectionPageSchema,\n processInspectionRequestSchema,\n type ProcessInspectionRequestIface,\n type ProcessInspectionResultIface,\n} from '@finalai/agent-protocol/process-inspection';\nimport type { TransportIface } from '@finalai/computers';\nimport { ComputerState, err, ok, type ResultIface } from '@finalai/computers';\nimport * as z from 'zod';\n\nconst outputStreamSchema = z.object({ dataB64: z.string(), offset: z.number(), eof: z.boolean() });\nconst outputSchema = z.object({ stdout: outputStreamSchema, stderr: outputStreamSchema });\nconst decode = (value: string) =>\n new TextDecoder().decode(Uint8Array.from(atob(value), (byte) => byte.charCodeAt(0)));\n\nexport const inspectComputerProcesses = async (args: {\n transport: Pick<TransportIface, 'request'>;\n computerPath: string;\n request: ProcessInspectionRequestIface;\n}): Promise<ResultIface<ProcessInspectionResultIface>> => {\n const input = processInspectionRequestSchema.safeParse(args.request);\n if (!input.success) return err(input.error.message);\n const request = input.data;\n if (request.operation === ProcessInspectionOperation.Available) {\n const response = await args.transport.request({ method: 'GET', path: args.computerPath });\n if (!response.ok) return response;\n // Keep the previously accepted string form alongside the SDK's numeric state.\n const parsed = z\n .object({ computer: z.object({ state: z.union([z.number().int(), z.string()]) }) })\n .safeParse(response.data);\n return parsed.success\n ? ok({\n available:\n parsed.data.computer.state === ComputerState.Running ||\n parsed.data.computer.state === 'running',\n })\n : err('unexpected computer response shape');\n }\n const path = args.computerPath + '/processes';\n const pagination: NonNullable<Parameters<TransportIface['request']>[0]['query']> = {};\n if ('limit' in request && request.limit != null) pagination.limit = String(request.limit);\n if ('cursor' in request && request.cursor != null) pagination.cursor = request.cursor;\n if (request.operation === ProcessInspectionOperation.List) {\n const response = await args.transport.request({\n method: 'GET',\n path,\n query: { ...pagination, includeSystem: 'false' },\n });\n if (!response.ok) return response;\n const parsed = processInspectionPageSchema.safeParse(response.data);\n return parsed.success ? ok(parsed.data) : err('unexpected process inventory response shape');\n }\n const processPath = path + '/' + encodeURIComponent(request.processId);\n if (request.operation === ProcessInspectionOperation.Stop) {\n const response = await args.transport.request({\n method: 'POST',\n path: processPath + '/terminate',\n jsonBody: { bootId: request.bootId },\n });\n return response.ok ? ok({ stopped: true }) : response;\n }\n const detail = await args.transport.request({\n method: 'GET',\n path: processPath,\n query: { bootId: request.bootId, ...pagination },\n });\n if (!detail.ok) return detail;\n const process = z\n .object({\n process: inspectedProcessSchema,\n descendants: z.array(inspectedProcessMemberSchema),\n nextCursor: z.string().nullable(),\n })\n .safeParse(detail.data);\n if (!process.success) return err('unexpected process detail response shape');\n const response = await args.transport.request({\n method: 'GET',\n path: processPath + '/output',\n query: { bootId: request.bootId, stdoutOffset: '0', stderrOffset: '0', waitMs: '0' },\n });\n if (!response.ok) return response;\n const output = outputSchema.safeParse(response.data);\n if (!output.success) return err('unexpected process output response shape');\n try {\n return ok(\n processInspectionDetailSchema.parse({\n ...process.data,\n logs: {\n stdout: decode(output.data.stdout.dataB64),\n stderr: decode(output.data.stderr.dataB64),\n stdoutTruncated: output.data.stdout.offset > 0 || !output.data.stdout.eof,\n stderrTruncated: output.data.stderr.offset > 0 || !output.data.stderr.eof,\n },\n }),\n );\n } catch {\n return err('invalid process output encoding');\n }\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["response"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finalai/final-agent-provider",
3
- "version": "0.6.3",
3
+ "version": "0.6.4",
4
4
  "private": false,
5
5
  "description": "Final's provider package: serverless, remote and local harnesses; the computer and device sandboxes; the messaging, schedule and event channels.",
6
6
  "license": "Apache-2.0",