@finalai/final-agent-provider 0.16.0 → 0.17.1
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/dist/modules/harnesses/adapters.mjs +2 -2
- package/dist/modules/harnesses/adapters.mjs.map +1 -1
- package/dist/modules/harnesses/final.mjs +3 -2
- package/dist/modules/harnesses/final.mjs.map +2 -2
- package/dist/modules/harnesses/nanocode-claude.mjs +4 -3
- package/dist/modules/harnesses/nanocode-claude.mjs.map +2 -2
- package/dist/modules/harnesses/nanocode-codex.mjs +4 -3
- package/dist/modules/harnesses/nanocode-codex.mjs.map +2 -2
- package/dist/modules/harnesses/pi.mjs +4 -3
- package/dist/modules/harnesses/pi.mjs.map +2 -2
- package/package.json +4 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const claudeCodeAdapterPackage = { "name": "@finalai/acp-adapter-claude-code", "version": "0.
|
|
2
|
-
const codexAdapterPackage = { "name": "@finalai/acp-adapter-codex", "version": "0.
|
|
1
|
+
const claudeCodeAdapterPackage = { "name": "@finalai/acp-adapter-claude-code", "version": "0.5.0" };
|
|
2
|
+
const codexAdapterPackage = { "name": "@finalai/acp-adapter-codex", "version": "0.4.0" };
|
|
3
3
|
import { defineAcpAdapter } from "@finalai/agent-definition/authoring";
|
|
4
4
|
import { FinalExtension } from "@finalai/agent-provider";
|
|
5
5
|
import { REQUIRED_FINAL_EXTENSIONS } from "../provider/general.mjs";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/harnesses/adapters.ts"],
|
|
4
|
-
"sourcesContent": ["const claudeCodeAdapterPackage = {\"name\":\"@finalai/acp-adapter-claude-code\",\"version\":\"0.
|
|
4
|
+
"sourcesContent": ["const claudeCodeAdapterPackage = {\"name\":\"@finalai/acp-adapter-claude-code\",\"version\":\"0.5.0\"};\nconst codexAdapterPackage = {\"name\":\"@finalai/acp-adapter-codex\",\"version\":\"0.4.0\"};\nimport { defineAcpAdapter } from '@finalai/agent-definition/authoring';\nimport { FinalExtension, type AcpAdapterDefinitionIface } from '@finalai/agent-provider';\nimport { REQUIRED_FINAL_EXTENSIONS } from \"../provider/general.mjs\";\nimport { FinalAcpAdapter, FinalHarnessInterface } from \"./names.mjs\";\n\n// Final's ACP adapters. Each implements ACP v2 and Final's ACP extensions and\n// advertises them in `initialize`; the general harness provider refuses an\n// adapter that does not (../provider/general.ts). Fork is optional.\n\n// The worker runtime's engines that map a harness program to ACP v2. The\n// worker program started is the engine; the harness's own program comes in\n// its input (`{ harness: { program }, configuration }`).\nexport const PI_ACP_ADAPTER: AcpAdapterDefinitionIface = defineAcpAdapter({\n title: 'Pi ACP adapter',\n description: 'Maps the Pi agent loop (Pi and the Final harness) to ACP v2 on a worker runtime.',\n adapts: [FinalHarnessInterface.PiAgent],\n run: { worker: { program: 'pi' } },\n extensions: [...REQUIRED_FINAL_EXTENSIONS],\n});\n\nexport const NANOCODE_ACP_ADAPTER: AcpAdapterDefinitionIface = defineAcpAdapter({\n title: 'nanocode ACP adapter',\n description: \"Maps nanocode's Claude and Codex engines to ACP v2 on a worker runtime.\",\n adapts: [FinalHarnessInterface.Nanocode],\n run: { worker: { program: 'nanocode' } },\n extensions: [...REQUIRED_FINAL_EXTENSIONS],\n});\n\n// The process adapters are published packages. Each takes the harness's\n// command line after `--` and launches it as the program it adapts; the\n// permission level is Final's (`ask`, `review`, `auto`), mapped by the\n// adapter onto the program's own modes.\n// An adapter package's exact release, as npx installs it: `npx -y <name>` alone resolves npm's\n// `latest` tag, which need not be the release these definitions were made with. The version is\n// the adapter package's own (inlined when this package is built).\nconst releaseOf = (manifest: { name: string; version: string }): string =>\n `${manifest.name}@${manifest.version}`;\n\nconst permissionArgs = {\n when: 'configuration.permissionMode',\n args: ['--permission-mode', '{{configuration.permissionMode}}'],\n};\n\nexport const CLAUDE_CODE_ACP_ADAPTER: AcpAdapterDefinitionIface = defineAcpAdapter({\n title: 'Claude Code ACP adapter',\n description: 'Runs Claude Code through the Claude Agent SDK and speaks ACP v2 on stdio.',\n adapts: [FinalHarnessInterface.ClaudeAgentSdk],\n run: {\n process: {\n command: 'npx',\n args: [\n '-y',\n releaseOf(claudeCodeAdapterPackage),\n permissionArgs,\n '--',\n '{{harness.command}}',\n { spread: 'harness.args' },\n ],\n },\n },\n extensions: [...REQUIRED_FINAL_EXTENSIONS, FinalExtension.Fork],\n});\n\nexport const CODEX_ACP_ADAPTER: AcpAdapterDefinitionIface = defineAcpAdapter({\n title: 'Codex ACP adapter',\n description: 'Runs the Codex app-server and speaks ACP v2 on stdio.',\n adapts: [FinalHarnessInterface.CodexAppServer],\n run: {\n process: {\n command: 'npx',\n args: [\n '-y',\n releaseOf(codexAdapterPackage),\n permissionArgs,\n '--',\n '{{harness.command}}',\n { spread: 'harness.args' },\n ],\n },\n },\n extensions: [...REQUIRED_FINAL_EXTENSIONS],\n});\n\nexport const FINAL_ACP_ADAPTERS: Record<FinalAcpAdapter, AcpAdapterDefinitionIface> = {\n [FinalAcpAdapter.Pi]: PI_ACP_ADAPTER,\n [FinalAcpAdapter.Nanocode]: NANOCODE_ACP_ADAPTER,\n [FinalAcpAdapter.ClaudeCode]: CLAUDE_CODE_ACP_ADAPTER,\n [FinalAcpAdapter.Codex]: CODEX_ACP_ADAPTER,\n};\n"],
|
|
5
5
|
"mappings": "AAAA,MAAM,2BAA2B,EAAC,QAAO,oCAAmC,WAAU,QAAO;AAC7F,MAAM,sBAAsB,EAAC,QAAO,8BAA6B,WAAU,QAAO;AAClF,SAAS,wBAAwB;AACjC,SAAS,sBAAsD;AAC/D,SAAS,iCAAiC;AAC1C,SAAS,iBAAiB,6BAA6B;AAShD,MAAM,iBAA4C,iBAAiB;AAAA,EACxE,OAAO;AAAA,EACP,aAAa;AAAA,EACb,QAAQ,CAAC,sBAAsB,OAAO;AAAA,EACtC,KAAK,EAAE,QAAQ,EAAE,SAAS,KAAK,EAAE;AAAA,EACjC,YAAY,CAAC,GAAG,yBAAyB;AAC3C,CAAC;AAEM,MAAM,uBAAkD,iBAAiB;AAAA,EAC9E,OAAO;AAAA,EACP,aAAa;AAAA,EACb,QAAQ,CAAC,sBAAsB,QAAQ;AAAA,EACvC,KAAK,EAAE,QAAQ,EAAE,SAAS,WAAW,EAAE;AAAA,EACvC,YAAY,CAAC,GAAG,yBAAyB;AAC3C,CAAC;AASD,MAAM,YAAY,CAAC,aACjB,GAAG,SAAS,IAAI,IAAI,SAAS,OAAO;AAEtC,MAAM,iBAAiB;AAAA,EACrB,MAAM;AAAA,EACN,MAAM,CAAC,qBAAqB,kCAAkC;AAChE;AAEO,MAAM,0BAAqD,iBAAiB;AAAA,EACjF,OAAO;AAAA,EACP,aAAa;AAAA,EACb,QAAQ,CAAC,sBAAsB,cAAc;AAAA,EAC7C,KAAK;AAAA,IACH,SAAS;AAAA,MACP,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA,UAAU,wBAAwB;AAAA,QAClC;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,QAAQ,eAAe;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY,CAAC,GAAG,2BAA2B,eAAe,IAAI;AAChE,CAAC;AAEM,MAAM,oBAA+C,iBAAiB;AAAA,EAC3E,OAAO;AAAA,EACP,aAAa;AAAA,EACb,QAAQ,CAAC,sBAAsB,cAAc;AAAA,EAC7C,KAAK;AAAA,IACH,SAAS;AAAA,MACP,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA,UAAU,mBAAmB;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,QAAQ,eAAe;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY,CAAC,GAAG,yBAAyB;AAC3C,CAAC;AAEM,MAAM,qBAAyE;AAAA,EACpF,CAAC,gBAAgB,EAAE,GAAG;AAAA,EACtB,CAAC,gBAAgB,QAAQ,GAAG;AAAA,EAC5B,CAAC,gBAAgB,UAAU,GAAG;AAAA,EAC9B,CAAC,gBAAgB,KAAK,GAAG;AAC3B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -54,9 +54,10 @@ const FINAL_HARNESS = defineHarness({
|
|
|
54
54
|
mcp: [McpTransportKind.Acp, McpTransportKind.Http],
|
|
55
55
|
consumes: [SandboxWire.HandleRpc],
|
|
56
56
|
supports: { observe: true, resumeReplay: true, authorMeta: true },
|
|
57
|
-
// Same engine as Pi:
|
|
57
|
+
// Same engine as Pi: a lost invocation resumes its turn from durable storage
|
|
58
|
+
// and raises open asks again under their session-unique ids.
|
|
58
59
|
promptWhileRunning: PromptWhileRunning.Inject,
|
|
59
|
-
sessionSurvivesDisconnect:
|
|
60
|
+
sessionSurvivesDisconnect: true
|
|
60
61
|
});
|
|
61
62
|
const serverlessFinal = ({
|
|
62
63
|
environment,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/harnesses/final.ts"],
|
|
4
|
-
"sourcesContent": ["import { defineHarness } from '@finalai/agent-definition/authoring';\nimport {\n CredentialDelivery,\n HarnessFeature,\n HarnessService,\n InferenceSourceKind,\n McpTransportKind,\n PermissionLevel,\n PromptWhileRunning,\n SandboxWire,\n type HarnessDefinitionIface,\n type HarnessEnvironmentIface,\n type HarnessSettingsIface,\n} from '@finalai/agent-provider';\nimport {\n configObjectJson,\n harnessSettings,\n inferenceJson,\n modelJson,\n permissionModeJson,\n reasoningJson,\n ReasoningLevel,\n type InferenceInput,\n type PermissionInput,\n} from \"./config-fields.mjs\";\nimport { ModelVendor } from \"./model-reference.mjs\";\nimport { FinalAcpAdapter, FinalHarness, FinalHarnessInterface, FinalWorkerProgram } from \"./names.mjs\";\n\n// The Final harness: Final's own Pi-derived loop (the one Home runs on), a\n// worker program behind the same adapter as Pi. It differs from Pi in its\n// program and model catalog.\n\nexport const FINAL_REASONING_LEVELS = [\n ReasoningLevel.Low,\n ReasoningLevel.Medium,\n ReasoningLevel.High,\n] as const;\n\nexport const FINAL_HARNESS: HarnessDefinitionIface = defineHarness({\n title: 'Final',\n description: \"Final's own agent loop, run per session on a worker runtime.\",\n configurationSchema: configObjectJson({\n required: ['model'],\n title: 'Final',\n properties: {\n model: modelJson(),\n reasoning: reasoningJson(FINAL_REASONING_LEVELS),\n inference: inferenceJson(),\n permissionMode: permissionModeJson(),\n },\n }),\n features: Object.values(HarnessFeature),\n lowestPermission: PermissionLevel.Ask,\n // Final's catalog through its metered inference, or a project's own\n // OpenRouter-compatible key.\n inference: {\n vendors: [ModelVendor.OpenRouter],\n kinds: [InferenceSourceKind.ApiKey, InferenceSourceKind.Final],\n delivery: CredentialDelivery.PerRequest,\n },\n interface: FinalHarnessInterface.PiAgent,\n adapter: FinalAcpAdapter.Pi,\n run: { worker: { program: FinalWorkerProgram.Final } },\n services: [HarnessService.FrameAttachments],\n mcp: [McpTransportKind.Acp, McpTransportKind.Http],\n consumes: [SandboxWire.HandleRpc],\n supports: { observe: true, resumeReplay: true, authorMeta: true },\n // Same engine as Pi: open asks
|
|
5
|
-
"mappings": "AAAA,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB,cAAc,uBAAuB,0BAA0B;AAMlF,MAAM,yBAAyB;AAAA,EACpC,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AACjB;AAEO,MAAM,gBAAwC,cAAc;AAAA,EACjE,OAAO;AAAA,EACP,aAAa;AAAA,EACb,qBAAqB,iBAAiB;AAAA,IACpC,UAAU,CAAC,OAAO;AAAA,IAClB,OAAO;AAAA,IACP,YAAY;AAAA,MACV,OAAO,UAAU;AAAA,MACjB,WAAW,cAAc,sBAAsB;AAAA,MAC/C,WAAW,cAAc;AAAA,MACzB,gBAAgB,mBAAmB;AAAA,IACrC;AAAA,EACF,CAAC;AAAA,EACD,UAAU,OAAO,OAAO,cAAc;AAAA,EACtC,kBAAkB,gBAAgB;AAAA;AAAA;AAAA,EAGlC,WAAW;AAAA,IACT,SAAS,CAAC,YAAY,UAAU;AAAA,IAChC,OAAO,CAAC,oBAAoB,QAAQ,oBAAoB,KAAK;AAAA,IAC7D,UAAU,mBAAmB;AAAA,EAC/B;AAAA,EACA,WAAW,sBAAsB;AAAA,EACjC,SAAS,gBAAgB;AAAA,EACzB,KAAK,EAAE,QAAQ,EAAE,SAAS,mBAAmB,MAAM,EAAE;AAAA,EACrD,UAAU,CAAC,eAAe,gBAAgB;AAAA,EAC1C,KAAK,CAAC,iBAAiB,KAAK,iBAAiB,IAAI;AAAA,EACjD,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,UAAU,EAAE,SAAS,MAAM,cAAc,MAAM,YAAY,KAAK;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import { defineHarness } from '@finalai/agent-definition/authoring';\nimport {\n CredentialDelivery,\n HarnessFeature,\n HarnessService,\n InferenceSourceKind,\n McpTransportKind,\n PermissionLevel,\n PromptWhileRunning,\n SandboxWire,\n type HarnessDefinitionIface,\n type HarnessEnvironmentIface,\n type HarnessSettingsIface,\n} from '@finalai/agent-provider';\nimport {\n configObjectJson,\n harnessSettings,\n inferenceJson,\n modelJson,\n permissionModeJson,\n reasoningJson,\n ReasoningLevel,\n type InferenceInput,\n type PermissionInput,\n} from \"./config-fields.mjs\";\nimport { ModelVendor } from \"./model-reference.mjs\";\nimport { FinalAcpAdapter, FinalHarness, FinalHarnessInterface, FinalWorkerProgram } from \"./names.mjs\";\n\n// The Final harness: Final's own Pi-derived loop (the one Home runs on), a\n// worker program behind the same adapter as Pi. It differs from Pi in its\n// program and model catalog.\n\nexport const FINAL_REASONING_LEVELS = [\n ReasoningLevel.Low,\n ReasoningLevel.Medium,\n ReasoningLevel.High,\n] as const;\n\nexport const FINAL_HARNESS: HarnessDefinitionIface = defineHarness({\n title: 'Final',\n description: \"Final's own agent loop, run per session on a worker runtime.\",\n configurationSchema: configObjectJson({\n required: ['model'],\n title: 'Final',\n properties: {\n model: modelJson(),\n reasoning: reasoningJson(FINAL_REASONING_LEVELS),\n inference: inferenceJson(),\n permissionMode: permissionModeJson(),\n },\n }),\n features: Object.values(HarnessFeature),\n lowestPermission: PermissionLevel.Ask,\n // Final's catalog through its metered inference, or a project's own\n // OpenRouter-compatible key.\n inference: {\n vendors: [ModelVendor.OpenRouter],\n kinds: [InferenceSourceKind.ApiKey, InferenceSourceKind.Final],\n delivery: CredentialDelivery.PerRequest,\n },\n interface: FinalHarnessInterface.PiAgent,\n adapter: FinalAcpAdapter.Pi,\n run: { worker: { program: FinalWorkerProgram.Final } },\n services: [HarnessService.FrameAttachments],\n mcp: [McpTransportKind.Acp, McpTransportKind.Http],\n consumes: [SandboxWire.HandleRpc],\n supports: { observe: true, resumeReplay: true, authorMeta: true },\n // Same engine as Pi: a lost invocation resumes its turn from durable storage\n // and raises open asks again under their session-unique ids.\n promptWhileRunning: PromptWhileRunning.Inject,\n sessionSurvivesDisconnect: true,\n});\n\nexport interface ServerlessFinalInputIface {\n model: string;\n reasoning?:\n | (typeof FINAL_REASONING_LEVELS)[number]\n | `${(typeof FINAL_REASONING_LEVELS)[number]}`;\n inference?: InferenceInput;\n permissionMode?: PermissionInput;\n // The worker-runtime sandbox it runs in; absent: the caller's plan creates one.\n environment?: HarnessEnvironmentIface;\n}\n\nexport const serverlessFinal = ({\n environment,\n ...configuration\n}: ServerlessFinalInputIface): HarnessSettingsIface =>\n harnessSettings({ harness: FinalHarness.Final, configuration, environment });\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB,cAAc,uBAAuB,0BAA0B;AAMlF,MAAM,yBAAyB;AAAA,EACpC,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AACjB;AAEO,MAAM,gBAAwC,cAAc;AAAA,EACjE,OAAO;AAAA,EACP,aAAa;AAAA,EACb,qBAAqB,iBAAiB;AAAA,IACpC,UAAU,CAAC,OAAO;AAAA,IAClB,OAAO;AAAA,IACP,YAAY;AAAA,MACV,OAAO,UAAU;AAAA,MACjB,WAAW,cAAc,sBAAsB;AAAA,MAC/C,WAAW,cAAc;AAAA,MACzB,gBAAgB,mBAAmB;AAAA,IACrC;AAAA,EACF,CAAC;AAAA,EACD,UAAU,OAAO,OAAO,cAAc;AAAA,EACtC,kBAAkB,gBAAgB;AAAA;AAAA;AAAA,EAGlC,WAAW;AAAA,IACT,SAAS,CAAC,YAAY,UAAU;AAAA,IAChC,OAAO,CAAC,oBAAoB,QAAQ,oBAAoB,KAAK;AAAA,IAC7D,UAAU,mBAAmB;AAAA,EAC/B;AAAA,EACA,WAAW,sBAAsB;AAAA,EACjC,SAAS,gBAAgB;AAAA,EACzB,KAAK,EAAE,QAAQ,EAAE,SAAS,mBAAmB,MAAM,EAAE;AAAA,EACrD,UAAU,CAAC,eAAe,gBAAgB;AAAA,EAC1C,KAAK,CAAC,iBAAiB,KAAK,iBAAiB,IAAI;AAAA,EACjD,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,UAAU,EAAE,SAAS,MAAM,cAAc,MAAM,YAAY,KAAK;AAAA;AAAA;AAAA,EAGhE,oBAAoB,mBAAmB;AAAA,EACvC,2BAA2B;AAC7B,CAAC;AAaM,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA,GAAG;AACL,MACE,gBAAgB,EAAE,SAAS,aAAa,OAAO,eAAe,YAAY,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -82,10 +82,11 @@ const NANOCODE_CLAUDE_HARNESS = defineHarness({
|
|
|
82
82
|
mcp: [McpTransportKind.Acp, McpTransportKind.Http],
|
|
83
83
|
consumes: [SandboxWire.HandleRpc],
|
|
84
84
|
supports: { observe: true, resumeReplay: true, authorMeta: true },
|
|
85
|
-
// A prompt that arrives while a turn runs waits for it.
|
|
86
|
-
//
|
|
85
|
+
// A prompt that arrives while a turn runs waits for it. A lost invocation
|
|
86
|
+
// resumes its running turn by id; an interrupted call's ask is not raised
|
|
87
|
+
// again, and the session service releases it at the next idle.
|
|
87
88
|
promptWhileRunning: PromptWhileRunning.Queue,
|
|
88
|
-
sessionSurvivesDisconnect:
|
|
89
|
+
sessionSurvivesDisconnect: true
|
|
89
90
|
});
|
|
90
91
|
const serverlessNanocodeClaude = ({
|
|
91
92
|
environment,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/harnesses/nanocode-claude.ts"],
|
|
4
|
-
"sourcesContent": ["import { defineHarness } from '@finalai/agent-definition/authoring';\nimport {\n CredentialDelivery,\n HarnessFeature,\n HarnessService,\n InferenceSourceKind,\n McpTransportKind,\n PermissionLevel,\n PromptWhileRunning,\n SandboxWire,\n type HarnessDefinitionIface,\n type HarnessEnvironmentIface,\n type HarnessSettingsIface,\n type JsonSchema,\n} from '@finalai/agent-provider';\nimport {\n ApprovalsReviewer,\n approvalsReviewerJson,\n configObjectJson,\n harnessSettings,\n inferenceJson,\n modelJson,\n permissionModeJson,\n reasoningJson,\n ReasoningLevel,\n type InferenceInput,\n type PermissionInput,\n} from \"./config-fields.mjs\";\nimport { ModelVendor } from \"./model-reference.mjs\";\nimport { FinalAcpAdapter, FinalHarness, FinalHarnessInterface, FinalWorkerProgram } from \"./names.mjs\";\n\n// nanocode's Claude engine as a worker program. It drives the sandboxes\n// provided for `files` and `shell` with its own tools (Read, Write, Bash,\n// BashOutput).\n\nexport const CLAUDE_REASONING_LEVELS = [\n ReasoningLevel.Low,\n ReasoningLevel.Medium,\n ReasoningLevel.High,\n ReasoningLevel.Max,\n] as const;\n\n// A reviewer model answering approvals means no person is asked, so it needs\n// a mode that does not promise one: no auto-review, or review or auto.\nexport const AUTO_REVIEW_NEEDS_UNATTENDED_MODE: JsonSchema = {\n anyOf: [\n {\n not: {\n required: ['approvalsReviewer'],\n properties: { approvalsReviewer: { const: ApprovalsReviewer.AutoReview } },\n },\n },\n {\n required: ['permissionMode'],\n properties: { permissionMode: { enum: [PermissionLevel.Review, PermissionLevel.Auto] } },\n },\n ],\n};\n\nexport const nanocodeConfigurationJson = (args: {\n title: string;\n reasoning: readonly ReasoningLevel[];\n}): JsonSchema => ({\n ...configObjectJson({\n required: ['model'],\n title: args.title,\n properties: {\n model: modelJson(),\n reasoning: reasoningJson(args.reasoning),\n inference: inferenceJson(),\n permissionMode: permissionModeJson(),\n approvalsReviewer: approvalsReviewerJson(),\n },\n }),\n allOf: [AUTO_REVIEW_NEEDS_UNATTENDED_MODE],\n});\n\nexport const NANOCODE_CLAUDE_HARNESS: HarnessDefinitionIface = defineHarness({\n title: 'Claude on nanocode',\n description: \"nanocode's Claude engine, run per session on a worker runtime.\",\n configurationSchema: nanocodeConfigurationJson({\n title: 'Claude on nanocode',\n reasoning: CLAUDE_REASONING_LEVELS,\n }),\n features: Object.values(HarnessFeature),\n lowestPermission: PermissionLevel.Ask,\n // Subscriptions are the Claude setup token, used as a bearer.\n inference: {\n vendors: [ModelVendor.Anthropic],\n kinds: [\n InferenceSourceKind.Subscription,\n InferenceSourceKind.ApiKey,\n InferenceSourceKind.Final,\n ],\n delivery: CredentialDelivery.PerRequest,\n },\n interface: FinalHarnessInterface.Nanocode,\n adapter: FinalAcpAdapter.Nanocode,\n run: { worker: { program: FinalWorkerProgram.NanocodeClaude } },\n services: [HarnessService.SessionStore, HarnessService.FrameAttachments],\n mcp: [McpTransportKind.Acp, McpTransportKind.Http],\n consumes: [SandboxWire.HandleRpc],\n supports: { observe: true, resumeReplay: true, authorMeta: true },\n // A prompt that arrives while a turn runs waits for it.
|
|
5
|
-
"mappings": "AAAA,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB,cAAc,uBAAuB,0BAA0B;AAMlF,MAAM,0BAA0B;AAAA,EACrC,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AACjB;AAIO,MAAM,oCAAgD;AAAA,EAC3D,OAAO;AAAA,IACL;AAAA,MACE,KAAK;AAAA,QACH,UAAU,CAAC,mBAAmB;AAAA,QAC9B,YAAY,EAAE,mBAAmB,EAAE,OAAO,kBAAkB,WAAW,EAAE;AAAA,MAC3E;AAAA,IACF;AAAA,IACA;AAAA,MACE,UAAU,CAAC,gBAAgB;AAAA,MAC3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,QAAQ,gBAAgB,IAAI,EAAE,EAAE;AAAA,IACzF;AAAA,EACF;AACF;AAEO,MAAM,4BAA4B,CAAC,UAGvB;AAAA,EACjB,GAAG,iBAAiB;AAAA,IAClB,UAAU,CAAC,OAAO;AAAA,IAClB,OAAO,KAAK;AAAA,IACZ,YAAY;AAAA,MACV,OAAO,UAAU;AAAA,MACjB,WAAW,cAAc,KAAK,SAAS;AAAA,MACvC,WAAW,cAAc;AAAA,MACzB,gBAAgB,mBAAmB;AAAA,MACnC,mBAAmB,sBAAsB;AAAA,IAC3C;AAAA,EACF,CAAC;AAAA,EACD,OAAO,CAAC,iCAAiC;AAC3C;AAEO,MAAM,0BAAkD,cAAc;AAAA,EAC3E,OAAO;AAAA,EACP,aAAa;AAAA,EACb,qBAAqB,0BAA0B;AAAA,IAC7C,OAAO;AAAA,IACP,WAAW;AAAA,EACb,CAAC;AAAA,EACD,UAAU,OAAO,OAAO,cAAc;AAAA,EACtC,kBAAkB,gBAAgB;AAAA;AAAA,EAElC,WAAW;AAAA,IACT,SAAS,CAAC,YAAY,SAAS;AAAA,IAC/B,OAAO;AAAA,MACL,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,IACtB;AAAA,IACA,UAAU,mBAAmB;AAAA,EAC/B;AAAA,EACA,WAAW,sBAAsB;AAAA,EACjC,SAAS,gBAAgB;AAAA,EACzB,KAAK,EAAE,QAAQ,EAAE,SAAS,mBAAmB,eAAe,EAAE;AAAA,EAC9D,UAAU,CAAC,eAAe,cAAc,eAAe,gBAAgB;AAAA,EACvE,KAAK,CAAC,iBAAiB,KAAK,iBAAiB,IAAI;AAAA,EACjD,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,UAAU,EAAE,SAAS,MAAM,cAAc,MAAM,YAAY,KAAK;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import { defineHarness } from '@finalai/agent-definition/authoring';\nimport {\n CredentialDelivery,\n HarnessFeature,\n HarnessService,\n InferenceSourceKind,\n McpTransportKind,\n PermissionLevel,\n PromptWhileRunning,\n SandboxWire,\n type HarnessDefinitionIface,\n type HarnessEnvironmentIface,\n type HarnessSettingsIface,\n type JsonSchema,\n} from '@finalai/agent-provider';\nimport {\n ApprovalsReviewer,\n approvalsReviewerJson,\n configObjectJson,\n harnessSettings,\n inferenceJson,\n modelJson,\n permissionModeJson,\n reasoningJson,\n ReasoningLevel,\n type InferenceInput,\n type PermissionInput,\n} from \"./config-fields.mjs\";\nimport { ModelVendor } from \"./model-reference.mjs\";\nimport { FinalAcpAdapter, FinalHarness, FinalHarnessInterface, FinalWorkerProgram } from \"./names.mjs\";\n\n// nanocode's Claude engine as a worker program. It drives the sandboxes\n// provided for `files` and `shell` with its own tools (Read, Write, Bash,\n// BashOutput).\n\nexport const CLAUDE_REASONING_LEVELS = [\n ReasoningLevel.Low,\n ReasoningLevel.Medium,\n ReasoningLevel.High,\n ReasoningLevel.Max,\n] as const;\n\n// A reviewer model answering approvals means no person is asked, so it needs\n// a mode that does not promise one: no auto-review, or review or auto.\nexport const AUTO_REVIEW_NEEDS_UNATTENDED_MODE: JsonSchema = {\n anyOf: [\n {\n not: {\n required: ['approvalsReviewer'],\n properties: { approvalsReviewer: { const: ApprovalsReviewer.AutoReview } },\n },\n },\n {\n required: ['permissionMode'],\n properties: { permissionMode: { enum: [PermissionLevel.Review, PermissionLevel.Auto] } },\n },\n ],\n};\n\nexport const nanocodeConfigurationJson = (args: {\n title: string;\n reasoning: readonly ReasoningLevel[];\n}): JsonSchema => ({\n ...configObjectJson({\n required: ['model'],\n title: args.title,\n properties: {\n model: modelJson(),\n reasoning: reasoningJson(args.reasoning),\n inference: inferenceJson(),\n permissionMode: permissionModeJson(),\n approvalsReviewer: approvalsReviewerJson(),\n },\n }),\n allOf: [AUTO_REVIEW_NEEDS_UNATTENDED_MODE],\n});\n\nexport const NANOCODE_CLAUDE_HARNESS: HarnessDefinitionIface = defineHarness({\n title: 'Claude on nanocode',\n description: \"nanocode's Claude engine, run per session on a worker runtime.\",\n configurationSchema: nanocodeConfigurationJson({\n title: 'Claude on nanocode',\n reasoning: CLAUDE_REASONING_LEVELS,\n }),\n features: Object.values(HarnessFeature),\n lowestPermission: PermissionLevel.Ask,\n // Subscriptions are the Claude setup token, used as a bearer.\n inference: {\n vendors: [ModelVendor.Anthropic],\n kinds: [\n InferenceSourceKind.Subscription,\n InferenceSourceKind.ApiKey,\n InferenceSourceKind.Final,\n ],\n delivery: CredentialDelivery.PerRequest,\n },\n interface: FinalHarnessInterface.Nanocode,\n adapter: FinalAcpAdapter.Nanocode,\n run: { worker: { program: FinalWorkerProgram.NanocodeClaude } },\n services: [HarnessService.SessionStore, HarnessService.FrameAttachments],\n mcp: [McpTransportKind.Acp, McpTransportKind.Http],\n consumes: [SandboxWire.HandleRpc],\n supports: { observe: true, resumeReplay: true, authorMeta: true },\n // A prompt that arrives while a turn runs waits for it. A lost invocation\n // resumes its running turn by id; an interrupted call's ask is not raised\n // again, and the session service releases it at the next idle.\n promptWhileRunning: PromptWhileRunning.Queue,\n sessionSurvivesDisconnect: true,\n});\n\nexport interface ServerlessNanocodeClaudeInputIface {\n model: string;\n reasoning?:\n | (typeof CLAUDE_REASONING_LEVELS)[number]\n | `${(typeof CLAUDE_REASONING_LEVELS)[number]}`;\n inference?: InferenceInput;\n permissionMode?: PermissionInput;\n approvalsReviewer?: ApprovalsReviewer | `${ApprovalsReviewer}`;\n // The worker-runtime sandbox it runs in; absent: the caller's plan creates one.\n environment?: HarnessEnvironmentIface;\n}\n\nexport const serverlessNanocodeClaude = ({\n environment,\n ...configuration\n}: ServerlessNanocodeClaudeInputIface): HarnessSettingsIface =>\n harnessSettings({ harness: FinalHarness.NanocodeClaude, configuration, environment });\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB,cAAc,uBAAuB,0BAA0B;AAMlF,MAAM,0BAA0B;AAAA,EACrC,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AACjB;AAIO,MAAM,oCAAgD;AAAA,EAC3D,OAAO;AAAA,IACL;AAAA,MACE,KAAK;AAAA,QACH,UAAU,CAAC,mBAAmB;AAAA,QAC9B,YAAY,EAAE,mBAAmB,EAAE,OAAO,kBAAkB,WAAW,EAAE;AAAA,MAC3E;AAAA,IACF;AAAA,IACA;AAAA,MACE,UAAU,CAAC,gBAAgB;AAAA,MAC3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,QAAQ,gBAAgB,IAAI,EAAE,EAAE;AAAA,IACzF;AAAA,EACF;AACF;AAEO,MAAM,4BAA4B,CAAC,UAGvB;AAAA,EACjB,GAAG,iBAAiB;AAAA,IAClB,UAAU,CAAC,OAAO;AAAA,IAClB,OAAO,KAAK;AAAA,IACZ,YAAY;AAAA,MACV,OAAO,UAAU;AAAA,MACjB,WAAW,cAAc,KAAK,SAAS;AAAA,MACvC,WAAW,cAAc;AAAA,MACzB,gBAAgB,mBAAmB;AAAA,MACnC,mBAAmB,sBAAsB;AAAA,IAC3C;AAAA,EACF,CAAC;AAAA,EACD,OAAO,CAAC,iCAAiC;AAC3C;AAEO,MAAM,0BAAkD,cAAc;AAAA,EAC3E,OAAO;AAAA,EACP,aAAa;AAAA,EACb,qBAAqB,0BAA0B;AAAA,IAC7C,OAAO;AAAA,IACP,WAAW;AAAA,EACb,CAAC;AAAA,EACD,UAAU,OAAO,OAAO,cAAc;AAAA,EACtC,kBAAkB,gBAAgB;AAAA;AAAA,EAElC,WAAW;AAAA,IACT,SAAS,CAAC,YAAY,SAAS;AAAA,IAC/B,OAAO;AAAA,MACL,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,IACtB;AAAA,IACA,UAAU,mBAAmB;AAAA,EAC/B;AAAA,EACA,WAAW,sBAAsB;AAAA,EACjC,SAAS,gBAAgB;AAAA,EACzB,KAAK,EAAE,QAAQ,EAAE,SAAS,mBAAmB,eAAe,EAAE;AAAA,EAC9D,UAAU,CAAC,eAAe,cAAc,eAAe,gBAAgB;AAAA,EACvE,KAAK,CAAC,iBAAiB,KAAK,iBAAiB,IAAI;AAAA,EACjD,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,UAAU,EAAE,SAAS,MAAM,cAAc,MAAM,YAAY,KAAK;AAAA;AAAA;AAAA;AAAA,EAIhE,oBAAoB,mBAAmB;AAAA,EACvC,2BAA2B;AAC7B,CAAC;AAcM,MAAM,2BAA2B,CAAC;AAAA,EACvC;AAAA,EACA,GAAG;AACL,MACE,gBAAgB,EAAE,SAAS,aAAa,gBAAgB,eAAe,YAAY,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -47,10 +47,11 @@ const NANOCODE_CODEX_HARNESS = defineHarness({
|
|
|
47
47
|
mcp: [McpTransportKind.Acp, McpTransportKind.Http],
|
|
48
48
|
consumes: [SandboxWire.HandleRpc],
|
|
49
49
|
supports: { observe: true, resumeReplay: true, authorMeta: true },
|
|
50
|
-
// A prompt that arrives while a turn runs steers into it
|
|
51
|
-
//
|
|
50
|
+
// A prompt that arrives while a turn runs steers into it. A lost invocation
|
|
51
|
+
// resumes its running turn by id; an interrupted call's ask is not raised
|
|
52
|
+
// again, and the session service releases it at the next idle.
|
|
52
53
|
promptWhileRunning: PromptWhileRunning.Inject,
|
|
53
|
-
sessionSurvivesDisconnect:
|
|
54
|
+
sessionSurvivesDisconnect: true
|
|
54
55
|
});
|
|
55
56
|
const serverlessNanocodeCodex = ({
|
|
56
57
|
environment,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/harnesses/nanocode-codex.ts"],
|
|
4
|
-
"sourcesContent": ["import { defineHarness } from '@finalai/agent-definition/authoring';\nimport {\n CredentialDelivery,\n HarnessFeature,\n HarnessService,\n InferenceSourceKind,\n McpTransportKind,\n PermissionLevel,\n PromptWhileRunning,\n SandboxWire,\n type HarnessDefinitionIface,\n type HarnessEnvironmentIface,\n type HarnessSettingsIface,\n} from '@finalai/agent-provider';\nimport {\n ReasoningLevel,\n harnessSettings,\n type ApprovalsReviewer,\n type InferenceInput,\n type PermissionInput,\n} from \"./config-fields.mjs\";\nimport { ModelVendor } from \"./model-reference.mjs\";\nimport { FinalAcpAdapter, FinalHarness, FinalHarnessInterface, FinalWorkerProgram } from \"./names.mjs\";\nimport { nanocodeConfigurationJson } from \"./nanocode-claude.mjs\";\n\n// nanocode's Codex engine as a worker program, Responses Lite models only. It\n// drives the sandboxes provided for `files` and `shell` with its own tools\n// (apply_patch, view_image, exec_command, write_stdin).\n\n// The final://schemas/reasoning fragment has no xhigh/ultra yet; nanocode's\n// policies accept the rest.\nexport const CODEX_REASONING_LEVELS = [\n ReasoningLevel.Low,\n ReasoningLevel.Medium,\n ReasoningLevel.High,\n ReasoningLevel.Max,\n] as const;\n\nexport const NANOCODE_CODEX_HARNESS: HarnessDefinitionIface = defineHarness({\n title: 'Codex on nanocode',\n description: \"nanocode's Codex engine, run per session on a worker runtime.\",\n configurationSchema: nanocodeConfigurationJson({\n title: 'Codex on nanocode',\n reasoning: CODEX_REASONING_LEVELS,\n }),\n features: Object.values(HarnessFeature),\n lowestPermission: PermissionLevel.Ask,\n inference: {\n vendors: [ModelVendor.OpenAI],\n kinds: [\n InferenceSourceKind.Subscription,\n InferenceSourceKind.ApiKey,\n InferenceSourceKind.Final,\n ],\n delivery: CredentialDelivery.PerRequest,\n },\n interface: FinalHarnessInterface.Nanocode,\n adapter: FinalAcpAdapter.Nanocode,\n run: { worker: { program: FinalWorkerProgram.NanocodeCodex } },\n services: [HarnessService.FrameAttachments, HarnessService.SubscriptionRelay],\n mcp: [McpTransportKind.Acp, McpTransportKind.Http],\n consumes: [SandboxWire.HandleRpc],\n supports: { observe: true, resumeReplay: true, authorMeta: true },\n // A prompt that arrives while a turn runs steers into it
|
|
5
|
-
"mappings": "AAAA,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AACP,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB,cAAc,uBAAuB,0BAA0B;AACzF,SAAS,iCAAiC;AAQnC,MAAM,yBAAyB;AAAA,EACpC,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AACjB;AAEO,MAAM,yBAAiD,cAAc;AAAA,EAC1E,OAAO;AAAA,EACP,aAAa;AAAA,EACb,qBAAqB,0BAA0B;AAAA,IAC7C,OAAO;AAAA,IACP,WAAW;AAAA,EACb,CAAC;AAAA,EACD,UAAU,OAAO,OAAO,cAAc;AAAA,EACtC,kBAAkB,gBAAgB;AAAA,EAClC,WAAW;AAAA,IACT,SAAS,CAAC,YAAY,MAAM;AAAA,IAC5B,OAAO;AAAA,MACL,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,IACtB;AAAA,IACA,UAAU,mBAAmB;AAAA,EAC/B;AAAA,EACA,WAAW,sBAAsB;AAAA,EACjC,SAAS,gBAAgB;AAAA,EACzB,KAAK,EAAE,QAAQ,EAAE,SAAS,mBAAmB,cAAc,EAAE;AAAA,EAC7D,UAAU,CAAC,eAAe,kBAAkB,eAAe,iBAAiB;AAAA,EAC5E,KAAK,CAAC,iBAAiB,KAAK,iBAAiB,IAAI;AAAA,EACjD,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,UAAU,EAAE,SAAS,MAAM,cAAc,MAAM,YAAY,KAAK;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import { defineHarness } from '@finalai/agent-definition/authoring';\nimport {\n CredentialDelivery,\n HarnessFeature,\n HarnessService,\n InferenceSourceKind,\n McpTransportKind,\n PermissionLevel,\n PromptWhileRunning,\n SandboxWire,\n type HarnessDefinitionIface,\n type HarnessEnvironmentIface,\n type HarnessSettingsIface,\n} from '@finalai/agent-provider';\nimport {\n ReasoningLevel,\n harnessSettings,\n type ApprovalsReviewer,\n type InferenceInput,\n type PermissionInput,\n} from \"./config-fields.mjs\";\nimport { ModelVendor } from \"./model-reference.mjs\";\nimport { FinalAcpAdapter, FinalHarness, FinalHarnessInterface, FinalWorkerProgram } from \"./names.mjs\";\nimport { nanocodeConfigurationJson } from \"./nanocode-claude.mjs\";\n\n// nanocode's Codex engine as a worker program, Responses Lite models only. It\n// drives the sandboxes provided for `files` and `shell` with its own tools\n// (apply_patch, view_image, exec_command, write_stdin).\n\n// The final://schemas/reasoning fragment has no xhigh/ultra yet; nanocode's\n// policies accept the rest.\nexport const CODEX_REASONING_LEVELS = [\n ReasoningLevel.Low,\n ReasoningLevel.Medium,\n ReasoningLevel.High,\n ReasoningLevel.Max,\n] as const;\n\nexport const NANOCODE_CODEX_HARNESS: HarnessDefinitionIface = defineHarness({\n title: 'Codex on nanocode',\n description: \"nanocode's Codex engine, run per session on a worker runtime.\",\n configurationSchema: nanocodeConfigurationJson({\n title: 'Codex on nanocode',\n reasoning: CODEX_REASONING_LEVELS,\n }),\n features: Object.values(HarnessFeature),\n lowestPermission: PermissionLevel.Ask,\n inference: {\n vendors: [ModelVendor.OpenAI],\n kinds: [\n InferenceSourceKind.Subscription,\n InferenceSourceKind.ApiKey,\n InferenceSourceKind.Final,\n ],\n delivery: CredentialDelivery.PerRequest,\n },\n interface: FinalHarnessInterface.Nanocode,\n adapter: FinalAcpAdapter.Nanocode,\n run: { worker: { program: FinalWorkerProgram.NanocodeCodex } },\n services: [HarnessService.FrameAttachments, HarnessService.SubscriptionRelay],\n mcp: [McpTransportKind.Acp, McpTransportKind.Http],\n consumes: [SandboxWire.HandleRpc],\n supports: { observe: true, resumeReplay: true, authorMeta: true },\n // A prompt that arrives while a turn runs steers into it. A lost invocation\n // resumes its running turn by id; an interrupted call's ask is not raised\n // again, and the session service releases it at the next idle.\n promptWhileRunning: PromptWhileRunning.Inject,\n sessionSurvivesDisconnect: true,\n});\n\nexport interface ServerlessNanocodeCodexInputIface {\n model: string;\n reasoning?:\n | (typeof CODEX_REASONING_LEVELS)[number]\n | `${(typeof CODEX_REASONING_LEVELS)[number]}`;\n inference?: InferenceInput;\n permissionMode?: PermissionInput;\n approvalsReviewer?: ApprovalsReviewer | `${ApprovalsReviewer}`;\n // The worker-runtime sandbox it runs in; absent: the caller's plan creates one.\n environment?: HarnessEnvironmentIface;\n}\n\nexport const serverlessNanocodeCodex = ({\n environment,\n ...configuration\n}: ServerlessNanocodeCodexInputIface): HarnessSettingsIface =>\n harnessSettings({ harness: FinalHarness.NanocodeCodex, configuration, environment });\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AACP,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB,cAAc,uBAAuB,0BAA0B;AACzF,SAAS,iCAAiC;AAQnC,MAAM,yBAAyB;AAAA,EACpC,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AACjB;AAEO,MAAM,yBAAiD,cAAc;AAAA,EAC1E,OAAO;AAAA,EACP,aAAa;AAAA,EACb,qBAAqB,0BAA0B;AAAA,IAC7C,OAAO;AAAA,IACP,WAAW;AAAA,EACb,CAAC;AAAA,EACD,UAAU,OAAO,OAAO,cAAc;AAAA,EACtC,kBAAkB,gBAAgB;AAAA,EAClC,WAAW;AAAA,IACT,SAAS,CAAC,YAAY,MAAM;AAAA,IAC5B,OAAO;AAAA,MACL,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,IACtB;AAAA,IACA,UAAU,mBAAmB;AAAA,EAC/B;AAAA,EACA,WAAW,sBAAsB;AAAA,EACjC,SAAS,gBAAgB;AAAA,EACzB,KAAK,EAAE,QAAQ,EAAE,SAAS,mBAAmB,cAAc,EAAE;AAAA,EAC7D,UAAU,CAAC,eAAe,kBAAkB,eAAe,iBAAiB;AAAA,EAC5E,KAAK,CAAC,iBAAiB,KAAK,iBAAiB,IAAI;AAAA,EACjD,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,UAAU,EAAE,SAAS,MAAM,cAAc,MAAM,YAAY,KAAK;AAAA;AAAA;AAAA;AAAA,EAIhE,oBAAoB,mBAAmB;AAAA,EACvC,2BAA2B;AAC7B,CAAC;AAcM,MAAM,0BAA0B,CAAC;AAAA,EACtC;AAAA,EACA,GAAG;AACL,MACE,gBAAgB,EAAE,SAAS,aAAa,eAAe,eAAe,YAAY,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -54,10 +54,11 @@ const PI_HARNESS = defineHarness({
|
|
|
54
54
|
mcp: [McpTransportKind.Acp, McpTransportKind.Http],
|
|
55
55
|
consumes: [SandboxWire.HandleRpc],
|
|
56
56
|
supports: { observe: true, resumeReplay: true, authorMeta: true },
|
|
57
|
-
// A steer joins the running turn.
|
|
58
|
-
//
|
|
57
|
+
// A steer joins the running turn. A lost invocation resumes its turn from
|
|
58
|
+
// durable storage and raises open asks again under their session-unique ids,
|
|
59
|
+
// so the session survives a disconnect.
|
|
59
60
|
promptWhileRunning: PromptWhileRunning.Inject,
|
|
60
|
-
sessionSurvivesDisconnect:
|
|
61
|
+
sessionSurvivesDisconnect: true
|
|
61
62
|
});
|
|
62
63
|
const serverlessPi = ({
|
|
63
64
|
environment,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/harnesses/pi.ts"],
|
|
4
|
-
"sourcesContent": ["import { defineHarness } from '@finalai/agent-definition/authoring';\nimport {\n CredentialDelivery,\n HarnessFeature,\n HarnessService,\n InferenceSourceKind,\n McpTransportKind,\n PermissionLevel,\n PromptWhileRunning,\n SandboxWire,\n type HarnessDefinitionIface,\n type HarnessEnvironmentIface,\n type HarnessSettingsIface,\n} from '@finalai/agent-provider';\nimport {\n configObjectJson,\n harnessSettings,\n inferenceJson,\n modelJson,\n permissionModeJson,\n reasoningJson,\n ReasoningLevel,\n type InferenceInput,\n type PermissionInput,\n} from \"./config-fields.mjs\";\nimport { ModelVendor } from \"./model-reference.mjs\";\nimport { FinalAcpAdapter, FinalHarness, FinalHarnessInterface, FinalWorkerProgram } from \"./names.mjs\";\n\n// Pi (pi-mono) as a worker program, one durable instance per harness session.\n// It drives the sandboxes provided for `files` and `shell` with its own tools\n// (read, write, edit, grep, find, ls, bash). There is no public process\n// adapter for Pi's interface yet, so Pi runs only as a worker or at a URL.\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\nexport const PI_HARNESS: HarnessDefinitionIface = defineHarness({\n title: 'Pi',\n description: 'The Pi coding agent, run per session on a worker runtime.',\n configurationSchema: configObjectJson({\n required: ['model'],\n title: 'Pi',\n properties: {\n model: modelJson(),\n reasoning: reasoningJson(PI_REASONING_LEVELS),\n inference: inferenceJson(),\n permissionMode: permissionModeJson(),\n },\n }),\n features: Object.values(HarnessFeature),\n lowestPermission: PermissionLevel.Ask,\n inference: {\n vendors: [ModelVendor.OpenRouter, ModelVendor.OpenAI, ModelVendor.Anthropic],\n kinds: [InferenceSourceKind.ApiKey, InferenceSourceKind.Final],\n delivery: CredentialDelivery.PerRequest,\n },\n interface: FinalHarnessInterface.PiAgent,\n adapter: FinalAcpAdapter.Pi,\n run: { worker: { program: FinalWorkerProgram.Pi } },\n services: [HarnessService.FrameAttachments],\n mcp: [McpTransportKind.Acp, McpTransportKind.Http],\n consumes: [SandboxWire.HandleRpc],\n supports: { observe: true, resumeReplay: true, authorMeta: true },\n // A steer joins the running turn.
|
|
5
|
-
"mappings": "AAAA,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB,cAAc,uBAAuB,0BAA0B;AAOlF,MAAM,sBAAsB;AAAA,EACjC,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AACjB;AAEO,MAAM,aAAqC,cAAc;AAAA,EAC9D,OAAO;AAAA,EACP,aAAa;AAAA,EACb,qBAAqB,iBAAiB;AAAA,IACpC,UAAU,CAAC,OAAO;AAAA,IAClB,OAAO;AAAA,IACP,YAAY;AAAA,MACV,OAAO,UAAU;AAAA,MACjB,WAAW,cAAc,mBAAmB;AAAA,MAC5C,WAAW,cAAc;AAAA,MACzB,gBAAgB,mBAAmB;AAAA,IACrC;AAAA,EACF,CAAC;AAAA,EACD,UAAU,OAAO,OAAO,cAAc;AAAA,EACtC,kBAAkB,gBAAgB;AAAA,EAClC,WAAW;AAAA,IACT,SAAS,CAAC,YAAY,YAAY,YAAY,QAAQ,YAAY,SAAS;AAAA,IAC3E,OAAO,CAAC,oBAAoB,QAAQ,oBAAoB,KAAK;AAAA,IAC7D,UAAU,mBAAmB;AAAA,EAC/B;AAAA,EACA,WAAW,sBAAsB;AAAA,EACjC,SAAS,gBAAgB;AAAA,EACzB,KAAK,EAAE,QAAQ,EAAE,SAAS,mBAAmB,GAAG,EAAE;AAAA,EAClD,UAAU,CAAC,eAAe,gBAAgB;AAAA,EAC1C,KAAK,CAAC,iBAAiB,KAAK,iBAAiB,IAAI;AAAA,EACjD,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,UAAU,EAAE,SAAS,MAAM,cAAc,MAAM,YAAY,KAAK;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import { defineHarness } from '@finalai/agent-definition/authoring';\nimport {\n CredentialDelivery,\n HarnessFeature,\n HarnessService,\n InferenceSourceKind,\n McpTransportKind,\n PermissionLevel,\n PromptWhileRunning,\n SandboxWire,\n type HarnessDefinitionIface,\n type HarnessEnvironmentIface,\n type HarnessSettingsIface,\n} from '@finalai/agent-provider';\nimport {\n configObjectJson,\n harnessSettings,\n inferenceJson,\n modelJson,\n permissionModeJson,\n reasoningJson,\n ReasoningLevel,\n type InferenceInput,\n type PermissionInput,\n} from \"./config-fields.mjs\";\nimport { ModelVendor } from \"./model-reference.mjs\";\nimport { FinalAcpAdapter, FinalHarness, FinalHarnessInterface, FinalWorkerProgram } from \"./names.mjs\";\n\n// Pi (pi-mono) as a worker program, one durable instance per harness session.\n// It drives the sandboxes provided for `files` and `shell` with its own tools\n// (read, write, edit, grep, find, ls, bash). There is no public process\n// adapter for Pi's interface yet, so Pi runs only as a worker or at a URL.\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\nexport const PI_HARNESS: HarnessDefinitionIface = defineHarness({\n title: 'Pi',\n description: 'The Pi coding agent, run per session on a worker runtime.',\n configurationSchema: configObjectJson({\n required: ['model'],\n title: 'Pi',\n properties: {\n model: modelJson(),\n reasoning: reasoningJson(PI_REASONING_LEVELS),\n inference: inferenceJson(),\n permissionMode: permissionModeJson(),\n },\n }),\n features: Object.values(HarnessFeature),\n lowestPermission: PermissionLevel.Ask,\n inference: {\n vendors: [ModelVendor.OpenRouter, ModelVendor.OpenAI, ModelVendor.Anthropic],\n kinds: [InferenceSourceKind.ApiKey, InferenceSourceKind.Final],\n delivery: CredentialDelivery.PerRequest,\n },\n interface: FinalHarnessInterface.PiAgent,\n adapter: FinalAcpAdapter.Pi,\n run: { worker: { program: FinalWorkerProgram.Pi } },\n services: [HarnessService.FrameAttachments],\n mcp: [McpTransportKind.Acp, McpTransportKind.Http],\n consumes: [SandboxWire.HandleRpc],\n supports: { observe: true, resumeReplay: true, authorMeta: true },\n // A steer joins the running turn. A lost invocation resumes its turn from\n // durable storage and raises open asks again under their session-unique ids,\n // so the session survives a disconnect.\n promptWhileRunning: PromptWhileRunning.Inject,\n sessionSurvivesDisconnect: true,\n});\n\nexport interface ServerlessPiInputIface {\n model: string;\n reasoning?: (typeof PI_REASONING_LEVELS)[number] | `${(typeof PI_REASONING_LEVELS)[number]}`;\n inference?: InferenceInput;\n permissionMode?: PermissionInput;\n // The worker-runtime sandbox it runs in, or an endpoint already running it;\n // absent: the client creates one the session or conversation owns.\n environment?: HarnessEnvironmentIface;\n}\n\nexport const serverlessPi = ({\n environment,\n ...configuration\n}: ServerlessPiInputIface): HarnessSettingsIface =>\n harnessSettings({ harness: FinalHarness.Pi, configuration, environment });\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB,cAAc,uBAAuB,0BAA0B;AAOlF,MAAM,sBAAsB;AAAA,EACjC,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AACjB;AAEO,MAAM,aAAqC,cAAc;AAAA,EAC9D,OAAO;AAAA,EACP,aAAa;AAAA,EACb,qBAAqB,iBAAiB;AAAA,IACpC,UAAU,CAAC,OAAO;AAAA,IAClB,OAAO;AAAA,IACP,YAAY;AAAA,MACV,OAAO,UAAU;AAAA,MACjB,WAAW,cAAc,mBAAmB;AAAA,MAC5C,WAAW,cAAc;AAAA,MACzB,gBAAgB,mBAAmB;AAAA,IACrC;AAAA,EACF,CAAC;AAAA,EACD,UAAU,OAAO,OAAO,cAAc;AAAA,EACtC,kBAAkB,gBAAgB;AAAA,EAClC,WAAW;AAAA,IACT,SAAS,CAAC,YAAY,YAAY,YAAY,QAAQ,YAAY,SAAS;AAAA,IAC3E,OAAO,CAAC,oBAAoB,QAAQ,oBAAoB,KAAK;AAAA,IAC7D,UAAU,mBAAmB;AAAA,EAC/B;AAAA,EACA,WAAW,sBAAsB;AAAA,EACjC,SAAS,gBAAgB;AAAA,EACzB,KAAK,EAAE,QAAQ,EAAE,SAAS,mBAAmB,GAAG,EAAE;AAAA,EAClD,UAAU,CAAC,eAAe,gBAAgB;AAAA,EAC1C,KAAK,CAAC,iBAAiB,KAAK,iBAAiB,IAAI;AAAA,EACjD,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,UAAU,EAAE,SAAS,MAAM,cAAc,MAAM,YAAY,KAAK;AAAA;AAAA;AAAA;AAAA,EAIhE,oBAAoB,mBAAmB;AAAA,EACvC,2BAA2B;AAC7B,CAAC;AAYM,MAAM,eAAe,CAAC;AAAA,EAC3B;AAAA,EACA,GAAG;AACL,MACE,gBAAgB,EAAE,SAAS,aAAa,IAAI,eAAe,YAAY,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@finalai/final-agent-provider",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Final's harness and ACP adapter definitions and the general harness provider, computer, device and local sandbox providers, and Final's MCP gateway integration.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -132,11 +132,11 @@
|
|
|
132
132
|
},
|
|
133
133
|
"dependencies": {
|
|
134
134
|
"@agentclientprotocol/sdk": "1.8.0",
|
|
135
|
-
"@finalai/agent-protocol": "0.
|
|
136
|
-
"@finalai/agent-provider": "0.
|
|
135
|
+
"@finalai/agent-protocol": "0.15.0",
|
|
136
|
+
"@finalai/agent-provider": "0.16.0",
|
|
137
137
|
"@finalai/computers": "0.3.2",
|
|
138
138
|
"zod": "4.6.6",
|
|
139
|
-
"@finalai/agent-definition": "0.
|
|
139
|
+
"@finalai/agent-definition": "0.15.0"
|
|
140
140
|
},
|
|
141
141
|
"engines": {
|
|
142
142
|
"node": ">=26"
|