@miosa/sdk 3.5.0 → 3.7.0
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 +180 -0
- package/dist/chunk-BMWUKYWU.js +463 -0
- package/dist/chunk-BMWUKYWU.js.map +1 -0
- package/dist/chunk-H245ZDMW.js +195 -0
- package/dist/chunk-H245ZDMW.js.map +1 -0
- package/dist/client-D3gBlypv.d.ts +9406 -0
- package/dist/computer-CKDK0Ahy.d.ts +3689 -0
- package/dist/computer-use/index.d.ts +154 -0
- package/dist/computer-use/index.js +185 -0
- package/dist/computer-use/index.js.map +1 -0
- package/dist/helpers/index.d.ts +77 -0
- package/dist/helpers/index.js +151 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/index.d.ts +7 -12658
- package/dist/index.js +440 -486
- package/dist/index.js.map +1 -1
- package/package.json +18 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts"],"names":[],"mappings":"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","file":"chunk-BMWUKYWU.js","sourcesContent":["export interface MiosaErrorBody {\n error?: string | {\n code?: string;\n message?: string;\n details?: unknown;\n retryable?: boolean;\n request_id?: string;\n retry_after_ms?: number;\n };\n message?: string;\n code?: string;\n detail?: string;\n details?: unknown;\n reason?: string;\n request_id?: string;\n retryable?: boolean;\n retry_after_ms?: number;\n}\n\n/**\n * Status-based retryability used when the server does not say otherwise:\n * request timeouts, rate limits, and 5xx control-plane failures are transient.\n */\nexport function defaultRetryable(status: number): boolean {\n return status === 408 || status === 429 || status >= 500;\n}\n\nexport class MiosaError extends Error {\n readonly status: number;\n readonly code: string;\n readonly details: unknown;\n readonly requestId: string | undefined;\n readonly retryable: boolean;\n /**\n * Server-supplied retry hint in milliseconds, taken from the canonical\n * error shape's `retry_after_ms` (nested under `error` or top-level) or,\n * failing that, the HTTP `Retry-After` header. `undefined` when the\n * response carried neither, in which case a caller should fall back to\n * its own backoff policy.\n */\n retryAfterMs: number | undefined;\n\n constructor(\n message: string,\n status: number,\n code: string,\n details?: unknown,\n requestId?: string,\n retryable: boolean = defaultRetryable(status),\n retryAfterMs?: number,\n ) {\n super(message);\n this.name = \"MiosaError\";\n this.status = status;\n this.code = code;\n this.details = details;\n this.requestId = requestId;\n this.retryable = retryable;\n this.retryAfterMs = retryAfterMs;\n }\n\n /**\n * @param retryAfterHeaderMs The `Retry-After` header value, already\n * converted to milliseconds by the caller. Used only when the body does\n * not carry the more precise `retry_after_ms`.\n */\n static fromResponse(\n status: number,\n body: MiosaErrorBody,\n requestId?: string,\n retryAfterHeaderMs?: number,\n ): MiosaError {\n const nested = typeof body.error === \"object\" ? body.error : undefined;\n const flatError = typeof body.error === \"string\" ? body.error : undefined;\n // Flat bodies carry either an UPPER_SNAKE code or, on the OpenComputers\n // routes, a lower_snake one (`host_not_connected`, `invalid_command`).\n const flatErrorIsCode =\n !!flatError && (/^[A-Z][A-Z0-9_]+$/.test(flatError) || /^[a-z][a-z0-9]*(_[a-z0-9]+)+$/.test(flatError));\n const message = nested?.message ?? body.message ?? body.detail ?? body.reason ?? flatError ?? `HTTP ${status}`;\n const code = nested?.code ?? body.code ?? (flatErrorIsCode ? flatError : \"UNKNOWN_ERROR\");\n const details =\n nested?.details ??\n body.details ??\n (body.detail || body.reason ? { detail: body.detail, reason: body.reason } : undefined) ??\n extraFields(body, nested);\n requestId ??= nested?.request_id ?? body.request_id;\n const retryable =\n nested?.retryable ?? body.retryable ?? RETRYABLE_BY_CODE[code] ?? defaultRetryable(status);\n const retryAfterMs = nested?.retry_after_ms ?? body.retry_after_ms ?? retryAfterHeaderMs;\n\n const connectError =\n connectErrorFromCode(code, message, status, details, requestId, retryable) ??\n typedErrorFromCode(code, message, status, details, requestId, retryable, retryAfterMs);\n const built =\n connectError ??\n (status === 401 || status === 403\n ? new AuthError(message, status, code, details, requestId, retryable)\n : status === 404\n ? new NotFoundError(message, code, details, requestId, retryable)\n : status === 429\n ? new RateLimitError(\n message,\n details,\n requestId,\n retryAfterMs === undefined ? undefined : retryAfterMs / 1000,\n retryable,\n // Keep the server's own code (SERVICE_ACCOUNT_LIMIT, ...) when it sent one.\n code === \"UNKNOWN_ERROR\" ? \"RATE_LIMITED\" : code,\n )\n : status === 402\n ? new InsufficientCreditsError(\n message,\n details,\n requestId,\n retryable,\n code === \"UNKNOWN_ERROR\" ? \"INSUFFICIENT_CREDITS\" : code,\n )\n : status >= 400 && status < 500\n ? new ValidationError(message, status, code, details, requestId, retryable)\n : new MiosaError(message, status, code, details, requestId, retryable));\n\n built.retryAfterMs = retryAfterMs;\n return built;\n }\n}\n\nconst ENVELOPE_KEYS = new Set([\n \"error\", \"message\", \"code\", \"detail\", \"details\", \"reason\", \"request_id\", \"retryable\",\n \"retry_after_ms\", \"ok\", \"success\", \"status\",\n]);\nconst NESTED_KEYS = new Set([\"code\", \"message\", \"details\", \"retryable\", \"request_id\", \"retry_after_ms\"]);\n\n/**\n * Fields the server put next to the code and message (`field`, `min`, `max`,\n * `invalid_scopes`, `valid`, `job_id`, ...) are the error's details when it sent\n * no explicit `details`, so a caller can read them instead of losing them.\n */\nfunction extraFields(body: MiosaErrorBody, nested: Record<string, unknown> | undefined): unknown {\n const extras: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(body)) {\n if (!ENVELOPE_KEYS.has(key)) extras[key] = value;\n }\n if (nested) {\n for (const [key, value] of Object.entries(nested)) {\n if (!NESTED_KEYS.has(key)) extras[key] = value;\n }\n }\n return Object.keys(extras).length > 0 ? extras : undefined;\n}\n\nfunction connectErrorFromCode(\n code: string,\n message: string,\n status: number,\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n): MiosaError | undefined {\n switch (code) {\n case \"PROJECT_NOT_LINKED\":\n return new ProjectNotLinkedError(message, status, details, requestId, retryable);\n case \"SUBJECT_NOT_ALLOWED\":\n return new SubjectNotAllowedError(message, status, details, requestId, retryable);\n case \"SCOPE_NOT_ALLOWED\":\n return new ScopeNotAllowedError(message, status, details, requestId, retryable);\n case \"MANAGED_PROVIDER_BINDING_ONLY\":\n return new ManagedProviderBindingOnlyError(message, status, details, requestId, retryable);\n case \"INSTALLATION_REQUIRED\":\n return new InstallationRequiredError(message, status, details, requestId, retryable);\n case \"USER_AUTHORIZATION_REQUIRED\":\n return new UserAuthorizationRequiredError(message, status, details, requestId, retryable);\n case \"EGRESS_HOST_NOT_ALLOWED\":\n return new EgressHostNotAllowedError(message, status, details, requestId, retryable);\n case \"TOKEN_REFRESH_FAILED\":\n return new TokenRefreshFailedError(message, status, details, requestId, retryable);\n default:\n return undefined;\n }\n}\n\nexport class AuthError extends MiosaError {\n constructor(\n message: string,\n status: number = 401,\n code: string = \"UNAUTHORIZED\",\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n ) {\n super(message, status, code, details, requestId, retryable);\n this.name = \"AuthError\";\n }\n}\n\nexport class NotFoundError extends MiosaError {\n constructor(\n message: string,\n code: string = \"NOT_FOUND\",\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n ) {\n super(message, 404, code, details, requestId, retryable);\n this.name = \"NotFoundError\";\n }\n}\n\nexport class RateLimitError extends MiosaError {\n readonly retryAfter: number | undefined;\n\n constructor(\n message: string,\n details?: unknown,\n requestId?: string,\n retryAfter?: number,\n retryable?: boolean,\n code: string = \"RATE_LIMITED\",\n ) {\n super(message, 429, code, details, requestId, retryable);\n this.name = \"RateLimitError\";\n this.retryAfter = retryAfter;\n }\n}\n\nexport class InsufficientCreditsError extends MiosaError {\n constructor(\n message: string,\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n code: string = \"INSUFFICIENT_CREDITS\",\n ) {\n super(message, 402, code, details, requestId, retryable);\n this.name = \"InsufficientCreditsError\";\n }\n}\n\nexport class ValidationError extends MiosaError {\n constructor(\n message: string,\n status: number,\n code: string = \"VALIDATION_ERROR\",\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n ) {\n super(message, status, code, details, requestId, retryable);\n this.name = \"ValidationError\";\n }\n}\n\nexport class TimeoutError extends MiosaError {\n constructor(message: string = \"Request timed out\") {\n super(message, 408, \"TIMEOUT\", undefined, undefined, true);\n this.name = \"TimeoutError\";\n }\n}\n\nexport class NetworkError extends MiosaError {\n readonly cause: Error;\n\n constructor(message: string, cause: Error) {\n super(message, 0, \"NETWORK_ERROR\", undefined, undefined, true);\n this.name = \"NetworkError\";\n this.cause = cause;\n }\n}\n\nexport class ProjectNotLinkedError extends MiosaError {\n constructor(\n message: string,\n status = 403,\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n ) {\n super(message, status, \"PROJECT_NOT_LINKED\", details, requestId, retryable);\n this.name = \"ProjectNotLinkedError\";\n }\n}\n\nexport class SubjectNotAllowedError extends MiosaError {\n constructor(\n message: string,\n status = 403,\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n ) {\n super(message, status, \"SUBJECT_NOT_ALLOWED\", details, requestId, retryable);\n this.name = \"SubjectNotAllowedError\";\n }\n}\n\nexport class ScopeNotAllowedError extends MiosaError {\n constructor(\n message: string,\n status = 403,\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n ) {\n super(message, status, \"SCOPE_NOT_ALLOWED\", details, requestId, retryable);\n this.name = \"ScopeNotAllowedError\";\n }\n}\n\nexport class ManagedProviderBindingOnlyError extends MiosaError {\n constructor(\n message: string,\n status = 403,\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n ) {\n super(message, status, \"MANAGED_PROVIDER_BINDING_ONLY\", details, requestId, retryable);\n this.name = \"ManagedProviderBindingOnlyError\";\n }\n}\n\nexport class InstallationRequiredError extends MiosaError {\n constructor(\n message: string,\n status = 409,\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n ) {\n super(message, status, \"INSTALLATION_REQUIRED\", details, requestId, retryable);\n this.name = \"InstallationRequiredError\";\n }\n}\n\nexport class UserAuthorizationRequiredError extends MiosaError {\n constructor(\n message: string,\n status = 403,\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n ) {\n super(message, status, \"USER_AUTHORIZATION_REQUIRED\", details, requestId, retryable);\n this.name = \"UserAuthorizationRequiredError\";\n }\n}\n\nexport class EgressHostNotAllowedError extends MiosaError {\n constructor(\n message: string,\n status = 403,\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n ) {\n super(message, status, \"EGRESS_HOST_NOT_ALLOWED\", details, requestId, retryable);\n this.name = \"EgressHostNotAllowedError\";\n }\n}\n\nexport class TokenRefreshFailedError extends MiosaError {\n constructor(\n message: string,\n status = 502,\n details?: unknown,\n requestId?: string,\n retryable?: boolean,\n ) {\n super(message, status, \"TOKEN_REFRESH_FAILED\", details, requestId, retryable);\n this.name = \"TokenRefreshFailedError\";\n }\n}\n\n// ─── Sprint 2026-10-10 typed errors ───────────────────────────────────────────\n//\n// Every class below keeps the base class the same status would have produced\n// before (ValidationError for other 4xx, AuthError for 401/403, NotFoundError\n// for 404, InsufficientCreditsError for 402, RateLimitError for 429), so an\n// existing `instanceof` check or `catch` branch keeps matching. The new class\n// only narrows it, and `code` is the server's own code.\n\n/**\n * Retry hint used when the server's error body carries no `retryable` flag.\n * Only codes whose contract states a retry answer are listed; every other code\n * keeps the status-based default.\n */\nconst RETRYABLE_BY_CODE: Readonly<Record<string, boolean>> = {\n SANDBOX_STARTING: true,\n COMPUTER_STARTING: true,\n ENVIRONMENT_SCRUB_FAILED: true,\n CHAT_BUSY: true,\n ENVIRONMENT_MEMORY_WITHHELD: false,\n NO_AGENT_RUN: false,\n MEMBER_LIMIT_REACHED: false,\n NO_READY_MACHINE: true,\n no_ready_machine: true,\n};\n\n/**\n * `503 no_ready_machine`: a `failFast` request found no ready machine. The\n * server answers in about 1.5 seconds instead of queueing, and the request\n * does not count against start limits. Retryable later; the client does not\n * retry it for you, since shedding load is the point.\n */\nexport class NoReadyMachineError extends MiosaError {\n constructor(message: string, status = 503, details?: unknown, requestId?: string, retryable = true, retryAfterMs?: number) {\n super(message, status, \"no_ready_machine\", details, requestId, retryable, retryAfterMs);\n this.name = \"NoReadyMachineError\";\n }\n}\n\n/** `400 INVALID_ID`: a path or body id is not a well-formed identifier. */\nexport class InvalidIdError extends ValidationError {\n constructor(message: string, status = 400, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"INVALID_ID\", details, requestId, retryable);\n this.name = \"InvalidIdError\";\n }\n}\n\n/**\n * `422 OWN_CREDENTIALS_REQUIRED`: the harness has no credential of the\n * account's own. MIOSA platform keys are never used for agent runs, so connect\n * a credential (`miosa.agentSettings.putCredential`) and retry.\n */\nexport class OwnCredentialsRequiredError extends ValidationError {\n constructor(message: string, status = 422, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"OWN_CREDENTIALS_REQUIRED\", details, requestId, retryable);\n this.name = \"OwnCredentialsRequiredError\";\n }\n}\n\n/** `404 ENVIRONMENT_NOT_FOUND`: unknown id or name on an environment route. */\nexport class EnvironmentNotFoundError extends NotFoundError {\n constructor(message: string, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, \"ENVIRONMENT_NOT_FOUND\", details, requestId, retryable);\n this.name = \"EnvironmentNotFoundError\";\n }\n}\n\n/**\n * `422 ENVIRONMENT_NOT_FOUND` on a machine route: the `environment` or\n * `environment_id` named on a create, resume, fork, start or clone does not\n * exist. Nothing was created or changed. A validation error, as it was before.\n */\nexport class UnknownEnvironmentError extends ValidationError {\n constructor(message: string, status = 422, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"ENVIRONMENT_NOT_FOUND\", details, requestId, retryable);\n this.name = \"UnknownEnvironmentError\";\n }\n}\n\n/** `409 ENVIRONMENT_NAME_TAKEN`. */\nexport class EnvironmentNameTakenError extends ValidationError {\n constructor(message: string, status = 409, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"ENVIRONMENT_NAME_TAKEN\", details, requestId, retryable);\n this.name = \"EnvironmentNameTakenError\";\n }\n}\n\n/** `409 ENVIRONMENT_IS_DEFAULT`: the organization default cannot be deleted. */\nexport class EnvironmentIsDefaultError extends ValidationError {\n constructor(message: string, status = 409, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"ENVIRONMENT_IS_DEFAULT\", details, requestId, retryable);\n this.name = \"EnvironmentIsDefaultError\";\n }\n}\n\n/**\n * `409 ENVIRONMENT_SCRUB_FAILED`: the machine's delivered secrets could not be\n * removed before a snapshot or fork, so nothing was saved. Retryable.\n */\nexport class EnvironmentScrubFailedError extends ValidationError {\n constructor(message: string, status = 409, details?: unknown, requestId?: string, retryable = true) {\n super(message, status, \"ENVIRONMENT_SCRUB_FAILED\", details, requestId, retryable);\n this.name = \"EnvironmentScrubFailedError\";\n }\n}\n\n/**\n * `409 ENVIRONMENT_MEMORY_WITHHELD`: a sandbox fork, restore or deploy whose\n * environment withholds something the source received. Not retryable as is.\n */\nexport class EnvironmentMemoryWithheldError extends ValidationError {\n constructor(message: string, status = 409, details?: unknown, requestId?: string, retryable = false) {\n super(message, status, \"ENVIRONMENT_MEMORY_WITHHELD\", details, requestId, retryable);\n this.name = \"EnvironmentMemoryWithheldError\";\n }\n\n /** `details.reasons`: why the memory was withheld. Empty when absent. */\n get reasons(): string[] {\n const reasons = (this.details as { reasons?: unknown } | undefined)?.reasons;\n return Array.isArray(reasons) ? reasons.filter((r): r is string => typeof r === \"string\") : [];\n }\n}\n\n/** `403 MACHINE_KEY_SCOPE`: a machine key called something outside its machine's lifecycle. */\nexport class MachineKeyScopeError extends AuthError {\n constructor(message: string, status = 403, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"MACHINE_KEY_SCOPE\", details, requestId, retryable);\n this.name = \"MachineKeyScopeError\";\n }\n}\n\n/**\n * `409 SANDBOX_STARTING` / `409 COMPUTER_STARTING`: the machine is not ready for\n * a command yet. Retryable; `retryAfterMs` carries the server's hint (the\n * client already retries these using it).\n */\nexport class MachineStartingError extends ValidationError {\n constructor(\n message: string,\n status = 409,\n code = \"SANDBOX_STARTING\",\n details?: unknown,\n requestId?: string,\n retryable = true,\n ) {\n super(message, status, code, details, requestId, retryable);\n this.name = \"MachineStartingError\";\n }\n}\n\nexport class SandboxStartingError extends MachineStartingError {\n constructor(message: string, status = 409, details?: unknown, requestId?: string, retryable = true) {\n super(message, status, \"SANDBOX_STARTING\", details, requestId, retryable);\n this.name = \"SandboxStartingError\";\n }\n}\n\nexport class ComputerStartingError extends MachineStartingError {\n constructor(message: string, status = 409, details?: unknown, requestId?: string, retryable = true) {\n super(message, status, \"COMPUTER_STARTING\", details, requestId, retryable);\n this.name = \"ComputerStartingError\";\n }\n}\n\n/** `402 CREDIT_REQUIRED`: the action needs credit (for example a named snapshot past the free allowance). */\nexport class CreditRequiredError extends InsufficientCreditsError {\n constructor(message: string, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, details, requestId, retryable, \"CREDIT_REQUIRED\");\n this.name = \"CreditRequiredError\";\n }\n}\n\n/** `402 TEAM_MEMBER_CAP_REACHED`: the caller's usage cap in the billed organization is reached. */\nexport class TeamMemberCapReachedError extends InsufficientCreditsError {\n constructor(message: string, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, details, requestId, retryable, \"TEAM_MEMBER_CAP_REACHED\");\n this.name = \"TeamMemberCapReachedError\";\n }\n}\n\n/** `429 MEMBER_LIMIT_REACHED`: the caller's concurrent-sandbox cap is reached. Not retryable until a sandbox stops. */\nexport class MemberLimitReachedError extends RateLimitError {\n constructor(message: string, details?: unknown, requestId?: string, retryAfter?: number, retryable = false) {\n super(message, details, requestId, retryAfter, retryable, \"MEMBER_LIMIT_REACHED\");\n this.name = \"MemberLimitReachedError\";\n }\n}\n\n/** `403 BILL_TO_LOCKED`: this credential is locked to its own organization. */\nexport class BillToLockedError extends AuthError {\n constructor(message: string, status = 403, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"BILL_TO_LOCKED\", details, requestId, retryable);\n this.name = \"BillToLockedError\";\n }\n}\n\n/** `403 BILL_TO_FORBIDDEN`: the caller's role in that organization cannot create resources. */\nexport class BillToForbiddenError extends AuthError {\n constructor(message: string, status = 403, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"BILL_TO_FORBIDDEN\", details, requestId, retryable);\n this.name = \"BillToForbiddenError\";\n }\n}\n\n/** `403 BILL_TO_SUSPENDED`: the organization to bill is suspended. */\nexport class BillToSuspendedError extends AuthError {\n constructor(message: string, status = 403, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"BILL_TO_SUSPENDED\", details, requestId, retryable);\n this.name = \"BillToSuspendedError\";\n }\n}\n\n/** `404 ORG_NOT_FOUND`: the bill-to organization does not exist for the caller. */\nexport class OrgNotFoundError extends NotFoundError {\n constructor(message: string, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, \"ORG_NOT_FOUND\", details, requestId, retryable);\n this.name = \"OrgNotFoundError\";\n }\n}\n\n/** `409 AMBIGUOUS_ORG`: two organizations share the name; use the id. */\nexport class AmbiguousOrgError extends ValidationError {\n constructor(message: string, status = 409, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"AMBIGUOUS_ORG\", details, requestId, retryable);\n this.name = \"AmbiguousOrgError\";\n }\n}\n\n/** `409 SNAPSHOT_IN_USE`: something still depends on the snapshot; see {@link dependents}. */\nexport class SnapshotInUseError extends ValidationError {\n constructor(message: string, status = 409, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"SNAPSHOT_IN_USE\", details, requestId, retryable);\n this.name = \"SnapshotInUseError\";\n }\n\n /** `details.dependents`: every thing that still needs the snapshot's bytes. */\n get dependents(): Array<{ type: string; id: string; label?: string }> {\n const dependents = (this.details as { dependents?: unknown } | undefined)?.dependents;\n return Array.isArray(dependents) ? (dependents as Array<{ type: string; id: string; label?: string }>) : [];\n }\n}\n\n/** `409 RUN_SESSION_NOT_RESUMABLE`: `details.reason` says why (`not_found`, `still_running`, ...). */\nexport class RunSessionNotResumableError extends ValidationError {\n constructor(message: string, status = 409, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"RUN_SESSION_NOT_RESUMABLE\", details, requestId, retryable);\n this.name = \"RunSessionNotResumableError\";\n }\n\n get reason(): string | undefined {\n const reason = (this.details as { reason?: unknown } | undefined)?.reason;\n return typeof reason === \"string\" ? reason : undefined;\n }\n}\n\n/** `409 CHAT_BUSY`: the chat's latest run has not finished. Retryable once it has. */\nexport class ChatBusyError extends ValidationError {\n constructor(message: string, status = 409, details?: unknown, requestId?: string, retryable = true) {\n super(message, status, \"CHAT_BUSY\", details, requestId, retryable);\n this.name = \"ChatBusyError\";\n }\n}\n\n/** `409 NO_AGENT_RUN`: no agent run is attached to the machine. Not retryable. */\nexport class NoAgentRunError extends ValidationError {\n constructor(message: string, status = 409, details?: unknown, requestId?: string, retryable = false) {\n super(message, status, \"NO_AGENT_RUN\", details, requestId, retryable);\n this.name = \"NoAgentRunError\";\n }\n}\n\n/** `422 INVALID_SETUP_FILE`: `details.reason` is `setup_file_too_large`, `setup_file_not_string`, `setup_file_not_utf8` or `setup_file_has_nul`. */\nexport class InvalidSetupFileError extends ValidationError {\n constructor(message: string, status = 422, details?: unknown, requestId?: string, retryable?: boolean) {\n super(message, status, \"INVALID_SETUP_FILE\", details, requestId, retryable);\n this.name = \"InvalidSetupFileError\";\n }\n\n get reason(): string | undefined {\n const reason = (this.details as { reason?: unknown } | undefined)?.reason;\n return typeof reason === \"string\" ? reason : undefined;\n }\n}\n\nfunction typedErrorFromCode(\n code: string,\n message: string,\n status: number,\n details: unknown,\n requestId: string | undefined,\n retryable: boolean,\n retryAfterMs: number | undefined,\n): MiosaError | undefined {\n switch (code) {\n case \"no_ready_machine\":\n case \"NO_READY_MACHINE\":\n return new NoReadyMachineError(message, status, details, requestId, retryable, retryAfterMs);\n case \"INVALID_ID\":\n return new InvalidIdError(message, status, details, requestId, retryable);\n case \"OWN_CREDENTIALS_REQUIRED\":\n return new OwnCredentialsRequiredError(message, status, details, requestId, retryable);\n case \"ENVIRONMENT_NOT_FOUND\":\n return status === 404\n ? new EnvironmentNotFoundError(message, details, requestId, retryable)\n : new UnknownEnvironmentError(message, status, details, requestId, retryable);\n case \"ENVIRONMENT_NAME_TAKEN\":\n return new EnvironmentNameTakenError(message, status, details, requestId, retryable);\n case \"ENVIRONMENT_IS_DEFAULT\":\n return new EnvironmentIsDefaultError(message, status, details, requestId, retryable);\n case \"ENVIRONMENT_SCRUB_FAILED\":\n return new EnvironmentScrubFailedError(message, status, details, requestId, retryable);\n case \"ENVIRONMENT_MEMORY_WITHHELD\":\n return new EnvironmentMemoryWithheldError(message, status, details, requestId, retryable);\n case \"MACHINE_KEY_SCOPE\":\n return new MachineKeyScopeError(message, status, details, requestId, retryable);\n case \"SANDBOX_STARTING\":\n return new SandboxStartingError(message, status, details, requestId, retryable);\n case \"COMPUTER_STARTING\":\n return new ComputerStartingError(message, status, details, requestId, retryable);\n case \"CREDIT_REQUIRED\":\n return new CreditRequiredError(message, details, requestId, retryable);\n case \"TEAM_MEMBER_CAP_REACHED\":\n return new TeamMemberCapReachedError(message, details, requestId, retryable);\n case \"MEMBER_LIMIT_REACHED\":\n return new MemberLimitReachedError(\n message,\n details,\n requestId,\n retryAfterMs === undefined ? undefined : retryAfterMs / 1000,\n retryable,\n );\n case \"BILL_TO_LOCKED\":\n return new BillToLockedError(message, status, details, requestId, retryable);\n case \"BILL_TO_FORBIDDEN\":\n return new BillToForbiddenError(message, status, details, requestId, retryable);\n case \"BILL_TO_SUSPENDED\":\n return new BillToSuspendedError(message, status, details, requestId, retryable);\n case \"ORG_NOT_FOUND\":\n return new OrgNotFoundError(message, details, requestId, retryable);\n case \"AMBIGUOUS_ORG\":\n return new AmbiguousOrgError(message, status, details, requestId, retryable);\n case \"SNAPSHOT_IN_USE\":\n return new SnapshotInUseError(message, status, details, requestId, retryable);\n case \"RUN_SESSION_NOT_RESUMABLE\":\n return new RunSessionNotResumableError(message, status, details, requestId, retryable);\n case \"CHAT_BUSY\":\n return new ChatBusyError(message, status, details, requestId, retryable);\n case \"NO_AGENT_RUN\":\n return new NoAgentRunError(message, status, details, requestId, retryable);\n case \"INVALID_SETUP_FILE\":\n return new InvalidSetupFileError(message, status, details, requestId, retryable);\n default:\n return undefined;\n }\n}\n"]}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { MiosaError } from './chunk-BMWUKYWU.js';
|
|
2
|
+
|
|
3
|
+
// src/resources/desktop-act.ts
|
|
4
|
+
var ACTION_NAMES = [
|
|
5
|
+
"screenshot",
|
|
6
|
+
"zoom",
|
|
7
|
+
"cursor_position",
|
|
8
|
+
"left_click",
|
|
9
|
+
"right_click",
|
|
10
|
+
"middle_click",
|
|
11
|
+
"double_click",
|
|
12
|
+
"triple_click",
|
|
13
|
+
"left_click_drag",
|
|
14
|
+
"mouse_move",
|
|
15
|
+
"left_mouse_down",
|
|
16
|
+
"left_mouse_up",
|
|
17
|
+
"scroll",
|
|
18
|
+
"type",
|
|
19
|
+
"key",
|
|
20
|
+
"hold_key",
|
|
21
|
+
"wait"
|
|
22
|
+
];
|
|
23
|
+
var InvalidActionInputError = class extends MiosaError {
|
|
24
|
+
constructor(action, message) {
|
|
25
|
+
super(`${action}: ${message}`, 0, "INVALID_ACTION_INPUT", { action }, void 0, false);
|
|
26
|
+
this.name = "InvalidActionInputError";
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
function point(action, value, field) {
|
|
30
|
+
if (!value || value.length !== 2 || !Number.isFinite(value[0]) || !Number.isFinite(value[1])) {
|
|
31
|
+
throw new InvalidActionInputError(action, `${field} must be [x, y]`);
|
|
32
|
+
}
|
|
33
|
+
return [Math.round(value[0]), Math.round(value[1])];
|
|
34
|
+
}
|
|
35
|
+
function pngSize(bytes) {
|
|
36
|
+
if (bytes.length < 24 || bytes[1] !== 80 || bytes[2] !== 78 || bytes[3] !== 71) return [0, 0];
|
|
37
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
38
|
+
return [view.getUint32(16), view.getUint32(20)];
|
|
39
|
+
}
|
|
40
|
+
function toBase64(bytes) {
|
|
41
|
+
return Buffer.from(bytes).toString("base64");
|
|
42
|
+
}
|
|
43
|
+
function screenshotResult(action, bytes, started) {
|
|
44
|
+
const [width, height] = pngSize(bytes);
|
|
45
|
+
return {
|
|
46
|
+
ok: true,
|
|
47
|
+
action,
|
|
48
|
+
durationMs: Date.now() - started,
|
|
49
|
+
imageBase64: toBase64(bytes),
|
|
50
|
+
mediaType: "image/png",
|
|
51
|
+
width,
|
|
52
|
+
height,
|
|
53
|
+
takenAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async function withModifier(desktop, modifier, run) {
|
|
57
|
+
if (!modifier) {
|
|
58
|
+
await run();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
await desktop.keyDown(modifier);
|
|
62
|
+
try {
|
|
63
|
+
await run();
|
|
64
|
+
} finally {
|
|
65
|
+
await desktop.keyUp(modifier);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
69
|
+
async function performAction(desktop, action, ...args) {
|
|
70
|
+
const started = Date.now();
|
|
71
|
+
const params = args[0] ?? {};
|
|
72
|
+
const done = (fields) => ({ ok: true, durationMs: Date.now() - started, ...fields });
|
|
73
|
+
const clickAt = async (button) => {
|
|
74
|
+
const where = params["coordinate"] ? point(action, params["coordinate"], "coordinate") : await desktop.cursor().then((c) => [c.x, c.y]);
|
|
75
|
+
await withModifier(desktop, params["text"], async () => {
|
|
76
|
+
if (button === "double") await desktop.doubleClick(where[0], where[1]);
|
|
77
|
+
else if (button === "triple") {
|
|
78
|
+
await desktop.click(where[0], where[1], "left");
|
|
79
|
+
await desktop.doubleClick(where[0], where[1]);
|
|
80
|
+
} else await desktop.click(where[0], where[1], button);
|
|
81
|
+
});
|
|
82
|
+
return done({ action, coordinate: where });
|
|
83
|
+
};
|
|
84
|
+
switch (action) {
|
|
85
|
+
case "screenshot":
|
|
86
|
+
return screenshotResult("screenshot", await desktop.screenshot(), started);
|
|
87
|
+
case "zoom": {
|
|
88
|
+
const region = params["region"];
|
|
89
|
+
if (!region || region.length !== 4 || !region.every(Number.isFinite)) {
|
|
90
|
+
throw new InvalidActionInputError(action, "region must be [x1, y1, x2, y2]");
|
|
91
|
+
}
|
|
92
|
+
const [x1, y1, x2, y2] = region;
|
|
93
|
+
if (x2 <= x1 || y2 <= y1) throw new InvalidActionInputError(action, "region must have positive width and height");
|
|
94
|
+
const bytes = await desktop.screenshotRegion(Math.round(x1), Math.round(y1), Math.round(x2 - x1), Math.round(y2 - y1));
|
|
95
|
+
return screenshotResult("zoom", bytes, started);
|
|
96
|
+
}
|
|
97
|
+
case "cursor_position": {
|
|
98
|
+
const cursor = await desktop.cursor();
|
|
99
|
+
return done({ action, x: cursor.x, y: cursor.y });
|
|
100
|
+
}
|
|
101
|
+
case "left_click":
|
|
102
|
+
return clickAt("left");
|
|
103
|
+
case "right_click":
|
|
104
|
+
return clickAt("right");
|
|
105
|
+
case "middle_click":
|
|
106
|
+
return clickAt("middle");
|
|
107
|
+
case "double_click":
|
|
108
|
+
return clickAt("double");
|
|
109
|
+
case "triple_click":
|
|
110
|
+
return clickAt("triple");
|
|
111
|
+
case "left_click_drag": {
|
|
112
|
+
const from = point(action, params["start_coordinate"], "start_coordinate");
|
|
113
|
+
const to = point(action, params["coordinate"], "coordinate");
|
|
114
|
+
await withModifier(desktop, params["text"], () => desktop.drag(from[0], from[1], to[0], to[1]));
|
|
115
|
+
return done({ action, coordinate: to });
|
|
116
|
+
}
|
|
117
|
+
case "mouse_move": {
|
|
118
|
+
const to = point(action, params["coordinate"], "coordinate");
|
|
119
|
+
await desktop.moveMouse(to[0], to[1]);
|
|
120
|
+
return done({ action, coordinate: to });
|
|
121
|
+
}
|
|
122
|
+
case "left_mouse_down":
|
|
123
|
+
case "left_mouse_up": {
|
|
124
|
+
const cursor = await desktop.cursor();
|
|
125
|
+
if (action === "left_mouse_down") await desktop.mouseDown(cursor.x, cursor.y, "left");
|
|
126
|
+
else await desktop.mouseUp(cursor.x, cursor.y, "left");
|
|
127
|
+
return done({ action, coordinate: [cursor.x, cursor.y] });
|
|
128
|
+
}
|
|
129
|
+
case "scroll": {
|
|
130
|
+
const direction = params["scroll_direction"];
|
|
131
|
+
const amount = params["scroll_amount"];
|
|
132
|
+
if (!direction || !["up", "down", "left", "right"].includes(direction)) {
|
|
133
|
+
throw new InvalidActionInputError(action, "scroll_direction must be up, down, left or right");
|
|
134
|
+
}
|
|
135
|
+
if (typeof amount !== "number" || !Number.isFinite(amount) || amount < 0) {
|
|
136
|
+
throw new InvalidActionInputError(action, "scroll_amount must be a non-negative number");
|
|
137
|
+
}
|
|
138
|
+
const where = params["coordinate"] ? point(action, params["coordinate"], "coordinate") : await desktop.cursor().then((c) => [c.x, c.y]);
|
|
139
|
+
await withModifier(
|
|
140
|
+
desktop,
|
|
141
|
+
params["text"],
|
|
142
|
+
() => desktop.scroll(direction, amount, where[0], where[1])
|
|
143
|
+
);
|
|
144
|
+
return done({ action, coordinate: where });
|
|
145
|
+
}
|
|
146
|
+
case "type": {
|
|
147
|
+
const text = params["text"];
|
|
148
|
+
if (typeof text !== "string") throw new InvalidActionInputError(action, "text is required");
|
|
149
|
+
await desktop.type(text);
|
|
150
|
+
return done({ action });
|
|
151
|
+
}
|
|
152
|
+
case "key": {
|
|
153
|
+
const text = params["text"];
|
|
154
|
+
if (typeof text !== "string" || text === "") throw new InvalidActionInputError(action, "text is required");
|
|
155
|
+
const repeat = typeof params["repeat"] === "number" ? Math.max(1, Math.floor(params["repeat"])) : 1;
|
|
156
|
+
for (let i = 0; i < repeat; i += 1) await desktop.key(text);
|
|
157
|
+
return done({ action });
|
|
158
|
+
}
|
|
159
|
+
case "hold_key": {
|
|
160
|
+
const text = params["text"];
|
|
161
|
+
const duration = params["duration"];
|
|
162
|
+
if (typeof text !== "string" || text === "") throw new InvalidActionInputError(action, "text is required");
|
|
163
|
+
if (typeof duration !== "number" || !Number.isFinite(duration) || duration < 0) {
|
|
164
|
+
throw new InvalidActionInputError(action, "duration must be a non-negative number of seconds");
|
|
165
|
+
}
|
|
166
|
+
await desktop.keyDown(text);
|
|
167
|
+
try {
|
|
168
|
+
await sleep(duration * 1e3);
|
|
169
|
+
} finally {
|
|
170
|
+
await desktop.keyUp(text);
|
|
171
|
+
}
|
|
172
|
+
return done({ action });
|
|
173
|
+
}
|
|
174
|
+
case "wait": {
|
|
175
|
+
const duration = params["duration"];
|
|
176
|
+
if (typeof duration !== "number" || !Number.isFinite(duration) || duration < 0) {
|
|
177
|
+
throw new InvalidActionInputError(action, "duration must be a non-negative number of seconds");
|
|
178
|
+
}
|
|
179
|
+
await desktop.wait(duration);
|
|
180
|
+
return done({ action });
|
|
181
|
+
}
|
|
182
|
+
default: {
|
|
183
|
+
const unknown = action;
|
|
184
|
+
throw new InvalidActionInputError(String(unknown), "unknown action");
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function performActionDynamic(desktop, action, params = {}) {
|
|
189
|
+
const run = performAction;
|
|
190
|
+
return run(desktop, action, params);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export { ACTION_NAMES, InvalidActionInputError, performAction, performActionDynamic, pngSize, toBase64 };
|
|
194
|
+
//# sourceMappingURL=chunk-H245ZDMW.js.map
|
|
195
|
+
//# sourceMappingURL=chunk-H245ZDMW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resources/desktop-act.ts"],"names":[],"mappings":"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","file":"chunk-H245ZDMW.js","sourcesContent":["import { MiosaError } from \"../errors.js\";\nimport type { Desktop } from \"./desktop.js\";\n\n/**\n * One typed dispatcher over the desktop routes, named after the members of\n * Anthropic's `computer_toolset_20260801` so the same names work in an agent\n * loop and in `computer.act()`.\n */\n\n/** Every action `act()` understands. */\nexport const ACTION_NAMES = [\n \"screenshot\",\n \"zoom\",\n \"cursor_position\",\n \"left_click\",\n \"right_click\",\n \"middle_click\",\n \"double_click\",\n \"triple_click\",\n \"left_click_drag\",\n \"mouse_move\",\n \"left_mouse_down\",\n \"left_mouse_up\",\n \"scroll\",\n \"type\",\n \"key\",\n \"hold_key\",\n \"wait\",\n] as const;\n\nexport type ActionName = (typeof ACTION_NAMES)[number];\n\n/** `[x, y]` in screenshot pixels. */\nexport type Coordinate = readonly [number, number] | readonly number[];\n\ninterface ClickParams {\n /** Where to click. Omitted: the current pointer position. */\n coordinate?: Coordinate;\n /** A modifier key held during the click, for example `\"shift\"`. */\n text?: string;\n}\n\nexport interface ActParamsMap {\n screenshot: Record<string, never>;\n zoom: { region: readonly [number, number, number, number] | readonly number[] };\n cursor_position: Record<string, never>;\n left_click: ClickParams;\n right_click: ClickParams;\n middle_click: ClickParams;\n double_click: ClickParams;\n triple_click: ClickParams;\n left_click_drag: { start_coordinate: Coordinate; coordinate: Coordinate; text?: string };\n mouse_move: { coordinate: Coordinate };\n left_mouse_down: Record<string, never>;\n left_mouse_up: Record<string, never>;\n scroll: {\n scroll_direction: \"up\" | \"down\" | \"left\" | \"right\";\n scroll_amount: number;\n coordinate?: Coordinate;\n text?: string;\n };\n type: { text: string };\n key: { text: string; repeat?: number };\n hold_key: { text: string; duration: number };\n wait: { duration: number };\n}\n\ninterface ActionBase<A extends ActionName> {\n ok: true;\n action: A;\n /** Client-measured time for the whole action, including the round trips. */\n durationMs: number;\n}\n\nexport interface ScreenshotActionResult<A extends \"screenshot\" | \"zoom\" = \"screenshot\" | \"zoom\"> extends ActionBase<A> {\n imageBase64: string;\n mediaType: \"image/png\";\n /** Pixels, read from the PNG header. */\n width: number;\n height: number;\n takenAt: string;\n}\n\nexport interface CursorActionResult extends ActionBase<\"cursor_position\"> {\n x: number;\n y: number;\n}\n\n/** An action that moved or clicked the pointer. `coordinate` is where it ended. */\nexport interface PointerActionResult<A extends ActionName> extends ActionBase<A> {\n coordinate: [number, number];\n}\n\nexport type ActionResultMap = {\n [A in ActionName]: A extends \"screenshot\" | \"zoom\"\n ? ScreenshotActionResult<A>\n : A extends \"cursor_position\"\n ? CursorActionResult\n : A extends\n | \"left_click\"\n | \"right_click\"\n | \"middle_click\"\n | \"double_click\"\n | \"triple_click\"\n | \"left_click_drag\"\n | \"mouse_move\"\n | \"left_mouse_down\"\n | \"left_mouse_up\"\n | \"scroll\"\n ? PointerActionResult<A>\n : ActionBase<A>;\n};\n\n/** What `act()` returns, discriminated on `action`. */\nexport type ActionResult = ActionResultMap[ActionName];\n\n/** Parameters are optional only for actions that take none. */\nexport type ActArgs<A extends ActionName> = A extends\n | \"screenshot\"\n | \"cursor_position\"\n | \"left_mouse_down\"\n | \"left_mouse_up\"\n ? [params?: ActParamsMap[A]]\n : A extends \"left_click\" | \"right_click\" | \"middle_click\" | \"double_click\" | \"triple_click\"\n ? [params?: ActParamsMap[A]]\n : [params: ActParamsMap[A]];\n\nexport class InvalidActionInputError extends MiosaError {\n constructor(action: string, message: string) {\n super(`${action}: ${message}`, 0, \"INVALID_ACTION_INPUT\", { action }, undefined, false);\n this.name = \"InvalidActionInputError\";\n }\n}\n\nfunction point(action: string, value: Coordinate | undefined, field: string): [number, number] {\n if (\n !value ||\n value.length !== 2 ||\n !Number.isFinite(value[0]) ||\n !Number.isFinite(value[1])\n ) {\n throw new InvalidActionInputError(action, `${field} must be [x, y]`);\n }\n return [Math.round(value[0] as number), Math.round(value[1] as number)];\n}\n\n/** Width and height from a PNG's IHDR chunk; `[0, 0]` for anything else. */\nexport function pngSize(bytes: Uint8Array): [number, number] {\n if (bytes.length < 24 || bytes[1] !== 0x50 || bytes[2] !== 0x4e || bytes[3] !== 0x47) return [0, 0];\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n return [view.getUint32(16), view.getUint32(20)];\n}\n\nexport function toBase64(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString(\"base64\");\n}\n\nfunction screenshotResult<A extends \"screenshot\" | \"zoom\">(\n action: A,\n bytes: Uint8Array,\n started: number,\n): ScreenshotActionResult<A> {\n const [width, height] = pngSize(bytes);\n return {\n ok: true,\n action,\n durationMs: Date.now() - started,\n imageBase64: toBase64(bytes),\n mediaType: \"image/png\",\n width,\n height,\n takenAt: new Date().toISOString(),\n };\n}\n\nasync function withModifier(desktop: Desktop, modifier: string | undefined, run: () => Promise<unknown>): Promise<void> {\n if (!modifier) {\n await run();\n return;\n }\n await desktop.keyDown(modifier);\n try {\n await run();\n } finally {\n await desktop.keyUp(modifier);\n }\n}\n\nconst sleep = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\n/** Run one action against a desktop. */\nexport async function performAction<A extends ActionName>(\n desktop: Desktop,\n action: A,\n ...args: ActArgs<A>\n): Promise<ActionResultMap[A]> {\n const started = Date.now();\n const params = (args[0] ?? {}) as Record<string, unknown>;\n // The switch below builds exactly the shape ActionResultMap names for each action.\n const done = (fields: Record<string, unknown>): ActionResultMap[A] =>\n ({ ok: true, durationMs: Date.now() - started, ...fields }) as unknown as ActionResultMap[A];\n\n const clickAt = async (button: \"left\" | \"right\" | \"middle\" | \"double\" | \"triple\"): Promise<ActionResultMap[A]> => {\n const where = params[\"coordinate\"]\n ? point(action, params[\"coordinate\"] as Coordinate, \"coordinate\")\n : await desktop.cursor().then((c): [number, number] => [c.x, c.y]);\n await withModifier(desktop, params[\"text\"] as string | undefined, async () => {\n if (button === \"double\") await desktop.doubleClick(where[0], where[1]);\n else if (button === \"triple\") {\n await desktop.click(where[0], where[1], \"left\");\n await desktop.doubleClick(where[0], where[1]);\n } else await desktop.click(where[0], where[1], button);\n });\n return done({ action, coordinate: where });\n };\n\n switch (action) {\n case \"screenshot\":\n return screenshotResult(\"screenshot\", await desktop.screenshot(), started) as unknown as ActionResultMap[A];\n case \"zoom\": {\n const region = params[\"region\"] as readonly number[] | undefined;\n if (!region || region.length !== 4 || !region.every(Number.isFinite)) {\n throw new InvalidActionInputError(action, \"region must be [x1, y1, x2, y2]\");\n }\n const [x1, y1, x2, y2] = region as [number, number, number, number];\n if (x2 <= x1 || y2 <= y1) throw new InvalidActionInputError(action, \"region must have positive width and height\");\n const bytes = await desktop.screenshotRegion(Math.round(x1), Math.round(y1), Math.round(x2 - x1), Math.round(y2 - y1));\n return screenshotResult(\"zoom\", bytes, started) as unknown as ActionResultMap[A];\n }\n case \"cursor_position\": {\n const cursor = await desktop.cursor();\n return done({ action, x: cursor.x, y: cursor.y });\n }\n case \"left_click\":\n return clickAt(\"left\");\n case \"right_click\":\n return clickAt(\"right\");\n case \"middle_click\":\n return clickAt(\"middle\");\n case \"double_click\":\n return clickAt(\"double\");\n case \"triple_click\":\n return clickAt(\"triple\");\n case \"left_click_drag\": {\n const from = point(action, params[\"start_coordinate\"] as Coordinate, \"start_coordinate\");\n const to = point(action, params[\"coordinate\"] as Coordinate, \"coordinate\");\n await withModifier(desktop, params[\"text\"] as string | undefined, () => desktop.drag(from[0], from[1], to[0], to[1]));\n return done({ action, coordinate: to });\n }\n case \"mouse_move\": {\n const to = point(action, params[\"coordinate\"] as Coordinate, \"coordinate\");\n await desktop.moveMouse(to[0], to[1]);\n return done({ action, coordinate: to });\n }\n case \"left_mouse_down\":\n case \"left_mouse_up\": {\n const cursor = await desktop.cursor();\n if (action === \"left_mouse_down\") await desktop.mouseDown(cursor.x, cursor.y, \"left\");\n else await desktop.mouseUp(cursor.x, cursor.y, \"left\");\n return done({ action, coordinate: [cursor.x, cursor.y] as [number, number] });\n }\n case \"scroll\": {\n const direction = params[\"scroll_direction\"] as ActParamsMap[\"scroll\"][\"scroll_direction\"] | undefined;\n const amount = params[\"scroll_amount\"] as number | undefined;\n if (!direction || ![\"up\", \"down\", \"left\", \"right\"].includes(direction)) {\n throw new InvalidActionInputError(action, \"scroll_direction must be up, down, left or right\");\n }\n if (typeof amount !== \"number\" || !Number.isFinite(amount) || amount < 0) {\n throw new InvalidActionInputError(action, \"scroll_amount must be a non-negative number\");\n }\n const where = params[\"coordinate\"]\n ? point(action, params[\"coordinate\"] as Coordinate, \"coordinate\")\n : await desktop.cursor().then((c): [number, number] => [c.x, c.y]);\n await withModifier(desktop, params[\"text\"] as string | undefined, () =>\n desktop.scroll(direction, amount, where[0], where[1]),\n );\n return done({ action, coordinate: where });\n }\n case \"type\": {\n const text = params[\"text\"];\n if (typeof text !== \"string\") throw new InvalidActionInputError(action, \"text is required\");\n await desktop.type(text);\n return done({ action });\n }\n case \"key\": {\n const text = params[\"text\"];\n if (typeof text !== \"string\" || text === \"\") throw new InvalidActionInputError(action, \"text is required\");\n const repeat = typeof params[\"repeat\"] === \"number\" ? Math.max(1, Math.floor(params[\"repeat\"])) : 1;\n for (let i = 0; i < repeat; i += 1) await desktop.key(text);\n return done({ action });\n }\n case \"hold_key\": {\n const text = params[\"text\"];\n const duration = params[\"duration\"];\n if (typeof text !== \"string\" || text === \"\") throw new InvalidActionInputError(action, \"text is required\");\n if (typeof duration !== \"number\" || !Number.isFinite(duration) || duration < 0) {\n throw new InvalidActionInputError(action, \"duration must be a non-negative number of seconds\");\n }\n await desktop.keyDown(text);\n try {\n await sleep(duration * 1000);\n } finally {\n await desktop.keyUp(text);\n }\n return done({ action });\n }\n case \"wait\": {\n const duration = params[\"duration\"];\n if (typeof duration !== \"number\" || !Number.isFinite(duration) || duration < 0) {\n throw new InvalidActionInputError(action, \"duration must be a non-negative number of seconds\");\n }\n await desktop.wait(duration);\n return done({ action });\n }\n default: {\n const unknown: never = action;\n throw new InvalidActionInputError(String(unknown), \"unknown action\");\n }\n }\n}\n\n/**\n * `performAction` for callers that hold the action name and parameters as\n * data (a model's tool call) rather than as literals. Parameters are checked\n * at run time and a bad one raises {@link InvalidActionInputError}.\n */\nexport function performActionDynamic(\n desktop: Desktop,\n action: ActionName,\n params: Record<string, unknown> = {},\n): Promise<ActionResult> {\n const run = performAction as (d: Desktop, a: ActionName, p: Record<string, unknown>) => Promise<ActionResult>;\n return run(desktop, action, params);\n}\n"]}
|