@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.
- package/HOSTING.md +334 -245
- package/README.md +126 -40
- package/WORKSPACE-EGRESS.md +11 -11
- package/dist/modules/catalog.d.mts +9 -0
- package/dist/modules/catalog.mjs +21 -0
- package/dist/modules/catalog.mjs.map +7 -0
- package/dist/modules/harnesses/acp-agent.d.mts +4 -0
- package/dist/modules/harnesses/acp-agent.mjs +35 -0
- package/dist/modules/harnesses/acp-agent.mjs.map +7 -0
- package/dist/modules/harnesses/adapters.d.mts +7 -0
- package/dist/modules/harnesses/adapters.mjs +74 -0
- package/dist/modules/harnesses/adapters.mjs.map +7 -0
- package/dist/modules/harnesses/claude-code.d.mts +14 -0
- package/dist/modules/harnesses/claude-code.mjs +79 -0
- package/dist/modules/harnesses/claude-code.mjs.map +7 -0
- package/dist/modules/harnesses/codex.d.mts +12 -0
- package/dist/modules/harnesses/codex.mjs +90 -0
- package/dist/modules/harnesses/codex.mjs.map +7 -0
- package/dist/modules/harnesses/config-fields.d.mts +98 -57
- package/dist/modules/harnesses/config-fields.mjs +58 -35
- package/dist/modules/harnesses/config-fields.mjs.map +3 -3
- package/dist/modules/harnesses/definitions.d.mts +3 -0
- package/dist/modules/harnesses/definitions.mjs +21 -0
- package/dist/modules/harnesses/definitions.mjs.map +7 -0
- package/dist/modules/harnesses/fidelity.d.mts +1 -1
- package/dist/modules/harnesses/fidelity.mjs +17 -14
- package/dist/modules/harnesses/fidelity.mjs.map +2 -2
- package/dist/modules/harnesses/final.d.mts +12 -0
- package/dist/modules/harnesses/final.mjs +70 -0
- package/dist/modules/harnesses/final.mjs.map +7 -0
- package/dist/modules/harnesses/index.d.mts +13 -12
- package/dist/modules/harnesses/index.mjs +86 -45
- package/dist/modules/harnesses/index.mjs.map +3 -3
- package/dist/modules/harnesses/names.d.mts +43 -0
- package/dist/modules/harnesses/names.mjs +59 -0
- package/dist/modules/harnesses/names.mjs.map +7 -0
- package/dist/modules/harnesses/nanocode-claude.d.mts +18 -0
- package/dist/modules/harnesses/nanocode-claude.mjs +101 -0
- package/dist/modules/harnesses/nanocode-claude.mjs.map +7 -0
- package/dist/modules/harnesses/nanocode-codex.d.mts +13 -0
- package/dist/modules/harnesses/nanocode-codex.mjs +64 -0
- package/dist/modules/harnesses/nanocode-codex.mjs.map +7 -0
- package/dist/modules/harnesses/pi.d.mts +12 -0
- package/dist/modules/harnesses/pi.mjs +71 -0
- package/dist/modules/harnesses/pi.mjs.map +7 -0
- package/dist/modules/integrations.d.mts +9 -0
- package/dist/modules/integrations.mjs +29 -0
- package/dist/modules/integrations.mjs.map +7 -0
- package/dist/modules/provider/general.bundle.d.mts +1 -0
- package/dist/modules/provider/general.bundle.mjs +5 -0
- package/dist/modules/provider/general.bundle.mjs.map +7 -0
- package/dist/modules/provider/general.d.mts +11 -0
- package/dist/modules/provider/general.mjs +130 -0
- package/dist/modules/provider/general.mjs.map +7 -0
- package/dist/modules/provider/index.d.mts +3 -0
- package/dist/modules/provider/index.mjs +13 -0
- package/dist/modules/provider/index.mjs.map +7 -0
- package/dist/modules/sandboxes/access.d.mts +34 -0
- package/dist/modules/sandboxes/access.mjs +15 -0
- package/dist/modules/sandboxes/access.mjs.map +7 -0
- package/dist/modules/sandboxes/computer.d.mts +24 -51
- package/dist/modules/sandboxes/computer.mjs +523 -888
- package/dist/modules/sandboxes/computer.mjs.map +3 -3
- package/dist/modules/sandboxes/computers-api.d.mts +3 -2
- package/dist/modules/sandboxes/computers-api.mjs +2 -4
- package/dist/modules/sandboxes/computers-api.mjs.map +2 -2
- package/dist/modules/sandboxes/device-api.d.mts +4 -3
- package/dist/modules/sandboxes/device-api.mjs +2 -4
- package/dist/modules/sandboxes/device-api.mjs.map +2 -2
- package/dist/modules/sandboxes/device.d.mts +6 -6
- package/dist/modules/sandboxes/device.mjs +126 -121
- package/dist/modules/sandboxes/device.mjs.map +3 -3
- package/dist/modules/sandboxes/egress.d.mts +10 -9
- package/dist/modules/sandboxes/egress.mjs +73 -56
- package/dist/modules/sandboxes/egress.mjs.map +2 -2
- package/dist/modules/sandboxes/environment.d.mts +35 -269
- package/dist/modules/sandboxes/environment.mjs +27 -104
- package/dist/modules/sandboxes/environment.mjs.map +3 -3
- package/dist/modules/sandboxes/index.d.mts +9 -69
- package/dist/modules/sandboxes/index.mjs +35 -95
- package/dist/modules/sandboxes/index.mjs.map +3 -3
- package/dist/modules/sandboxes/local.d.mts +28 -0
- package/dist/modules/sandboxes/local.mjs +499 -0
- package/dist/modules/sandboxes/local.mjs.map +7 -0
- package/dist/modules/sandboxes/session.d.mts +0 -3
- package/dist/modules/sandboxes/session.mjs +2 -22
- package/dist/modules/sandboxes/session.mjs.map +2 -2
- package/dist/modules/sandboxes/testing/fake-machine.mjs +0 -28
- package/dist/modules/sandboxes/testing/fake-machine.mjs.map +2 -2
- package/package.json +76 -104
- package/dist/modules/connections.d.mts +0 -11
- package/dist/modules/connections.mjs +0 -16
- package/dist/modules/connections.mjs.map +0 -7
- package/dist/modules/harnesses/acp-describe.d.mts +0 -20
- package/dist/modules/harnesses/acp-describe.mjs +0 -110
- package/dist/modules/harnesses/acp-describe.mjs.map +0 -7
- package/dist/modules/harnesses/local-stdio.d.mts +0 -47
- package/dist/modules/harnesses/local-stdio.mjs +0 -41
- package/dist/modules/harnesses/local-stdio.mjs.map +0 -7
- package/dist/modules/harnesses/remote-acp.d.mts +0 -76
- package/dist/modules/harnesses/remote-acp.mjs +0 -83
- package/dist/modules/harnesses/remote-acp.mjs.map +0 -7
- package/dist/modules/harnesses/remote-claude-code.d.mts +0 -88
- package/dist/modules/harnesses/remote-claude-code.mjs +0 -113
- package/dist/modules/harnesses/remote-claude-code.mjs.map +0 -7
- package/dist/modules/harnesses/remote-client-tls.d.mts +0 -35
- package/dist/modules/harnesses/remote-client-tls.mjs +0 -37
- package/dist/modules/harnesses/remote-client-tls.mjs.map +0 -7
- package/dist/modules/harnesses/remote-codex.d.mts +0 -98
- package/dist/modules/harnesses/remote-codex.mjs +0 -128
- package/dist/modules/harnesses/remote-codex.mjs.map +0 -7
- package/dist/modules/harnesses/remote-pi.d.mts +0 -78
- package/dist/modules/harnesses/remote-pi.mjs +0 -104
- package/dist/modules/harnesses/remote-pi.mjs.map +0 -7
- package/dist/modules/harnesses/remote-url.d.mts +0 -5
- package/dist/modules/harnesses/remote-url.mjs +0 -19
- package/dist/modules/harnesses/remote-url.mjs.map +0 -7
- package/dist/modules/harnesses/serverless-final.d.mts +0 -63
- package/dist/modules/harnesses/serverless-final.mjs +0 -88
- package/dist/modules/harnesses/serverless-final.mjs.map +0 -7
- package/dist/modules/harnesses/serverless-nanocode-claude.d.mts +0 -64
- package/dist/modules/harnesses/serverless-nanocode-claude.mjs +0 -105
- package/dist/modules/harnesses/serverless-nanocode-claude.mjs.map +0 -7
- package/dist/modules/harnesses/serverless-nanocode-codex.d.mts +0 -66
- package/dist/modules/harnesses/serverless-nanocode-codex.mjs +0 -113
- package/dist/modules/harnesses/serverless-nanocode-codex.mjs.map +0 -7
- package/dist/modules/harnesses/serverless-pi.d.mts +0 -64
- package/dist/modules/harnesses/serverless-pi.mjs +0 -98
- package/dist/modules/harnesses/serverless-pi.mjs.map +0 -7
- package/dist/modules/runtime/index.d.mts +0 -7
- package/dist/modules/runtime/index.mjs +0 -18
- package/dist/modules/runtime/index.mjs.map +0 -7
- package/dist/modules/runtime/local-stdio.d.mts +0 -10
- package/dist/modules/runtime/local-stdio.mjs +0 -106
- package/dist/modules/runtime/local-stdio.mjs.map +0 -7
- package/dist/modules/runtime/remote-acp.d.mts +0 -16
- package/dist/modules/runtime/remote-acp.mjs +0 -152
- package/dist/modules/runtime/remote-acp.mjs.map +0 -7
- package/dist/modules/runtime/remote-claude-code.d.mts +0 -5
- package/dist/modules/runtime/remote-claude-code.mjs +0 -47
- package/dist/modules/runtime/remote-claude-code.mjs.map +0 -7
- package/dist/modules/runtime/remote-codex.d.mts +0 -5
- package/dist/modules/runtime/remote-codex.mjs +0 -47
- package/dist/modules/runtime/remote-codex.mjs.map +0 -7
- package/dist/modules/runtime/remote-host.d.mts +0 -127
- package/dist/modules/runtime/remote-host.mjs +0 -387
- package/dist/modules/runtime/remote-host.mjs.map +0 -7
- package/dist/modules/runtime/remote-pi.d.mts +0 -5
- package/dist/modules/runtime/remote-pi.mjs +0 -44
- package/dist/modules/runtime/remote-pi.mjs.map +0 -7
- package/dist/modules/sandboxes/guide.d.mts +0 -35
- package/dist/modules/sandboxes/guide.mjs +0 -119
- package/dist/modules/sandboxes/guide.mjs.map +0 -7
- package/dist/modules/sandboxes/workspace-setup.d.mts +0 -42
- package/dist/modules/sandboxes/workspace-setup.mjs +0 -242
- package/dist/modules/sandboxes/workspace-setup.mjs.map +0 -7
- package/dist/modules/testing/harness.d.mts +0 -9
- package/dist/modules/testing/harness.mjs +0 -123
- 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";
|