@finalai/final-agent-provider 0.10.1 → 0.11.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.
Files changed (159) hide show
  1. package/HOSTING.md +334 -245
  2. package/README.md +126 -40
  3. package/WORKSPACE-EGRESS.md +11 -11
  4. package/dist/modules/catalog.d.mts +9 -0
  5. package/dist/modules/catalog.mjs +21 -0
  6. package/dist/modules/catalog.mjs.map +7 -0
  7. package/dist/modules/harnesses/acp-agent.d.mts +4 -0
  8. package/dist/modules/harnesses/acp-agent.mjs +35 -0
  9. package/dist/modules/harnesses/acp-agent.mjs.map +7 -0
  10. package/dist/modules/harnesses/adapters.d.mts +7 -0
  11. package/dist/modules/harnesses/adapters.mjs +74 -0
  12. package/dist/modules/harnesses/adapters.mjs.map +7 -0
  13. package/dist/modules/harnesses/claude-code.d.mts +14 -0
  14. package/dist/modules/harnesses/claude-code.mjs +79 -0
  15. package/dist/modules/harnesses/claude-code.mjs.map +7 -0
  16. package/dist/modules/harnesses/codex.d.mts +12 -0
  17. package/dist/modules/harnesses/codex.mjs +90 -0
  18. package/dist/modules/harnesses/codex.mjs.map +7 -0
  19. package/dist/modules/harnesses/config-fields.d.mts +98 -57
  20. package/dist/modules/harnesses/config-fields.mjs +58 -35
  21. package/dist/modules/harnesses/config-fields.mjs.map +3 -3
  22. package/dist/modules/harnesses/definitions.d.mts +3 -0
  23. package/dist/modules/harnesses/definitions.mjs +21 -0
  24. package/dist/modules/harnesses/definitions.mjs.map +7 -0
  25. package/dist/modules/harnesses/fidelity.d.mts +1 -1
  26. package/dist/modules/harnesses/fidelity.mjs +17 -14
  27. package/dist/modules/harnesses/fidelity.mjs.map +2 -2
  28. package/dist/modules/harnesses/final.d.mts +12 -0
  29. package/dist/modules/harnesses/final.mjs +70 -0
  30. package/dist/modules/harnesses/final.mjs.map +7 -0
  31. package/dist/modules/harnesses/index.d.mts +13 -12
  32. package/dist/modules/harnesses/index.mjs +86 -45
  33. package/dist/modules/harnesses/index.mjs.map +3 -3
  34. package/dist/modules/harnesses/names.d.mts +43 -0
  35. package/dist/modules/harnesses/names.mjs +59 -0
  36. package/dist/modules/harnesses/names.mjs.map +7 -0
  37. package/dist/modules/harnesses/nanocode-claude.d.mts +18 -0
  38. package/dist/modules/harnesses/nanocode-claude.mjs +101 -0
  39. package/dist/modules/harnesses/nanocode-claude.mjs.map +7 -0
  40. package/dist/modules/harnesses/nanocode-codex.d.mts +13 -0
  41. package/dist/modules/harnesses/nanocode-codex.mjs +64 -0
  42. package/dist/modules/harnesses/nanocode-codex.mjs.map +7 -0
  43. package/dist/modules/harnesses/pi.d.mts +12 -0
  44. package/dist/modules/harnesses/pi.mjs +71 -0
  45. package/dist/modules/harnesses/pi.mjs.map +7 -0
  46. package/dist/modules/integrations.d.mts +9 -0
  47. package/dist/modules/integrations.mjs +29 -0
  48. package/dist/modules/integrations.mjs.map +7 -0
  49. package/dist/modules/provider/general.bundle.d.mts +1 -0
  50. package/dist/modules/provider/general.bundle.mjs +5 -0
  51. package/dist/modules/provider/general.bundle.mjs.map +7 -0
  52. package/dist/modules/provider/general.d.mts +11 -0
  53. package/dist/modules/provider/general.mjs +130 -0
  54. package/dist/modules/provider/general.mjs.map +7 -0
  55. package/dist/modules/provider/index.d.mts +3 -0
  56. package/dist/modules/provider/index.mjs +13 -0
  57. package/dist/modules/provider/index.mjs.map +7 -0
  58. package/dist/modules/sandboxes/access.d.mts +34 -0
  59. package/dist/modules/sandboxes/access.mjs +15 -0
  60. package/dist/modules/sandboxes/access.mjs.map +7 -0
  61. package/dist/modules/sandboxes/computer.d.mts +24 -51
  62. package/dist/modules/sandboxes/computer.mjs +523 -888
  63. package/dist/modules/sandboxes/computer.mjs.map +3 -3
  64. package/dist/modules/sandboxes/computers-api.d.mts +3 -2
  65. package/dist/modules/sandboxes/computers-api.mjs +2 -4
  66. package/dist/modules/sandboxes/computers-api.mjs.map +2 -2
  67. package/dist/modules/sandboxes/device-api.d.mts +4 -3
  68. package/dist/modules/sandboxes/device-api.mjs +2 -4
  69. package/dist/modules/sandboxes/device-api.mjs.map +2 -2
  70. package/dist/modules/sandboxes/device.d.mts +6 -6
  71. package/dist/modules/sandboxes/device.mjs +126 -121
  72. package/dist/modules/sandboxes/device.mjs.map +3 -3
  73. package/dist/modules/sandboxes/egress.d.mts +10 -9
  74. package/dist/modules/sandboxes/egress.mjs +73 -56
  75. package/dist/modules/sandboxes/egress.mjs.map +2 -2
  76. package/dist/modules/sandboxes/environment.d.mts +35 -269
  77. package/dist/modules/sandboxes/environment.mjs +27 -104
  78. package/dist/modules/sandboxes/environment.mjs.map +3 -3
  79. package/dist/modules/sandboxes/index.d.mts +9 -69
  80. package/dist/modules/sandboxes/index.mjs +35 -95
  81. package/dist/modules/sandboxes/index.mjs.map +3 -3
  82. package/dist/modules/sandboxes/local.d.mts +28 -0
  83. package/dist/modules/sandboxes/local.mjs +499 -0
  84. package/dist/modules/sandboxes/local.mjs.map +7 -0
  85. package/dist/modules/sandboxes/session.d.mts +0 -3
  86. package/dist/modules/sandboxes/session.mjs +2 -22
  87. package/dist/modules/sandboxes/session.mjs.map +2 -2
  88. package/dist/modules/sandboxes/testing/fake-machine.mjs +0 -28
  89. package/dist/modules/sandboxes/testing/fake-machine.mjs.map +2 -2
  90. package/package.json +76 -104
  91. package/dist/modules/connections.d.mts +0 -11
  92. package/dist/modules/connections.mjs +0 -16
  93. package/dist/modules/connections.mjs.map +0 -7
  94. package/dist/modules/harnesses/acp-describe.d.mts +0 -20
  95. package/dist/modules/harnesses/acp-describe.mjs +0 -110
  96. package/dist/modules/harnesses/acp-describe.mjs.map +0 -7
  97. package/dist/modules/harnesses/local-stdio.d.mts +0 -47
  98. package/dist/modules/harnesses/local-stdio.mjs +0 -41
  99. package/dist/modules/harnesses/local-stdio.mjs.map +0 -7
  100. package/dist/modules/harnesses/remote-acp.d.mts +0 -76
  101. package/dist/modules/harnesses/remote-acp.mjs +0 -83
  102. package/dist/modules/harnesses/remote-acp.mjs.map +0 -7
  103. package/dist/modules/harnesses/remote-claude-code.d.mts +0 -88
  104. package/dist/modules/harnesses/remote-claude-code.mjs +0 -113
  105. package/dist/modules/harnesses/remote-claude-code.mjs.map +0 -7
  106. package/dist/modules/harnesses/remote-client-tls.d.mts +0 -35
  107. package/dist/modules/harnesses/remote-client-tls.mjs +0 -37
  108. package/dist/modules/harnesses/remote-client-tls.mjs.map +0 -7
  109. package/dist/modules/harnesses/remote-codex.d.mts +0 -98
  110. package/dist/modules/harnesses/remote-codex.mjs +0 -128
  111. package/dist/modules/harnesses/remote-codex.mjs.map +0 -7
  112. package/dist/modules/harnesses/remote-pi.d.mts +0 -78
  113. package/dist/modules/harnesses/remote-pi.mjs +0 -104
  114. package/dist/modules/harnesses/remote-pi.mjs.map +0 -7
  115. package/dist/modules/harnesses/remote-url.d.mts +0 -5
  116. package/dist/modules/harnesses/remote-url.mjs +0 -19
  117. package/dist/modules/harnesses/remote-url.mjs.map +0 -7
  118. package/dist/modules/harnesses/serverless-final.d.mts +0 -63
  119. package/dist/modules/harnesses/serverless-final.mjs +0 -88
  120. package/dist/modules/harnesses/serverless-final.mjs.map +0 -7
  121. package/dist/modules/harnesses/serverless-nanocode-claude.d.mts +0 -64
  122. package/dist/modules/harnesses/serverless-nanocode-claude.mjs +0 -105
  123. package/dist/modules/harnesses/serverless-nanocode-claude.mjs.map +0 -7
  124. package/dist/modules/harnesses/serverless-nanocode-codex.d.mts +0 -66
  125. package/dist/modules/harnesses/serverless-nanocode-codex.mjs +0 -113
  126. package/dist/modules/harnesses/serverless-nanocode-codex.mjs.map +0 -7
  127. package/dist/modules/harnesses/serverless-pi.d.mts +0 -64
  128. package/dist/modules/harnesses/serverless-pi.mjs +0 -98
  129. package/dist/modules/harnesses/serverless-pi.mjs.map +0 -7
  130. package/dist/modules/runtime/index.d.mts +0 -7
  131. package/dist/modules/runtime/index.mjs +0 -18
  132. package/dist/modules/runtime/index.mjs.map +0 -7
  133. package/dist/modules/runtime/local-stdio.d.mts +0 -10
  134. package/dist/modules/runtime/local-stdio.mjs +0 -106
  135. package/dist/modules/runtime/local-stdio.mjs.map +0 -7
  136. package/dist/modules/runtime/remote-acp.d.mts +0 -16
  137. package/dist/modules/runtime/remote-acp.mjs +0 -152
  138. package/dist/modules/runtime/remote-acp.mjs.map +0 -7
  139. package/dist/modules/runtime/remote-claude-code.d.mts +0 -5
  140. package/dist/modules/runtime/remote-claude-code.mjs +0 -47
  141. package/dist/modules/runtime/remote-claude-code.mjs.map +0 -7
  142. package/dist/modules/runtime/remote-codex.d.mts +0 -5
  143. package/dist/modules/runtime/remote-codex.mjs +0 -47
  144. package/dist/modules/runtime/remote-codex.mjs.map +0 -7
  145. package/dist/modules/runtime/remote-host.d.mts +0 -127
  146. package/dist/modules/runtime/remote-host.mjs +0 -387
  147. package/dist/modules/runtime/remote-host.mjs.map +0 -7
  148. package/dist/modules/runtime/remote-pi.d.mts +0 -5
  149. package/dist/modules/runtime/remote-pi.mjs +0 -44
  150. package/dist/modules/runtime/remote-pi.mjs.map +0 -7
  151. package/dist/modules/sandboxes/guide.d.mts +0 -35
  152. package/dist/modules/sandboxes/guide.mjs +0 -119
  153. package/dist/modules/sandboxes/guide.mjs.map +0 -7
  154. package/dist/modules/sandboxes/workspace-setup.d.mts +0 -42
  155. package/dist/modules/sandboxes/workspace-setup.mjs +0 -242
  156. package/dist/modules/sandboxes/workspace-setup.mjs.map +0 -7
  157. package/dist/modules/testing/harness.d.mts +0 -9
  158. package/dist/modules/testing/harness.mjs +0 -123
  159. package/dist/modules/testing/harness.mjs.map +0 -7
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../src/harnesses/serverless-pi.ts"],
4
- "sourcesContent": ["import {\n AcpTransport,\n BaseCapability,\n BaseToolProvision,\n CredentialDelivery,\n HarnessTrustClass,\n InferenceCredentialKind,\n McpTransportKind,\n PromptWhileRunning,\n SandboxWire,\n type HarnessDescriptionIface,\n type JsonSchema,\n} from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport {\n configObjectJson,\n credentialsJson,\n credentialsZod,\n harnessBinding,\n instructionsJson,\n instructionsZod,\n modelJson,\n modelZod,\n permissionModeJson,\n PiPermissionMode,\n reasoningJson,\n ReasoningLevel,\n reasoningZod,\n skillsJson,\n skillsZod,\n type CredentialsInput,\n type HarnessBindingOutputIface,\n type InstructionInput,\n type SkillInput,\n} from \"./config-fields.mjs\";\nimport { ModelVendor } from \"./model-reference.mjs\";\n\n// Pi (pi-mono) in a Durable Object per session in agent-harness-workers.\n\nexport const SPECIFIER = '@finalai/final-agent-provider/harnesses/serverless-pi';\n\nexport const PI_REASONING_LEVELS = [\n ReasoningLevel.None,\n ReasoningLevel.Minimal,\n ReasoningLevel.Low,\n ReasoningLevel.Medium,\n ReasoningLevel.High,\n] as const;\n\n// Pi's native tools, all executed on the bound target's handle.\nexport const PI_BASE_TOOLS: HarnessDescriptionIface['baseTools'] = {\n [BaseCapability.Shell]: { provision: BaseToolProvision.Bound, nativeTools: ['bash'] },\n [BaseCapability.Files]: {\n provision: BaseToolProvision.Bound,\n nativeTools: ['read', 'write', 'edit', 'grep', 'find', 'ls'],\n },\n};\n\nexport const serverlessPiConfigSchema = z.strictObject({\n model: modelZod().optional(),\n reasoning: reasoningZod(PI_REASONING_LEVELS).optional(),\n credentials: credentialsZod(),\n permissionMode: z.nativeEnum(PiPermissionMode).default(PiPermissionMode.Ask),\n instructions: instructionsZod(),\n skills: skillsZod(),\n});\n\nexport type ServerlessPiConfigIface = z.output<typeof serverlessPiConfigSchema>;\n\nexport const SERVERLESS_PI_CONFIG_JSON_SCHEMA: JsonSchema = configObjectJson({\n required: ['credentials'],\n title: 'Pi (serverless)',\n properties: {\n model: modelJson(),\n reasoning: reasoningJson(PI_REASONING_LEVELS),\n credentials: credentialsJson(),\n permissionMode: permissionModeJson(Object.values(PiPermissionMode), PiPermissionMode.Ask),\n instructions: instructionsJson(),\n skills: skillsJson(),\n },\n});\n\nexport const SERVERLESS_PI_DESCRIPTION: HarnessDescriptionIface = {\n configSchema: SERVERLESS_PI_CONFIG_JSON_SCHEMA,\n acp: {\n transports: [AcpTransport.Relay, AcpTransport.Ws],\n mcp: [McpTransportKind.Acp, McpTransportKind.Http],\n },\n baseTools: PI_BASE_TOOLS,\n consumes: [SandboxWire.HandleRpc],\n inference: {\n vendors: [ModelVendor.OpenRouter, ModelVendor.OpenAI, ModelVendor.Anthropic],\n kinds: [InferenceCredentialKind.ApiKey, InferenceCredentialKind.Platform],\n delivery: CredentialDelivery.PerRequest,\n },\n // Final runs these on its own Workers.\n trust: HarnessTrustClass.FirstParty,\n supports: { observe: true, resumeReplay: true, fork: false, authorMeta: true },\n // Measured (agent-harness-workers pi/engine.test.ts \"injects a prompt accepted while\n // running into the running work\"): a steer joins the running run. Across a lost\n // invocation an open ask is not re-raised with its id, so no disconnect survival yet.\n promptWhileRunning: PromptWhileRunning.Inject,\n sessionSurvivesDisconnect: false,\n};\n\nexport interface ServerlessPiConfigInputIface {\n model?: string;\n reasoning?: (typeof PI_REASONING_LEVELS)[number] | `${(typeof PI_REASONING_LEVELS)[number]}`;\n credentials: CredentialsInput;\n permissionMode?: PiPermissionMode | `${PiPermissionMode}`;\n instructions?: InstructionInput[];\n skills?: SkillInput[];\n}\n\nexport const serverlessPi = (config: ServerlessPiConfigInputIface): HarnessBindingOutputIface =>\n harnessBinding(SPECIFIER, config);\n"],
5
- "mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,YAAY,OAAO;AACnB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AACP,SAAS,mBAAmB;AAIrB,MAAM,YAAY;AAElB,MAAM,sBAAsB;AAAA,EACjC,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AACjB;AAGO,MAAM,gBAAsD;AAAA,EACjE,CAAC,eAAe,KAAK,GAAG,EAAE,WAAW,kBAAkB,OAAO,aAAa,CAAC,MAAM,EAAE;AAAA,EACpF,CAAC,eAAe,KAAK,GAAG;AAAA,IACtB,WAAW,kBAAkB;AAAA,IAC7B,aAAa,CAAC,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,IAAI;AAAA,EAC7D;AACF;AAEO,MAAM,2BAA2B,EAAE,aAAa;AAAA,EACrD,OAAO,SAAS,EAAE,SAAS;AAAA,EAC3B,WAAW,aAAa,mBAAmB,EAAE,SAAS;AAAA,EACtD,aAAa,eAAe;AAAA,EAC5B,gBAAgB,EAAE,WAAW,gBAAgB,EAAE,QAAQ,iBAAiB,GAAG;AAAA,EAC3E,cAAc,gBAAgB;AAAA,EAC9B,QAAQ,UAAU;AACpB,CAAC;AAIM,MAAM,mCAA+C,iBAAiB;AAAA,EAC3E,UAAU,CAAC,aAAa;AAAA,EACxB,OAAO;AAAA,EACP,YAAY;AAAA,IACV,OAAO,UAAU;AAAA,IACjB,WAAW,cAAc,mBAAmB;AAAA,IAC5C,aAAa,gBAAgB;AAAA,IAC7B,gBAAgB,mBAAmB,OAAO,OAAO,gBAAgB,GAAG,iBAAiB,GAAG;AAAA,IACxF,cAAc,iBAAiB;AAAA,IAC/B,QAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEM,MAAM,4BAAqD;AAAA,EAChE,cAAc;AAAA,EACd,KAAK;AAAA,IACH,YAAY,CAAC,aAAa,OAAO,aAAa,EAAE;AAAA,IAChD,KAAK,CAAC,iBAAiB,KAAK,iBAAiB,IAAI;AAAA,EACnD;AAAA,EACA,WAAW;AAAA,EACX,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,WAAW;AAAA,IACT,SAAS,CAAC,YAAY,YAAY,YAAY,QAAQ,YAAY,SAAS;AAAA,IAC3E,OAAO,CAAC,wBAAwB,QAAQ,wBAAwB,QAAQ;AAAA,IACxE,UAAU,mBAAmB;AAAA,EAC/B;AAAA;AAAA,EAEA,OAAO,kBAAkB;AAAA,EACzB,UAAU,EAAE,SAAS,MAAM,cAAc,MAAM,MAAM,OAAO,YAAY,KAAK;AAAA;AAAA;AAAA;AAAA,EAI7E,oBAAoB,mBAAmB;AAAA,EACvC,2BAA2B;AAC7B;AAWO,MAAM,eAAe,CAAC,WAC3B,eAAe,WAAW,MAAM;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- export { createLocalStdioHarness, type LocalStdioHarnessFactoryConfigIface, type LocalStdioHarnessIface, } from "./local-stdio.mjs";
2
- export { createRemoteAcpHarness, type RemoteAcpHarnessFactoryConfigIface, type RemoteAcpHarnessIface, } from "./remote-acp.mjs";
3
- export { createRemoteClaudeCodeHarness } from "./remote-claude-code.mjs";
4
- export { createRemoteCodexHarness } from "./remote-codex.mjs";
5
- export type { RemoteHarnessFactoryConfigIface, RemoteHarnessIface, RemoteOpenArgsIface, RemoteProgramConfigIface, } from "./remote-host.mjs";
6
- export { createRemotePiHarness } from "./remote-pi.mjs";
7
- export * from "../harnesses/index.mjs";
@@ -1,18 +0,0 @@
1
- import {
2
- createLocalStdioHarness
3
- } from "./local-stdio.mjs";
4
- import {
5
- createRemoteAcpHarness
6
- } from "./remote-acp.mjs";
7
- import { createRemoteClaudeCodeHarness } from "./remote-claude-code.mjs";
8
- import { createRemoteCodexHarness } from "./remote-codex.mjs";
9
- import { createRemotePiHarness } from "./remote-pi.mjs";
10
- export * from "../harnesses/index.mjs";
11
- export {
12
- createLocalStdioHarness,
13
- createRemoteAcpHarness,
14
- createRemoteClaudeCodeHarness,
15
- createRemoteCodexHarness,
16
- createRemotePiHarness
17
- };
18
- //# sourceMappingURL=index.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../src/runtime/index.ts"],
4
- "sourcesContent": ["export {\n createLocalStdioHarness,\n type LocalStdioHarnessFactoryConfigIface,\n type LocalStdioHarnessIface,\n} from \"./local-stdio.mjs\";\nexport {\n createRemoteAcpHarness,\n type RemoteAcpHarnessFactoryConfigIface,\n type RemoteAcpHarnessIface,\n} from \"./remote-acp.mjs\";\nexport { createRemoteClaudeCodeHarness } from \"./remote-claude-code.mjs\";\nexport { createRemoteCodexHarness } from \"./remote-codex.mjs\";\nexport type {\n RemoteHarnessFactoryConfigIface,\n RemoteHarnessIface,\n RemoteOpenArgsIface,\n RemoteProgramConfigIface,\n} from \"./remote-host.mjs\";\nexport { createRemotePiHarness } from \"./remote-pi.mjs\";\n\nexport * from \"../harnesses/index.mjs\";\n"],
5
- "mappings": "AAAA;AAAA,EACE;AAAA,OAGK;AACP;AAAA,EACE;AAAA,OAGK;AACP,SAAS,qCAAqC;AAC9C,SAAS,gCAAgC;AAOzC,SAAS,6BAA6B;AAEtC,cAAc;",
6
- "names": []
7
- }
@@ -1,10 +0,0 @@
1
- import { type HarnessIface } from '@finalai/agent-provider';
2
- export interface LocalStdioHarnessFactoryConfigIface {
3
- connectTimeoutMs?: number;
4
- processEnv?: Record<string, string | undefined>;
5
- now?: () => number;
6
- newId?: () => string;
7
- }
8
- export type LocalStdioHarnessIface = HarnessIface;
9
- export declare const createLocalStdioHarness: (config?: LocalStdioHarnessFactoryConfigIface) => LocalStdioHarnessIface;
10
- export * from "../harnesses/local-stdio.mjs";
@@ -1,106 +0,0 @@
1
- import { ndJsonStream } from "@agentclientprotocol/sdk/experimental/v2";
2
- import {
3
- AcpTransport,
4
- packageRef
5
- } from "@finalai/agent-provider";
6
- import { spawn } from "node:child_process";
7
- import { Writable } from "node:stream";
8
- import {
9
- DEFAULT_CONNECT_TIMEOUT_MS,
10
- describeFromInitialize,
11
- initializeOver
12
- } from "../harnesses/acp-describe.mjs";
13
- import { parseHarnessConfig } from "../harnesses/config-fields.mjs";
14
- import {
15
- LOCAL_STDIO_CONFIG_JSON_SCHEMA,
16
- LOCAL_STDIO_DESCRIPTION,
17
- SPECIFIER,
18
- localStdioConfigSchema
19
- } from "../harnesses/local-stdio.mjs";
20
- const readableToWeb = (readable) => new ReadableStream({
21
- start: (controller) => {
22
- readable.on("data", (chunk) => controller.enqueue(new Uint8Array(chunk)));
23
- readable.once("end", () => controller.close());
24
- readable.once("error", (error) => controller.error(error));
25
- },
26
- cancel: () => {
27
- readable.destroy();
28
- }
29
- });
30
- const createLocalStdioHarness = (config = {}) => {
31
- const now = config.now ?? Date.now;
32
- const connectTimeoutMs = config.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;
33
- const endpointFor = (raw, ref) => {
34
- const parsed = parseHarnessConfig({
35
- specifier: SPECIFIER,
36
- schema: localStdioConfigSchema,
37
- config: raw
38
- });
39
- return {
40
- ref,
41
- transport: AcpTransport.Stdio,
42
- command: parsed.command,
43
- args: parsed.args,
44
- env: parsed.env
45
- };
46
- };
47
- return {
48
- // With a binding: spawns the agent once, runs `initialize`, and derives the
49
- // description from it.
50
- describe: async (args) => {
51
- if (args == null) return LOCAL_STDIO_DESCRIPTION;
52
- const parsed = parseHarnessConfig({
53
- specifier: SPECIFIER,
54
- schema: localStdioConfigSchema,
55
- config: args.config
56
- });
57
- const child = spawn(parsed.command, parsed.args, {
58
- env: {
59
- PATH: config.processEnv?.["PATH"],
60
- HOME: config.processEnv?.["HOME"],
61
- LANG: config.processEnv?.["LANG"],
62
- TMPDIR: config.processEnv?.["TMPDIR"],
63
- ...parsed.env
64
- },
65
- stdio: ["pipe", "pipe", "inherit"]
66
- });
67
- const failure = Promise.withResolvers();
68
- child.once("error", failure.reject);
69
- failure.promise.catch(() => void 0);
70
- try {
71
- const stream = ndJsonStream(Writable.toWeb(child.stdin), readableToWeb(child.stdout));
72
- const response = await Promise.race([
73
- initializeOver({ stream, timeoutMs: connectTimeoutMs }),
74
- failure.promise
75
- ]);
76
- const described = describeFromInitialize({
77
- response,
78
- transports: [AcpTransport.Stdio],
79
- configSchema: LOCAL_STDIO_CONFIG_JSON_SCHEMA
80
- });
81
- return { ...described, supports: { ...described.supports, resumeReplay: false } };
82
- } finally {
83
- child.kill();
84
- }
85
- },
86
- open: async (args) => endpointFor(args.config, {
87
- harness: packageRef(SPECIFIER),
88
- harnessSessionRef: args.harnessSessionId,
89
- generation: 1
90
- }),
91
- // A respawned process has no state: generation mismatch → session/new.
92
- resume: async (args) => endpointFor(args.config, { ...args.ref, generation: args.ref.generation + 1 }),
93
- park: async () => void 0,
94
- close: async () => void 0,
95
- health: async () => ({
96
- ok: true,
97
- detail: "the process lives as long as the session service holds its ACP connection",
98
- checkedAt: new Date(now()).toISOString()
99
- })
100
- };
101
- };
102
- export * from "../harnesses/local-stdio.mjs";
103
- export {
104
- createLocalStdioHarness
105
- };
106
- //# sourceMappingURL=local-stdio.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../src/runtime/local-stdio.ts"],
4
- "sourcesContent": ["import { ndJsonStream } from '@agentclientprotocol/sdk/experimental/v2';\nimport {\n AcpTransport,\n packageRef,\n type HarnessEndpointIface,\n type HarnessHealthIface,\n type HarnessIface,\n type HarnessSessionRefIface,\n type JsonValue,\n} from '@finalai/agent-provider';\nimport { spawn } from 'node:child_process';\nimport { Writable, type Readable } from 'node:stream';\nimport {\n DEFAULT_CONNECT_TIMEOUT_MS,\n describeFromInitialize,\n initializeOver,\n} from \"../harnesses/acp-describe.mjs\";\nimport { parseHarnessConfig } from \"../harnesses/config-fields.mjs\";\nimport {\n LOCAL_STDIO_CONFIG_JSON_SCHEMA,\n LOCAL_STDIO_DESCRIPTION,\n SPECIFIER,\n localStdioConfigSchema,\n} from \"../harnesses/local-stdio.mjs\";\n\n// Readable.toWeb's stream/web type does not line up with the global ReadableStream the SDK takes.\nconst readableToWeb = (readable: Readable): ReadableStream<Uint8Array> =>\n new ReadableStream<Uint8Array>({\n start: (controller) => {\n readable.on('data', (chunk: Buffer) => controller.enqueue(new Uint8Array(chunk)));\n readable.once('end', () => controller.close());\n readable.once('error', (error) => controller.error(error));\n },\n cancel: () => {\n readable.destroy();\n },\n });\n\nexport interface LocalStdioHarnessFactoryConfigIface {\n connectTimeoutMs?: number;\n // Only explicitly supplied process configuration reaches the child.\n processEnv?: Record<string, string | undefined>;\n // Test seams.\n now?: () => number;\n newId?: () => string;\n}\n\nexport type LocalStdioHarnessIface = HarnessIface;\n\nexport const createLocalStdioHarness = (\n config: LocalStdioHarnessFactoryConfigIface = {},\n): LocalStdioHarnessIface => {\n const now = config.now ?? Date.now;\n const connectTimeoutMs = config.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;\n\n const endpointFor = (raw: JsonValue, ref: HarnessSessionRefIface): HarnessEndpointIface => {\n const parsed = parseHarnessConfig({\n specifier: SPECIFIER,\n schema: localStdioConfigSchema,\n config: raw,\n });\n return {\n ref,\n transport: AcpTransport.Stdio,\n command: parsed.command,\n args: parsed.args,\n env: parsed.env,\n };\n };\n\n return {\n // With a binding: spawns the agent once, runs `initialize`, and derives the\n // description from it.\n describe: async (args) => {\n if (args == null) return LOCAL_STDIO_DESCRIPTION;\n const parsed = parseHarnessConfig({\n specifier: SPECIFIER,\n schema: localStdioConfigSchema,\n config: args.config,\n });\n const child = spawn(parsed.command, parsed.args, {\n env: {\n PATH: config.processEnv?.['PATH'],\n HOME: config.processEnv?.['HOME'],\n LANG: config.processEnv?.['LANG'],\n TMPDIR: config.processEnv?.['TMPDIR'],\n ...parsed.env,\n },\n stdio: ['pipe', 'pipe', 'inherit'],\n });\n const failure = Promise.withResolvers<never>();\n child.once('error', failure.reject);\n failure.promise.catch(() => undefined);\n try {\n const stream = ndJsonStream(Writable.toWeb(child.stdin), readableToWeb(child.stdout));\n const response = await Promise.race([\n initializeOver({ stream, timeoutMs: connectTimeoutMs }),\n failure.promise,\n ]);\n const described = describeFromInitialize({\n response,\n transports: [AcpTransport.Stdio],\n configSchema: LOCAL_STDIO_CONFIG_JSON_SCHEMA,\n });\n // resume() respawns the process, so the agent's session state never\n // survives it (the generation moves and the session is recreated with\n // session/new), whatever the agent itself supports.\n return { ...described, supports: { ...described.supports, resumeReplay: false } };\n } finally {\n child.kill();\n }\n },\n open: async (args) =>\n endpointFor(args.config, {\n harness: packageRef(SPECIFIER),\n harnessSessionRef: args.harnessSessionId,\n generation: 1,\n }),\n // A respawned process has no state: generation mismatch \u2192 session/new.\n resume: async (args) =>\n endpointFor(args.config, { ...args.ref, generation: args.ref.generation + 1 }),\n park: async () => undefined,\n close: async () => undefined,\n health: async (): Promise<HarnessHealthIface> => ({\n ok: true,\n detail: 'the process lives as long as the session service holds its ACP connection',\n checkedAt: new Date(now()).toISOString(),\n }),\n };\n};\n\nexport * from \"../harnesses/local-stdio.mjs\";\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,16 +0,0 @@
1
- import { type WebSocketConstructor } from '@agentclientprotocol/sdk/experimental/ws-client';
2
- import { type HarnessClientTlsIface, type HarnessIface } from '@finalai/agent-provider';
3
- import type { LookupFunction } from 'node:net';
4
- export interface RemoteAcpHarnessFactoryConfigIface {
5
- WebSocket?: WebSocketConstructor;
6
- fetch?: typeof fetch;
7
- tlsFetch?: (tls: HarnessClientTlsIface) => typeof fetch;
8
- lookup?: LookupFunction;
9
- validateUrl?: (url: string) => Promise<void>;
10
- connectTimeoutMs?: number;
11
- now?: () => number;
12
- newId?: () => string;
13
- }
14
- export type RemoteAcpHarnessIface = HarnessIface;
15
- export declare const createRemoteAcpHarness: (config?: RemoteAcpHarnessFactoryConfigIface) => RemoteAcpHarnessIface;
16
- export * from "../harnesses/remote-acp.mjs";
@@ -1,152 +0,0 @@
1
- import { createHttpStream } from "@agentclientprotocol/sdk/experimental/http-client";
2
- import {
3
- createWebSocketStream
4
- } from "@agentclientprotocol/sdk/experimental/ws-client";
5
- import {
6
- AcpTransport,
7
- packageRef
8
- } from "@finalai/agent-provider";
9
- import {
10
- configureNodeClientWebSocket,
11
- createNodeClientTlsFetch
12
- } from "@finalai/websockets/node-client-tls";
13
- import WebSocket from "ws";
14
- import {
15
- DEFAULT_CONNECT_TIMEOUT_MS,
16
- describeFromInitialize,
17
- initializeOver
18
- } from "../harnesses/acp-describe.mjs";
19
- import { parseHarnessConfig } from "../harnesses/config-fields.mjs";
20
- import {
21
- HeaderValueKind,
22
- REMOTE_ACP_CONFIG_JSON_SCHEMA,
23
- REMOTE_ACP_DESCRIPTION,
24
- SPECIFIER,
25
- remoteAcpConfigSchema
26
- } from "../harnesses/remote-acp.mjs";
27
- import { resolveRemoteClientTls } from "../harnesses/remote-client-tls.mjs";
28
- import { formatRemoteRef, resolveSecretRef, transportForUrl } from "./remote-host.mjs";
29
- const resolveHeaders = async (args) => {
30
- const out = {};
31
- for (const [name, value] of Object.entries(args.headers)) {
32
- if (value.kind === HeaderValueKind.Literal) {
33
- out[name] = value.value;
34
- continue;
35
- }
36
- if (args.secrets == null)
37
- throw new Error(`${SPECIFIER}: header '${name}' needs secrets to resolve`);
38
- out[name] = await resolveSecretRef({
39
- specifier: SPECIFIER,
40
- field: `header '${name}'`,
41
- ref: value.ref,
42
- secrets: args.secrets
43
- });
44
- }
45
- return out;
46
- };
47
- const createRemoteAcpHarness = (config = {}) => {
48
- const now = config.now ?? Date.now;
49
- const connectTimeoutMs = config.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;
50
- const socketFor = (tls) => {
51
- if (tls == null && config.lookup == null) return config.WebSocket;
52
- return configureNodeClientWebSocket({
53
- constructor: config.WebSocket ?? WebSocket,
54
- tls,
55
- lookup: config.lookup
56
- });
57
- };
58
- const streamFor = (url, headers, tls) => transportForUrl(url) === AcpTransport.Ws ? createWebSocketStream(url, {
59
- headers,
60
- WebSocket: socketFor(tls),
61
- cookies: "omit"
62
- }) : createHttpStream(url, {
63
- headers,
64
- fetch: tls == null ? config.fetch : config.tlsFetch?.(tls) ?? createNodeClientTlsFetch({
65
- tls,
66
- lookup: config.lookup,
67
- validateUrl: config.validateUrl
68
- }),
69
- cookies: "omit"
70
- });
71
- const endpointFor = async (args) => {
72
- const parsed = parseHarnessConfig({
73
- specifier: SPECIFIER,
74
- schema: remoteAcpConfigSchema,
75
- config: args.open.config
76
- });
77
- await config.validateUrl?.(parsed.url);
78
- const headers = await resolveHeaders({ headers: parsed.headers, secrets: args.open.secrets });
79
- const tls = await resolveRemoteClientTls({
80
- config: parsed.tls,
81
- secrets: args.open.secrets,
82
- url: parsed.url
83
- });
84
- return { ref: args.ref, transport: transportForUrl(parsed.url), url: parsed.url, headers, tls };
85
- };
86
- return {
87
- // Without a binding nothing about the remote is known; with one, the
88
- // description comes from the remote's own `initialize`.
89
- describe: async (args) => {
90
- if (args == null) return REMOTE_ACP_DESCRIPTION;
91
- const parsed = parseHarnessConfig({
92
- specifier: SPECIFIER,
93
- schema: remoteAcpConfigSchema,
94
- config: args.config
95
- });
96
- await config.validateUrl?.(parsed.url);
97
- const headers = await resolveHeaders({ headers: parsed.headers, secrets: args.secrets });
98
- const tls = await resolveRemoteClientTls({
99
- config: parsed.tls,
100
- secrets: args.secrets,
101
- url: parsed.url
102
- });
103
- const response = await initializeOver({
104
- stream: streamFor(parsed.url, headers, tls),
105
- timeoutMs: connectTimeoutMs
106
- });
107
- const description = describeFromInitialize({
108
- response,
109
- transports: [transportForUrl(parsed.url)],
110
- configSchema: REMOTE_ACP_CONFIG_JSON_SCHEMA
111
- });
112
- return {
113
- ...description,
114
- promptWhileRunning: parsed.promptWhileRunning ?? description.promptWhileRunning
115
- };
116
- },
117
- open: async (args) => {
118
- const parsed = parseHarnessConfig({
119
- specifier: SPECIFIER,
120
- schema: remoteAcpConfigSchema,
121
- config: args.config
122
- });
123
- return endpointFor({
124
- open: args,
125
- ref: {
126
- harness: packageRef(SPECIFIER),
127
- harnessSessionRef: formatRemoteRef({
128
- id: args.harnessSessionId,
129
- url: parsed.url,
130
- // A plain ACP agent has no health route to authorize.
131
- healthToken: null
132
- }),
133
- generation: 1
134
- }
135
- });
136
- },
137
- resume: async (args) => endpointFor({ open: args, ref: args.ref }),
138
- park: async () => void 0,
139
- close: async () => void 0,
140
- // A plain ACP agent has no health route; liveness is the ACP connection itself.
141
- health: async () => ({
142
- ok: true,
143
- detail: "not probed: liveness is the ACP connection",
144
- checkedAt: new Date(now()).toISOString()
145
- })
146
- };
147
- };
148
- export * from "../harnesses/remote-acp.mjs";
149
- export {
150
- createRemoteAcpHarness
151
- };
152
- //# sourceMappingURL=remote-acp.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../src/runtime/remote-acp.ts"],
4
- "sourcesContent": ["import { createHttpStream } from '@agentclientprotocol/sdk/experimental/http-client';\nimport type { AnyWireMessage, Stream } from '@agentclientprotocol/sdk/experimental/v2';\nimport {\n createWebSocketStream,\n type WebSocketConstructor,\n} from '@agentclientprotocol/sdk/experimental/ws-client';\nimport {\n AcpTransport,\n packageRef,\n type HarnessClientTlsIface,\n type HarnessEndpointIface,\n type HarnessHealthIface,\n type HarnessIface,\n type HarnessSessionRefIface,\n type OpenHarnessSessionArgsIface,\n type SecretReaderIface,\n} from '@finalai/agent-provider';\nimport {\n configureNodeClientWebSocket,\n createNodeClientTlsFetch,\n} from '@finalai/websockets/node-client-tls';\nimport type { LookupFunction } from 'node:net';\nimport WebSocket from 'ws';\nimport {\n DEFAULT_CONNECT_TIMEOUT_MS,\n describeFromInitialize,\n initializeOver,\n} from \"../harnesses/acp-describe.mjs\";\nimport { parseHarnessConfig } from \"../harnesses/config-fields.mjs\";\nimport {\n HeaderValueKind,\n REMOTE_ACP_CONFIG_JSON_SCHEMA,\n REMOTE_ACP_DESCRIPTION,\n type RemoteAcpConfigIface,\n SPECIFIER,\n remoteAcpConfigSchema,\n} from \"../harnesses/remote-acp.mjs\";\nimport { resolveRemoteClientTls } from \"../harnesses/remote-client-tls.mjs\";\nimport { formatRemoteRef, resolveSecretRef, transportForUrl } from \"./remote-host.mjs\";\n\nexport interface RemoteAcpHarnessFactoryConfigIface {\n // Node needs a constructor that sends headers (`ws`'s WebSocket); defaults to globalThis.WebSocket.\n WebSocket?: WebSocketConstructor;\n fetch?: typeof fetch;\n tlsFetch?: (tls: HarnessClientTlsIface) => typeof fetch;\n lookup?: LookupFunction;\n validateUrl?: (url: string) => Promise<void>;\n connectTimeoutMs?: number;\n // Test seams.\n now?: () => number;\n newId?: () => string;\n}\n\nexport type RemoteAcpHarnessIface = HarnessIface;\n\nconst resolveHeaders = async (args: {\n headers: RemoteAcpConfigIface['headers'];\n secrets: SecretReaderIface | undefined;\n}): Promise<Record<string, string>> => {\n const out: Record<string, string> = {};\n for (const [name, value] of Object.entries(args.headers)) {\n if (value.kind === HeaderValueKind.Literal) {\n out[name] = value.value;\n continue;\n }\n if (args.secrets == null)\n throw new Error(`${SPECIFIER}: header '${name}' needs secrets to resolve`);\n out[name] = await resolveSecretRef({\n specifier: SPECIFIER,\n field: `header '${name}'`,\n ref: value.ref,\n secrets: args.secrets,\n });\n }\n return out;\n};\n\nexport const createRemoteAcpHarness = (\n config: RemoteAcpHarnessFactoryConfigIface = {},\n): RemoteAcpHarnessIface => {\n const now = config.now ?? Date.now;\n const connectTimeoutMs = config.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;\n\n const socketFor = (tls: HarnessClientTlsIface | undefined): WebSocketConstructor | undefined => {\n if (tls == null && config.lookup == null) return config.WebSocket;\n return configureNodeClientWebSocket({\n constructor: config.WebSocket ?? WebSocket,\n tls,\n lookup: config.lookup,\n });\n };\n const streamFor = (\n url: string,\n headers: Record<string, string>,\n tls: HarnessClientTlsIface | undefined,\n ): Stream =>\n transportForUrl(url) === AcpTransport.Ws\n ? createWebSocketStream<AnyWireMessage>(url, {\n headers,\n WebSocket: socketFor(tls),\n cookies: 'omit',\n })\n : createHttpStream(url, {\n headers,\n fetch:\n tls == null\n ? config.fetch\n : (config.tlsFetch?.(tls) ??\n createNodeClientTlsFetch({\n tls,\n lookup: config.lookup,\n validateUrl: config.validateUrl,\n })),\n cookies: 'omit',\n });\n\n const endpointFor = async (args: {\n open: OpenHarnessSessionArgsIface;\n ref: HarnessSessionRefIface;\n }): Promise<HarnessEndpointIface> => {\n const parsed = parseHarnessConfig({\n specifier: SPECIFIER,\n schema: remoteAcpConfigSchema,\n config: args.open.config,\n });\n await config.validateUrl?.(parsed.url);\n const headers = await resolveHeaders({ headers: parsed.headers, secrets: args.open.secrets });\n const tls = await resolveRemoteClientTls({\n config: parsed.tls,\n secrets: args.open.secrets,\n url: parsed.url,\n });\n return { ref: args.ref, transport: transportForUrl(parsed.url), url: parsed.url, headers, tls };\n };\n\n return {\n // Without a binding nothing about the remote is known; with one, the\n // description comes from the remote's own `initialize`.\n describe: async (args) => {\n if (args == null) return REMOTE_ACP_DESCRIPTION;\n const parsed = parseHarnessConfig({\n specifier: SPECIFIER,\n schema: remoteAcpConfigSchema,\n config: args.config,\n });\n await config.validateUrl?.(parsed.url);\n const headers = await resolveHeaders({ headers: parsed.headers, secrets: args.secrets });\n const tls = await resolveRemoteClientTls({\n config: parsed.tls,\n secrets: args.secrets,\n url: parsed.url,\n });\n const response = await initializeOver({\n stream: streamFor(parsed.url, headers, tls),\n timeoutMs: connectTimeoutMs,\n });\n const description = describeFromInitialize({\n response,\n transports: [transportForUrl(parsed.url)],\n configSchema: REMOTE_ACP_CONFIG_JSON_SCHEMA,\n });\n return {\n ...description,\n promptWhileRunning: parsed.promptWhileRunning ?? description.promptWhileRunning,\n };\n },\n open: async (args) => {\n const parsed = parseHarnessConfig({\n specifier: SPECIFIER,\n schema: remoteAcpConfigSchema,\n config: args.config,\n });\n return endpointFor({\n open: args,\n ref: {\n harness: packageRef(SPECIFIER),\n harnessSessionRef: formatRemoteRef({\n id: args.harnessSessionId,\n url: parsed.url,\n // A plain ACP agent has no health route to authorize.\n healthToken: null,\n }),\n generation: 1,\n },\n });\n },\n resume: async (args) => endpointFor({ open: args, ref: args.ref }),\n park: async () => undefined,\n close: async () => undefined,\n // A plain ACP agent has no health route; liveness is the ACP connection itself.\n health: async (): Promise<HarnessHealthIface> => ({\n ok: true,\n detail: 'not probed: liveness is the ACP connection',\n checkedAt: new Date(now()).toISOString(),\n }),\n };\n};\n\nexport * from \"../harnesses/remote-acp.mjs\";\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,5 +0,0 @@
1
- import { type JsonObject, type OpenHarnessSessionArgsIface } from '@finalai/agent-provider';
2
- import { type RemoteHarnessFactoryConfigIface, type RemoteHarnessIface } from "./remote-host.mjs";
3
- export declare const programConfig: (args: OpenHarnessSessionArgsIface) => JsonObject;
4
- export declare const createRemoteClaudeCodeHarness: (config?: RemoteHarnessFactoryConfigIface) => RemoteHarnessIface;
5
- export * from "../harnesses/remote-claude-code.mjs";
@@ -1,47 +0,0 @@
1
- import {} from "@finalai/agent-provider";
2
- import { parseHarnessConfig, toJsonObject } from "../harnesses/config-fields.mjs";
3
- import {
4
- REMOTE_CLAUDE_CODE_DESCRIPTION,
5
- remoteClaudeCodeConfigSchema,
6
- SPECIFIER
7
- } from "../harnesses/remote-claude-code.mjs";
8
- import {
9
- buildRemoteProgramConfig,
10
- createRemoteHarness,
11
- RemoteProgram
12
- } from "./remote-host.mjs";
13
- const spec = {
14
- specifier: SPECIFIER,
15
- program: RemoteProgram.ClaudeCode,
16
- description: REMOTE_CLAUDE_CODE_DESCRIPTION,
17
- settings: (raw) => {
18
- const parsed = parseHarnessConfig({
19
- specifier: SPECIFIER,
20
- schema: remoteClaudeCodeConfigSchema,
21
- config: raw
22
- });
23
- return {
24
- url: parsed.url,
25
- tls: parsed.tls ?? null,
26
- hop: parsed.hop,
27
- cwd: parsed.cwd ?? null,
28
- executable: parsed.executable ?? null,
29
- model: parsed.model ?? null,
30
- reasoning: null,
31
- permissionMode: parsed.permissionMode ?? null,
32
- approvalPolicy: null,
33
- sandboxMode: null,
34
- allowedTools: parsed.allowedTools ?? null,
35
- instructions: parsed.instructions,
36
- skills: []
37
- };
38
- }
39
- };
40
- const programConfig = (args) => toJsonObject(buildRemoteProgramConfig({ spec, open: args }));
41
- const createRemoteClaudeCodeHarness = (config = {}) => createRemoteHarness(spec, config);
42
- export * from "../harnesses/remote-claude-code.mjs";
43
- export {
44
- createRemoteClaudeCodeHarness,
45
- programConfig
46
- };
47
- //# sourceMappingURL=remote-claude-code.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../src/runtime/remote-claude-code.ts"],
4
- "sourcesContent": ["import { type JsonObject, type OpenHarnessSessionArgsIface } from '@finalai/agent-provider';\nimport { parseHarnessConfig, toJsonObject } from \"../harnesses/config-fields.mjs\";\nimport {\n REMOTE_CLAUDE_CODE_DESCRIPTION,\n remoteClaudeCodeConfigSchema,\n SPECIFIER,\n} from \"../harnesses/remote-claude-code.mjs\";\nimport {\n buildRemoteProgramConfig,\n createRemoteHarness,\n RemoteProgram,\n type RemoteHarnessFactoryConfigIface,\n type RemoteHarnessIface,\n type RemoteProgramSpecIface,\n} from \"./remote-host.mjs\";\n\nconst spec: RemoteProgramSpecIface = {\n specifier: SPECIFIER,\n program: RemoteProgram.ClaudeCode,\n description: REMOTE_CLAUDE_CODE_DESCRIPTION,\n settings: (raw) => {\n const parsed = parseHarnessConfig({\n specifier: SPECIFIER,\n schema: remoteClaudeCodeConfigSchema,\n config: raw,\n });\n return {\n url: parsed.url,\n tls: parsed.tls ?? null,\n hop: parsed.hop,\n cwd: parsed.cwd ?? null,\n executable: parsed.executable ?? null,\n model: parsed.model ?? null,\n reasoning: null,\n permissionMode: parsed.permissionMode ?? null,\n approvalPolicy: null,\n sandboxMode: null,\n allowedTools: parsed.allowedTools ?? null,\n instructions: parsed.instructions,\n skills: [],\n };\n },\n};\n\n// The program config this harness registers with the runtime.\nexport const programConfig = (args: OpenHarnessSessionArgsIface): JsonObject =>\n toJsonObject(buildRemoteProgramConfig({ spec, open: args }));\n\nexport const createRemoteClaudeCodeHarness = (\n config: RemoteHarnessFactoryConfigIface = {},\n): RemoteHarnessIface => createRemoteHarness(spec, config);\n\nexport * from \"../harnesses/remote-claude-code.mjs\";\n"],
5
- "mappings": "AAAA,eAAkE;AAClE,SAAS,oBAAoB,oBAAoB;AACjD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAEP,MAAM,OAA+B;AAAA,EACnC,WAAW;AAAA,EACX,SAAS,cAAc;AAAA,EACvB,aAAa;AAAA,EACb,UAAU,CAAC,QAAQ;AACjB,UAAM,SAAS,mBAAmB;AAAA,MAChC,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV,CAAC;AACD,WAAO;AAAA,MACL,KAAK,OAAO;AAAA,MACZ,KAAK,OAAO,OAAO;AAAA,MACnB,KAAK,OAAO;AAAA,MACZ,KAAK,OAAO,OAAO;AAAA,MACnB,YAAY,OAAO,cAAc;AAAA,MACjC,OAAO,OAAO,SAAS;AAAA,MACvB,WAAW;AAAA,MACX,gBAAgB,OAAO,kBAAkB;AAAA,MACzC,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc,OAAO,gBAAgB;AAAA,MACrC,cAAc,OAAO;AAAA,MACrB,QAAQ,CAAC;AAAA,IACX;AAAA,EACF;AACF;AAGO,MAAM,gBAAgB,CAAC,SAC5B,aAAa,yBAAyB,EAAE,MAAM,MAAM,KAAK,CAAC,CAAC;AAEtD,MAAM,gCAAgC,CAC3C,SAA0C,CAAC,MACpB,oBAAoB,MAAM,MAAM;AAEzD,cAAc;",
6
- "names": []
7
- }
@@ -1,5 +0,0 @@
1
- import { type JsonObject, type OpenHarnessSessionArgsIface } from '@finalai/agent-provider';
2
- import { type RemoteHarnessFactoryConfigIface, type RemoteHarnessIface } from "./remote-host.mjs";
3
- export declare const programConfig: (args: OpenHarnessSessionArgsIface) => JsonObject;
4
- export declare const createRemoteCodexHarness: (config?: RemoteHarnessFactoryConfigIface) => RemoteHarnessIface;
5
- export * from "../harnesses/remote-codex.mjs";
@@ -1,47 +0,0 @@
1
- import {} from "@finalai/agent-provider";
2
- import { parseHarnessConfig, toJsonObject } from "../harnesses/config-fields.mjs";
3
- import {
4
- buildRemoteProgramConfig,
5
- createRemoteHarness,
6
- RemoteProgram
7
- } from "./remote-host.mjs";
8
- import {
9
- SPECIFIER,
10
- remoteCodexConfigSchema,
11
- REMOTE_CODEX_DESCRIPTION
12
- } from "../harnesses/remote-codex.mjs";
13
- const spec = {
14
- specifier: SPECIFIER,
15
- program: RemoteProgram.Codex,
16
- description: REMOTE_CODEX_DESCRIPTION,
17
- settings: (raw) => {
18
- const parsed = parseHarnessConfig({
19
- specifier: SPECIFIER,
20
- schema: remoteCodexConfigSchema,
21
- config: raw
22
- });
23
- return {
24
- url: parsed.url,
25
- tls: parsed.tls ?? null,
26
- hop: parsed.hop,
27
- cwd: parsed.cwd ?? null,
28
- executable: parsed.executable ?? null,
29
- model: parsed.model ?? null,
30
- reasoning: parsed.reasoning ?? null,
31
- permissionMode: null,
32
- approvalPolicy: parsed.approvalPolicy ?? null,
33
- sandboxMode: parsed.sandboxMode ?? null,
34
- allowedTools: null,
35
- instructions: parsed.instructions,
36
- skills: parsed.skills
37
- };
38
- }
39
- };
40
- const programConfig = (args) => toJsonObject(buildRemoteProgramConfig({ spec, open: args }));
41
- const createRemoteCodexHarness = (config = {}) => createRemoteHarness(spec, config);
42
- export * from "../harnesses/remote-codex.mjs";
43
- export {
44
- createRemoteCodexHarness,
45
- programConfig
46
- };
47
- //# sourceMappingURL=remote-codex.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../src/runtime/remote-codex.ts"],
4
- "sourcesContent": ["import { type JsonObject, type OpenHarnessSessionArgsIface } from '@finalai/agent-provider';\nimport { parseHarnessConfig, toJsonObject } from \"../harnesses/config-fields.mjs\";\n\nimport {\n buildRemoteProgramConfig,\n createRemoteHarness,\n RemoteProgram,\n type RemoteHarnessFactoryConfigIface,\n type RemoteHarnessIface,\n type RemoteProgramSpecIface,\n} from \"./remote-host.mjs\";\nimport {\n SPECIFIER,\n remoteCodexConfigSchema,\n REMOTE_CODEX_DESCRIPTION,\n} from \"../harnesses/remote-codex.mjs\";\n\nconst spec: RemoteProgramSpecIface = {\n specifier: SPECIFIER,\n program: RemoteProgram.Codex,\n description: REMOTE_CODEX_DESCRIPTION,\n settings: (raw) => {\n const parsed = parseHarnessConfig({\n specifier: SPECIFIER,\n schema: remoteCodexConfigSchema,\n config: raw,\n });\n return {\n url: parsed.url,\n tls: parsed.tls ?? null,\n hop: parsed.hop,\n cwd: parsed.cwd ?? null,\n executable: parsed.executable ?? null,\n model: parsed.model ?? null,\n reasoning: parsed.reasoning ?? null,\n permissionMode: null,\n approvalPolicy: parsed.approvalPolicy ?? null,\n sandboxMode: parsed.sandboxMode ?? null,\n allowedTools: null,\n instructions: parsed.instructions,\n skills: parsed.skills,\n };\n },\n};\n\n// The program config this harness registers with the runtime.\nexport const programConfig = (args: OpenHarnessSessionArgsIface): JsonObject =>\n toJsonObject(buildRemoteProgramConfig({ spec, open: args }));\n\nexport const createRemoteCodexHarness = (\n config: RemoteHarnessFactoryConfigIface = {},\n): RemoteHarnessIface => createRemoteHarness(spec, config);\n\nexport * from \"../harnesses/remote-codex.mjs\";\n"],
5
- "mappings": "AAAA,eAAkE;AAClE,SAAS,oBAAoB,oBAAoB;AAEjD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,MAAM,OAA+B;AAAA,EACnC,WAAW;AAAA,EACX,SAAS,cAAc;AAAA,EACvB,aAAa;AAAA,EACb,UAAU,CAAC,QAAQ;AACjB,UAAM,SAAS,mBAAmB;AAAA,MAChC,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV,CAAC;AACD,WAAO;AAAA,MACL,KAAK,OAAO;AAAA,MACZ,KAAK,OAAO,OAAO;AAAA,MACnB,KAAK,OAAO;AAAA,MACZ,KAAK,OAAO,OAAO;AAAA,MACnB,YAAY,OAAO,cAAc;AAAA,MACjC,OAAO,OAAO,SAAS;AAAA,MACvB,WAAW,OAAO,aAAa;AAAA,MAC/B,gBAAgB;AAAA,MAChB,gBAAgB,OAAO,kBAAkB;AAAA,MACzC,aAAa,OAAO,eAAe;AAAA,MACnC,cAAc;AAAA,MACd,cAAc,OAAO;AAAA,MACrB,QAAQ,OAAO;AAAA,IACjB;AAAA,EACF;AACF;AAGO,MAAM,gBAAgB,CAAC,SAC5B,aAAa,yBAAyB,EAAE,MAAM,MAAM,KAAK,CAAC,CAAC;AAEtD,MAAM,2BAA2B,CACtC,SAA0C,CAAC,MACpB,oBAAoB,MAAM,MAAM;AAEzD,cAAc;",
6
- "names": []
7
- }
@@ -1,127 +0,0 @@
1
- import { AcpTransport, BaseToolProvision, type HarnessClientTlsIface, type HarnessDescriptionIface, type HarnessIface, type InstructionFragmentIface, type OpenHarnessSessionArgsIface, type SecretReaderIface, type SkillBundleIface, type ToolApproval } from '@finalai/agent-provider';
2
- import { type SecretRefIface } from "../harnesses/config-fields.mjs";
3
- import { type RemoteClientTlsInputIface } from "../harnesses/remote-client-tls.mjs";
4
- export declare const PROGRAM_CONFIG_HEADER = "x-final-program-config";
5
- export declare const HEALTH_TOKEN_HEADER = "x-final-health-token";
6
- export declare const CLOSE_TOKEN_HEADER = "x-final-close-token";
7
- export declare const healthTokenFor: (args: {
8
- hop: string;
9
- id: string;
10
- }) => string;
11
- export declare const closeTokenFor: (args: {
12
- hop: string;
13
- id: string;
14
- }) => string;
15
- export declare enum RemoteProgram {
16
- ClaudeCode = "claude-code",
17
- Codex = "codex",
18
- Pi = "pi"
19
- }
20
- export interface RemoteHarnessFactoryConfigIface {
21
- fetch?: typeof fetch;
22
- tlsFetch?: (tls: HarnessClientTlsIface) => typeof fetch;
23
- now?: () => number;
24
- newId?: () => string;
25
- healthTimeoutMs?: number;
26
- registerTimeoutMs?: number;
27
- closeTimeoutMs?: number;
28
- }
29
- export interface RemoteSettingsIface {
30
- url: string;
31
- tls: RemoteClientTlsInputIface | null;
32
- hop: SecretRefIface;
33
- cwd: string | null;
34
- executable: string | null;
35
- model: string | null;
36
- reasoning: string | null;
37
- permissionMode: string | null;
38
- approvalPolicy: string | null;
39
- sandboxMode: string | null;
40
- allowedTools: string[] | null;
41
- instructions: InstructionFragmentIface[];
42
- skills: SkillBundleIface[];
43
- }
44
- export interface RemoteProgramSpecIface {
45
- specifier: string;
46
- program: RemoteProgram;
47
- description: HarnessDescriptionIface;
48
- settings: (config: OpenHarnessSessionArgsIface['config']) => RemoteSettingsIface;
49
- }
50
- export interface RemoteProgramConfigIface {
51
- version: 1;
52
- program: RemoteProgram;
53
- cwd: string | null;
54
- executable: string | null;
55
- model: string | null;
56
- reasoning: string | null;
57
- permissionMode: string | null;
58
- approvalPolicy: string | null;
59
- sandboxMode: string | null;
60
- allowedTools: string[] | null;
61
- instructions: Pick<InstructionFragmentIface, 'role' | 'content'>[];
62
- skills: SkillBundleIface[];
63
- baseTools: Record<string, {
64
- provision: BaseToolProvision;
65
- target: string | null;
66
- }>;
67
- sandboxes: Record<string, {
68
- bindingId: string;
69
- capabilities: string[];
70
- rpc: {
71
- url: string;
72
- token: string;
73
- expiresAt: string;
74
- } | null;
75
- mcp: {
76
- url: string;
77
- token: string;
78
- expiresAt: string;
79
- } | null;
80
- }>;
81
- toolPolicy: Record<string, ToolApproval>;
82
- attachments: {
83
- url: string;
84
- token: string;
85
- } | null;
86
- credentials: OpenHarnessSessionArgsIface['credentials']['atOpen'];
87
- broker: {
88
- url: string;
89
- token: string;
90
- sandboxToken: string | null;
91
- harnessSessionId: string;
92
- } | null;
93
- refresh: OpenHarnessSessionArgsIface['credentials']['refresh'];
94
- }
95
- export type RemoteOpenArgsIface = OpenHarnessSessionArgsIface;
96
- export type RemoteHarnessIface = HarnessIface;
97
- export declare const formatRemoteRef: (args: {
98
- id: string;
99
- url: string;
100
- healthToken: string | null;
101
- closeToken?: string | null;
102
- }) => string;
103
- export interface RemoteRefIface {
104
- id: string;
105
- url: string | null;
106
- healthToken: string | null;
107
- closeToken: string | null;
108
- }
109
- export declare const parseRemoteRef: (ref: string) => RemoteRefIface;
110
- export declare const transportForUrl: (url: string) => AcpTransport.Ws | AcpTransport.Http;
111
- export declare const healthUrlFor: (url: string) => string;
112
- export declare const programConfigUrlFor: (args: {
113
- url: string;
114
- id: string;
115
- }) => string;
116
- export declare const resolveSecretRef: (args: {
117
- specifier: string;
118
- field: string;
119
- ref: SecretRefIface;
120
- secrets: SecretReaderIface;
121
- }) => Promise<string>;
122
- export declare const buildRemoteProgramConfig: (args: {
123
- spec: RemoteProgramSpecIface;
124
- open: OpenHarnessSessionArgsIface;
125
- }) => RemoteProgramConfigIface;
126
- export declare const createRemoteHarness: (spec: RemoteProgramSpecIface, config?: RemoteHarnessFactoryConfigIface) => RemoteHarnessIface;
127
- export { REMOTE_URL_SCHEMES, remoteUrlJson, remoteUrlZod } from "../harnesses/remote-url.mjs";