@finalai/agent-provider 0.1.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.

Potentially problematic release.


This version of @finalai/agent-provider might be problematic. Click here for more details.

Files changed (176) hide show
  1. package/README.md +12 -0
  2. package/dist/modules/channel-context.d.mts +102 -0
  3. package/dist/modules/channel-context.mjs +52 -0
  4. package/dist/modules/channel-context.mjs.map +7 -0
  5. package/dist/modules/channel-socket.d.mts +65 -0
  6. package/dist/modules/channel-socket.mjs +188 -0
  7. package/dist/modules/channel-socket.mjs.map +7 -0
  8. package/dist/modules/channel.d.mts +382 -0
  9. package/dist/modules/channel.mjs +146 -0
  10. package/dist/modules/channel.mjs.map +7 -0
  11. package/dist/modules/conformance/agent.d.mts +20 -0
  12. package/dist/modules/conformance/agent.mjs +623 -0
  13. package/dist/modules/conformance/agent.mjs.map +7 -0
  14. package/dist/modules/conformance/fixtures.d.mts +41 -0
  15. package/dist/modules/conformance/fixtures.mjs +190 -0
  16. package/dist/modules/conformance/fixtures.mjs.map +7 -0
  17. package/dist/modules/conformance/harness-kit.d.mts +82 -0
  18. package/dist/modules/conformance/harness-kit.mjs +1303 -0
  19. package/dist/modules/conformance/harness-kit.mjs.map +7 -0
  20. package/dist/modules/conformance/image.d.mts +2 -0
  21. package/dist/modules/conformance/image.mjs +79 -0
  22. package/dist/modules/conformance/image.mjs.map +7 -0
  23. package/dist/modules/conformance/index.d.mts +8 -0
  24. package/dist/modules/conformance/index.mjs +12 -0
  25. package/dist/modules/conformance/index.mjs.map +7 -0
  26. package/dist/modules/conformance/local-harness.d.mts +25 -0
  27. package/dist/modules/conformance/local-harness.mjs +108 -0
  28. package/dist/modules/conformance/local-harness.mjs.map +7 -0
  29. package/dist/modules/conformance/protocol.d.mts +30 -0
  30. package/dist/modules/conformance/protocol.mjs +56 -0
  31. package/dist/modules/conformance/protocol.mjs.map +7 -0
  32. package/dist/modules/conformance/sandbox-kit.d.mts +19 -0
  33. package/dist/modules/conformance/sandbox-kit.mjs +320 -0
  34. package/dist/modules/conformance/sandbox-kit.mjs.map +7 -0
  35. package/dist/modules/conformance/scripted-model/chat-completions.d.mts +30 -0
  36. package/dist/modules/conformance/scripted-model/chat-completions.mjs +125 -0
  37. package/dist/modules/conformance/scripted-model/chat-completions.mjs.map +7 -0
  38. package/dist/modules/conformance/scripted-model/directives.d.mts +84 -0
  39. package/dist/modules/conformance/scripted-model/directives.mjs +304 -0
  40. package/dist/modules/conformance/scripted-model/directives.mjs.map +7 -0
  41. package/dist/modules/conformance/scripted-model/handler.d.mts +14 -0
  42. package/dist/modules/conformance/scripted-model/handler.mjs +133 -0
  43. package/dist/modules/conformance/scripted-model/handler.mjs.map +7 -0
  44. package/dist/modules/conformance/scripted-model/index.d.mts +6 -0
  45. package/dist/modules/conformance/scripted-model/index.mjs +7 -0
  46. package/dist/modules/conformance/scripted-model/index.mjs.map +7 -0
  47. package/dist/modules/conformance/scripted-model/messages.d.mts +39 -0
  48. package/dist/modules/conformance/scripted-model/messages.mjs +139 -0
  49. package/dist/modules/conformance/scripted-model/messages.mjs.map +7 -0
  50. package/dist/modules/conformance/scripted-model/responses.d.mts +62 -0
  51. package/dist/modules/conformance/scripted-model/responses.mjs +273 -0
  52. package/dist/modules/conformance/scripted-model/responses.mjs.map +7 -0
  53. package/dist/modules/conformance/scripted-model/sse.d.mts +15 -0
  54. package/dist/modules/conformance/scripted-model/sse.mjs +75 -0
  55. package/dist/modules/conformance/scripted-model/sse.mjs.map +7 -0
  56. package/dist/modules/conformance/v1-agent.d.mts +24 -0
  57. package/dist/modules/conformance/v1-agent.mjs +40 -0
  58. package/dist/modules/conformance/v1-agent.mjs.map +7 -0
  59. package/dist/modules/credential-routes.d.mts +24 -0
  60. package/dist/modules/credential-routes.mjs +25 -0
  61. package/dist/modules/credential-routes.mjs.map +7 -0
  62. package/dist/modules/credentials.d.mts +206 -0
  63. package/dist/modules/credentials.mjs +207 -0
  64. package/dist/modules/credentials.mjs.map +7 -0
  65. package/dist/modules/dynamic.d.mts +32 -0
  66. package/dist/modules/dynamic.mjs +77 -0
  67. package/dist/modules/dynamic.mjs.map +7 -0
  68. package/dist/modules/harness.d.mts +397 -0
  69. package/dist/modules/harness.mjs +213 -0
  70. package/dist/modules/harness.mjs.map +7 -0
  71. package/dist/modules/index.d.mts +15 -0
  72. package/dist/modules/index.mjs +40 -0
  73. package/dist/modules/index.mjs.map +7 -0
  74. package/dist/modules/json.d.mts +12 -0
  75. package/dist/modules/json.mjs +19 -0
  76. package/dist/modules/json.mjs.map +7 -0
  77. package/dist/modules/local-channel-socket.d.mts +23 -0
  78. package/dist/modules/local-channel-socket.mjs +141 -0
  79. package/dist/modules/local-channel-socket.mjs.map +7 -0
  80. package/dist/modules/manifest.d.mts +558 -0
  81. package/dist/modules/manifest.mjs +266 -0
  82. package/dist/modules/manifest.mjs.map +7 -0
  83. package/dist/modules/mcp-content.d.mts +21 -0
  84. package/dist/modules/mcp-content.mjs +86 -0
  85. package/dist/modules/mcp-content.mjs.map +7 -0
  86. package/dist/modules/provider-ref.d.mts +29 -0
  87. package/dist/modules/provider-ref.mjs +55 -0
  88. package/dist/modules/provider-ref.mjs.map +7 -0
  89. package/dist/modules/sandbox/bytes.d.mts +9 -0
  90. package/dist/modules/sandbox/bytes.mjs +154 -0
  91. package/dist/modules/sandbox/bytes.mjs.map +7 -0
  92. package/dist/modules/sandbox/client.d.mts +51 -0
  93. package/dist/modules/sandbox/client.mjs +500 -0
  94. package/dist/modules/sandbox/client.mjs.map +7 -0
  95. package/dist/modules/sandbox/confined-files.d.mts +22 -0
  96. package/dist/modules/sandbox/confined-files.mjs +142 -0
  97. package/dist/modules/sandbox/confined-files.mjs.map +7 -0
  98. package/dist/modules/sandbox/convenience.d.mts +10 -0
  99. package/dist/modules/sandbox/convenience.mjs +116 -0
  100. package/dist/modules/sandbox/convenience.mjs.map +7 -0
  101. package/dist/modules/sandbox/editor.d.mts +49 -0
  102. package/dist/modules/sandbox/editor.mjs +43 -0
  103. package/dist/modules/sandbox/editor.mjs.map +7 -0
  104. package/dist/modules/sandbox/frame-channel.d.mts +47 -0
  105. package/dist/modules/sandbox/frame-channel.mjs +153 -0
  106. package/dist/modules/sandbox/frame-channel.mjs.map +7 -0
  107. package/dist/modules/sandbox/index.d.mts +18 -0
  108. package/dist/modules/sandbox/index.mjs +70 -0
  109. package/dist/modules/sandbox/index.mjs.map +7 -0
  110. package/dist/modules/sandbox/mcp-channel.d.mts +9 -0
  111. package/dist/modules/sandbox/mcp-channel.mjs +77 -0
  112. package/dist/modules/sandbox/mcp-channel.mjs.map +7 -0
  113. package/dist/modules/sandbox/mcp-hosted.d.mts +46 -0
  114. package/dist/modules/sandbox/mcp-hosted.mjs +221 -0
  115. package/dist/modules/sandbox/mcp-hosted.mjs.map +7 -0
  116. package/dist/modules/sandbox/mcp-search.d.mts +51 -0
  117. package/dist/modules/sandbox/mcp-search.mjs +129 -0
  118. package/dist/modules/sandbox/mcp-search.mjs.map +7 -0
  119. package/dist/modules/sandbox/mcp-shell.d.mts +21 -0
  120. package/dist/modules/sandbox/mcp-shell.mjs +205 -0
  121. package/dist/modules/sandbox/mcp-shell.mjs.map +7 -0
  122. package/dist/modules/sandbox/mcp-testing.d.mts +11 -0
  123. package/dist/modules/sandbox/mcp-testing.mjs +33 -0
  124. package/dist/modules/sandbox/mcp-testing.mjs.map +7 -0
  125. package/dist/modules/sandbox/mcp.d.mts +83 -0
  126. package/dist/modules/sandbox/mcp.mjs +971 -0
  127. package/dist/modules/sandbox/mcp.mjs.map +7 -0
  128. package/dist/modules/sandbox/memory-sandbox.d.mts +32 -0
  129. package/dist/modules/sandbox/memory-sandbox.mjs +416 -0
  130. package/dist/modules/sandbox/memory-sandbox.mjs.map +7 -0
  131. package/dist/modules/sandbox/memory-shell.d.mts +29 -0
  132. package/dist/modules/sandbox/memory-shell.mjs +278 -0
  133. package/dist/modules/sandbox/memory-shell.mjs.map +7 -0
  134. package/dist/modules/sandbox/open-scope-node.d.mts +4 -0
  135. package/dist/modules/sandbox/open-scope-node.mjs +19 -0
  136. package/dist/modules/sandbox/open-scope-node.mjs.map +7 -0
  137. package/dist/modules/sandbox/open-scope.d.mts +16 -0
  138. package/dist/modules/sandbox/open-scope.mjs +66 -0
  139. package/dist/modules/sandbox/open-scope.mjs.map +7 -0
  140. package/dist/modules/sandbox/paths.d.mts +7 -0
  141. package/dist/modules/sandbox/paths.mjs +50 -0
  142. package/dist/modules/sandbox/paths.mjs.map +7 -0
  143. package/dist/modules/sandbox/rpc-peer.d.mts +35 -0
  144. package/dist/modules/sandbox/rpc-peer.mjs +224 -0
  145. package/dist/modules/sandbox/rpc-peer.mjs.map +7 -0
  146. package/dist/modules/sandbox/seeds.d.mts +26 -0
  147. package/dist/modules/sandbox/seeds.mjs +228 -0
  148. package/dist/modules/sandbox/seeds.mjs.map +7 -0
  149. package/dist/modules/sandbox/server.d.mts +66 -0
  150. package/dist/modules/sandbox/server.mjs +567 -0
  151. package/dist/modules/sandbox/server.mjs.map +7 -0
  152. package/dist/modules/sandbox/snapshots.d.mts +49 -0
  153. package/dist/modules/sandbox/snapshots.mjs +55 -0
  154. package/dist/modules/sandbox/snapshots.mjs.map +7 -0
  155. package/dist/modules/sandbox/stream-mux.d.mts +18 -0
  156. package/dist/modules/sandbox/stream-mux.mjs +285 -0
  157. package/dist/modules/sandbox/stream-mux.mjs.map +7 -0
  158. package/dist/modules/sandbox/testing.d.mts +25 -0
  159. package/dist/modules/sandbox/testing.mjs +64 -0
  160. package/dist/modules/sandbox/testing.mjs.map +7 -0
  161. package/dist/modules/sandbox/types.d.mts +352 -0
  162. package/dist/modules/sandbox/types.mjs +86 -0
  163. package/dist/modules/sandbox/types.mjs.map +7 -0
  164. package/dist/modules/sandbox/wire.d.mts +671 -0
  165. package/dist/modules/sandbox/wire.mjs +537 -0
  166. package/dist/modules/sandbox/wire.mjs.map +7 -0
  167. package/dist/modules/sandbox/workspace-root.d.mts +8 -0
  168. package/dist/modules/sandbox/workspace-root.mjs +79 -0
  169. package/dist/modules/sandbox/workspace-root.mjs.map +7 -0
  170. package/dist/modules/schemas.d.mts +121 -0
  171. package/dist/modules/schemas.mjs +146 -0
  172. package/dist/modules/schemas.mjs.map +7 -0
  173. package/dist/modules/semantic-events.d.mts +31 -0
  174. package/dist/modules/semantic-events.mjs +23 -0
  175. package/dist/modules/semantic-events.mjs.map +7 -0
  176. package/package.json +199 -0
@@ -0,0 +1,266 @@
1
+ import * as z from "zod";
2
+ import { containsDynamicSlot, DynamicEvent, maybeDynamic } from "./dynamic.mjs";
3
+ import { jsonObjectSchema, jsonSchemaSchema, jsonValueSchema } from "./json.mjs";
4
+ import { packageRef, providerRefSchema } from "./provider-ref.mjs";
5
+ const MANIFEST_VERSION = 2;
6
+ var BaseCapability = /* @__PURE__ */ ((BaseCapability2) => {
7
+ BaseCapability2["Shell"] = "shell";
8
+ BaseCapability2["Files"] = "files";
9
+ BaseCapability2["Process"] = "process";
10
+ BaseCapability2["Ports"] = "ports";
11
+ BaseCapability2["Browser"] = "browser";
12
+ BaseCapability2["ComputerUse"] = "computerUse";
13
+ return BaseCapability2;
14
+ })(BaseCapability || {});
15
+ var ToolApproval = /* @__PURE__ */ ((ToolApproval2) => {
16
+ ToolApproval2["Allow"] = "allow";
17
+ ToolApproval2["Ask"] = "ask";
18
+ return ToolApproval2;
19
+ })(ToolApproval || {});
20
+ var SandboxAccess = /* @__PURE__ */ ((SandboxAccess2) => {
21
+ SandboxAccess2["Read"] = "read";
22
+ SandboxAccess2["Execute"] = "execute";
23
+ SandboxAccess2["Write"] = "write";
24
+ return SandboxAccess2;
25
+ })(SandboxAccess || {});
26
+ const SANDBOX_ACCESS_RANK = {
27
+ ["read" /* Read */]: 0,
28
+ ["execute" /* Execute */]: 1,
29
+ ["write" /* Write */]: 2
30
+ };
31
+ const sandboxAccessAtLeast = (access, floor) => SANDBOX_ACCESS_RANK[access] >= SANDBOX_ACCESS_RANK[floor];
32
+ const narrowerSandboxAccess = (a, b) => SANDBOX_ACCESS_RANK[a] <= SANDBOX_ACCESS_RANK[b] ? a : b;
33
+ var SandboxAttach = /* @__PURE__ */ ((SandboxAttach2) => {
34
+ SandboxAttach2["Lazy"] = "lazy";
35
+ SandboxAttach2["OnPrompt"] = "on-prompt";
36
+ return SandboxAttach2;
37
+ })(SandboxAttach || {});
38
+ var McpServerBindingKind = /* @__PURE__ */ ((McpServerBindingKind2) => {
39
+ McpServerBindingKind2["Worker"] = "worker";
40
+ McpServerBindingKind2["Http"] = "http";
41
+ return McpServerBindingKind2;
42
+ })(McpServerBindingKind || {});
43
+ var ScheduleTarget = /* @__PURE__ */ ((ScheduleTarget2) => {
44
+ ScheduleTarget2["OwnerDirect"] = "owner-direct";
45
+ ScheduleTarget2["BoundConversation"] = "bound-conversation";
46
+ return ScheduleTarget2;
47
+ })(ScheduleTarget || {});
48
+ var ScheduleDelivery = /* @__PURE__ */ ((ScheduleDelivery2) => {
49
+ ScheduleDelivery2["Always"] = "always";
50
+ ScheduleDelivery2["IfNeeded"] = "if_needed";
51
+ return ScheduleDelivery2;
52
+ })(ScheduleDelivery || {});
53
+ const identitySchema = z.object({
54
+ name: z.string().min(1).max(120),
55
+ description: z.string().max(2e3).nullable(),
56
+ avatarUrl: z.string().url().nullable()
57
+ });
58
+ var InputApprovalKind = /* @__PURE__ */ ((InputApprovalKind2) => {
59
+ InputApprovalKind2["Tool"] = "tool";
60
+ InputApprovalKind2["Connection"] = "connection";
61
+ return InputApprovalKind2;
62
+ })(InputApprovalKind || {});
63
+ const inputApprovalSchema = z.object({
64
+ kind: z.nativeEnum(InputApprovalKind),
65
+ export: z.string().min(1),
66
+ // Connection default when absent; otherwise tools.approval[policyKey].
67
+ policyKey: z.string().min(1).optional(),
68
+ dynamic: jsonObjectSchema.optional()
69
+ });
70
+ const toolDescriptorSchema = z.object({
71
+ name: z.string().min(1),
72
+ description: z.string(),
73
+ inputSchema: jsonSchemaSchema,
74
+ outputSchema: jsonSchemaSchema.optional(),
75
+ annotations: z.object({
76
+ title: z.string().optional(),
77
+ readOnlyHint: z.boolean().optional(),
78
+ destructiveHint: z.boolean().optional(),
79
+ idempotentHint: z.boolean().optional(),
80
+ openWorldHint: z.boolean().optional()
81
+ }).optional(),
82
+ // Bundle export implementing it ('tools/lookup_release_notes').
83
+ export: z.string().min(1).optional(),
84
+ // Boundary snapshot used to reconstruct dynamic tools after isolate eviction.
85
+ dynamic: jsonObjectSchema.optional(),
86
+ inputApproval: inputApprovalSchema.optional()
87
+ });
88
+ const mcpAuthSchema = z.union([
89
+ z.object({ secretKey: z.string().min(1), headerName: z.string().min(1).nullable() }),
90
+ // Resolved by the broker to a session-scoped grant (Final's own MCP server).
91
+ z.object({ kind: z.literal("final-session") })
92
+ ]);
93
+ const toolApprovalsSchema = z.record(z.string(), z.nativeEnum(ToolApproval)).nullable();
94
+ const workerMcpServerBindingSchema = z.object({
95
+ key: z.string().min(1),
96
+ kind: z.literal("worker" /* Worker */),
97
+ tools: z.array(toolDescriptorSchema),
98
+ approvals: toolApprovalsSchema
99
+ });
100
+ const httpMcpServerBindingSchema = z.object({
101
+ key: z.string().min(1),
102
+ kind: z.literal("http" /* Http */),
103
+ url: z.string().url(),
104
+ auth: mcpAuthSchema.nullable(),
105
+ headers: z.record(z.string(), z.string()).default({}),
106
+ // Null allows every tool the server lists, each with the default approval.
107
+ approvals: toolApprovalsSchema,
108
+ // Tools hidden even when `approvals` would expose them.
109
+ deny: z.array(z.string().min(1)).optional(),
110
+ // The authored resolver that produced this connection, for retained boundary values.
111
+ dynamicResolver: z.string().min(1).optional(),
112
+ inputApprovals: z.record(z.string(), inputApprovalSchema).optional()
113
+ });
114
+ const mcpServerBindingSchema = z.discriminatedUnion("kind", [
115
+ workerMcpServerBindingSchema,
116
+ httpMcpServerBindingSchema
117
+ ]);
118
+ const sandboxBindingSchema = z.object({
119
+ provider: providerRefSchema,
120
+ // Provider-defined environment options (`computer`: a setup guide reference or
121
+ // inline guide plus start-time parameters). Validated by the provider.
122
+ environment: maybeDynamic(jsonValueSchema),
123
+ access: z.nativeEnum(SandboxAccess).default("write" /* Write */),
124
+ attach: z.nativeEnum(SandboxAttach).default("lazy" /* Lazy */)
125
+ });
126
+ const baseToolsSchema = z.object({
127
+ base: z.partialRecord(z.nativeEnum(BaseCapability), z.object({ target: z.string().min(1) })),
128
+ // Capabilities declared on the harness's own host with no sandbox target
129
+ // (`baseTools({ shell: harnessHost })`): only a harness that
130
+ // provides them natively (host-disableable, host-fixed) can serve them.
131
+ host: z.array(z.nativeEnum(BaseCapability)).optional()
132
+ });
133
+ const channelBindingSchema = z.object({
134
+ // Stable within the definition; publish maps it to a binding id.
135
+ key: z.string().min(1),
136
+ channel: providerRefSchema,
137
+ config: jsonObjectSchema.default({}),
138
+ source: z.string().optional()
139
+ });
140
+ const hookBindingSchema = z.object({
141
+ slug: z.string().min(1),
142
+ export: z.string().min(1),
143
+ events: z.array(z.string().min(1)).min(1)
144
+ });
145
+ const scheduleDefinitionSchema = z.object({
146
+ key: z.string().min(1),
147
+ cron: z.string().min(1),
148
+ timezone: z.string().min(1),
149
+ prompt: z.string().min(1),
150
+ target: z.nativeEnum(ScheduleTarget)
151
+ });
152
+ const bundleSchema = z.object({
153
+ // Absent on historical revisions: the host must inspect their resources.
154
+ hasPreparationFiles: z.boolean().optional(),
155
+ hash: z.string().min(1),
156
+ // Dynamic slot path → resolver export and events.
157
+ resolvers: z.record(
158
+ z.string(),
159
+ z.object({ export: z.string().min(1), events: z.array(z.nativeEnum(DynamicEvent)).min(1) })
160
+ )
161
+ });
162
+ const harnessBindingSchema = z.object({
163
+ harness: providerRefSchema,
164
+ // Validated against the harness's configSchema; may contain dynamic slots at
165
+ // any depth (an instruction fragment, the model).
166
+ config: maybeDynamic(jsonValueSchema)
167
+ });
168
+ const agentManifestSchema = z.object({
169
+ version: z.literal(MANIFEST_VERSION),
170
+ identity: identitySchema,
171
+ harness: harnessBindingSchema,
172
+ mcpServers: maybeDynamic(z.array(mcpServerBindingSchema)),
173
+ sandboxes: maybeDynamic(z.record(z.string(), sandboxBindingSchema)),
174
+ tools: baseToolsSchema,
175
+ toolPolicy: z.record(z.string(), z.nativeEnum(ToolApproval)),
176
+ // Organization secrets this agent may read, by name (`secrets.get`,
177
+ // MCP `secretKey`, `apiKey({ secret })`). Nothing else is readable;
178
+ // binding organization secrets requires an organization admin at publish.
179
+ secrets: z.array(z.string().min(1)).default([]),
180
+ channels: z.array(channelBindingSchema),
181
+ channelSources: z.record(z.string(), z.object({ path: z.string(), source: z.string(), disabled: z.boolean() })).optional(),
182
+ hooks: z.array(hookBindingSchema),
183
+ schedules: z.array(scheduleDefinitionSchema),
184
+ bundle: bundleSchema.nullable()
185
+ });
186
+ const resolvedAgentManifestSchema = agentManifestSchema.extend({
187
+ harness: z.object({ harness: providerRefSchema, config: jsonValueSchema }),
188
+ mcpServers: z.array(mcpServerBindingSchema),
189
+ sandboxes: z.record(z.string(), sandboxBindingSchema.extend({ environment: jsonValueSchema }))
190
+ }).superRefine((manifest, ctx) => {
191
+ if (containsDynamicSlot(manifest)) {
192
+ ctx.addIssue({
193
+ code: "custom",
194
+ message: "a resolved manifest must not contain dynamic slots"
195
+ });
196
+ }
197
+ });
198
+ var InstructionRole = /* @__PURE__ */ ((InstructionRole2) => {
199
+ InstructionRole2["System"] = "system";
200
+ InstructionRole2["User"] = "user";
201
+ return InstructionRole2;
202
+ })(InstructionRole || {});
203
+ const instructionFragmentSchema = z.object({
204
+ role: z.nativeEnum(InstructionRole),
205
+ content: z.string(),
206
+ // Source file, for the compatibility report and Build.
207
+ source: z.string().optional()
208
+ });
209
+ const skillFileSchema = z.object({ path: z.string().min(1), content: z.string() });
210
+ const skillBundleSchema = z.object({
211
+ key: z.string().min(1),
212
+ description: z.string().optional(),
213
+ files: z.array(skillFileSchema)
214
+ });
215
+ const emptyManifest = (name) => ({
216
+ version: MANIFEST_VERSION,
217
+ identity: { name, description: null, avatarUrl: null },
218
+ harness: {
219
+ harness: packageRef("@finalai/final-agent-provider/harnesses/serverless-final"),
220
+ config: {}
221
+ },
222
+ mcpServers: [],
223
+ sandboxes: {},
224
+ tools: { base: {} },
225
+ toolPolicy: {},
226
+ secrets: [],
227
+ channels: [],
228
+ hooks: [],
229
+ schedules: [],
230
+ bundle: null
231
+ });
232
+ export {
233
+ BaseCapability,
234
+ InputApprovalKind,
235
+ InstructionRole,
236
+ MANIFEST_VERSION,
237
+ McpServerBindingKind,
238
+ SandboxAccess,
239
+ SandboxAttach,
240
+ ScheduleDelivery,
241
+ ScheduleTarget,
242
+ ToolApproval,
243
+ agentManifestSchema,
244
+ baseToolsSchema,
245
+ bundleSchema,
246
+ channelBindingSchema,
247
+ emptyManifest,
248
+ harnessBindingSchema,
249
+ hookBindingSchema,
250
+ httpMcpServerBindingSchema,
251
+ identitySchema,
252
+ inputApprovalSchema,
253
+ instructionFragmentSchema,
254
+ mcpAuthSchema,
255
+ mcpServerBindingSchema,
256
+ narrowerSandboxAccess,
257
+ resolvedAgentManifestSchema,
258
+ sandboxAccessAtLeast,
259
+ sandboxBindingSchema,
260
+ scheduleDefinitionSchema,
261
+ skillBundleSchema,
262
+ skillFileSchema,
263
+ toolDescriptorSchema,
264
+ workerMcpServerBindingSchema
265
+ };
266
+ //# sourceMappingURL=manifest.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/manifest.ts"],
4
+ "sourcesContent": ["import * as z from 'zod';\nimport { containsDynamicSlot, DynamicEvent, maybeDynamic } from \"./dynamic.mjs\";\nimport { jsonObjectSchema, jsonSchemaSchema, jsonValueSchema } from \"./json.mjs\";\nimport { packageRef, providerRefSchema } from \"./provider-ref.mjs\";\n\n// The Agent Manifest. It lives in the provider contract\n// package because it is what harnesses, sandboxes and channels receive;\n// @finalai/agent-definition compiles directories into it and re-exports it.\n//\n// A harness owns its loop, native tools, prompt assembly, models, permission\n// modes, memory and compaction: all of that is `harness.config`, typed by the\n// harness's own configSchema. What ACP standardizes (MCP servers, prompts,\n// permissions, cancellation) is session input, identical for every harness.\n\nexport const MANIFEST_VERSION = 2;\n\n// Base tool capability classes, one to one with sandbox handle capabilities.\nexport enum BaseCapability {\n Shell = 'shell',\n Files = 'files',\n Process = 'process',\n Ports = 'ports',\n Browser = 'browser',\n ComputerUse = 'computerUse',\n}\n\nexport enum ToolApproval {\n Allow = 'allow',\n Ask = 'ask',\n}\n\n// What a session may do on a sandbox target: read files; also run\n// processes (execute, without file writes); or everything (write).\nexport enum SandboxAccess {\n Read = 'read',\n Execute = 'execute',\n Write = 'write',\n}\n\nconst SANDBOX_ACCESS_RANK = {\n [SandboxAccess.Read]: 0,\n [SandboxAccess.Execute]: 1,\n [SandboxAccess.Write]: 2,\n} satisfies Record<SandboxAccess, number>;\n\n// Each access includes the ones before it: read < execute < write.\nexport const sandboxAccessAtLeast = (access: SandboxAccess, floor: SandboxAccess): boolean =>\n SANDBOX_ACCESS_RANK[access] >= SANDBOX_ACCESS_RANK[floor];\n\nexport const narrowerSandboxAccess = (a: SandboxAccess, b: SandboxAccess): SandboxAccess =>\n SANDBOX_ACCESS_RANK[a] <= SANDBOX_ACCESS_RANK[b] ? a : b;\n\nexport enum SandboxAttach {\n Lazy = 'lazy',\n OnPrompt = 'on-prompt',\n}\n\nexport enum McpServerBindingKind {\n // Authored tools, served from the agent's Worker isolate behind the MCP host.\n Worker = 'worker',\n Http = 'http',\n}\n\nexport enum ScheduleTarget {\n OwnerDirect = 'owner-direct',\n BoundConversation = 'bound-conversation',\n}\n\n// Whether a schedule's firing must get a visible reply. Values match the schedules API.\nexport enum ScheduleDelivery {\n Always = 'always',\n // The agent replies only when there is something to say; an empty turn posts nothing.\n IfNeeded = 'if_needed',\n}\n\nexport const identitySchema = z.object({\n name: z.string().min(1).max(120),\n description: z.string().max(2000).nullable(),\n avatarUrl: z.string().url().nullable(),\n});\n\nexport enum InputApprovalKind {\n Tool = 'tool',\n Connection = 'connection',\n}\n\nexport const inputApprovalSchema = z.object({\n kind: z.nativeEnum(InputApprovalKind),\n export: z.string().min(1),\n // Connection default when absent; otherwise tools.approval[policyKey].\n policyKey: z.string().min(1).optional(),\n dynamic: jsonObjectSchema.optional(),\n});\nexport type InputApprovalIface = z.infer<typeof inputApprovalSchema>;\n\n// Tool descriptors are stored statically so `tools/list` never needs the isolate.\nexport const toolDescriptorSchema = z.object({\n name: z.string().min(1),\n description: z.string(),\n inputSchema: jsonSchemaSchema,\n outputSchema: jsonSchemaSchema.optional(),\n annotations: z\n .object({\n title: z.string().optional(),\n readOnlyHint: z.boolean().optional(),\n destructiveHint: z.boolean().optional(),\n idempotentHint: z.boolean().optional(),\n openWorldHint: z.boolean().optional(),\n })\n .optional(),\n // Bundle export implementing it ('tools/lookup_release_notes').\n export: z.string().min(1).optional(),\n // Boundary snapshot used to reconstruct dynamic tools after isolate eviction.\n dynamic: jsonObjectSchema.optional(),\n inputApproval: inputApprovalSchema.optional(),\n});\n\nexport const mcpAuthSchema = z.union([\n z.object({ secretKey: z.string().min(1), headerName: z.string().min(1).nullable() }),\n // Resolved by the broker to a session-scoped grant (Final's own MCP server).\n z.object({ kind: z.literal('final-session') }),\n]);\n\nconst toolApprovalsSchema = z.record(z.string(), z.nativeEnum(ToolApproval)).nullable();\n\nexport const workerMcpServerBindingSchema = z.object({\n key: z.string().min(1),\n kind: z.literal(McpServerBindingKind.Worker),\n tools: z.array(toolDescriptorSchema),\n approvals: toolApprovalsSchema,\n});\n\nexport const httpMcpServerBindingSchema = z.object({\n key: z.string().min(1),\n kind: z.literal(McpServerBindingKind.Http),\n url: z.string().url(),\n auth: mcpAuthSchema.nullable(),\n headers: z.record(z.string(), z.string()).default({}),\n // Null allows every tool the server lists, each with the default approval.\n approvals: toolApprovalsSchema,\n // Tools hidden even when `approvals` would expose them.\n deny: z.array(z.string().min(1)).optional(),\n // The authored resolver that produced this connection, for retained boundary values.\n dynamicResolver: z.string().min(1).optional(),\n inputApprovals: z.record(z.string(), inputApprovalSchema).optional(),\n});\n\nexport const mcpServerBindingSchema = z.discriminatedUnion('kind', [\n workerMcpServerBindingSchema,\n httpMcpServerBindingSchema,\n]);\n\nexport const sandboxBindingSchema = z.object({\n provider: providerRefSchema,\n // Provider-defined environment options (`computer`: a setup guide reference or\n // inline guide plus start-time parameters). Validated by the provider.\n environment: maybeDynamic(jsonValueSchema),\n access: z.nativeEnum(SandboxAccess).default(SandboxAccess.Write),\n attach: z.nativeEnum(SandboxAttach).default(SandboxAttach.Lazy),\n});\n\nexport const baseToolsSchema = z.object({\n base: z.partialRecord(z.nativeEnum(BaseCapability), z.object({ target: z.string().min(1) })),\n // Capabilities declared on the harness's own host with no sandbox target\n // (`baseTools({ shell: harnessHost })`): only a harness that\n // provides them natively (host-disableable, host-fixed) can serve them.\n host: z.array(z.nativeEnum(BaseCapability)).optional(),\n});\n\nexport const channelBindingSchema = z.object({\n // Stable within the definition; publish maps it to a binding id.\n key: z.string().min(1),\n channel: providerRefSchema,\n config: jsonObjectSchema.default({}),\n source: z.string().optional(),\n});\n\nexport const hookBindingSchema = z.object({\n slug: z.string().min(1),\n export: z.string().min(1),\n events: z.array(z.string().min(1)).min(1),\n});\n\nexport const scheduleDefinitionSchema = z.object({\n key: z.string().min(1),\n cron: z.string().min(1),\n timezone: z.string().min(1),\n prompt: z.string().min(1),\n target: z.nativeEnum(ScheduleTarget),\n});\n\nexport const bundleSchema = z.object({\n // Absent on historical revisions: the host must inspect their resources.\n hasPreparationFiles: z.boolean().optional(),\n hash: z.string().min(1),\n // Dynamic slot path \u2192 resolver export and events.\n resolvers: z.record(\n z.string(),\n z.object({ export: z.string().min(1), events: z.array(z.nativeEnum(DynamicEvent)).min(1) }),\n ),\n});\n\nexport const harnessBindingSchema = z.object({\n harness: providerRefSchema,\n // Validated against the harness's configSchema; may contain dynamic slots at\n // any depth (an instruction fragment, the model).\n config: maybeDynamic(jsonValueSchema),\n});\n\nexport const agentManifestSchema = z.object({\n version: z.literal(MANIFEST_VERSION),\n identity: identitySchema,\n harness: harnessBindingSchema,\n mcpServers: maybeDynamic(z.array(mcpServerBindingSchema)),\n sandboxes: maybeDynamic(z.record(z.string(), sandboxBindingSchema)),\n tools: baseToolsSchema,\n toolPolicy: z.record(z.string(), z.nativeEnum(ToolApproval)),\n // Organization secrets this agent may read, by name (`secrets.get`,\n // MCP `secretKey`, `apiKey({ secret })`). Nothing else is readable;\n // binding organization secrets requires an organization admin at publish.\n secrets: z.array(z.string().min(1)).default([]),\n channels: z.array(channelBindingSchema),\n channelSources: z\n .record(z.string(), z.object({ path: z.string(), source: z.string(), disabled: z.boolean() }))\n .optional(),\n hooks: z.array(hookBindingSchema),\n schedules: z.array(scheduleDefinitionSchema),\n bundle: bundleSchema.nullable(),\n});\n\n// What one session actually got: every dynamic slot replaced by its resolved\n// value (stored in agent.session_manifests).\nexport const resolvedAgentManifestSchema = agentManifestSchema\n .extend({\n harness: z.object({ harness: providerRefSchema, config: jsonValueSchema }),\n mcpServers: z.array(mcpServerBindingSchema),\n sandboxes: z.record(z.string(), sandboxBindingSchema.extend({ environment: jsonValueSchema })),\n })\n .superRefine((manifest, ctx) => {\n if (containsDynamicSlot(manifest)) {\n ctx.addIssue({\n code: 'custom',\n message: 'a resolved manifest must not contain dynamic slots',\n });\n }\n });\n\nexport type IdentityIface = z.infer<typeof identitySchema>;\nexport type ToolDescriptorIface = z.infer<typeof toolDescriptorSchema>;\nexport type McpAuth = z.infer<typeof mcpAuthSchema>;\nexport type WorkerMcpServerBindingIface = z.infer<typeof workerMcpServerBindingSchema>;\nexport type HttpMcpServerBindingIface = z.infer<typeof httpMcpServerBindingSchema>;\nexport type McpServerBinding = z.infer<typeof mcpServerBindingSchema>;\nexport type SandboxBindingIface = z.infer<typeof sandboxBindingSchema>;\nexport type BaseToolsIface = z.infer<typeof baseToolsSchema>;\nexport type ChannelBindingIface = z.infer<typeof channelBindingSchema>;\nexport type HookBindingIface = z.infer<typeof hookBindingSchema>;\nexport type ScheduleDefinitionIface = z.infer<typeof scheduleDefinitionSchema>;\nexport type BundleIface = z.infer<typeof bundleSchema>;\nexport type HarnessBindingIface = z.infer<typeof harnessBindingSchema>;\nexport type AgentManifestIface = z.infer<typeof agentManifestSchema>;\nexport type ResolvedAgentManifestIface = z.infer<typeof resolvedAgentManifestSchema>;\nexport type ResolvedSandboxBindingIface = ResolvedAgentManifestIface['sandboxes'][string];\n\n// The fields of a harness config the platform itself reads through the shared\n// schema fragments; everything else is opaque to the platform.\nexport enum InstructionRole {\n System = 'system',\n User = 'user',\n}\n\nexport const instructionFragmentSchema = z.object({\n role: z.nativeEnum(InstructionRole),\n content: z.string(),\n // Source file, for the compatibility report and Build.\n source: z.string().optional(),\n});\n\nexport const skillFileSchema = z.object({ path: z.string().min(1), content: z.string() });\nexport const skillBundleSchema = z.object({\n key: z.string().min(1),\n description: z.string().optional(),\n files: z.array(skillFileSchema),\n});\n\nexport type InstructionFragmentIface = z.infer<typeof instructionFragmentSchema>;\nexport type SkillBundleIface = z.infer<typeof skillBundleSchema>;\n\nexport const emptyManifest = (name: string): AgentManifestIface => ({\n version: MANIFEST_VERSION,\n identity: { name, description: null, avatarUrl: null },\n harness: {\n harness: packageRef('@finalai/final-agent-provider/harnesses/serverless-final'),\n config: {},\n },\n mcpServers: [],\n sandboxes: {},\n tools: { base: {} },\n toolPolicy: {},\n secrets: [],\n channels: [],\n hooks: [],\n schedules: [],\n bundle: null,\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["BaseCapability", "ToolApproval", "SandboxAccess", "SandboxAttach", "McpServerBindingKind", "ScheduleTarget", "ScheduleDelivery", "InputApprovalKind", "InstructionRole"]
7
+ }
@@ -0,0 +1,21 @@
1
+ import { type JsonValue } from '@finalai/acp-session';
2
+ export declare const MAX_MCP_CONTENT_BYTES: number;
3
+ export interface McpAttachmentIface {
4
+ bytes: Uint8Array;
5
+ mimeType: string;
6
+ }
7
+ export type ReadMcpAttachment = (uri: string, signal?: AbortSignal) => Promise<McpAttachmentIface | null>;
8
+ export declare const restoreMcpContent: (args: {
9
+ result: unknown;
10
+ read: ReadMcpAttachment;
11
+ signal?: AbortSignal;
12
+ }) => Promise<JsonValue>;
13
+ export declare const readMcpAttachment: (args: {
14
+ fetch: typeof fetch;
15
+ endpoint: {
16
+ url: string;
17
+ token: string | null;
18
+ };
19
+ uri: string;
20
+ signal?: AbortSignal;
21
+ }) => Promise<McpAttachmentIface | null>;
@@ -0,0 +1,86 @@
1
+ import { jsonObjectSchema, jsonValueSchema } from "@finalai/acp-session";
2
+ import * as z from "zod";
3
+ const MAX_MCP_CONTENT_BYTES = 16 * 1024 * 1024;
4
+ const restoreMcpContent = async (args) => {
5
+ const original = jsonValueSchema.parse(args.result);
6
+ const parsed = jsonObjectSchema.safeParse(original);
7
+ if (!parsed.success) return original;
8
+ const result = parsed.data;
9
+ if (!Array.isArray(result.content)) return result;
10
+ let restoredBytes = 0;
11
+ const content = [];
12
+ for (const block of result.content) {
13
+ const link = z.object({ type: z.literal("resource_link"), uri: z.string(), mimeType: z.string() }).safeParse(block);
14
+ if (!link.success || !link.data.uri.startsWith("final-attachment:")) {
15
+ content.push(block);
16
+ continue;
17
+ }
18
+ const image = link.data.mimeType.startsWith("image/");
19
+ const text = link.data.mimeType.startsWith("text/");
20
+ if (!image && !text) {
21
+ content.push(block);
22
+ continue;
23
+ }
24
+ args.signal?.throwIfAborted();
25
+ const stored = await args.read(link.data.uri, args.signal);
26
+ if (stored == null) throw new Error("MCP attachment is unavailable");
27
+ restoredBytes += stored.bytes.byteLength;
28
+ if (restoredBytes > MAX_MCP_CONTENT_BYTES) throw new Error("MCP content exceeds native limit");
29
+ if (stored.mimeType !== link.data.mimeType) throw new Error("MCP attachment type mismatch");
30
+ if (image) {
31
+ let binary = "";
32
+ for (let offset = 0; offset < stored.bytes.length; offset += 8192)
33
+ binary += String.fromCharCode(...stored.bytes.subarray(offset, offset + 8192));
34
+ content.push({ type: "image", data: btoa(binary), mimeType: stored.mimeType });
35
+ } else
36
+ content.push({
37
+ type: "text",
38
+ text: new TextDecoder("utf-8", { fatal: true }).decode(stored.bytes)
39
+ });
40
+ }
41
+ return { ...result, content };
42
+ };
43
+ const readMcpAttachment = async (args) => {
44
+ const response = await args.fetch(args.endpoint.url, {
45
+ method: "POST",
46
+ redirect: "manual",
47
+ headers: args.endpoint.token == null ? { "content-type": "application/json" } : { authorization: `Bearer ${args.endpoint.token}`, "content-type": "application/json" },
48
+ body: JSON.stringify({ uri: args.uri }),
49
+ signal: args.signal
50
+ });
51
+ if (!response.ok) {
52
+ await response.body?.cancel();
53
+ return null;
54
+ }
55
+ const reader = response.body?.getReader();
56
+ if (reader == null) return null;
57
+ const chunks = [];
58
+ let size = 0;
59
+ try {
60
+ for (; ; ) {
61
+ const next = await reader.read();
62
+ if (next.done) break;
63
+ size += next.value.byteLength;
64
+ if (size > MAX_MCP_CONTENT_BYTES) {
65
+ await reader.cancel();
66
+ throw new Error("MCP attachment exceeds limit");
67
+ }
68
+ chunks.push(next.value);
69
+ }
70
+ } finally {
71
+ reader.releaseLock();
72
+ }
73
+ const bytes = new Uint8Array(size);
74
+ let offset = 0;
75
+ for (const chunk of chunks) {
76
+ bytes.set(chunk, offset);
77
+ offset += chunk.byteLength;
78
+ }
79
+ return { bytes, mimeType: response.headers.get("content-type") ?? "application/octet-stream" };
80
+ };
81
+ export {
82
+ MAX_MCP_CONTENT_BYTES,
83
+ readMcpAttachment,
84
+ restoreMcpContent
85
+ };
86
+ //# sourceMappingURL=mcp-content.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/mcp-content.ts"],
4
+ "sourcesContent": ["import { jsonObjectSchema, jsonValueSchema, type JsonValue } from '@finalai/acp-session';\nimport * as z from 'zod';\n\nexport const MAX_MCP_CONTENT_BYTES = 16 * 1024 * 1024;\nexport interface McpAttachmentIface {\n bytes: Uint8Array;\n mimeType: string;\n}\nexport type ReadMcpAttachment = (\n uri: string,\n signal?: AbortSignal,\n) => Promise<McpAttachmentIface | null>;\n\n// Only session-owned attachment URIs are dereferenced. Arbitrary tool URLs stay links.\nexport const restoreMcpContent = async (args: {\n result: unknown;\n read: ReadMcpAttachment;\n signal?: AbortSignal;\n}): Promise<JsonValue> => {\n const original = jsonValueSchema.parse(args.result);\n const parsed = jsonObjectSchema.safeParse(original);\n if (!parsed.success) return original;\n const result = parsed.data;\n if (!Array.isArray(result.content)) return result;\n let restoredBytes = 0;\n const content: JsonValue[] = [];\n for (const block of result.content) {\n const link = z\n .object({ type: z.literal('resource_link'), uri: z.string(), mimeType: z.string() })\n .safeParse(block);\n if (!link.success || !link.data.uri.startsWith('final-attachment:')) {\n content.push(block);\n continue;\n }\n const image = link.data.mimeType.startsWith('image/');\n const text = link.data.mimeType.startsWith('text/');\n if (!image && !text) {\n content.push(block);\n continue;\n }\n args.signal?.throwIfAborted();\n const stored = await args.read(link.data.uri, args.signal);\n if (stored == null) throw new Error('MCP attachment is unavailable');\n restoredBytes += stored.bytes.byteLength;\n if (restoredBytes > MAX_MCP_CONTENT_BYTES) throw new Error('MCP content exceeds native limit');\n if (stored.mimeType !== link.data.mimeType) throw new Error('MCP attachment type mismatch');\n if (image) {\n let binary = '';\n for (let offset = 0; offset < stored.bytes.length; offset += 8192)\n binary += String.fromCharCode(...stored.bytes.subarray(offset, offset + 8192));\n content.push({ type: 'image', data: btoa(binary), mimeType: stored.mimeType });\n } else\n content.push({\n type: 'text',\n text: new TextDecoder('utf-8', { fatal: true }).decode(stored.bytes),\n });\n }\n return { ...result, content };\n};\n\nexport const readMcpAttachment = async (args: {\n fetch: typeof fetch;\n endpoint: { url: string; token: string | null };\n uri: string;\n signal?: AbortSignal;\n}): Promise<McpAttachmentIface | null> => {\n const response = await args.fetch(args.endpoint.url, {\n method: 'POST',\n redirect: 'manual',\n headers:\n args.endpoint.token == null\n ? { 'content-type': 'application/json' }\n : { authorization: `Bearer ${args.endpoint.token}`, 'content-type': 'application/json' },\n body: JSON.stringify({ uri: args.uri }),\n signal: args.signal,\n });\n if (!response.ok) {\n await response.body?.cancel();\n return null;\n }\n const reader = response.body?.getReader();\n if (reader == null) return null;\n const chunks: Uint8Array[] = [];\n let size = 0;\n try {\n for (;;) {\n const next = await reader.read();\n if (next.done) break;\n size += next.value.byteLength;\n if (size > MAX_MCP_CONTENT_BYTES) {\n await reader.cancel();\n throw new Error('MCP attachment exceeds limit');\n }\n chunks.push(next.value);\n }\n } finally {\n reader.releaseLock();\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return { bytes, mimeType: response.headers.get('content-type') ?? 'application/octet-stream' };\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,29 @@
1
+ import * as z from 'zod';
2
+ export declare enum ProviderRefKind {
3
+ Package = "package",
4
+ Bundle = "bundle"
5
+ }
6
+ export declare const packageProviderRefSchema: z.ZodObject<{
7
+ kind: z.ZodLiteral<ProviderRefKind.Package>;
8
+ specifier: z.ZodString;
9
+ }, z.core.$strip>;
10
+ export declare const bundleProviderRefSchema: z.ZodObject<{
11
+ kind: z.ZodLiteral<ProviderRefKind.Bundle>;
12
+ export: z.ZodString;
13
+ }, z.core.$strip>;
14
+ export declare const providerRefSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
15
+ kind: z.ZodLiteral<ProviderRefKind.Package>;
16
+ specifier: z.ZodString;
17
+ }, z.core.$strip>, z.ZodObject<{
18
+ kind: z.ZodLiteral<ProviderRefKind.Bundle>;
19
+ export: z.ZodString;
20
+ }, z.core.$strip>], "kind">;
21
+ export type PackageProviderRefIface = z.infer<typeof packageProviderRefSchema>;
22
+ export type BundleProviderRefIface = z.infer<typeof bundleProviderRefSchema>;
23
+ export type ProviderRef = z.infer<typeof providerRefSchema>;
24
+ export declare const packageRef: (specifier: string) => PackageProviderRefIface;
25
+ export declare const bundleRef: (exportName: string) => BundleProviderRefIface;
26
+ export declare const formatProviderRef: (ref: ProviderRef) => string;
27
+ export declare const parseProviderRef: (text: string) => ProviderRef | null;
28
+ export declare const providerRefsEqual: (a: ProviderRef, b: ProviderRef) => boolean;
29
+ export declare const providerRefTextMatches: (text: string, ref: ProviderRef) => boolean;
@@ -0,0 +1,55 @@
1
+ import * as z from "zod";
2
+ var ProviderRefKind = /* @__PURE__ */ ((ProviderRefKind2) => {
3
+ ProviderRefKind2["Package"] = "package";
4
+ ProviderRefKind2["Bundle"] = "bundle";
5
+ return ProviderRefKind2;
6
+ })(ProviderRefKind || {});
7
+ const packageProviderRefSchema = z.object({
8
+ kind: z.literal("package" /* Package */),
9
+ specifier: z.string().min(1)
10
+ });
11
+ const bundleProviderRefSchema = z.object({
12
+ kind: z.literal("bundle" /* Bundle */),
13
+ export: z.string().min(1)
14
+ });
15
+ const providerRefSchema = z.discriminatedUnion("kind", [
16
+ packageProviderRefSchema,
17
+ bundleProviderRefSchema
18
+ ]);
19
+ const packageRef = (specifier) => ({
20
+ kind: "package" /* Package */,
21
+ specifier
22
+ });
23
+ const bundleRef = (exportName) => ({
24
+ kind: "bundle" /* Bundle */,
25
+ export: exportName
26
+ });
27
+ const formatProviderRef = (ref) => ref.kind === "package" /* Package */ ? `package:${ref.specifier}` : `bundle:${ref.export}`;
28
+ const parseProviderRef = (text) => {
29
+ const separator = text.indexOf(":");
30
+ if (separator <= 0) return null;
31
+ const kind = text.slice(0, separator);
32
+ const value = text.slice(separator + 1);
33
+ if (value.length === 0) return null;
34
+ if (kind === "package" /* Package */) return packageRef(value);
35
+ if (kind === "bundle" /* Bundle */) return bundleRef(value);
36
+ return null;
37
+ };
38
+ const providerRefsEqual = (a, b) => formatProviderRef(a) === formatProviderRef(b);
39
+ const providerRefTextMatches = (text, ref) => {
40
+ const parsed = parseProviderRef(text);
41
+ return parsed != null && providerRefsEqual(parsed, ref);
42
+ };
43
+ export {
44
+ ProviderRefKind,
45
+ bundleProviderRefSchema,
46
+ bundleRef,
47
+ formatProviderRef,
48
+ packageProviderRefSchema,
49
+ packageRef,
50
+ parseProviderRef,
51
+ providerRefSchema,
52
+ providerRefTextMatches,
53
+ providerRefsEqual
54
+ };
55
+ //# sourceMappingURL=provider-ref.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/provider-ref.ts"],
4
+ "sourcesContent": ["import * as z from 'zod';\n\n// Provider implementation references. Installed packages use an import specifier\n// ('@finalai/final-agent-provider/harnesses/serverless-pi'); providers declared in\n// a definition's authored bundle are referenced by export name, scoped to the\n// revision the reference is stored with.\nexport enum ProviderRefKind {\n Package = 'package',\n Bundle = 'bundle',\n}\n\nexport const packageProviderRefSchema = z.object({\n kind: z.literal(ProviderRefKind.Package),\n specifier: z.string().min(1),\n});\n\nexport const bundleProviderRefSchema = z.object({\n kind: z.literal(ProviderRefKind.Bundle),\n export: z.string().min(1),\n});\n\nexport const providerRefSchema = z.discriminatedUnion('kind', [\n packageProviderRefSchema,\n bundleProviderRefSchema,\n]);\n\nexport type PackageProviderRefIface = z.infer<typeof packageProviderRefSchema>;\nexport type BundleProviderRefIface = z.infer<typeof bundleProviderRefSchema>;\nexport type ProviderRef = z.infer<typeof providerRefSchema>;\n\nexport const packageRef = (specifier: string): PackageProviderRefIface => ({\n kind: ProviderRefKind.Package,\n specifier,\n});\n\nexport const bundleRef = (exportName: string): BundleProviderRefIface => ({\n kind: ProviderRefKind.Bundle,\n export: exportName,\n});\n\n// Stable text form for telemetry, logs and the `harness_ref` / `provider_ref`\n// columns: 'package:<specifier>' or 'bundle:<export>'.\nexport const formatProviderRef = (ref: ProviderRef): string =>\n ref.kind === ProviderRefKind.Package ? `package:${ref.specifier}` : `bundle:${ref.export}`;\n\nexport const parseProviderRef = (text: string): ProviderRef | null => {\n const separator = text.indexOf(':');\n if (separator <= 0) return null;\n const kind = text.slice(0, separator);\n const value = text.slice(separator + 1);\n if (value.length === 0) return null;\n if (kind === ProviderRefKind.Package) return packageRef(value);\n if (kind === ProviderRefKind.Bundle) return bundleRef(value);\n return null;\n};\n\nexport const providerRefsEqual = (a: ProviderRef, b: ProviderRef): boolean =>\n formatProviderRef(a) === formatProviderRef(b);\n\nexport const providerRefTextMatches = (text: string, ref: ProviderRef): boolean => {\n const parsed = parseProviderRef(text);\n return parsed != null && providerRefsEqual(parsed, ref);\n};\n"],
5
+ "mappings": "AAAA,YAAY,OAAO;AAMZ,IAAK,kBAAL,kBAAKA,qBAAL;AACL,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,YAAS;AAFC,SAAAA;AAAA,GAAA;AAKL,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,MAAM,EAAE,QAAQ,uBAAuB;AAAA,EACvC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;AAC7B,CAAC;AAEM,MAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,MAAM,EAAE,QAAQ,qBAAsB;AAAA,EACtC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAC1B,CAAC;AAEM,MAAM,oBAAoB,EAAE,mBAAmB,QAAQ;AAAA,EAC5D;AAAA,EACA;AACF,CAAC;AAMM,MAAM,aAAa,CAAC,eAAgD;AAAA,EACzE,MAAM;AAAA,EACN;AACF;AAEO,MAAM,YAAY,CAAC,gBAAgD;AAAA,EACxE,MAAM;AAAA,EACN,QAAQ;AACV;AAIO,MAAM,oBAAoB,CAAC,QAChC,IAAI,SAAS,0BAA0B,WAAW,IAAI,SAAS,KAAK,UAAU,IAAI,MAAM;AAEnF,MAAM,mBAAmB,CAAC,SAAqC;AACpE,QAAM,YAAY,KAAK,QAAQ,GAAG;AAClC,MAAI,aAAa,EAAG,QAAO;AAC3B,QAAM,OAAO,KAAK,MAAM,GAAG,SAAS;AACpC,QAAM,QAAQ,KAAK,MAAM,YAAY,CAAC;AACtC,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,MAAI,SAAS,wBAAyB,QAAO,WAAW,KAAK;AAC7D,MAAI,SAAS,sBAAwB,QAAO,UAAU,KAAK;AAC3D,SAAO;AACT;AAEO,MAAM,oBAAoB,CAAC,GAAgB,MAChD,kBAAkB,CAAC,MAAM,kBAAkB,CAAC;AAEvC,MAAM,yBAAyB,CAAC,MAAc,QAA8B;AACjF,QAAM,SAAS,iBAAiB,IAAI;AACpC,SAAO,UAAU,QAAQ,kBAAkB,QAAQ,GAAG;AACxD;",
6
+ "names": ["ProviderRefKind"]
7
+ }
@@ -0,0 +1,9 @@
1
+ export declare const utf8Encode: (text: string) => Uint8Array;
2
+ export declare const utf8Decode: (bytes: Uint8Array) => string;
3
+ export declare const concatBytes: (chunks: readonly Uint8Array[]) => Uint8Array;
4
+ export declare const bytesToBase64: (bytes: Uint8Array) => string;
5
+ export declare const base64ToBytes: (text: string) => Uint8Array;
6
+ export declare const bytesToStream: (bytes: Uint8Array, chunkBytes?: number) => ReadableStream<Uint8Array>;
7
+ export declare const readAllBytes: (stream: ReadableStream<Uint8Array>, abortSignal?: AbortSignal) => Promise<Uint8Array>;
8
+ export declare const encodeSandboxText: (text: string, encoding?: string) => Uint8Array;
9
+ export declare const decodeSandboxText: (bytes: Uint8Array, encoding?: string) => string;