@finalai/final-agent-provider 0.10.1 → 0.12.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 (198) hide show
  1. package/HOSTING.md +334 -245
  2. package/README.md +125 -46
  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 +29 -0
  83. package/dist/modules/sandboxes/local.mjs +555 -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 +73 -137
  91. package/dist/modules/authoring-final-channel.d.mts +0 -3
  92. package/dist/modules/authoring-final-channel.mjs +0 -10
  93. package/dist/modules/authoring-final-channel.mjs.map +0 -7
  94. package/dist/modules/channel-factories.d.mts +0 -40
  95. package/dist/modules/channel-factories.mjs +0 -212
  96. package/dist/modules/channel-factories.mjs.map +0 -7
  97. package/dist/modules/channels/content.d.mts +0 -6
  98. package/dist/modules/channels/content.mjs +0 -31
  99. package/dist/modules/channels/content.mjs.map +0 -7
  100. package/dist/modules/channels/delivery.d.mts +0 -54
  101. package/dist/modules/channels/delivery.mjs +0 -243
  102. package/dist/modules/channels/delivery.mjs.map +0 -7
  103. package/dist/modules/channels/direct-messaging.d.mts +0 -5
  104. package/dist/modules/channels/direct-messaging.mjs +0 -8
  105. package/dist/modules/channels/direct-messaging.mjs.map +0 -7
  106. package/dist/modules/channels/fake-platform.d.mts +0 -36
  107. package/dist/modules/channels/fake-platform.mjs +0 -168
  108. package/dist/modules/channels/fake-platform.mjs.map +0 -7
  109. package/dist/modules/channels/group-messaging.d.mts +0 -5
  110. package/dist/modules/channels/group-messaging.mjs +0 -8
  111. package/dist/modules/channels/group-messaging.mjs.map +0 -7
  112. package/dist/modules/channels/inbound.d.mts +0 -52
  113. package/dist/modules/channels/inbound.mjs +0 -42
  114. package/dist/modules/channels/inbound.mjs.map +0 -7
  115. package/dist/modules/channels/index.d.mts +0 -9
  116. package/dist/modules/channels/index.mjs +0 -10
  117. package/dist/modules/channels/index.mjs.map +0 -7
  118. package/dist/modules/channels/messaging-channel.d.mts +0 -7
  119. package/dist/modules/channels/messaging-channel.mjs +0 -99
  120. package/dist/modules/channels/messaging-channel.mjs.map +0 -7
  121. package/dist/modules/channels/projection.d.mts +0 -36
  122. package/dist/modules/channels/projection.mjs +0 -233
  123. package/dist/modules/channels/projection.mjs.map +0 -7
  124. package/dist/modules/channels/prompt.d.mts +0 -72
  125. package/dist/modules/channels/prompt.mjs +0 -208
  126. package/dist/modules/channels/prompt.mjs.map +0 -7
  127. package/dist/modules/channels/routing.d.mts +0 -5
  128. package/dist/modules/channels/routing.mjs +0 -53
  129. package/dist/modules/channels/routing.mjs.map +0 -7
  130. package/dist/modules/connections.d.mts +0 -11
  131. package/dist/modules/connections.mjs +0 -16
  132. package/dist/modules/connections.mjs.map +0 -7
  133. package/dist/modules/harnesses/acp-describe.d.mts +0 -20
  134. package/dist/modules/harnesses/acp-describe.mjs +0 -110
  135. package/dist/modules/harnesses/acp-describe.mjs.map +0 -7
  136. package/dist/modules/harnesses/local-stdio.d.mts +0 -47
  137. package/dist/modules/harnesses/local-stdio.mjs +0 -41
  138. package/dist/modules/harnesses/local-stdio.mjs.map +0 -7
  139. package/dist/modules/harnesses/remote-acp.d.mts +0 -76
  140. package/dist/modules/harnesses/remote-acp.mjs +0 -83
  141. package/dist/modules/harnesses/remote-acp.mjs.map +0 -7
  142. package/dist/modules/harnesses/remote-claude-code.d.mts +0 -88
  143. package/dist/modules/harnesses/remote-claude-code.mjs +0 -113
  144. package/dist/modules/harnesses/remote-claude-code.mjs.map +0 -7
  145. package/dist/modules/harnesses/remote-client-tls.d.mts +0 -35
  146. package/dist/modules/harnesses/remote-client-tls.mjs +0 -37
  147. package/dist/modules/harnesses/remote-client-tls.mjs.map +0 -7
  148. package/dist/modules/harnesses/remote-codex.d.mts +0 -98
  149. package/dist/modules/harnesses/remote-codex.mjs +0 -128
  150. package/dist/modules/harnesses/remote-codex.mjs.map +0 -7
  151. package/dist/modules/harnesses/remote-pi.d.mts +0 -78
  152. package/dist/modules/harnesses/remote-pi.mjs +0 -104
  153. package/dist/modules/harnesses/remote-pi.mjs.map +0 -7
  154. package/dist/modules/harnesses/remote-url.d.mts +0 -5
  155. package/dist/modules/harnesses/remote-url.mjs +0 -19
  156. package/dist/modules/harnesses/remote-url.mjs.map +0 -7
  157. package/dist/modules/harnesses/serverless-final.d.mts +0 -63
  158. package/dist/modules/harnesses/serverless-final.mjs +0 -88
  159. package/dist/modules/harnesses/serverless-final.mjs.map +0 -7
  160. package/dist/modules/harnesses/serverless-nanocode-claude.d.mts +0 -64
  161. package/dist/modules/harnesses/serverless-nanocode-claude.mjs +0 -105
  162. package/dist/modules/harnesses/serverless-nanocode-claude.mjs.map +0 -7
  163. package/dist/modules/harnesses/serverless-nanocode-codex.d.mts +0 -66
  164. package/dist/modules/harnesses/serverless-nanocode-codex.mjs +0 -113
  165. package/dist/modules/harnesses/serverless-nanocode-codex.mjs.map +0 -7
  166. package/dist/modules/harnesses/serverless-pi.d.mts +0 -64
  167. package/dist/modules/harnesses/serverless-pi.mjs +0 -98
  168. package/dist/modules/harnesses/serverless-pi.mjs.map +0 -7
  169. package/dist/modules/runtime/index.d.mts +0 -7
  170. package/dist/modules/runtime/index.mjs +0 -18
  171. package/dist/modules/runtime/index.mjs.map +0 -7
  172. package/dist/modules/runtime/local-stdio.d.mts +0 -10
  173. package/dist/modules/runtime/local-stdio.mjs +0 -106
  174. package/dist/modules/runtime/local-stdio.mjs.map +0 -7
  175. package/dist/modules/runtime/remote-acp.d.mts +0 -16
  176. package/dist/modules/runtime/remote-acp.mjs +0 -152
  177. package/dist/modules/runtime/remote-acp.mjs.map +0 -7
  178. package/dist/modules/runtime/remote-claude-code.d.mts +0 -5
  179. package/dist/modules/runtime/remote-claude-code.mjs +0 -47
  180. package/dist/modules/runtime/remote-claude-code.mjs.map +0 -7
  181. package/dist/modules/runtime/remote-codex.d.mts +0 -5
  182. package/dist/modules/runtime/remote-codex.mjs +0 -47
  183. package/dist/modules/runtime/remote-codex.mjs.map +0 -7
  184. package/dist/modules/runtime/remote-host.d.mts +0 -127
  185. package/dist/modules/runtime/remote-host.mjs +0 -387
  186. package/dist/modules/runtime/remote-host.mjs.map +0 -7
  187. package/dist/modules/runtime/remote-pi.d.mts +0 -5
  188. package/dist/modules/runtime/remote-pi.mjs +0 -44
  189. package/dist/modules/runtime/remote-pi.mjs.map +0 -7
  190. package/dist/modules/sandboxes/guide.d.mts +0 -35
  191. package/dist/modules/sandboxes/guide.mjs +0 -119
  192. package/dist/modules/sandboxes/guide.mjs.map +0 -7
  193. package/dist/modules/sandboxes/workspace-setup.d.mts +0 -42
  194. package/dist/modules/sandboxes/workspace-setup.mjs +0 -242
  195. package/dist/modules/sandboxes/workspace-setup.mjs.map +0 -7
  196. package/dist/modules/testing/harness.d.mts +0 -9
  197. package/dist/modules/testing/harness.mjs +0 -123
  198. package/dist/modules/testing/harness.mjs.map +0 -7
@@ -1,64 +0,0 @@
1
- import { type HarnessDescriptionIface, type JsonSchema } from '@finalai/agent-provider';
2
- import * as z from 'zod';
3
- import { PiPermissionMode, ReasoningLevel, type CredentialsInput, type HarnessBindingOutputIface, type InstructionInput, type SkillInput } from "./config-fields.mjs";
4
- export declare const SPECIFIER = "@finalai/final-agent-provider/harnesses/serverless-pi";
5
- export declare const PI_REASONING_LEVELS: readonly [ReasoningLevel.None, ReasoningLevel.Minimal, ReasoningLevel.Low, ReasoningLevel.Medium, ReasoningLevel.High];
6
- export declare const PI_BASE_TOOLS: HarnessDescriptionIface['baseTools'];
7
- export declare const serverlessPiConfigSchema: z.ZodObject<{
8
- model: z.ZodOptional<z.ZodString>;
9
- reasoning: z.ZodOptional<z.ZodEnum<typeof ReasoningLevel>>;
10
- credentials: z.ZodObject<{
11
- payer: z.ZodEnum<typeof import("@finalai/agent-provider").CredentialPayer>;
12
- tryInOrder: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
13
- kind: z.ZodLiteral<import("@finalai/agent-provider").CredentialNodeKind.Subscription>;
14
- owner: z.ZodEnum<typeof import("@finalai/agent-provider").CredentialOwner>;
15
- vendor: z.ZodOptional<z.ZodString>;
16
- pin: z.ZodOptional<z.ZodString>;
17
- }, z.core.$strip>, z.ZodObject<{
18
- kind: z.ZodLiteral<import("@finalai/agent-provider").CredentialNodeKind.ApiKey>;
19
- secret: z.ZodString;
20
- baseUrl: z.ZodOptional<z.ZodString>;
21
- vendor: z.ZodOptional<z.ZodString>;
22
- }, z.core.$strip>, z.ZodObject<{
23
- pin: z.ZodOptional<z.ZodString>;
24
- kind: z.ZodLiteral<import("@finalai/agent-provider").CredentialNodeKind.ApiKey>;
25
- owner: z.ZodEnum<typeof import("@finalai/agent-provider").CredentialOwner>;
26
- vendor: z.ZodOptional<z.ZodString>;
27
- }, z.core.$strip>, z.ZodObject<{
28
- kind: z.ZodLiteral<import("@finalai/agent-provider").CredentialNodeKind.Platform>;
29
- budget: z.ZodOptional<z.ZodString>;
30
- }, z.core.$strip>, z.ZodObject<{
31
- kind: z.ZodLiteral<import("@finalai/agent-provider").CredentialNodeKind.HarnessOwned>;
32
- }, z.core.$strip>, z.ZodObject<{
33
- kind: z.ZodLiteral<import("@finalai/agent-provider").CredentialNodeKind.Custom>;
34
- resolver: z.ZodString;
35
- events: z.ZodDefault<z.ZodArray<z.ZodEnum<typeof import("@finalai/agent-provider").DynamicEvent>>>;
36
- }, z.core.$strip>]>>;
37
- }, z.core.$strip>;
38
- permissionMode: z.ZodDefault<z.ZodEnum<typeof PiPermissionMode>>;
39
- instructions: z.ZodDefault<z.ZodArray<z.ZodObject<{
40
- role: z.ZodEnum<typeof import("@finalai/agent-provider").InstructionRole>;
41
- content: z.ZodString;
42
- source: z.ZodOptional<z.ZodString>;
43
- }, z.core.$strip>>>;
44
- skills: z.ZodDefault<z.ZodArray<z.ZodObject<{
45
- key: z.ZodString;
46
- description: z.ZodOptional<z.ZodString>;
47
- files: z.ZodArray<z.ZodObject<{
48
- path: z.ZodString;
49
- content: z.ZodString;
50
- }, z.core.$strip>>;
51
- }, z.core.$strip>>>;
52
- }, z.core.$strict>;
53
- export type ServerlessPiConfigIface = z.output<typeof serverlessPiConfigSchema>;
54
- export declare const SERVERLESS_PI_CONFIG_JSON_SCHEMA: JsonSchema;
55
- export declare const SERVERLESS_PI_DESCRIPTION: HarnessDescriptionIface;
56
- export interface ServerlessPiConfigInputIface {
57
- model?: string;
58
- reasoning?: (typeof PI_REASONING_LEVELS)[number] | `${(typeof PI_REASONING_LEVELS)[number]}`;
59
- credentials: CredentialsInput;
60
- permissionMode?: PiPermissionMode | `${PiPermissionMode}`;
61
- instructions?: InstructionInput[];
62
- skills?: SkillInput[];
63
- }
64
- export declare const serverlessPi: (config: ServerlessPiConfigInputIface) => HarnessBindingOutputIface;
@@ -1,98 +0,0 @@
1
- import {
2
- AcpTransport,
3
- BaseCapability,
4
- BaseToolProvision,
5
- CredentialDelivery,
6
- HarnessTrustClass,
7
- InferenceCredentialKind,
8
- McpTransportKind,
9
- PromptWhileRunning,
10
- SandboxWire
11
- } from "@finalai/agent-provider";
12
- import * as z from "zod";
13
- import {
14
- configObjectJson,
15
- credentialsJson,
16
- credentialsZod,
17
- harnessBinding,
18
- instructionsJson,
19
- instructionsZod,
20
- modelJson,
21
- modelZod,
22
- permissionModeJson,
23
- PiPermissionMode,
24
- reasoningJson,
25
- ReasoningLevel,
26
- reasoningZod,
27
- skillsJson,
28
- skillsZod
29
- } from "./config-fields.mjs";
30
- import { ModelVendor } from "./model-reference.mjs";
31
- const SPECIFIER = "@finalai/final-agent-provider/harnesses/serverless-pi";
32
- const PI_REASONING_LEVELS = [
33
- ReasoningLevel.None,
34
- ReasoningLevel.Minimal,
35
- ReasoningLevel.Low,
36
- ReasoningLevel.Medium,
37
- ReasoningLevel.High
38
- ];
39
- const PI_BASE_TOOLS = {
40
- [BaseCapability.Shell]: { provision: BaseToolProvision.Bound, nativeTools: ["bash"] },
41
- [BaseCapability.Files]: {
42
- provision: BaseToolProvision.Bound,
43
- nativeTools: ["read", "write", "edit", "grep", "find", "ls"]
44
- }
45
- };
46
- const serverlessPiConfigSchema = z.strictObject({
47
- model: modelZod().optional(),
48
- reasoning: reasoningZod(PI_REASONING_LEVELS).optional(),
49
- credentials: credentialsZod(),
50
- permissionMode: z.nativeEnum(PiPermissionMode).default(PiPermissionMode.Ask),
51
- instructions: instructionsZod(),
52
- skills: skillsZod()
53
- });
54
- const SERVERLESS_PI_CONFIG_JSON_SCHEMA = configObjectJson({
55
- required: ["credentials"],
56
- title: "Pi (serverless)",
57
- properties: {
58
- model: modelJson(),
59
- reasoning: reasoningJson(PI_REASONING_LEVELS),
60
- credentials: credentialsJson(),
61
- permissionMode: permissionModeJson(Object.values(PiPermissionMode), PiPermissionMode.Ask),
62
- instructions: instructionsJson(),
63
- skills: skillsJson()
64
- }
65
- });
66
- const SERVERLESS_PI_DESCRIPTION = {
67
- configSchema: SERVERLESS_PI_CONFIG_JSON_SCHEMA,
68
- acp: {
69
- transports: [AcpTransport.Relay, AcpTransport.Ws],
70
- mcp: [McpTransportKind.Acp, McpTransportKind.Http]
71
- },
72
- baseTools: PI_BASE_TOOLS,
73
- consumes: [SandboxWire.HandleRpc],
74
- inference: {
75
- vendors: [ModelVendor.OpenRouter, ModelVendor.OpenAI, ModelVendor.Anthropic],
76
- kinds: [InferenceCredentialKind.ApiKey, InferenceCredentialKind.Platform],
77
- delivery: CredentialDelivery.PerRequest
78
- },
79
- // Final runs these on its own Workers.
80
- trust: HarnessTrustClass.FirstParty,
81
- supports: { observe: true, resumeReplay: true, fork: false, authorMeta: true },
82
- // Measured (agent-harness-workers pi/engine.test.ts "injects a prompt accepted while
83
- // running into the running work"): a steer joins the running run. Across a lost
84
- // invocation an open ask is not re-raised with its id, so no disconnect survival yet.
85
- promptWhileRunning: PromptWhileRunning.Inject,
86
- sessionSurvivesDisconnect: false
87
- };
88
- const serverlessPi = (config) => harnessBinding(SPECIFIER, config);
89
- export {
90
- PI_BASE_TOOLS,
91
- PI_REASONING_LEVELS,
92
- SERVERLESS_PI_CONFIG_JSON_SCHEMA,
93
- SERVERLESS_PI_DESCRIPTION,
94
- SPECIFIER,
95
- serverlessPi,
96
- serverlessPiConfigSchema
97
- };
98
- //# sourceMappingURL=serverless-pi.mjs.map
@@ -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";