@full-self-browsing/lattice 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/agent-run-C6miAzwI.d.ts +45 -0
  2. package/dist/agent-run-C6miAzwI.d.ts.map +1 -0
  3. package/dist/agent-run-CgPVFl0Z.js +47 -0
  4. package/dist/agent-run-CgPVFl0Z.js.map +1 -0
  5. package/dist/agents.d.ts +5 -0
  6. package/dist/agents.js +6 -0
  7. package/dist/artifact-Bg6mJGnm.d.ts +125 -0
  8. package/dist/artifact-Bg6mJGnm.d.ts.map +1 -0
  9. package/dist/artifact-DOfpeXLb.js +140 -0
  10. package/dist/artifact-DOfpeXLb.js.map +1 -0
  11. package/dist/artifacts.d.ts +2 -0
  12. package/dist/artifacts.js +2 -0
  13. package/dist/audit.d.ts +3 -0
  14. package/dist/audit.js +4 -0
  15. package/dist/catalog-CAfYwB_-.js +91 -0
  16. package/dist/catalog-CAfYwB_-.js.map +1 -0
  17. package/dist/context-pack-Bz3GXmjv.js +99 -0
  18. package/dist/context-pack-Bz3GXmjv.js.map +1 -0
  19. package/dist/context.d.ts +2 -0
  20. package/dist/context.js +2 -0
  21. package/dist/contract-S3oJGlc9.d.ts +74 -0
  22. package/dist/contract-S3oJGlc9.d.ts.map +1 -0
  23. package/dist/core.d.ts +48 -0
  24. package/dist/core.d.ts.map +1 -0
  25. package/dist/core.js +95 -0
  26. package/dist/core.js.map +1 -0
  27. package/dist/errors-eEuEIx6X.js +407 -0
  28. package/dist/errors-eEuEIx6X.js.map +1 -0
  29. package/dist/eval.d.ts +2 -0
  30. package/dist/eval.js +2 -0
  31. package/dist/fingerprint-DodDbQKN.js +34 -0
  32. package/dist/fingerprint-DodDbQKN.js.map +1 -0
  33. package/dist/index-DpnHGHVL.d.ts +53 -0
  34. package/dist/index-DpnHGHVL.d.ts.map +1 -0
  35. package/dist/index.d.ts +90 -3533
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +26 -15968
  38. package/dist/index.js.map +1 -1
  39. package/dist/infer-DLqp5QIM.d.ts +96 -0
  40. package/dist/infer-DLqp5QIM.d.ts.map +1 -0
  41. package/dist/lineage-DBgoPWAZ.js +137 -0
  42. package/dist/lineage-DBgoPWAZ.js.map +1 -0
  43. package/dist/local-CXOGPJ1f.js +139 -0
  44. package/dist/local-CXOGPJ1f.js.map +1 -0
  45. package/dist/local-Dy--7peL.d.ts +10 -0
  46. package/dist/local-Dy--7peL.d.ts.map +1 -0
  47. package/dist/memory-CkQEW6m5.js +62 -0
  48. package/dist/memory-CkQEW6m5.js.map +1 -0
  49. package/dist/memory-DRig5EHV.d.ts +10 -0
  50. package/dist/memory-DRig5EHV.d.ts.map +1 -0
  51. package/dist/negotiate-ClD88hkc.js +10967 -0
  52. package/dist/negotiate-ClD88hkc.js.map +1 -0
  53. package/dist/otel-BgM4e55_.d.ts +421 -0
  54. package/dist/otel-BgM4e55_.d.ts.map +1 -0
  55. package/dist/permission-context-CUKMo79F.js +134 -0
  56. package/dist/permission-context-CUKMo79F.js.map +1 -0
  57. package/dist/plan-DFm8Llep.js +125 -0
  58. package/dist/plan-DFm8Llep.js.map +1 -0
  59. package/dist/preflight-DNHWuJ46.d.ts +64 -0
  60. package/dist/preflight-DNHWuJ46.d.ts.map +1 -0
  61. package/dist/provider-C2IfKsvz.d.ts +1178 -0
  62. package/dist/provider-C2IfKsvz.d.ts.map +1 -0
  63. package/dist/providers.d.ts +4 -0
  64. package/dist/providers.js +4 -0
  65. package/dist/rate-limit-group-nDsBJqSu.d.ts +235 -0
  66. package/dist/rate-limit-group-nDsBJqSu.d.ts.map +1 -0
  67. package/dist/receipt-FYouoPHv.js +205 -0
  68. package/dist/receipt-FYouoPHv.js.map +1 -0
  69. package/dist/replay-CtIhpLek.js +964 -0
  70. package/dist/replay-CtIhpLek.js.map +1 -0
  71. package/dist/result-DLEx2WvU.d.ts +38 -0
  72. package/dist/result-DLEx2WvU.d.ts.map +1 -0
  73. package/dist/router-DU4Z3pTd.js +314 -0
  74. package/dist/router-DU4Z3pTd.js.map +1 -0
  75. package/dist/router-Yo1-aDOv.d.ts +42 -0
  76. package/dist/router-Yo1-aDOv.d.ts.map +1 -0
  77. package/dist/routing.d.ts +6 -0
  78. package/dist/routing.js +4 -0
  79. package/dist/{run-crew-CKdBjh5P.js → run-crew-B2fQLmgB.js} +7 -136
  80. package/dist/run-crew-B2fQLmgB.js.map +1 -0
  81. package/dist/run-crew-Bnve5dyI.d.ts +721 -0
  82. package/dist/run-crew-Bnve5dyI.d.ts.map +1 -0
  83. package/dist/{runtime-D25ehzCj.js → runtime-Dxiet5YS.js} +98 -641
  84. package/dist/runtime-Dxiet5YS.js.map +1 -0
  85. package/dist/scaffolds-DKQrCRqh.d.ts +535 -0
  86. package/dist/scaffolds-DKQrCRqh.d.ts.map +1 -0
  87. package/dist/scaffolds-ekPIlBeU.js +3139 -0
  88. package/dist/scaffolds-ekPIlBeU.js.map +1 -0
  89. package/dist/schema-CNfa_VEy.d.ts +15 -0
  90. package/dist/schema-CNfa_VEy.d.ts.map +1 -0
  91. package/dist/storage-DJKmsaEI.d.ts +26 -0
  92. package/dist/storage-DJKmsaEI.d.ts.map +1 -0
  93. package/dist/storage.d.ts +10 -0
  94. package/dist/storage.d.ts.map +1 -0
  95. package/dist/storage.js +4 -0
  96. package/dist/tool-call-validation-BFoXkwbf.js +107 -0
  97. package/dist/tool-call-validation-BFoXkwbf.js.map +1 -0
  98. package/dist/tools-C4wHgGKQ.js +49 -0
  99. package/dist/tools-C4wHgGKQ.js.map +1 -0
  100. package/dist/tools.d.ts +46 -0
  101. package/dist/tools.d.ts.map +1 -0
  102. package/dist/tools.js +106 -0
  103. package/dist/tools.js.map +1 -0
  104. package/dist/validate-c7EL5uuH.js +224 -0
  105. package/dist/validate-c7EL5uuH.js.map +1 -0
  106. package/package.json +99 -2
  107. package/dist/run-crew-CKdBjh5P.js.map +0 -1
  108. package/dist/runtime-D25ehzCj.js.map +0 -1
@@ -0,0 +1,15 @@
1
+ import { StandardSchemaV1 } from "@standard-schema/spec";
2
+
3
+ //#region src/tools/schema.d.ts
4
+ type JsonSchemaLike = Record<string, unknown>;
5
+ /**
6
+ * Convert a Standard Schema to a JSON Schema-shaped descriptor for native
7
+ * provider tools and structured-output hints. Schema libraries may expose
8
+ * `toJSONSchema()` on the schema object; when absent we fall back to a valid
9
+ * object schema and keep vendor metadata inspectable.
10
+ */
11
+ declare function standardSchemaToJsonSchema(schema: StandardSchemaV1): JsonSchemaLike;
12
+ declare const toolSchemaToJsonSchema: typeof standardSchemaToJsonSchema;
13
+ //#endregion
14
+ export { standardSchemaToJsonSchema as n, toolSchemaToJsonSchema as r, JsonSchemaLike as t };
15
+ //# sourceMappingURL=schema-CNfa_VEy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-CNfa_VEy.d.ts","names":[],"sources":["../src/tools/schema.ts"],"mappings":";;;KAEY,cAAA,GAAiB,MAAA;;AAA7B;;;;;iBAQgB,0BAAA,CAA2B,MAAA,EAAQ,gBAAA,GAAmB,cAAA;AAAA,cAyBzD,sBAAA,SAAsB,0BAAA"}
@@ -0,0 +1,26 @@
1
+ import { r as ArtifactInput, s as ArtifactRef } from "./artifact-Bg6mJGnm.js";
2
+
3
+ //#region src/storage/storage.d.ts
4
+ interface ArtifactStore {
5
+ readonly kind: "artifact-store";
6
+ readonly id: string;
7
+ put(artifact: ArtifactInput): Promise<ArtifactRef>;
8
+ get(id: string): Promise<ArtifactRef | undefined>;
9
+ load(id: string): Promise<ArtifactInput | undefined>;
10
+ has(id: string): Promise<boolean>;
11
+ delete(id: string): Promise<boolean>;
12
+ list(): Promise<readonly ArtifactRef[]>;
13
+ }
14
+ type StorageLike = ArtifactStore;
15
+ interface StoredArtifactPayloadDescriptor {
16
+ readonly kind: "json" | "binary";
17
+ readonly path: string;
18
+ }
19
+ interface StoredArtifactEnvelope {
20
+ readonly version: 1;
21
+ readonly ref: ArtifactRef;
22
+ readonly payload?: StoredArtifactPayloadDescriptor;
23
+ }
24
+ //#endregion
25
+ export { StoredArtifactPayloadDescriptor as i, StorageLike as n, StoredArtifactEnvelope as r, ArtifactStore as t };
26
+ //# sourceMappingURL=storage-DJKmsaEI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-DJKmsaEI.d.ts","names":[],"sources":["../src/storage/storage.ts"],"mappings":";;;UAEiB,aAAA;EAAA,SACN,IAAA;EAAA,SACA,EAAA;EACT,GAAA,CAAI,QAAA,EAAU,aAAA,GAAgB,OAAA,CAAQ,WAAA;EACtC,GAAA,CAAI,EAAA,WAAa,OAAA,CAAQ,WAAA;EACzB,IAAA,CAAK,EAAA,WAAa,OAAA,CAAQ,aAAA;EAC1B,GAAA,CAAI,EAAA,WAAa,OAAA;EACjB,MAAA,CAAO,EAAA,WAAa,OAAA;EACpB,IAAA,IAAQ,OAAA,UAAiB,WAAA;AAAA;AAAA,KAGf,WAAA,GAAc,aAAA;AAAA,UAET,+BAAA;EAAA,SACN,IAAA;EAAA,SACA,IAAA;AAAA;AAAA,UAGM,sBAAA;EAAA,SACN,OAAA;EAAA,SACA,GAAA,EAAK,WAAA;EAAA,SACL,OAAA,GAAU,+BAAA;AAAA"}
@@ -0,0 +1,10 @@
1
+ import { n as ArtifactFingerprint } from "./artifact-Bg6mJGnm.js";
2
+ import { i as StoredArtifactPayloadDescriptor, n as StorageLike, r as StoredArtifactEnvelope, t as ArtifactStore } from "./storage-DJKmsaEI.js";
3
+ import { n as createMemoryArtifactStore, t as MemoryArtifactStoreOptions } from "./memory-DRig5EHV.js";
4
+ import { n as createLocalArtifactStore, t as LocalArtifactStoreOptions } from "./local-Dy--7peL.js";
5
+
6
+ //#region src/storage/fingerprint.d.ts
7
+ declare function fingerprintArtifactValue(value: unknown): Promise<ArtifactFingerprint | undefined>;
8
+ //#endregion
9
+ export { type ArtifactStore, type LocalArtifactStoreOptions, type MemoryArtifactStoreOptions, type StorageLike, type StoredArtifactEnvelope, type StoredArtifactPayloadDescriptor, createLocalArtifactStore, createMemoryArtifactStore, fingerprintArtifactValue };
10
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","names":[],"sources":["../src/storage/fingerprint.ts"],"mappings":";;;;;;iBAIsB,wBAAA,CACpB,KAAA,YACC,OAAA,CAAQ,mBAAA"}
@@ -0,0 +1,4 @@
1
+ import { t as fingerprintArtifactValue } from "./fingerprint-DodDbQKN.js";
2
+ import { t as createLocalArtifactStore } from "./local-CXOGPJ1f.js";
3
+ import { t as createMemoryArtifactStore } from "./memory-CkQEW6m5.js";
4
+ export { createLocalArtifactStore, createMemoryArtifactStore, fingerprintArtifactValue };
@@ -0,0 +1,107 @@
1
+ import { r as validateSchemaOutput } from "./validate-c7EL5uuH.js";
2
+ //#region src/tools/tool-call-validation.ts
3
+ var ToolCallValidationError = class extends Error {
4
+ kind = "tool-call-validation";
5
+ reason;
6
+ toolName;
7
+ attemptedArgs;
8
+ validationIssues;
9
+ requestId;
10
+ constructor(input) {
11
+ super(createValidationMessage(input.reason, input.toolName, input.requestId));
12
+ this.name = "ToolCallValidationError";
13
+ this.reason = input.reason;
14
+ this.toolName = input.toolName;
15
+ this.attemptedArgs = input.attemptedArgs;
16
+ this.validationIssues = input.validationIssues ?? [];
17
+ this.requestId = input.requestId;
18
+ }
19
+ };
20
+ async function validateToolCallRequests(requests, option) {
21
+ if (option === void 0) return;
22
+ const onFailure = option.onFailure ?? "throw";
23
+ if (onFailure === "callback" && option.onValidationFailure === void 0) throw new Error("validateToolCalls.onValidationFailure is required when onFailure is \"callback\".");
24
+ const toolsByName = new Map(option.tools.map((tool) => [tool.name, tool]));
25
+ const validCalls = [];
26
+ for (const request of requests) {
27
+ const tool = toolsByName.get(request.name);
28
+ if (tool === void 0) {
29
+ await handleValidationError(new ToolCallValidationError({
30
+ reason: "unknown_tool",
31
+ toolName: request.name,
32
+ attemptedArgs: request.args,
33
+ requestId: request.id
34
+ }), onFailure, option.onValidationFailure);
35
+ continue;
36
+ }
37
+ const validation = await validateSchemaOutput(tool.name, tool.inputSchema, request.args);
38
+ if (!validation.ok) {
39
+ await handleValidationError(new ToolCallValidationError({
40
+ reason: "invalid_args",
41
+ toolName: request.name,
42
+ attemptedArgs: request.args,
43
+ validationIssues: validation.issue.issues,
44
+ requestId: request.id
45
+ }), onFailure, option.onValidationFailure);
46
+ continue;
47
+ }
48
+ const extraFields = option.allowExtraFields === true ? [] : findExtraFields(tool.inputSchema, request.args);
49
+ if (extraFields.length > 0) {
50
+ await handleValidationError(new ToolCallValidationError({
51
+ reason: "extra_fields",
52
+ toolName: request.name,
53
+ attemptedArgs: request.args,
54
+ validationIssues: extraFields.map((field) => ({
55
+ message: `Unexpected tool argument field "${field}".`,
56
+ path: [field]
57
+ })),
58
+ requestId: request.id
59
+ }), onFailure, option.onValidationFailure);
60
+ continue;
61
+ }
62
+ validCalls.push({
63
+ id: request.id,
64
+ name: request.name,
65
+ args: validation.value
66
+ });
67
+ }
68
+ return validCalls;
69
+ }
70
+ async function handleValidationError(error, onFailure, callback) {
71
+ if (onFailure === "throw") throw error;
72
+ if (onFailure === "callback") await callback?.(error);
73
+ }
74
+ function findExtraFields(schema, value) {
75
+ if (!isRecord(value)) return [];
76
+ const allowedFields = getObjectSchemaKeys(schema);
77
+ if (allowedFields === void 0) return [];
78
+ const allowed = new Set(allowedFields);
79
+ return Object.keys(value).filter((field) => !allowed.has(field));
80
+ }
81
+ function getObjectSchemaKeys(schema) {
82
+ const candidate = schema;
83
+ const directShape = normalizeShape(candidate.shape);
84
+ if (directShape !== void 0) return directShape;
85
+ if (candidate.def?.type === "object") {
86
+ const defShape = normalizeShape(candidate.def.shape);
87
+ if (defShape !== void 0) return defShape;
88
+ }
89
+ if (candidate._def?.type === "object") return normalizeShape(candidate._def.shape);
90
+ }
91
+ function normalizeShape(shape) {
92
+ const resolved = typeof shape === "function" ? shape() : shape;
93
+ if (!isRecord(resolved)) return;
94
+ return Object.keys(resolved);
95
+ }
96
+ function isRecord(value) {
97
+ return typeof value === "object" && value !== null && !Array.isArray(value);
98
+ }
99
+ function createValidationMessage(reason, toolName, requestId) {
100
+ if (reason === "unknown_tool") return `Unknown tool call "${toolName}" (${requestId}).`;
101
+ if (reason === "extra_fields") return `Tool call "${toolName}" contains unexpected argument fields (${requestId}).`;
102
+ return `Invalid arguments for tool call "${toolName}" (${requestId}).`;
103
+ }
104
+ //#endregion
105
+ export { validateToolCallRequests as n, ToolCallValidationError as t };
106
+
107
+ //# sourceMappingURL=tool-call-validation-BFoXkwbf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-call-validation-BFoXkwbf.js","names":[],"sources":["../src/tools/tool-call-validation.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\n\nimport { validateSchemaOutput } from \"../outputs/validate.js\";\nimport type { ValidationIssue } from \"../results/errors.js\";\nimport type { ToolUseRequest } from \"./tool-use.js\";\nimport type { ToolDefinition } from \"./tools.js\";\n\nexport type ToolCallValidationFailureReason =\n | \"unknown_tool\"\n | \"invalid_args\"\n | \"extra_fields\";\n\nexport interface ValidatedToolCall {\n readonly id: string;\n readonly name: string;\n readonly args: unknown;\n}\n\ntype ToolCallValidationTool = Pick<ToolDefinition, \"name\" | \"inputSchema\">;\n\nexport interface ValidateToolCallsOption {\n readonly tools: readonly ToolCallValidationTool[];\n readonly onFailure?: \"throw\" | \"drop\" | \"callback\";\n readonly onValidationFailure?: (error: ToolCallValidationError) => void | Promise<void>;\n readonly allowExtraFields?: boolean;\n}\n\nexport class ToolCallValidationError extends Error {\n readonly kind = \"tool-call-validation\" as const;\n readonly reason: ToolCallValidationFailureReason;\n readonly toolName: string;\n readonly attemptedArgs: unknown;\n readonly validationIssues: readonly ValidationIssue[];\n readonly requestId: string;\n\n constructor(input: {\n readonly reason: ToolCallValidationFailureReason;\n readonly toolName: string;\n readonly attemptedArgs: unknown;\n readonly validationIssues?: readonly ValidationIssue[];\n readonly requestId: string;\n }) {\n super(createValidationMessage(input.reason, input.toolName, input.requestId));\n this.name = \"ToolCallValidationError\";\n this.reason = input.reason;\n this.toolName = input.toolName;\n this.attemptedArgs = input.attemptedArgs;\n this.validationIssues = input.validationIssues ?? [];\n this.requestId = input.requestId;\n }\n}\n\nexport async function validateToolCallRequests(\n requests: readonly ToolUseRequest[],\n option: ValidateToolCallsOption | undefined,\n): Promise<readonly ValidatedToolCall[] | undefined> {\n if (option === undefined) {\n return undefined;\n }\n\n const onFailure = option.onFailure ?? \"throw\";\n if (onFailure === \"callback\" && option.onValidationFailure === undefined) {\n throw new Error(\n 'validateToolCalls.onValidationFailure is required when onFailure is \"callback\".',\n );\n }\n\n const toolsByName = new Map(option.tools.map((tool) => [tool.name, tool]));\n const validCalls: ValidatedToolCall[] = [];\n\n for (const request of requests) {\n const tool = toolsByName.get(request.name);\n if (tool === undefined) {\n await handleValidationError(\n new ToolCallValidationError({\n reason: \"unknown_tool\",\n toolName: request.name,\n attemptedArgs: request.args,\n requestId: request.id,\n }),\n onFailure,\n option.onValidationFailure,\n );\n continue;\n }\n\n const validation = await validateSchemaOutput(tool.name, tool.inputSchema, request.args);\n if (!validation.ok) {\n await handleValidationError(\n new ToolCallValidationError({\n reason: \"invalid_args\",\n toolName: request.name,\n attemptedArgs: request.args,\n validationIssues: validation.issue.issues,\n requestId: request.id,\n }),\n onFailure,\n option.onValidationFailure,\n );\n continue;\n }\n\n const extraFields = option.allowExtraFields === true\n ? []\n : findExtraFields(tool.inputSchema, request.args);\n if (extraFields.length > 0) {\n await handleValidationError(\n new ToolCallValidationError({\n reason: \"extra_fields\",\n toolName: request.name,\n attemptedArgs: request.args,\n validationIssues: extraFields.map((field) => ({\n message: `Unexpected tool argument field \"${field}\".`,\n path: [field],\n })),\n requestId: request.id,\n }),\n onFailure,\n option.onValidationFailure,\n );\n continue;\n }\n\n validCalls.push({\n id: request.id,\n name: request.name,\n args: validation.value,\n });\n }\n\n return validCalls;\n}\n\nasync function handleValidationError(\n error: ToolCallValidationError,\n onFailure: \"throw\" | \"drop\" | \"callback\",\n callback: ValidateToolCallsOption[\"onValidationFailure\"],\n): Promise<void> {\n if (onFailure === \"throw\") {\n throw error;\n }\n if (onFailure === \"callback\") {\n await callback?.(error);\n }\n}\n\nfunction findExtraFields(\n schema: StandardSchemaV1,\n value: unknown,\n): readonly string[] {\n if (!isRecord(value)) {\n return [];\n }\n\n const allowedFields = getObjectSchemaKeys(schema);\n if (allowedFields === undefined) {\n return [];\n }\n\n const allowed = new Set(allowedFields);\n return Object.keys(value).filter((field) => !allowed.has(field));\n}\n\nfunction getObjectSchemaKeys(schema: StandardSchemaV1): readonly string[] | undefined {\n const candidate = schema as {\n readonly shape?: unknown;\n readonly def?: { readonly type?: unknown; readonly shape?: unknown };\n readonly _def?: { readonly type?: unknown; readonly shape?: unknown };\n };\n\n const directShape = normalizeShape(candidate.shape);\n if (directShape !== undefined) {\n return directShape;\n }\n\n if (candidate.def?.type === \"object\") {\n const defShape = normalizeShape(candidate.def.shape);\n if (defShape !== undefined) {\n return defShape;\n }\n }\n\n if (candidate._def?.type === \"object\") {\n return normalizeShape(candidate._def.shape);\n }\n\n return undefined;\n}\n\nfunction normalizeShape(shape: unknown): readonly string[] | undefined {\n const resolved = typeof shape === \"function\" ? (shape as () => unknown)() : shape;\n if (!isRecord(resolved)) {\n return undefined;\n }\n\n return Object.keys(resolved);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction createValidationMessage(\n reason: ToolCallValidationFailureReason,\n toolName: string,\n requestId: string,\n): string {\n if (reason === \"unknown_tool\") {\n return `Unknown tool call \"${toolName}\" (${requestId}).`;\n }\n if (reason === \"extra_fields\") {\n return `Tool call \"${toolName}\" contains unexpected argument fields (${requestId}).`;\n }\n return `Invalid arguments for tool call \"${toolName}\" (${requestId}).`;\n}\n"],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { t as artifact } from "./artifact-DOfpeXLb.js";
2
+ import { r as validateSchemaOutput } from "./validate-c7EL5uuH.js";
3
+ //#region src/tools/tools.ts
4
+ function defineTool(definition) {
5
+ return {
6
+ kind: "tool",
7
+ ...definition
8
+ };
9
+ }
10
+ async function runTool(tool, input, context = {}) {
11
+ const validation = await validateSchemaOutput(tool.name, tool.inputSchema, input);
12
+ if (!validation.ok) throw new Error(`Invalid input for tool "${tool.name}".`);
13
+ const callId = createToolCallId();
14
+ const output = await tool.execute(validation.value, context);
15
+ return {
16
+ callId,
17
+ toolName: tool.name,
18
+ artifact: artifact.toolResult(output, {
19
+ id: `artifact:tool-result:${tool.name}:${callId}`,
20
+ toolName: tool.name,
21
+ callId
22
+ })
23
+ };
24
+ }
25
+ async function importMcpTools(client, toolNames) {
26
+ const descriptors = await Promise.resolve(client.listTools?.() ?? []);
27
+ const allowed = toolNames === void 0 ? void 0 : new Set(toolNames);
28
+ return descriptors.filter((descriptor) => allowed === void 0 || allowed.has(descriptor.name)).map((descriptor) => defineTool({
29
+ name: descriptor.name,
30
+ ...descriptor.description !== void 0 ? { description: descriptor.description } : {},
31
+ inputSchema: descriptor.inputSchema,
32
+ execute: async (input) => client.callTool({
33
+ name: descriptor.name,
34
+ arguments: input
35
+ })
36
+ }));
37
+ }
38
+ function toolArtifactRef(result) {
39
+ const { value: _value, ...ref } = result.artifact;
40
+ return ref;
41
+ }
42
+ function createToolCallId() {
43
+ if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") return crypto.randomUUID();
44
+ return `${Date.now()}:${Math.random().toString(16).slice(2)}`;
45
+ }
46
+ //#endregion
47
+ export { toolArtifactRef as i, importMcpTools as n, runTool as r, defineTool as t };
48
+
49
+ //# sourceMappingURL=tools-C4wHgGKQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-C4wHgGKQ.js","names":[],"sources":["../src/tools/tools.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\n\nimport { artifact, type ArtifactInput, type ArtifactRef } from \"../artifacts/artifact.js\";\nimport { validateSchemaOutput } from \"../outputs/validate.js\";\nimport type { RunEventSink } from \"../tracing/tracing.js\";\n\nexport interface ToolExecutionContext {\n readonly signal?: AbortSignal;\n readonly emit?: RunEventSink;\n}\n\nexport interface ToolDefinition<TSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly kind: \"tool\";\n readonly name: string;\n readonly description?: string;\n readonly inputSchema: TSchema;\n readonly execute: (\n input: StandardSchemaV1.InferOutput<TSchema>,\n context: ToolExecutionContext,\n ) => Promise<unknown> | unknown;\n}\n\nexport interface ToolCallResult {\n readonly callId: string;\n readonly toolName: string;\n readonly artifact: ArtifactInput;\n}\n\nexport function defineTool<TSchema extends StandardSchemaV1>(\n definition: Omit<ToolDefinition<TSchema>, \"kind\">,\n): ToolDefinition<TSchema> {\n return {\n kind: \"tool\",\n ...definition,\n };\n}\n\nexport async function runTool<TSchema extends StandardSchemaV1>(\n tool: ToolDefinition<TSchema>,\n input: unknown,\n context: ToolExecutionContext = {},\n): Promise<ToolCallResult> {\n const validation = await validateSchemaOutput(tool.name, tool.inputSchema, input);\n\n if (!validation.ok) {\n throw new Error(`Invalid input for tool \"${tool.name}\".`);\n }\n\n const callId = createToolCallId();\n const output = await tool.execute(validation.value, context);\n\n return {\n callId,\n toolName: tool.name,\n artifact: artifact.toolResult(output, {\n id: `artifact:tool-result:${tool.name}:${callId}`,\n toolName: tool.name,\n callId,\n }),\n };\n}\n\nexport interface McpLikeClient {\n readonly listTools?: () => Promise<readonly McpToolDescriptor[]> | readonly McpToolDescriptor[];\n readonly callTool: (input: {\n readonly name: string;\n readonly arguments: unknown;\n }) => Promise<unknown> | unknown;\n}\n\nexport interface McpToolDescriptor {\n readonly name: string;\n readonly description?: string;\n readonly inputSchema: StandardSchemaV1;\n}\n\nexport async function importMcpTools(\n client: McpLikeClient,\n toolNames?: readonly string[],\n): Promise<readonly ToolDefinition[]> {\n const descriptors = await Promise.resolve(client.listTools?.() ?? []);\n const allowed = toolNames === undefined ? undefined : new Set(toolNames);\n\n return descriptors\n .filter((descriptor) => allowed === undefined || allowed.has(descriptor.name))\n .map((descriptor) =>\n defineTool({\n name: descriptor.name,\n ...(descriptor.description !== undefined\n ? { description: descriptor.description }\n : {}),\n inputSchema: descriptor.inputSchema,\n execute: async (input) =>\n client.callTool({\n name: descriptor.name,\n arguments: input,\n }),\n }),\n );\n}\n\nexport function toolArtifactRef(result: ToolCallResult): ArtifactRef {\n const { value: _value, ...ref } = result.artifact;\n\n return ref;\n}\n\nfunction createToolCallId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n\n return `${Date.now()}:${Math.random().toString(16).slice(2)}`;\n}\n"],"mappings":";;;AA4BA,SAAgB,WACd,YACyB;AACzB,QAAO;EACL,MAAM;EACN,GAAG;EACJ;;AAGH,eAAsB,QACpB,MACA,OACA,UAAgC,EAAE,EACT;CACzB,MAAM,aAAa,MAAM,qBAAqB,KAAK,MAAM,KAAK,aAAa,MAAM;AAEjF,KAAI,CAAC,WAAW,GACd,OAAM,IAAI,MAAM,2BAA2B,KAAK,KAAK,IAAI;CAG3D,MAAM,SAAS,kBAAkB;CACjC,MAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,OAAO,QAAQ;AAE5D,QAAO;EACL;EACA,UAAU,KAAK;EACf,UAAU,SAAS,WAAW,QAAQ;GACpC,IAAI,wBAAwB,KAAK,KAAK,GAAG;GACzC,UAAU,KAAK;GACf;GACD,CAAC;EACH;;AAiBH,eAAsB,eACpB,QACA,WACoC;CACpC,MAAM,cAAc,MAAM,QAAQ,QAAQ,OAAO,aAAa,IAAI,EAAE,CAAC;CACrE,MAAM,UAAU,cAAc,KAAA,IAAY,KAAA,IAAY,IAAI,IAAI,UAAU;AAExE,QAAO,YACJ,QAAQ,eAAe,YAAY,KAAA,KAAa,QAAQ,IAAI,WAAW,KAAK,CAAC,CAC7E,KAAK,eACJ,WAAW;EACT,MAAM,WAAW;EACjB,GAAI,WAAW,gBAAgB,KAAA,IAC3B,EAAE,aAAa,WAAW,aAAa,GACvC,EAAE;EACN,aAAa,WAAW;EACxB,SAAS,OAAO,UACd,OAAO,SAAS;GACd,MAAM,WAAW;GACjB,WAAW;GACZ,CAAC;EACL,CAAC,CACH;;AAGL,SAAgB,gBAAgB,QAAqC;CACnE,MAAM,EAAE,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAEzC,QAAO;;AAGT,SAAS,mBAA2B;AAClC,KAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,WAChE,QAAO,OAAO,YAAY;AAG5B,QAAO,GAAG,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE"}
@@ -0,0 +1,46 @@
1
+ import { at as McpLikeClient, ct as ToolDefinition, dt as importMcpTools, et as ToolCallValidationError, ft as runTool, ht as parseToolUseEnvelope, it as validateToolCallRequests, lt as ToolExecutionContext, mt as ToolUseRequest, nt as ValidateToolCallsOption, ot as McpToolDescriptor, pt as toolArtifactRef, rt as ValidatedToolCall, st as ToolCallResult, tt as ToolCallValidationFailureReason, ut as defineTool } from "./provider-C2IfKsvz.js";
2
+ import { o as ArtifactPrivacy, r as ArtifactInput } from "./artifact-Bg6mJGnm.js";
3
+ import { n as standardSchemaToJsonSchema, r as toolSchemaToJsonSchema, t as JsonSchemaLike } from "./schema-CNfa_VEy.js";
4
+
5
+ //#region src/tools/mcp-artifacts.d.ts
6
+ interface McpResourceArtifactInput {
7
+ readonly uri: string;
8
+ readonly name?: string;
9
+ readonly title?: string;
10
+ readonly description?: string;
11
+ readonly mimeType?: string;
12
+ readonly text?: string;
13
+ readonly blob?: string;
14
+ readonly metadata?: Record<string, unknown>;
15
+ }
16
+ interface McpPromptMessage {
17
+ readonly role?: string;
18
+ readonly content: unknown;
19
+ }
20
+ interface McpPromptArtifactInput {
21
+ readonly name: string;
22
+ readonly description?: string;
23
+ readonly arguments?: Record<string, unknown>;
24
+ readonly messages?: readonly McpPromptMessage[];
25
+ readonly metadata?: Record<string, unknown>;
26
+ }
27
+ interface McpToolResultArtifactInput {
28
+ readonly toolName: string;
29
+ readonly callId?: string;
30
+ readonly content: unknown;
31
+ readonly isError?: boolean;
32
+ readonly metadata?: Record<string, unknown>;
33
+ }
34
+ interface McpArtifactOptions {
35
+ readonly id?: string;
36
+ readonly label?: string;
37
+ readonly mediaType?: string;
38
+ readonly metadata?: Record<string, unknown>;
39
+ readonly privacy?: ArtifactPrivacy;
40
+ }
41
+ declare function mcpResourceArtifact(input: McpResourceArtifactInput, options?: McpArtifactOptions): ArtifactInput;
42
+ declare function mcpPromptArtifact(input: McpPromptArtifactInput, options?: McpArtifactOptions): ArtifactInput;
43
+ declare function mcpToolResultArtifact(input: McpToolResultArtifactInput, options?: McpArtifactOptions): ArtifactInput;
44
+ //#endregion
45
+ export { type JsonSchemaLike, type McpArtifactOptions, type McpLikeClient, type McpPromptArtifactInput, type McpPromptMessage, type McpResourceArtifactInput, type McpToolDescriptor, type McpToolResultArtifactInput, type ToolCallResult, ToolCallValidationError, type ToolCallValidationFailureReason, type ToolDefinition, type ToolExecutionContext, type ToolUseRequest, type ValidateToolCallsOption, type ValidatedToolCall, defineTool, importMcpTools, mcpPromptArtifact, mcpResourceArtifact, mcpToolResultArtifact, parseToolUseEnvelope, runTool, standardSchemaToJsonSchema, toolArtifactRef, toolSchemaToJsonSchema, validateToolCallRequests };
46
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","names":[],"sources":["../src/tools/mcp-artifacts.ts"],"mappings":";;;;;UAQiB,wBAAA;EAAA,SACN,GAAA;EAAA,SACA,IAAA;EAAA,SACA,KAAA;EAAA,SACA,WAAA;EAAA,SACA,QAAA;EAAA,SACA,IAAA;EAAA,SACA,IAAA;EAAA,SACA,QAAA,GAAW,MAAA;AAAA;AAAA,UAGL,gBAAA;EAAA,SACN,IAAA;EAAA,SACA,OAAA;AAAA;AAAA,UAGM,sBAAA;EAAA,SACN,IAAA;EAAA,SACA,WAAA;EAAA,SACA,SAAA,GAAY,MAAA;EAAA,SACZ,QAAA,YAAoB,gBAAA;EAAA,SACpB,QAAA,GAAW,MAAA;AAAA;AAAA,UAGL,0BAAA;EAAA,SACN,QAAA;EAAA,SACA,MAAA;EAAA,SACA,OAAA;EAAA,SACA,OAAA;EAAA,SACA,QAAA,GAAW,MAAA;AAAA;AAAA,UAGL,kBAAA;EAAA,SACN,EAAA;EAAA,SACA,KAAA;EAAA,SACA,SAAA;EAAA,SACA,QAAA,GAAW,MAAA;EAAA,SACX,OAAA,GAAU,eAAA;AAAA;AAAA,iBAGL,mBAAA,CACd,KAAA,EAAO,wBAAA,EACP,OAAA,GAAS,kBAAA,GACR,aAAA;AAAA,iBA2Ca,iBAAA,CACd,KAAA,EAAO,sBAAA,EACP,OAAA,GAAS,kBAAA,GACR,aAAA;AAAA,iBAyBa,qBAAA,CACd,KAAA,EAAO,0BAAA,EACP,OAAA,GAAS,kBAAA,GACR,aAAA"}
package/dist/tools.js ADDED
@@ -0,0 +1,106 @@
1
+ import { t as artifact } from "./artifact-DOfpeXLb.js";
2
+ import { a as toolSchemaToJsonSchema, i as standardSchemaToJsonSchema, o as parseToolUseEnvelope } from "./validate-c7EL5uuH.js";
3
+ import { n as validateToolCallRequests, t as ToolCallValidationError } from "./tool-call-validation-BFoXkwbf.js";
4
+ import { i as toolArtifactRef, n as importMcpTools, r as runTool, t as defineTool } from "./tools-C4wHgGKQ.js";
5
+ //#region src/tools/mcp-artifacts.ts
6
+ function mcpResourceArtifact(input, options = {}) {
7
+ const label = options.label ?? input.title ?? input.name ?? input.uri;
8
+ const metadata = createMetadata(options.metadata, {
9
+ kind: "resource",
10
+ uri: input.uri,
11
+ name: input.name,
12
+ title: input.title,
13
+ description: input.description,
14
+ mimeType: input.mimeType,
15
+ hasText: input.text !== void 0,
16
+ hasBlob: input.blob !== void 0,
17
+ metadata: input.metadata
18
+ });
19
+ const artifactOptions = createArtifactOptions({
20
+ options,
21
+ label,
22
+ metadata,
23
+ mediaType: options.mediaType ?? input.mimeType ?? "text/plain"
24
+ });
25
+ if (input.text !== void 0) return artifact.text(input.text, artifactOptions);
26
+ return artifact.json(compactObject({
27
+ uri: input.uri,
28
+ name: input.name,
29
+ title: input.title,
30
+ description: input.description,
31
+ mimeType: input.mimeType,
32
+ blob: input.blob,
33
+ metadata: input.metadata
34
+ }), createArtifactOptions({
35
+ options,
36
+ label,
37
+ metadata,
38
+ mediaType: options.mediaType ?? "application/vnd.modelcontextprotocol.resource+json"
39
+ }));
40
+ }
41
+ function mcpPromptArtifact(input, options = {}) {
42
+ const metadata = createMetadata(options.metadata, {
43
+ kind: "prompt",
44
+ name: input.name,
45
+ description: input.description,
46
+ metadata: input.metadata
47
+ });
48
+ return artifact.json(compactObject({
49
+ name: input.name,
50
+ description: input.description,
51
+ arguments: input.arguments,
52
+ messages: input.messages,
53
+ metadata: input.metadata
54
+ }), createArtifactOptions({
55
+ options,
56
+ label: options.label ?? input.name,
57
+ metadata,
58
+ mediaType: options.mediaType ?? "application/vnd.modelcontextprotocol.prompt+json"
59
+ }));
60
+ }
61
+ function mcpToolResultArtifact(input, options = {}) {
62
+ const metadata = createMetadata(options.metadata, {
63
+ kind: "tool-result",
64
+ toolName: input.toolName,
65
+ callId: input.callId,
66
+ isError: input.isError,
67
+ metadata: input.metadata
68
+ });
69
+ const toolOptions = {
70
+ toolName: input.toolName,
71
+ ...input.callId !== void 0 ? { callId: input.callId } : {},
72
+ ...createArtifactOptions({
73
+ options,
74
+ label: options.label ?? input.toolName,
75
+ metadata,
76
+ mediaType: options.mediaType ?? "application/json"
77
+ })
78
+ };
79
+ return artifact.toolResult(compactObject({
80
+ content: input.content,
81
+ isError: input.isError,
82
+ metadata: input.metadata
83
+ }), toolOptions);
84
+ }
85
+ function createArtifactOptions(input) {
86
+ return {
87
+ ...input.options.id !== void 0 ? { id: input.options.id } : {},
88
+ label: input.label,
89
+ mediaType: input.mediaType,
90
+ metadata: input.metadata,
91
+ ...input.options.privacy !== void 0 ? { privacy: input.options.privacy } : {}
92
+ };
93
+ }
94
+ function createMetadata(optionMetadata, mcp) {
95
+ return {
96
+ ...optionMetadata,
97
+ mcp: compactObject(mcp)
98
+ };
99
+ }
100
+ function compactObject(input) {
101
+ return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== void 0));
102
+ }
103
+ //#endregion
104
+ export { ToolCallValidationError, defineTool, importMcpTools, mcpPromptArtifact, mcpResourceArtifact, mcpToolResultArtifact, parseToolUseEnvelope, runTool, standardSchemaToJsonSchema, toolArtifactRef, toolSchemaToJsonSchema, validateToolCallRequests };
105
+
106
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","names":[],"sources":["../src/tools/mcp-artifacts.ts"],"sourcesContent":["import {\n artifact,\n type ArtifactInput,\n type ArtifactOptions,\n type ArtifactPrivacy,\n type ArtifactToolResultOptions,\n} from \"../artifacts/artifact.js\";\n\nexport interface McpResourceArtifactInput {\n readonly uri: string;\n readonly name?: string;\n readonly title?: string;\n readonly description?: string;\n readonly mimeType?: string;\n readonly text?: string;\n readonly blob?: string;\n readonly metadata?: Record<string, unknown>;\n}\n\nexport interface McpPromptMessage {\n readonly role?: string;\n readonly content: unknown;\n}\n\nexport interface McpPromptArtifactInput {\n readonly name: string;\n readonly description?: string;\n readonly arguments?: Record<string, unknown>;\n readonly messages?: readonly McpPromptMessage[];\n readonly metadata?: Record<string, unknown>;\n}\n\nexport interface McpToolResultArtifactInput {\n readonly toolName: string;\n readonly callId?: string;\n readonly content: unknown;\n readonly isError?: boolean;\n readonly metadata?: Record<string, unknown>;\n}\n\nexport interface McpArtifactOptions {\n readonly id?: string;\n readonly label?: string;\n readonly mediaType?: string;\n readonly metadata?: Record<string, unknown>;\n readonly privacy?: ArtifactPrivacy;\n}\n\nexport function mcpResourceArtifact(\n input: McpResourceArtifactInput,\n options: McpArtifactOptions = {},\n): ArtifactInput {\n const label = options.label ?? input.title ?? input.name ?? input.uri;\n const metadata = createMetadata(options.metadata, {\n kind: \"resource\",\n uri: input.uri,\n name: input.name,\n title: input.title,\n description: input.description,\n mimeType: input.mimeType,\n hasText: input.text !== undefined,\n hasBlob: input.blob !== undefined,\n metadata: input.metadata,\n });\n const artifactOptions = createArtifactOptions({\n options,\n label,\n metadata,\n mediaType: options.mediaType ?? input.mimeType ?? \"text/plain\",\n });\n\n if (input.text !== undefined) {\n return artifact.text(input.text, artifactOptions);\n }\n\n return artifact.json(\n compactObject({\n uri: input.uri,\n name: input.name,\n title: input.title,\n description: input.description,\n mimeType: input.mimeType,\n blob: input.blob,\n metadata: input.metadata,\n }),\n createArtifactOptions({\n options,\n label,\n metadata,\n mediaType: options.mediaType ?? \"application/vnd.modelcontextprotocol.resource+json\",\n }),\n );\n}\n\nexport function mcpPromptArtifact(\n input: McpPromptArtifactInput,\n options: McpArtifactOptions = {},\n): ArtifactInput {\n const metadata = createMetadata(options.metadata, {\n kind: \"prompt\",\n name: input.name,\n description: input.description,\n metadata: input.metadata,\n });\n\n return artifact.json(\n compactObject({\n name: input.name,\n description: input.description,\n arguments: input.arguments,\n messages: input.messages,\n metadata: input.metadata,\n }),\n createArtifactOptions({\n options,\n label: options.label ?? input.name,\n metadata,\n mediaType: options.mediaType ?? \"application/vnd.modelcontextprotocol.prompt+json\",\n }),\n );\n}\n\nexport function mcpToolResultArtifact(\n input: McpToolResultArtifactInput,\n options: McpArtifactOptions = {},\n): ArtifactInput {\n const metadata = createMetadata(options.metadata, {\n kind: \"tool-result\",\n toolName: input.toolName,\n callId: input.callId,\n isError: input.isError,\n metadata: input.metadata,\n });\n const toolOptions: ArtifactToolResultOptions = {\n toolName: input.toolName,\n ...(input.callId !== undefined ? { callId: input.callId } : {}),\n ...createArtifactOptions({\n options,\n label: options.label ?? input.toolName,\n metadata,\n mediaType: options.mediaType ?? \"application/json\",\n }),\n };\n\n return artifact.toolResult(\n compactObject({\n content: input.content,\n isError: input.isError,\n metadata: input.metadata,\n }),\n toolOptions,\n );\n}\n\nfunction createArtifactOptions(input: {\n readonly options: McpArtifactOptions;\n readonly label: string;\n readonly metadata: Record<string, unknown>;\n readonly mediaType: string;\n}): ArtifactOptions {\n return {\n ...(input.options.id !== undefined ? { id: input.options.id } : {}),\n label: input.label,\n mediaType: input.mediaType,\n metadata: input.metadata,\n ...(input.options.privacy !== undefined ? { privacy: input.options.privacy } : {}),\n };\n}\n\nfunction createMetadata(\n optionMetadata: Record<string, unknown> | undefined,\n mcp: Record<string, unknown>,\n): Record<string, unknown> {\n return {\n ...optionMetadata,\n mcp: compactObject(mcp),\n };\n}\n\nfunction compactObject(input: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(input).filter(([, value]) => value !== undefined),\n );\n}\n"],"mappings":";;;;;AAgDA,SAAgB,oBACd,OACA,UAA8B,EAAE,EACjB;CACf,MAAM,QAAQ,QAAQ,SAAS,MAAM,SAAS,MAAM,QAAQ,MAAM;CAClE,MAAM,WAAW,eAAe,QAAQ,UAAU;EAChD,MAAM;EACN,KAAK,MAAM;EACX,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,aAAa,MAAM;EACnB,UAAU,MAAM;EAChB,SAAS,MAAM,SAAS,KAAA;EACxB,SAAS,MAAM,SAAS,KAAA;EACxB,UAAU,MAAM;EACjB,CAAC;CACF,MAAM,kBAAkB,sBAAsB;EAC5C;EACA;EACA;EACA,WAAW,QAAQ,aAAa,MAAM,YAAY;EACnD,CAAC;AAEF,KAAI,MAAM,SAAS,KAAA,EACjB,QAAO,SAAS,KAAK,MAAM,MAAM,gBAAgB;AAGnD,QAAO,SAAS,KACd,cAAc;EACZ,KAAK,MAAM;EACX,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,aAAa,MAAM;EACnB,UAAU,MAAM;EAChB,MAAM,MAAM;EACZ,UAAU,MAAM;EACjB,CAAC,EACF,sBAAsB;EACpB;EACA;EACA;EACA,WAAW,QAAQ,aAAa;EACjC,CAAC,CACH;;AAGH,SAAgB,kBACd,OACA,UAA8B,EAAE,EACjB;CACf,MAAM,WAAW,eAAe,QAAQ,UAAU;EAChD,MAAM;EACN,MAAM,MAAM;EACZ,aAAa,MAAM;EACnB,UAAU,MAAM;EACjB,CAAC;AAEF,QAAO,SAAS,KACd,cAAc;EACZ,MAAM,MAAM;EACZ,aAAa,MAAM;EACnB,WAAW,MAAM;EACjB,UAAU,MAAM;EAChB,UAAU,MAAM;EACjB,CAAC,EACF,sBAAsB;EACpB;EACA,OAAO,QAAQ,SAAS,MAAM;EAC9B;EACA,WAAW,QAAQ,aAAa;EACjC,CAAC,CACH;;AAGH,SAAgB,sBACd,OACA,UAA8B,EAAE,EACjB;CACf,MAAM,WAAW,eAAe,QAAQ,UAAU;EAChD,MAAM;EACN,UAAU,MAAM;EAChB,QAAQ,MAAM;EACd,SAAS,MAAM;EACf,UAAU,MAAM;EACjB,CAAC;CACF,MAAM,cAAyC;EAC7C,UAAU,MAAM;EAChB,GAAI,MAAM,WAAW,KAAA,IAAY,EAAE,QAAQ,MAAM,QAAQ,GAAG,EAAE;EAC9D,GAAG,sBAAsB;GACvB;GACA,OAAO,QAAQ,SAAS,MAAM;GAC9B;GACA,WAAW,QAAQ,aAAa;GACjC,CAAC;EACH;AAED,QAAO,SAAS,WACd,cAAc;EACZ,SAAS,MAAM;EACf,SAAS,MAAM;EACf,UAAU,MAAM;EACjB,CAAC,EACF,YACD;;AAGH,SAAS,sBAAsB,OAKX;AAClB,QAAO;EACL,GAAI,MAAM,QAAQ,OAAO,KAAA,IAAY,EAAE,IAAI,MAAM,QAAQ,IAAI,GAAG,EAAE;EAClE,OAAO,MAAM;EACb,WAAW,MAAM;EACjB,UAAU,MAAM;EAChB,GAAI,MAAM,QAAQ,YAAY,KAAA,IAAY,EAAE,SAAS,MAAM,QAAQ,SAAS,GAAG,EAAE;EAClF;;AAGH,SAAS,eACP,gBACA,KACyB;AACzB,QAAO;EACL,GAAG;EACH,KAAK,cAAc,IAAI;EACxB;;AAGH,SAAS,cAAc,OAAyD;AAC9E,QAAO,OAAO,YACZ,OAAO,QAAQ,MAAM,CAAC,QAAQ,GAAG,WAAW,UAAU,KAAA,EAAU,CACjE"}
@@ -0,0 +1,224 @@
1
+ import { n as isArtifactRef, r as toArtifactRef } from "./artifact-DOfpeXLb.js";
2
+ //#region src/tools/tool-use.ts
3
+ function parseToolUseEnvelope(responseText) {
4
+ if (typeof responseText !== "string" || responseText.length === 0) return null;
5
+ const candidates = extractJsonCandidates(responseText);
6
+ for (const candidate of candidates) {
7
+ const parsed = tryParseEnvelope(candidate);
8
+ if (parsed !== null) return parsed;
9
+ }
10
+ return null;
11
+ }
12
+ function extractJsonCandidates(text) {
13
+ const candidates = [];
14
+ const fenceRegex = /```(?:json)?\s*([\s\S]*?)```/g;
15
+ let fenceMatch;
16
+ while ((fenceMatch = fenceRegex.exec(text)) !== null) {
17
+ const inner = fenceMatch[1];
18
+ if (inner !== void 0) candidates.push(inner.trim());
19
+ }
20
+ const braceStart = text.indexOf("{");
21
+ const braceEnd = text.lastIndexOf("}");
22
+ if (braceStart !== -1 && braceEnd > braceStart) candidates.push(text.slice(braceStart, braceEnd + 1));
23
+ candidates.push(text.trim());
24
+ return candidates;
25
+ }
26
+ function tryParseEnvelope(jsonLike) {
27
+ let parsed;
28
+ try {
29
+ parsed = JSON.parse(jsonLike);
30
+ } catch {
31
+ return null;
32
+ }
33
+ if (typeof parsed !== "object" || parsed === null) return null;
34
+ const toolCalls = parsed["tool_calls"];
35
+ if (!Array.isArray(toolCalls) || toolCalls.length === 0) return null;
36
+ const requests = [];
37
+ for (const call of toolCalls) {
38
+ if (typeof call !== "object" || call === null) return null;
39
+ const callRecord = call;
40
+ const id = callRecord["id"];
41
+ const name = callRecord["name"];
42
+ const args = callRecord["args"];
43
+ if (typeof id !== "string" || typeof name !== "string") return null;
44
+ requests.push({
45
+ id,
46
+ name,
47
+ args
48
+ });
49
+ }
50
+ return requests;
51
+ }
52
+ //#endregion
53
+ //#region src/tools/schema.ts
54
+ /**
55
+ * Convert a Standard Schema to a JSON Schema-shaped descriptor for native
56
+ * provider tools and structured-output hints. Schema libraries may expose
57
+ * `toJSONSchema()` on the schema object; when absent we fall back to a valid
58
+ * object schema and keep vendor metadata inspectable.
59
+ */
60
+ function standardSchemaToJsonSchema(schema) {
61
+ const maybeToJson = schema.toJSONSchema;
62
+ if (typeof maybeToJson === "function") try {
63
+ const converted = maybeToJson();
64
+ if (isRecord(converted)) return converted;
65
+ } catch {}
66
+ const standardSchema = schema["~standard"];
67
+ if (isRecord(standardSchema) && typeof standardSchema.vendor === "string") return {
68
+ $comment: `standard-schema vendor: ${standardSchema.vendor}; toJSONSchema not available`,
69
+ type: "object"
70
+ };
71
+ return {
72
+ $comment: "non-standard-schema input",
73
+ type: "object"
74
+ };
75
+ }
76
+ const toolSchemaToJsonSchema = standardSchemaToJsonSchema;
77
+ function isRecord(value) {
78
+ return typeof value === "object" && value !== null && !Array.isArray(value);
79
+ }
80
+ //#endregion
81
+ //#region src/outputs/validate.ts
82
+ async function validateSchemaOutput(name, schema, value) {
83
+ const result = schema["~standard"].validate(value);
84
+ const validation = result instanceof Promise ? await result : result;
85
+ if (validation.issues) return {
86
+ ok: false,
87
+ issue: {
88
+ ["output"]: name,
89
+ issues: validation.issues.map(normalizeIssue)
90
+ }
91
+ };
92
+ return {
93
+ ok: true,
94
+ value: validation.value
95
+ };
96
+ }
97
+ async function validateOutputMap(contracts, rawOutputs, plan) {
98
+ const validation = await validateOutputMapValues(contracts, rawOutputs);
99
+ if (!validation.ok) return {
100
+ ok: false,
101
+ error: validation.error,
102
+ usage: {
103
+ promptTokens: 0,
104
+ completionTokens: 0,
105
+ costUsd: null
106
+ },
107
+ raw: validation.raw,
108
+ partialOutputs: validation.partialOutputs,
109
+ plan
110
+ };
111
+ return {
112
+ ok: true,
113
+ outputs: validation.outputs,
114
+ artifacts: [],
115
+ usage: {
116
+ promptTokens: 0,
117
+ completionTokens: 0,
118
+ costUsd: null
119
+ },
120
+ plan
121
+ };
122
+ }
123
+ async function validateOutputMapValues(contracts, rawOutputs) {
124
+ const outputs = {};
125
+ for (const [name, contract] of Object.entries(contracts)) {
126
+ const value = rawOutputs[name];
127
+ const issue = await validateOutput(name, contract, value);
128
+ if (!issue.ok) return {
129
+ ok: false,
130
+ error: {
131
+ kind: "validation",
132
+ message: `Invalid output "${name}".`,
133
+ ["output"]: name,
134
+ issues: issue.issues
135
+ },
136
+ raw: rawOutputs,
137
+ partialOutputs: outputs
138
+ };
139
+ outputs[name] = issue.value;
140
+ }
141
+ return {
142
+ ok: true,
143
+ outputs
144
+ };
145
+ }
146
+ async function validateOutput(name, contract, value) {
147
+ if (contract === "text") {
148
+ if (typeof value !== "string") return {
149
+ ok: false,
150
+ issues: [{ message: "Expected text output to be a string." }]
151
+ };
152
+ return {
153
+ ok: true,
154
+ value
155
+ };
156
+ }
157
+ if (isStandardSchema(contract)) {
158
+ const result = await validateSchemaOutput(name, contract, value);
159
+ if (!result.ok) return {
160
+ ok: false,
161
+ issues: result.issue.issues
162
+ };
163
+ return {
164
+ ok: true,
165
+ value: result.value
166
+ };
167
+ }
168
+ if (contract.kind === "citations") {
169
+ if (!Array.isArray(value)) return {
170
+ ok: false,
171
+ issues: [{ message: "Expected citations output to be an array." }]
172
+ };
173
+ return {
174
+ ok: true,
175
+ value
176
+ };
177
+ }
178
+ if (contract.kind === "artifacts") {
179
+ if (!Array.isArray(value)) return {
180
+ ok: false,
181
+ issues: [{ message: "Expected artifacts output to be an array." }]
182
+ };
183
+ for (const item of value) {
184
+ if (!isArtifactRef(item)) return {
185
+ ok: false,
186
+ issues: [{ message: "Expected artifacts output item to be an artifact ref." }]
187
+ };
188
+ if (contract.artifactKind !== void 0 && item.kind !== contract.artifactKind) return {
189
+ ok: false,
190
+ issues: [{ message: `Expected artifacts output item kind to be "${contract.artifactKind}".` }]
191
+ };
192
+ }
193
+ return {
194
+ ok: true,
195
+ value: value.map(toArtifactRef)
196
+ };
197
+ }
198
+ return {
199
+ ok: false,
200
+ issues: [{ message: "Unsupported output contract." }]
201
+ };
202
+ }
203
+ function isStandardSchema(contract) {
204
+ if (typeof contract !== "object" || contract === null) return false;
205
+ return typeof contract["~standard"]?.validate === "function";
206
+ }
207
+ function normalizeIssue(issue) {
208
+ const path = issue.path?.map(normalizePathSegment).filter((segment) => segment !== void 0);
209
+ return {
210
+ message: issue.message,
211
+ ...path !== void 0 && path.length > 0 ? { path } : {}
212
+ };
213
+ }
214
+ function normalizePathSegment(segment) {
215
+ if (typeof segment === "string" || typeof segment === "number" || typeof segment === "symbol") return segment;
216
+ return normalizePathKey(segment.key);
217
+ }
218
+ function normalizePathKey(key) {
219
+ return key;
220
+ }
221
+ //#endregion
222
+ export { toolSchemaToJsonSchema as a, standardSchemaToJsonSchema as i, validateOutputMapValues as n, parseToolUseEnvelope as o, validateSchemaOutput as r, validateOutputMap as t };
223
+
224
+ //# sourceMappingURL=validate-c7EL5uuH.js.map