@finalai/agent-definition 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-definition might be problematic. Click here for more details.
- package/README.md +16 -0
- package/THIRD_PARTY_NOTICES.md +303 -0
- package/dist/compiler-assets/chunk-2CZRHOLL.ts +10 -0
- package/dist/compiler-assets/chunk-32O3ODZE.ts +39 -0
- package/dist/compiler-assets/chunk-5BK6FVRE.ts +75 -0
- package/dist/compiler-assets/chunk-6WR3PGNF.ts +0 -0
- package/dist/compiler-assets/chunk-7QP2CKPI.ts +30 -0
- package/dist/compiler-assets/chunk-7VSSVZM4.ts +55 -0
- package/dist/compiler-assets/chunk-7WGYG73V.ts +42 -0
- package/dist/compiler-assets/chunk-BLB6JGLO.ts +481 -0
- package/dist/compiler-assets/chunk-CWWRTRWW.ts +76 -0
- package/dist/compiler-assets/chunk-EVQIK62B.ts +188 -0
- package/dist/compiler-assets/chunk-GNR7XBPN.ts +3364 -0
- package/dist/compiler-assets/chunk-GTUZOATD.ts +10 -0
- package/dist/compiler-assets/chunk-HFS4KLEL.ts +10 -0
- package/dist/compiler-assets/chunk-HGW4YHAY.ts +6865 -0
- package/dist/compiler-assets/chunk-HNPUTP35.ts +172 -0
- package/dist/compiler-assets/chunk-JIPNTA56.ts +59 -0
- package/dist/compiler-assets/chunk-JNJE72EH.ts +10 -0
- package/dist/compiler-assets/chunk-JPY4L2UJ.ts +349 -0
- package/dist/compiler-assets/chunk-JTGTLYDT.ts +0 -0
- package/dist/compiler-assets/chunk-LUSAAV4L.ts +33 -0
- package/dist/compiler-assets/chunk-MZMSKIKU.ts +472 -0
- package/dist/compiler-assets/chunk-NMYHO2QN.ts +25 -0
- package/dist/compiler-assets/chunk-NYTOYKKF.ts +28 -0
- package/dist/compiler-assets/chunk-OWC6SFFF.ts +295 -0
- package/dist/compiler-assets/chunk-QMKWAFVZ.ts +59 -0
- package/dist/compiler-assets/chunk-QMWTDPNT.ts +79 -0
- package/dist/compiler-assets/chunk-RWUIMTBI.ts +13 -0
- package/dist/compiler-assets/chunk-SKTNMUO7.ts +64 -0
- package/dist/compiler-assets/chunk-T6WG4L4M.ts +19 -0
- package/dist/compiler-assets/chunk-TATN3PYK.ts +81 -0
- package/dist/compiler-assets/chunk-VHXHUU7L.ts +16 -0
- package/dist/compiler-assets/chunk-WMXMVFHM.ts +121 -0
- package/dist/compiler-assets/chunk-XHKPWT3G.ts +55 -0
- package/dist/compiler-assets/chunk-ZDLVA6XF.ts +476 -0
- package/dist/compiler-assets/src/authoring/agent.ts +10 -0
- package/dist/compiler-assets/src/authoring/approval.ts +19 -0
- package/dist/compiler-assets/src/authoring/brand.ts +23 -0
- package/dist/compiler-assets/src/authoring/channels.ts +26 -0
- package/dist/compiler-assets/src/authoring/connections.ts +10 -0
- package/dist/compiler-assets/src/authoring/context.ts +7 -0
- package/dist/compiler-assets/src/authoring/credentials.ts +21 -0
- package/dist/compiler-assets/src/authoring/dynamic.ts +10 -0
- package/dist/compiler-assets/src/authoring/harness.ts +17 -0
- package/dist/compiler-assets/src/authoring/hooks.ts +28 -0
- package/dist/compiler-assets/src/authoring/index.ts +110 -0
- package/dist/compiler-assets/src/authoring/instructions.ts +14 -0
- package/dist/compiler-assets/src/authoring/sandbox.ts +25 -0
- package/dist/compiler-assets/src/authoring/schedules.ts +10 -0
- package/dist/compiler-assets/src/authoring/skills.ts +10 -0
- package/dist/compiler-assets/src/authoring/tools.ts +23 -0
- package/dist/compiler-assets/src/compatibility.ts +14810 -0
- package/dist/compiler-assets/src/compiler/evaluate-child.mjs +77 -0
- package/dist/compiler-assets/src/index.ts +195 -0
- package/dist/compiler-assets/src/manifest.ts +72 -0
- package/dist/compiler-assets/src/resolve.ts +19 -0
- package/dist/compiler-assets/src/runtime/bundle.ts +72 -0
- package/dist/compiler-assets/src/runtime/describe.ts +31 -0
- package/dist/compiler-assets/src/runtime/described.ts +142 -0
- package/dist/compiler-assets/src/runtime/isolate.ts +28 -0
- package/dist/compiler-assets/src/runtime/layout.ts +15 -0
- package/dist/compiler-assets/src/runtime/lower.ts +52 -0
- package/dist/compiler-assets/src/runtime/schema-validation.ts +21 -0
- package/dist/compiler-assets/src/runtime/values.ts +38 -0
- package/dist/modules/authoring/agent.d.mts +22 -0
- package/dist/modules/authoring/agent.mjs +6 -0
- package/dist/modules/authoring/agent.mjs.map +7 -0
- package/dist/modules/authoring/approval.d.mts +17 -0
- package/dist/modules/authoring/approval.mjs +42 -0
- package/dist/modules/authoring/approval.mjs.map +7 -0
- package/dist/modules/authoring/brand.d.mts +27 -0
- package/dist/modules/authoring/brand.mjs +51 -0
- package/dist/modules/authoring/brand.mjs.map +7 -0
- package/dist/modules/authoring/channels.d.mts +41 -0
- package/dist/modules/authoring/channels.mjs +65 -0
- package/dist/modules/authoring/channels.mjs.map +7 -0
- package/dist/modules/authoring/connections.d.mts +23 -0
- package/dist/modules/authoring/connections.mjs +6 -0
- package/dist/modules/authoring/connections.mjs.map +7 -0
- package/dist/modules/authoring/context.d.mts +83 -0
- package/dist/modules/authoring/context.mjs +12 -0
- package/dist/modules/authoring/context.mjs.map +7 -0
- package/dist/modules/authoring/credentials.d.mts +10 -0
- package/dist/modules/authoring/credentials.mjs +31 -0
- package/dist/modules/authoring/credentials.mjs.map +7 -0
- package/dist/modules/authoring/dynamic.d.mts +30 -0
- package/dist/modules/authoring/dynamic.mjs +15 -0
- package/dist/modules/authoring/dynamic.mjs.map +7 -0
- package/dist/modules/authoring/harness.d.mts +85 -0
- package/dist/modules/authoring/harness.mjs +55 -0
- package/dist/modules/authoring/harness.mjs.map +7 -0
- package/dist/modules/authoring/hooks.d.mts +120 -0
- package/dist/modules/authoring/hooks.mjs +72 -0
- package/dist/modules/authoring/hooks.mjs.map +7 -0
- package/dist/modules/authoring/index.d.mts +27 -0
- package/dist/modules/authoring/index.mjs +63 -0
- package/dist/modules/authoring/index.mjs.map +7 -0
- package/dist/modules/authoring/instructions.d.mts +13 -0
- package/dist/modules/authoring/instructions.mjs +15 -0
- package/dist/modules/authoring/instructions.mjs.map +7 -0
- package/dist/modules/authoring/sandbox.d.mts +21 -0
- package/dist/modules/authoring/sandbox.mjs +13 -0
- package/dist/modules/authoring/sandbox.mjs.map +7 -0
- package/dist/modules/authoring/schedules.d.mts +8 -0
- package/dist/modules/authoring/schedules.mjs +6 -0
- package/dist/modules/authoring/schedules.mjs.map +7 -0
- package/dist/modules/authoring/skills.d.mts +8 -0
- package/dist/modules/authoring/skills.mjs +6 -0
- package/dist/modules/authoring/skills.mjs.map +7 -0
- package/dist/modules/authoring/tools.d.mts +80 -0
- package/dist/modules/authoring/tools.mjs +70 -0
- package/dist/modules/authoring/tools.mjs.map +7 -0
- package/dist/modules/compatibility.d.mts +36 -0
- package/dist/modules/compatibility.mjs +536 -0
- package/dist/modules/compatibility.mjs.map +7 -0
- package/dist/modules/compiler/assemble.d.mts +30 -0
- package/dist/modules/compiler/assemble.mjs +923 -0
- package/dist/modules/compiler/assemble.mjs.map +7 -0
- package/dist/modules/compiler/bundle.d.mts +22 -0
- package/dist/modules/compiler/bundle.mjs +385 -0
- package/dist/modules/compiler/bundle.mjs.map +7 -0
- package/dist/modules/compiler/diagnostics.d.mts +40 -0
- package/dist/modules/compiler/diagnostics.mjs +38 -0
- package/dist/modules/compiler/diagnostics.mjs.map +7 -0
- package/dist/modules/compiler/discovery.d.mts +36 -0
- package/dist/modules/compiler/discovery.mjs +158 -0
- package/dist/modules/compiler/discovery.mjs.map +7 -0
- package/dist/modules/compiler/evaluate.d.mts +13 -0
- package/dist/modules/compiler/evaluate.mjs +194 -0
- package/dist/modules/compiler/evaluate.mjs.map +7 -0
- package/dist/modules/compiler/files.d.mts +19 -0
- package/dist/modules/compiler/files.mjs +90 -0
- package/dist/modules/compiler/files.mjs.map +7 -0
- package/dist/modules/compiler/frontmatter.d.mts +9 -0
- package/dist/modules/compiler/frontmatter.mjs +34 -0
- package/dist/modules/compiler/frontmatter.mjs.map +7 -0
- package/dist/modules/compiler/index.d.mts +49 -0
- package/dist/modules/compiler/index.mjs +244 -0
- package/dist/modules/compiler/index.mjs.map +7 -0
- package/dist/modules/compiler/load.d.mts +8 -0
- package/dist/modules/compiler/load.mjs +45 -0
- package/dist/modules/compiler/load.mjs.map +7 -0
- package/dist/modules/compiler/local-isolate.d.mts +20 -0
- package/dist/modules/compiler/local-isolate.mjs +93 -0
- package/dist/modules/compiler/local-isolate.mjs.map +7 -0
- package/dist/modules/compiler/packages.d.mts +66 -0
- package/dist/modules/compiler/packages.mjs +307 -0
- package/dist/modules/compiler/packages.mjs.map +7 -0
- package/dist/modules/index.d.mts +7 -0
- package/dist/modules/index.mjs +25 -0
- package/dist/modules/index.mjs.map +7 -0
- package/dist/modules/manifest.d.mts +2 -0
- package/dist/modules/manifest.mjs +67 -0
- package/dist/modules/manifest.mjs.map +7 -0
- package/dist/modules/resolve.d.mts +24 -0
- package/dist/modules/resolve.mjs +176 -0
- package/dist/modules/resolve.mjs.map +7 -0
- package/dist/modules/runtime/bundle.d.mts +12 -0
- package/dist/modules/runtime/bundle.mjs +48 -0
- package/dist/modules/runtime/bundle.mjs.map +7 -0
- package/dist/modules/runtime/describe.d.mts +19 -0
- package/dist/modules/runtime/describe.mjs +471 -0
- package/dist/modules/runtime/describe.mjs.map +7 -0
- package/dist/modules/runtime/described.d.mts +376 -0
- package/dist/modules/runtime/described.mjs +116 -0
- package/dist/modules/runtime/described.mjs.map +7 -0
- package/dist/modules/runtime/isolate.d.mts +70 -0
- package/dist/modules/runtime/isolate.mjs +454 -0
- package/dist/modules/runtime/isolate.mjs.map +7 -0
- package/dist/modules/runtime/layout.d.mts +21 -0
- package/dist/modules/runtime/layout.mjs +24 -0
- package/dist/modules/runtime/layout.mjs.map +7 -0
- package/dist/modules/runtime/lower.d.mts +73 -0
- package/dist/modules/runtime/lower.mjs +463 -0
- package/dist/modules/runtime/lower.mjs.map +7 -0
- package/dist/modules/runtime/schema-validation.d.mts +21 -0
- package/dist/modules/runtime/schema-validation.mjs +238 -0
- package/dist/modules/runtime/schema-validation.mjs.map +7 -0
- package/dist/modules/runtime/values.d.mts +20 -0
- package/dist/modules/runtime/values.mjs +48 -0
- package/dist/modules/runtime/values.mjs.map +7 -0
- package/fixtures/acme-fleet/agent/agent.ts +74 -0
- package/fixtures/acme-fleet/agent/instructions.md +1 -0
- package/fixtures/assistant/agent/agent.ts +16 -0
- package/fixtures/assistant/agent/instructions.md +1 -0
- package/fixtures/assistant/agent/tools/current_time.ts +9 -0
- package/fixtures/assistant-with-tools/agent/agent.ts +16 -0
- package/fixtures/assistant-with-tools/agent/instructions.md +1 -0
- package/fixtures/assistant-with-tools/agent/tools/current_time.ts +9 -0
- package/fixtures/final-connection/agent/agent.ts +15 -0
- package/fixtures/final-connection/agent/connections/final.ts +9 -0
- package/fixtures/release-scout/agent/agent.ts +22 -0
- package/fixtures/release-scout/agent/channels/github-signature.ts +27 -0
- package/fixtures/release-scout/agent/channels/github.ts +38 -0
- package/fixtures/release-scout/agent/connections/linear.ts +9 -0
- package/fixtures/release-scout/agent/hooks/audit.ts +24 -0
- package/fixtures/release-scout/agent/instructions/org-context.ts +26 -0
- package/fixtures/release-scout/agent/instructions.md +2 -0
- package/fixtures/release-scout/agent/sandbox.ts +20 -0
- package/fixtures/release-scout/agent/schedules/daily-digest.md +7 -0
- package/fixtures/release-scout/agent/skills/triage/SKILL.md +8 -0
- package/fixtures/release-scout/agent/skills/triage/checklist.md +3 -0
- package/fixtures/release-scout/agent/tools/lookup_release_notes.ts +24 -0
- package/fixtures/tsconfig.json +5 -0
- package/package.json +94 -0
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import {
|
|
2
|
+
InputApprovalKind,
|
|
3
|
+
InstructionRole,
|
|
4
|
+
McpServerBindingKind,
|
|
5
|
+
ToolApproval
|
|
6
|
+
} from "@finalai/agent-provider";
|
|
7
|
+
import * as z from "zod";
|
|
8
|
+
import { lowerApproval } from "../authoring/approval.mjs";
|
|
9
|
+
import {
|
|
10
|
+
AuthoredKind,
|
|
11
|
+
authoredKindOf,
|
|
12
|
+
pendingExportName,
|
|
13
|
+
pendingIndexOf
|
|
14
|
+
} from "../authoring/brand.mjs";
|
|
15
|
+
import { toolLabelSchema } from "../authoring/tools.mjs";
|
|
16
|
+
import { jsonSchemaDeclarationError, SchemaIo } from "./schema-validation.mjs";
|
|
17
|
+
import {
|
|
18
|
+
authoredRecordSchema,
|
|
19
|
+
authoredValueSchema,
|
|
20
|
+
callableSchema,
|
|
21
|
+
entriesOf,
|
|
22
|
+
fieldOf,
|
|
23
|
+
isBoolean,
|
|
24
|
+
isCallable,
|
|
25
|
+
isNumber,
|
|
26
|
+
isObjectLike,
|
|
27
|
+
isPlainObject,
|
|
28
|
+
isString,
|
|
29
|
+
messageOf,
|
|
30
|
+
optionalValueSchema
|
|
31
|
+
} from "./values.mjs";
|
|
32
|
+
var IssueSeverity = /* @__PURE__ */ ((IssueSeverity2) => {
|
|
33
|
+
IssueSeverity2["Error"] = "error";
|
|
34
|
+
IssueSeverity2["Warning"] = "warning";
|
|
35
|
+
IssueSeverity2["Note"] = "note";
|
|
36
|
+
return IssueSeverity2;
|
|
37
|
+
})(IssueSeverity || {});
|
|
38
|
+
const error = (message) => ({ severity: "error" /* Error */, message });
|
|
39
|
+
const warning = (message) => ({
|
|
40
|
+
severity: "warning" /* Warning */,
|
|
41
|
+
message
|
|
42
|
+
});
|
|
43
|
+
const note = (message) => ({ severity: "note" /* Note */, message });
|
|
44
|
+
const childPath = (parent, key) => {
|
|
45
|
+
if (isNumber(key)) return `${parent}[${key}]`;
|
|
46
|
+
return parent.length === 0 ? key : `${parent}.${key}`;
|
|
47
|
+
};
|
|
48
|
+
const PENDING_PLACEHOLDER = /^<pending:\d+>$/;
|
|
49
|
+
const label = (path) => path.length === 0 ? "value" : path;
|
|
50
|
+
const toJson = (value, options) => {
|
|
51
|
+
const visited = options.visit?.(value, options.path);
|
|
52
|
+
if (visited !== void 0) return visited;
|
|
53
|
+
if (value == null) return null;
|
|
54
|
+
if (isString(value)) {
|
|
55
|
+
const index = PENDING_PLACEHOLDER.test(value) ? pendingIndexOf(value) : null;
|
|
56
|
+
return index == null ? value : pendingExportName(index);
|
|
57
|
+
}
|
|
58
|
+
if (isNumber(value)) {
|
|
59
|
+
if (Number.isFinite(value)) return value;
|
|
60
|
+
options.issues.push(error(`${label(options.path)} is not a finite number`));
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
if (isBoolean(value)) return value;
|
|
64
|
+
if (Array.isArray(value)) {
|
|
65
|
+
return value.map(
|
|
66
|
+
(item, index) => toJson(item, { ...options, path: childPath(options.path, index) })
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
if (isCallable(value)) {
|
|
70
|
+
options.issues.push(
|
|
71
|
+
error(`${label(options.path)} is a function; only static values can appear here`)
|
|
72
|
+
);
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
if (isPlainObject(value) || authoredKindOf(value) != null) {
|
|
76
|
+
const out = {};
|
|
77
|
+
for (const [key, item] of entriesOf(value)) {
|
|
78
|
+
if (item === void 0) continue;
|
|
79
|
+
out[key] = toJson(item, { ...options, path: childPath(options.path, key) });
|
|
80
|
+
}
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
options.issues.push(
|
|
84
|
+
error(`${label(options.path)} is not JSON (${Object.prototype.toString.call(value)})`)
|
|
85
|
+
);
|
|
86
|
+
return null;
|
|
87
|
+
};
|
|
88
|
+
const jsonSchemaObjectSchema = z.record(z.string(), authoredValueSchema);
|
|
89
|
+
const standardJsonSchemaSchema = z.looseObject({
|
|
90
|
+
"~standard": z.looseObject({
|
|
91
|
+
jsonSchema: z.looseObject({ input: callableSchema, output: callableSchema.optional() }).optional()
|
|
92
|
+
})
|
|
93
|
+
});
|
|
94
|
+
const isZodSchema = (value) => value instanceof z.ZodType;
|
|
95
|
+
const toJsonSchema = (args) => {
|
|
96
|
+
const { schema, path, issues } = args;
|
|
97
|
+
const io = args.io ?? SchemaIo.Input;
|
|
98
|
+
const standard = standardJsonSchemaSchema.safeParse(schema);
|
|
99
|
+
const jsonSchema = fieldOf(fieldOf(schema, "~standard"), "jsonSchema");
|
|
100
|
+
let converted = null;
|
|
101
|
+
if (standard.success && standard.data["~standard"].jsonSchema != null) {
|
|
102
|
+
try {
|
|
103
|
+
const convert = standard.data["~standard"].jsonSchema[io];
|
|
104
|
+
if (convert == null) throw new Error(`Standard JSON Schema has no ${io} converter`);
|
|
105
|
+
converted = convert.call(jsonSchema, {
|
|
106
|
+
target: "draft-2020-12"
|
|
107
|
+
});
|
|
108
|
+
} catch (cause) {
|
|
109
|
+
issues.push(error(`${path} could not be converted to JSON Schema: ${messageOf(cause)}`));
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
} else if (isZodSchema(schema)) {
|
|
113
|
+
converted = z.toJSONSchema(schema, { io });
|
|
114
|
+
} else if (standard.success) {
|
|
115
|
+
issues.push(
|
|
116
|
+
error(
|
|
117
|
+
`${path} is a Standard Schema without JSON Schema support; use zod 4 or a JSON Schema object`
|
|
118
|
+
)
|
|
119
|
+
);
|
|
120
|
+
return null;
|
|
121
|
+
} else if (isPlainObject(schema)) {
|
|
122
|
+
converted = schema;
|
|
123
|
+
} else {
|
|
124
|
+
issues.push(error(`${path} must be a zod schema or a JSON Schema object`));
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
const json = toJson(converted, { path, issues });
|
|
128
|
+
if (json == null || Array.isArray(json) || !jsonSchemaObjectSchema.safeParse(json).success || !isPlainObject(json)) {
|
|
129
|
+
issues.push(error(`${path} did not produce a JSON Schema object`));
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
const out = {};
|
|
133
|
+
for (const [key, item] of Object.entries(json)) {
|
|
134
|
+
if (key !== "$schema" || !standard.success && !isZodSchema(schema)) out[key] = item;
|
|
135
|
+
}
|
|
136
|
+
const declarationError = jsonSchemaDeclarationError(out);
|
|
137
|
+
if (declarationError != null) {
|
|
138
|
+
issues.push(error(`${path} is an invalid JSON Schema: ${declarationError}`));
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
return out;
|
|
142
|
+
};
|
|
143
|
+
const authoredToolSchema = z.looseObject({
|
|
144
|
+
description: optionalValueSchema,
|
|
145
|
+
execute: optionalValueSchema,
|
|
146
|
+
inputSchema: optionalValueSchema,
|
|
147
|
+
outputSchema: optionalValueSchema,
|
|
148
|
+
endsTurn: optionalValueSchema,
|
|
149
|
+
approval: optionalValueSchema,
|
|
150
|
+
label: optionalValueSchema,
|
|
151
|
+
annotations: z.looseObject({
|
|
152
|
+
title: z.string().optional(),
|
|
153
|
+
readOnlyHint: z.boolean().optional(),
|
|
154
|
+
destructiveHint: z.boolean().optional(),
|
|
155
|
+
idempotentHint: z.boolean().optional(),
|
|
156
|
+
openWorldHint: z.boolean().optional()
|
|
157
|
+
}).optional().catch(void 0)
|
|
158
|
+
});
|
|
159
|
+
const lowerTool = (args) => {
|
|
160
|
+
const issues = [];
|
|
161
|
+
const path = `tool ${args.name}`;
|
|
162
|
+
const parsed = authoredToolSchema.safeParse(args.value);
|
|
163
|
+
if (!parsed.success) {
|
|
164
|
+
issues.push(error(`${path} must be defineTool({ description, inputSchema, execute })`));
|
|
165
|
+
return {
|
|
166
|
+
descriptor: {
|
|
167
|
+
name: args.name,
|
|
168
|
+
description: "",
|
|
169
|
+
inputSchema: { type: "object" },
|
|
170
|
+
export: args.exportName
|
|
171
|
+
},
|
|
172
|
+
approval: ToolApproval.Ask,
|
|
173
|
+
issues
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const tool = parsed.data;
|
|
177
|
+
const description = isString(tool.description) ? tool.description : "";
|
|
178
|
+
if (description.length === 0) issues.push(error(`${path} needs a description`));
|
|
179
|
+
if (!isCallable(tool.execute)) issues.push(error(`${path} needs an execute function`));
|
|
180
|
+
const inputSchema = toJsonSchema({
|
|
181
|
+
schema: tool.inputSchema,
|
|
182
|
+
path: `${path} inputSchema`,
|
|
183
|
+
issues
|
|
184
|
+
}) ?? {
|
|
185
|
+
type: "object"
|
|
186
|
+
};
|
|
187
|
+
if (tool.endsTurn != null && tool.endsTurn !== false) {
|
|
188
|
+
issues.push(
|
|
189
|
+
error(`${path} sets endsTurn; it is not supported because the harness owns the loop`)
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
const approval = lowerApproval(tool.approval);
|
|
193
|
+
if (approval.error != null) issues.push(error(`${path}: ${approval.error}`));
|
|
194
|
+
if (approval.note != null) issues.push(note(`${path}: ${approval.note}`));
|
|
195
|
+
const descriptor = {
|
|
196
|
+
name: args.name,
|
|
197
|
+
description,
|
|
198
|
+
inputSchema,
|
|
199
|
+
export: args.exportName
|
|
200
|
+
};
|
|
201
|
+
if (approval.inputDependent)
|
|
202
|
+
descriptor.inputApproval = { kind: InputApprovalKind.Tool, export: args.exportName };
|
|
203
|
+
if (tool.outputSchema != null) {
|
|
204
|
+
const outputSchema = toJsonSchema({
|
|
205
|
+
schema: tool.outputSchema,
|
|
206
|
+
path: `${path} outputSchema`,
|
|
207
|
+
issues,
|
|
208
|
+
io: SchemaIo.Output
|
|
209
|
+
});
|
|
210
|
+
if (outputSchema != null) descriptor.outputSchema = outputSchema;
|
|
211
|
+
}
|
|
212
|
+
const annotations = { ...tool.annotations };
|
|
213
|
+
if (tool.label != null && !toolLabelSchema.safeParse(tool.label).success)
|
|
214
|
+
issues.push(error(`${path} label must be text or { start, delta?, complete? } callbacks`));
|
|
215
|
+
if (isString(tool.label)) annotations.title = tool.label;
|
|
216
|
+
if (Object.keys(annotations).length > 0) descriptor.annotations = annotations;
|
|
217
|
+
return { descriptor, approval: approval.policy, issues };
|
|
218
|
+
};
|
|
219
|
+
const authoredConnectionSchema = z.looseObject({
|
|
220
|
+
url: optionalValueSchema,
|
|
221
|
+
auth: optionalValueSchema,
|
|
222
|
+
headers: optionalValueSchema,
|
|
223
|
+
approval: optionalValueSchema,
|
|
224
|
+
toolCall: optionalValueSchema,
|
|
225
|
+
tools: z.looseObject({
|
|
226
|
+
allow: z.array(z.string()).optional(),
|
|
227
|
+
deny: z.array(z.string()).optional(),
|
|
228
|
+
approval: authoredRecordSchema.optional()
|
|
229
|
+
}).optional()
|
|
230
|
+
});
|
|
231
|
+
const connectionAuthSchema = z.union([
|
|
232
|
+
z.object({ kind: z.literal("final-session") }).transform(() => ({ kind: "final-session" })),
|
|
233
|
+
z.looseObject({ secretKey: z.string().min(1), headerName: z.string().nullish() }).transform((auth) => ({ secretKey: auth.secretKey, headerName: auth.headerName ?? null }))
|
|
234
|
+
]);
|
|
235
|
+
const stringRecord = (value, path, issues) => {
|
|
236
|
+
if (value == null) return {};
|
|
237
|
+
const parsed = z.record(z.string(), z.string()).safeParse(value);
|
|
238
|
+
if (parsed.success) return parsed.data;
|
|
239
|
+
issues.push(error(`${path} must be a record of strings (header callbacks are not supported)`));
|
|
240
|
+
return {};
|
|
241
|
+
};
|
|
242
|
+
const lowerAuth = (value, path, issues) => {
|
|
243
|
+
if (value == null) return null;
|
|
244
|
+
const parsed = connectionAuthSchema.safeParse(value);
|
|
245
|
+
if (parsed.success) return parsed.data;
|
|
246
|
+
issues.push(
|
|
247
|
+
error(
|
|
248
|
+
`${path} must be { secretKey, headerName } or { kind: 'final-session' }; auth providers and callbacks are not supported`
|
|
249
|
+
)
|
|
250
|
+
);
|
|
251
|
+
return null;
|
|
252
|
+
};
|
|
253
|
+
const lowerConnection = (args) => {
|
|
254
|
+
const issues = [];
|
|
255
|
+
const path = `connection ${args.key}`;
|
|
256
|
+
const parsed = authoredConnectionSchema.safeParse(args.value);
|
|
257
|
+
const connection = parsed.success ? parsed.data : null;
|
|
258
|
+
if (connection == null)
|
|
259
|
+
issues.push(error(`${path} must be defineMcpClientConnection({ url, ... })`));
|
|
260
|
+
const url = isString(connection?.url) ? connection.url : null;
|
|
261
|
+
if (url == null || !z.url().safeParse(url).success)
|
|
262
|
+
issues.push(error(`${path} needs a valid url`));
|
|
263
|
+
const tools = connection?.tools;
|
|
264
|
+
const defaultApproval = lowerApproval(connection?.approval);
|
|
265
|
+
if (defaultApproval.error != null) issues.push(error(`${path}: ${defaultApproval.error}`));
|
|
266
|
+
if (defaultApproval.note != null) issues.push(note(`${path}: ${defaultApproval.note}`));
|
|
267
|
+
const overrideEntries = [];
|
|
268
|
+
const inputApprovalEntries = [];
|
|
269
|
+
const staticOverrideKeys = [];
|
|
270
|
+
if (defaultApproval.inputDependent)
|
|
271
|
+
inputApprovalEntries.push([
|
|
272
|
+
"*",
|
|
273
|
+
{ kind: InputApprovalKind.Connection, export: args.exportName }
|
|
274
|
+
]);
|
|
275
|
+
for (const [tool, approval] of Object.entries(tools?.approval ?? {})) {
|
|
276
|
+
const lowered = lowerApproval(approval);
|
|
277
|
+
if (lowered.error != null)
|
|
278
|
+
issues.push(error(`${path} tools.approval.${tool}: ${lowered.error}`));
|
|
279
|
+
if (lowered.note != null) issues.push(note(`${path} tools.approval.${tool}: ${lowered.note}`));
|
|
280
|
+
overrideEntries.push([tool, lowered.policy]);
|
|
281
|
+
if (lowered.inputDependent)
|
|
282
|
+
inputApprovalEntries.push([
|
|
283
|
+
tool,
|
|
284
|
+
{ kind: InputApprovalKind.Connection, export: args.exportName, policyKey: tool }
|
|
285
|
+
]);
|
|
286
|
+
else staticOverrideKeys.push(tool);
|
|
287
|
+
}
|
|
288
|
+
const overrides = Object.fromEntries(overrideEntries);
|
|
289
|
+
const inputApprovals = Object.fromEntries(inputApprovalEntries);
|
|
290
|
+
for (const key of staticOverrideKeys) delete inputApprovals[key];
|
|
291
|
+
const defaultPolicy = overrides["*"] ?? defaultApproval.policy;
|
|
292
|
+
const allow = tools?.allow ?? null;
|
|
293
|
+
let approvals = null;
|
|
294
|
+
if (allow != null) {
|
|
295
|
+
approvals = Object.fromEntries(allow.map((tool) => [tool, overrides[tool] ?? defaultPolicy]));
|
|
296
|
+
const inherited = Object.hasOwn(inputApprovals, "*") ? inputApprovals["*"] : void 0;
|
|
297
|
+
if (inherited != null) {
|
|
298
|
+
for (const tool of allow) {
|
|
299
|
+
if (!Object.hasOwn(overrides, tool))
|
|
300
|
+
Object.defineProperty(inputApprovals, tool, {
|
|
301
|
+
value: inherited,
|
|
302
|
+
enumerable: true,
|
|
303
|
+
configurable: true,
|
|
304
|
+
writable: true
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
for (const tool of Object.keys(overrides)) {
|
|
309
|
+
if (!allow.includes(tool)) {
|
|
310
|
+
issues.push(
|
|
311
|
+
warning(`${path} sets an approval for ${tool}, which tools.allow does not expose`)
|
|
312
|
+
);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
} else if (defaultApproval.policy === ToolApproval.Ask || Object.keys(overrides).length > 0) {
|
|
316
|
+
approvals = { "*": defaultApproval.policy, ...overrides };
|
|
317
|
+
}
|
|
318
|
+
const deny = tools?.deny ?? [];
|
|
319
|
+
for (const tool of deny) {
|
|
320
|
+
if (Object.hasOwn(overrides, tool))
|
|
321
|
+
issues.push(warning(`${path} sets an approval for ${tool}, which tools.deny hides`));
|
|
322
|
+
}
|
|
323
|
+
if (connection?.toolCall != null)
|
|
324
|
+
issues.push(error(`${path} uses toolCall.providedArguments, which is not supported`));
|
|
325
|
+
const binding = {
|
|
326
|
+
key: args.key,
|
|
327
|
+
kind: McpServerBindingKind.Http,
|
|
328
|
+
url: url ?? "https://invalid.invalid",
|
|
329
|
+
auth: lowerAuth(connection?.auth, `${path} auth`, issues),
|
|
330
|
+
headers: stringRecord(connection?.headers, `${path} headers`, issues),
|
|
331
|
+
approvals
|
|
332
|
+
};
|
|
333
|
+
if (deny.length > 0) binding.deny = [...new Set(deny)];
|
|
334
|
+
if (Object.keys(inputApprovals).length > 0) binding.inputApprovals = inputApprovals;
|
|
335
|
+
return { binding, issues };
|
|
336
|
+
};
|
|
337
|
+
const skillMarkdown = (args) => args.markdown.startsWith("---\n") ? args.markdown : `---
|
|
338
|
+
name: ${JSON.stringify(args.key)}
|
|
339
|
+
description: ${JSON.stringify(args.description)}
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
${args.markdown}`;
|
|
343
|
+
const authoredSkillSchema = z.looseObject({
|
|
344
|
+
description: optionalValueSchema,
|
|
345
|
+
markdown: optionalValueSchema,
|
|
346
|
+
files: authoredRecordSchema.optional().catch(void 0)
|
|
347
|
+
});
|
|
348
|
+
const lowerSkill = (args) => {
|
|
349
|
+
const issues = [];
|
|
350
|
+
const parsed = authoredSkillSchema.safeParse(args.value);
|
|
351
|
+
const description = parsed.success && isString(parsed.data.description) ? parsed.data.description : null;
|
|
352
|
+
const markdown = parsed.success && isString(parsed.data.markdown) ? parsed.data.markdown : null;
|
|
353
|
+
if (description == null || description.length === 0)
|
|
354
|
+
issues.push(error(`skill ${args.key} needs a description`));
|
|
355
|
+
if (markdown == null) issues.push(error(`skill ${args.key} needs markdown`));
|
|
356
|
+
const files = [
|
|
357
|
+
{
|
|
358
|
+
path: "SKILL.md",
|
|
359
|
+
content: skillMarkdown({
|
|
360
|
+
key: args.key,
|
|
361
|
+
description: description ?? "",
|
|
362
|
+
markdown: markdown ?? ""
|
|
363
|
+
})
|
|
364
|
+
}
|
|
365
|
+
];
|
|
366
|
+
for (const [path, content] of Object.entries(
|
|
367
|
+
(parsed.success ? parsed.data.files : void 0) ?? {}
|
|
368
|
+
)) {
|
|
369
|
+
if (path.startsWith("/") || path.split(/[\\/]/).includes("..")) {
|
|
370
|
+
issues.push(error(`skill ${args.key} file ${path} must stay inside the skill directory`));
|
|
371
|
+
} else if (!isString(content)) {
|
|
372
|
+
issues.push(warning(`skill ${args.key} file ${path} is binary and was left out`));
|
|
373
|
+
} else if (path !== "SKILL.md") files.push({ path, content });
|
|
374
|
+
}
|
|
375
|
+
const skill = { key: args.key, files };
|
|
376
|
+
if (description != null) skill.description = description;
|
|
377
|
+
return { skill, issues };
|
|
378
|
+
};
|
|
379
|
+
const authoredInstructionsSchema = z.looseObject({
|
|
380
|
+
content: z.string(),
|
|
381
|
+
role: z.string().optional()
|
|
382
|
+
});
|
|
383
|
+
const lowerInstructions = (value, source) => {
|
|
384
|
+
const parsed = authoredInstructionsSchema.safeParse(value);
|
|
385
|
+
if (!parsed.success) return null;
|
|
386
|
+
const fragment = {
|
|
387
|
+
role: parsed.data.role === InstructionRole.User ? InstructionRole.User : InstructionRole.System,
|
|
388
|
+
content: parsed.data.content
|
|
389
|
+
};
|
|
390
|
+
if (source != null) fragment.source = source;
|
|
391
|
+
return fragment;
|
|
392
|
+
};
|
|
393
|
+
const environmentSchema = z.looseObject({
|
|
394
|
+
providerName: z.string(),
|
|
395
|
+
providerRef: optionalValueSchema,
|
|
396
|
+
options: optionalValueSchema,
|
|
397
|
+
open: callableSchema
|
|
398
|
+
});
|
|
399
|
+
const openRequestSchema = z.looseObject({
|
|
400
|
+
providerName: z.string(),
|
|
401
|
+
providerRef: optionalValueSchema,
|
|
402
|
+
environmentOptions: optionalValueSchema,
|
|
403
|
+
openOptions: optionalValueSchema
|
|
404
|
+
});
|
|
405
|
+
const sandboxProviderSchema = z.looseObject({
|
|
406
|
+
name: z.string(),
|
|
407
|
+
environment: callableSchema,
|
|
408
|
+
definition: z.looseObject({})
|
|
409
|
+
});
|
|
410
|
+
const isEnvironmentLike = (value) => environmentSchema.safeParse(value).success;
|
|
411
|
+
const isOpenRequestLike = (value) => openRequestSchema.safeParse(value).success && isObjectLike(value) && "environmentOptions" in value;
|
|
412
|
+
const sandboxProviderNameOf = (value) => {
|
|
413
|
+
const parsed = sandboxProviderSchema.safeParse(value);
|
|
414
|
+
return parsed.success ? parsed.data.name : null;
|
|
415
|
+
};
|
|
416
|
+
const lowerEnvironment = (value, path, issues) => {
|
|
417
|
+
const warnings = z.array(z.string()).safeParse(fieldOf(value, "authoringWarnings"));
|
|
418
|
+
if (warnings.success)
|
|
419
|
+
for (const message of warnings.data) issues.push(warning(`${path}: ${message}`));
|
|
420
|
+
const request = isOpenRequestLike(value) ? openRequestSchema.safeParse(value) : null;
|
|
421
|
+
if (request?.success === true) {
|
|
422
|
+
return {
|
|
423
|
+
providerName: request.data.providerName,
|
|
424
|
+
providerRef: request.data.providerRef == null ? null : toJson(request.data.providerRef, { path, issues }),
|
|
425
|
+
options: toJson(request.data.environmentOptions ?? {}, { path: `${path} options`, issues }),
|
|
426
|
+
openOptions: toJson(request.data.openOptions ?? null, {
|
|
427
|
+
path: `${path} open options`,
|
|
428
|
+
issues
|
|
429
|
+
})
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
const environment = environmentSchema.safeParse(value);
|
|
433
|
+
if (!environment.success) return null;
|
|
434
|
+
return {
|
|
435
|
+
providerName: environment.data.providerName,
|
|
436
|
+
providerRef: environment.data.providerRef == null ? null : toJson(environment.data.providerRef, { path, issues }),
|
|
437
|
+
options: toJson(environment.data.options ?? {}, { path: `${path} options`, issues }),
|
|
438
|
+
openOptions: null
|
|
439
|
+
};
|
|
440
|
+
};
|
|
441
|
+
const isDynamicSentinel = (value) => authoredKindOf(value) === AuthoredKind.Dynamic;
|
|
442
|
+
const dynamicEventsOf = (value) => entriesOf(fieldOf(value, "events")).filter(([, handler]) => isCallable(handler)).map(([event]) => event);
|
|
443
|
+
export {
|
|
444
|
+
IssueSeverity,
|
|
445
|
+
childPath,
|
|
446
|
+
dynamicEventsOf,
|
|
447
|
+
error,
|
|
448
|
+
isDynamicSentinel,
|
|
449
|
+
isEnvironmentLike,
|
|
450
|
+
isOpenRequestLike,
|
|
451
|
+
lowerConnection,
|
|
452
|
+
lowerEnvironment,
|
|
453
|
+
lowerInstructions,
|
|
454
|
+
lowerSkill,
|
|
455
|
+
lowerTool,
|
|
456
|
+
note,
|
|
457
|
+
sandboxProviderNameOf,
|
|
458
|
+
skillMarkdown,
|
|
459
|
+
toJson,
|
|
460
|
+
toJsonSchema,
|
|
461
|
+
warning
|
|
462
|
+
};
|
|
463
|
+
//# sourceMappingURL=lower.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/runtime/lower.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n InputApprovalKind,\n InstructionRole,\n McpServerBindingKind,\n ToolApproval,\n type HttpMcpServerBindingIface,\n type InputApprovalIface,\n type InstructionFragmentIface,\n type JsonObject,\n type JsonValue,\n type SkillBundleIface,\n type ToolDescriptorIface,\n} from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport { lowerApproval } from \"../authoring/approval.mjs\";\nimport {\n AuthoredKind,\n authoredKindOf,\n pendingExportName,\n pendingIndexOf,\n} from \"../authoring/brand.mjs\";\nimport { toolLabelSchema } from \"../authoring/tools.mjs\";\nimport { jsonSchemaDeclarationError, SchemaIo } from \"./schema-validation.mjs\";\nimport {\n authoredRecordSchema,\n authoredValueSchema,\n callableSchema,\n entriesOf,\n fieldOf,\n isBoolean,\n isCallable,\n isNumber,\n isObjectLike,\n isPlainObject,\n isString,\n messageOf,\n optionalValueSchema,\n type AuthoredValue,\n} from \"./values.mjs\";\n\n// Lowering of authored values to manifest JSON. Runs inside the realm that\n// evaluated the authored modules (the compiler's vm context, or the agent's\n// Worker isolate for dynamic resolver outputs), so it never crosses realms\n// with live values.\n\nexport enum IssueSeverity {\n Error = 'error',\n Warning = 'warning',\n Note = 'note',\n}\n\nexport interface IssueIface {\n severity: IssueSeverity;\n message: string;\n}\n\nexport const error = (message: string): IssueIface => ({ severity: IssueSeverity.Error, message });\nexport const warning = (message: string): IssueIface => ({\n severity: IssueSeverity.Warning,\n message,\n});\nexport const note = (message: string): IssueIface => ({ severity: IssueSeverity.Note, message });\n\nexport const childPath = (parent: string, key: string | number): string => {\n if (isNumber(key)) return `${parent}[${key}]`;\n return parent.length === 0 ? key : `${parent}.${key}`;\n};\n\nexport interface ToJsonOptionsIface {\n path: string;\n issues: IssueIface[];\n // Replaces an authored value (a dynamic sentinel) with its manifest form;\n // return undefined to fall back to the default conversion.\n visit?: (value: AuthoredValue, path: string) => JsonValue | undefined;\n}\n\nconst PENDING_PLACEHOLDER = /^<pending:\\d+>$/;\n\nconst label = (path: string): string => (path.length === 0 ? 'value' : path);\n\n// Plain JSON conversion with diagnostics for values JSON cannot hold.\nexport const toJson = (value: AuthoredValue, options: ToJsonOptionsIface): JsonValue => {\n const visited = options.visit?.(value, options.path);\n if (visited !== undefined) return visited;\n if (value == null) return null;\n if (isString(value)) {\n const index = PENDING_PLACEHOLDER.test(value) ? pendingIndexOf(value) : null;\n return index == null ? value : pendingExportName(index);\n }\n if (isNumber(value)) {\n if (Number.isFinite(value)) return value;\n options.issues.push(error(`${label(options.path)} is not a finite number`));\n return null;\n }\n if (isBoolean(value)) return value;\n if (Array.isArray(value)) {\n return value.map((item, index) =>\n toJson(item, { ...options, path: childPath(options.path, index) }),\n );\n }\n if (isCallable(value)) {\n options.issues.push(\n error(`${label(options.path)} is a function; only static values can appear here`),\n );\n return null;\n }\n if (isPlainObject(value) || authoredKindOf(value) != null) {\n const out: JsonObject = {};\n for (const [key, item] of entriesOf(value)) {\n if (item === undefined) continue;\n out[key] = toJson(item, { ...options, path: childPath(options.path, key) });\n }\n return out;\n }\n options.issues.push(\n error(`${label(options.path)} is not JSON (${Object.prototype.toString.call(value)})`),\n );\n return null;\n};\n\nconst jsonSchemaObjectSchema = z.record(z.string(), authoredValueSchema);\n\nconst standardJsonSchemaSchema = z.looseObject({\n '~standard': z.looseObject({\n jsonSchema: z\n .looseObject({ input: callableSchema, output: callableSchema.optional() })\n .optional(),\n }),\n});\n\nconst isZodSchema = (value: AuthoredValue): value is z.ZodType => value instanceof z.ZodType;\n\n// Tool input/output schemas: Standard JSON Schema (zod 4 and others), a zod\n// schema, or a JSON Schema document.\nexport const toJsonSchema = (args: {\n schema: AuthoredValue;\n path: string;\n issues: IssueIface[];\n io?: SchemaIo;\n}): JsonObject | null => {\n const { schema, path, issues } = args;\n const io = args.io ?? SchemaIo.Input;\n const standard = standardJsonSchemaSchema.safeParse(schema);\n const jsonSchema = fieldOf(fieldOf(schema, '~standard'), 'jsonSchema');\n let converted: AuthoredValue = null;\n if (standard.success && standard.data['~standard'].jsonSchema != null) {\n try {\n const convert = standard.data['~standard'].jsonSchema[io];\n if (convert == null) throw new Error(`Standard JSON Schema has no ${io} converter`);\n converted = convert.call(jsonSchema, {\n target: 'draft-2020-12',\n });\n } catch (cause) {\n issues.push(error(`${path} could not be converted to JSON Schema: ${messageOf(cause)}`));\n return null;\n }\n } else if (isZodSchema(schema)) {\n converted = z.toJSONSchema(schema, { io });\n } else if (standard.success) {\n issues.push(\n error(\n `${path} is a Standard Schema without JSON Schema support; use zod 4 or a JSON Schema object`,\n ),\n );\n return null;\n } else if (isPlainObject(schema)) {\n converted = schema;\n } else {\n issues.push(error(`${path} must be a zod schema or a JSON Schema object`));\n return null;\n }\n const json = toJson(converted, { path, issues });\n if (\n json == null ||\n Array.isArray(json) ||\n !jsonSchemaObjectSchema.safeParse(json).success ||\n !isPlainObject(json)\n ) {\n issues.push(error(`${path} did not produce a JSON Schema object`));\n return null;\n }\n const out: JsonObject = {};\n for (const [key, item] of Object.entries(json)) {\n if (key !== '$schema' || (!standard.success && !isZodSchema(schema))) out[key] = item;\n }\n const declarationError = jsonSchemaDeclarationError(out);\n if (declarationError != null) {\n issues.push(error(`${path} is an invalid JSON Schema: ${declarationError}`));\n return null;\n }\n return out;\n};\n\nconst authoredToolSchema = z.looseObject({\n description: optionalValueSchema,\n execute: optionalValueSchema,\n inputSchema: optionalValueSchema,\n outputSchema: optionalValueSchema,\n endsTurn: optionalValueSchema,\n approval: optionalValueSchema,\n label: optionalValueSchema,\n annotations: z\n .looseObject({\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 .catch(undefined),\n});\n\nexport interface LoweredToolIface {\n descriptor: ToolDescriptorIface;\n approval: ToolApproval;\n issues: IssueIface[];\n}\n\nexport const lowerTool = (args: {\n name: string;\n exportName: string;\n value: AuthoredValue;\n}): LoweredToolIface => {\n const issues: IssueIface[] = [];\n const path = `tool ${args.name}`;\n const parsed = authoredToolSchema.safeParse(args.value);\n if (!parsed.success) {\n issues.push(error(`${path} must be defineTool({ description, inputSchema, execute })`));\n return {\n descriptor: {\n name: args.name,\n description: '',\n inputSchema: { type: 'object' },\n export: args.exportName,\n },\n approval: ToolApproval.Ask,\n issues,\n };\n }\n const tool = parsed.data;\n const description = isString(tool.description) ? tool.description : '';\n if (description.length === 0) issues.push(error(`${path} needs a description`));\n if (!isCallable(tool.execute)) issues.push(error(`${path} needs an execute function`));\n const inputSchema = toJsonSchema({\n schema: tool.inputSchema,\n path: `${path} inputSchema`,\n issues,\n }) ?? {\n type: 'object',\n };\n if (tool.endsTurn != null && tool.endsTurn !== false) {\n issues.push(\n error(`${path} sets endsTurn; it is not supported because the harness owns the loop`),\n );\n }\n const approval = lowerApproval(tool.approval);\n if (approval.error != null) issues.push(error(`${path}: ${approval.error}`));\n if (approval.note != null) issues.push(note(`${path}: ${approval.note}`));\n const descriptor: ToolDescriptorIface = {\n name: args.name,\n description,\n inputSchema,\n export: args.exportName,\n };\n if (approval.inputDependent)\n descriptor.inputApproval = { kind: InputApprovalKind.Tool, export: args.exportName };\n if (tool.outputSchema != null) {\n const outputSchema = toJsonSchema({\n schema: tool.outputSchema,\n path: `${path} outputSchema`,\n issues,\n io: SchemaIo.Output,\n });\n if (outputSchema != null) descriptor.outputSchema = outputSchema;\n }\n const annotations: NonNullable<ToolDescriptorIface['annotations']> = { ...tool.annotations };\n if (tool.label != null && !toolLabelSchema.safeParse(tool.label).success)\n issues.push(error(`${path} label must be text or { start, delta?, complete? } callbacks`));\n if (isString(tool.label)) annotations.title = tool.label;\n if (Object.keys(annotations).length > 0) descriptor.annotations = annotations;\n return { descriptor, approval: approval.policy, issues };\n};\n\nconst authoredConnectionSchema = z.looseObject({\n url: optionalValueSchema,\n auth: optionalValueSchema,\n headers: optionalValueSchema,\n approval: optionalValueSchema,\n toolCall: optionalValueSchema,\n tools: z\n .looseObject({\n allow: z.array(z.string()).optional(),\n deny: z.array(z.string()).optional(),\n approval: authoredRecordSchema.optional(),\n })\n .optional(),\n});\n\nconst connectionAuthSchema = z.union([\n z\n .object({ kind: z.literal('final-session') })\n .transform(() => ({ kind: 'final-session' as const })),\n z\n .looseObject({ secretKey: z.string().min(1), headerName: z.string().nullish() })\n .transform((auth) => ({ secretKey: auth.secretKey, headerName: auth.headerName ?? null })),\n]);\n\nexport interface LoweredConnectionIface {\n binding: HttpMcpServerBindingIface;\n issues: IssueIface[];\n}\n\nconst stringRecord = (\n value: AuthoredValue,\n path: string,\n issues: IssueIface[],\n): Record<string, string> => {\n if (value == null) return {};\n const parsed = z.record(z.string(), z.string()).safeParse(value);\n if (parsed.success) return parsed.data;\n issues.push(error(`${path} must be a record of strings (header callbacks are not supported)`));\n return {};\n};\n\nconst lowerAuth = (\n value: AuthoredValue,\n path: string,\n issues: IssueIface[],\n): HttpMcpServerBindingIface['auth'] => {\n if (value == null) return null;\n const parsed = connectionAuthSchema.safeParse(value);\n if (parsed.success) return parsed.data;\n issues.push(\n error(\n `${path} must be { secretKey, headerName } or { kind: 'final-session' }; auth providers and callbacks are not supported`,\n ),\n );\n return null;\n};\n\nexport const lowerConnection = (args: {\n key: string;\n exportName: string;\n value: AuthoredValue;\n}): LoweredConnectionIface => {\n const issues: IssueIface[] = [];\n const path = `connection ${args.key}`;\n const parsed = authoredConnectionSchema.safeParse(args.value);\n const connection = parsed.success ? parsed.data : null;\n if (connection == null)\n issues.push(error(`${path} must be defineMcpClientConnection({ url, ... })`));\n const url = isString(connection?.url) ? connection.url : null;\n if (url == null || !z.url().safeParse(url).success)\n issues.push(error(`${path} needs a valid url`));\n const tools = connection?.tools;\n const defaultApproval = lowerApproval(connection?.approval);\n if (defaultApproval.error != null) issues.push(error(`${path}: ${defaultApproval.error}`));\n if (defaultApproval.note != null) issues.push(note(`${path}: ${defaultApproval.note}`));\n const overrideEntries: [string, ToolApproval][] = [];\n const inputApprovalEntries: [string, InputApprovalIface][] = [];\n const staticOverrideKeys: string[] = [];\n if (defaultApproval.inputDependent)\n inputApprovalEntries.push([\n '*',\n { kind: InputApprovalKind.Connection, export: args.exportName },\n ]);\n for (const [tool, approval] of Object.entries(tools?.approval ?? {})) {\n const lowered = lowerApproval(approval);\n if (lowered.error != null)\n issues.push(error(`${path} tools.approval.${tool}: ${lowered.error}`));\n if (lowered.note != null) issues.push(note(`${path} tools.approval.${tool}: ${lowered.note}`));\n overrideEntries.push([tool, lowered.policy]);\n if (lowered.inputDependent)\n inputApprovalEntries.push([\n tool,\n { kind: InputApprovalKind.Connection, export: args.exportName, policyKey: tool },\n ]);\n else staticOverrideKeys.push(tool);\n }\n const overrides = Object.fromEntries(overrideEntries);\n const inputApprovals = Object.fromEntries(inputApprovalEntries);\n for (const key of staticOverrideKeys) delete inputApprovals[key];\n const defaultPolicy = overrides['*'] ?? defaultApproval.policy;\n const allow = tools?.allow ?? null;\n let approvals: Record<string, ToolApproval> | null = null;\n if (allow != null) {\n approvals = Object.fromEntries(allow.map((tool) => [tool, overrides[tool] ?? defaultPolicy]));\n const inherited = Object.hasOwn(inputApprovals, '*') ? inputApprovals['*'] : undefined;\n if (inherited != null) {\n for (const tool of allow) {\n if (!Object.hasOwn(overrides, tool))\n Object.defineProperty(inputApprovals, tool, {\n value: inherited,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n }\n }\n for (const tool of Object.keys(overrides)) {\n if (!allow.includes(tool)) {\n issues.push(\n warning(`${path} sets an approval for ${tool}, which tools.allow does not expose`),\n );\n }\n }\n } else if (defaultApproval.policy === ToolApproval.Ask || Object.keys(overrides).length > 0) {\n // '*' applies to every listed tool without its own entry.\n approvals = { '*': defaultApproval.policy, ...overrides };\n }\n const deny = tools?.deny ?? [];\n for (const tool of deny) {\n if (Object.hasOwn(overrides, tool))\n issues.push(warning(`${path} sets an approval for ${tool}, which tools.deny hides`));\n }\n if (connection?.toolCall != null)\n issues.push(error(`${path} uses toolCall.providedArguments, which is not supported`));\n const binding: HttpMcpServerBindingIface = {\n key: args.key,\n kind: McpServerBindingKind.Http,\n url: url ?? 'https://invalid.invalid',\n auth: lowerAuth(connection?.auth, `${path} auth`, issues),\n headers: stringRecord(connection?.headers, `${path} headers`, issues),\n approvals,\n };\n if (deny.length > 0) binding.deny = [...new Set(deny)];\n if (Object.keys(inputApprovals).length > 0) binding.inputApprovals = inputApprovals;\n return { binding, issues };\n};\n\nexport const skillMarkdown = (args: {\n key: string;\n description: string;\n markdown: string;\n}): string =>\n args.markdown.startsWith('---\\n')\n ? args.markdown\n : `---\\nname: ${JSON.stringify(args.key)}\\ndescription: ${JSON.stringify(args.description)}\\n---\\n\\n${args.markdown}`;\n\nconst authoredSkillSchema = z.looseObject({\n description: optionalValueSchema,\n markdown: optionalValueSchema,\n files: authoredRecordSchema.optional().catch(undefined),\n});\n\nexport interface LoweredSkillIface {\n skill: SkillBundleIface;\n issues: IssueIface[];\n}\n\nexport const lowerSkill = (args: { key: string; value: AuthoredValue }): LoweredSkillIface => {\n const issues: IssueIface[] = [];\n const parsed = authoredSkillSchema.safeParse(args.value);\n const description =\n parsed.success && isString(parsed.data.description) ? parsed.data.description : null;\n const markdown = parsed.success && isString(parsed.data.markdown) ? parsed.data.markdown : null;\n if (description == null || description.length === 0)\n issues.push(error(`skill ${args.key} needs a description`));\n if (markdown == null) issues.push(error(`skill ${args.key} needs markdown`));\n const files: SkillBundleIface['files'] = [\n {\n path: 'SKILL.md',\n content: skillMarkdown({\n key: args.key,\n description: description ?? '',\n markdown: markdown ?? '',\n }),\n },\n ];\n for (const [path, content] of Object.entries(\n (parsed.success ? parsed.data.files : undefined) ?? {},\n )) {\n if (path.startsWith('/') || path.split(/[\\\\/]/).includes('..')) {\n issues.push(error(`skill ${args.key} file ${path} must stay inside the skill directory`));\n } else if (!isString(content)) {\n issues.push(warning(`skill ${args.key} file ${path} is binary and was left out`));\n } else if (path !== 'SKILL.md') files.push({ path, content });\n }\n const skill: SkillBundleIface = { key: args.key, files };\n if (description != null) skill.description = description;\n return { skill, issues };\n};\n\nconst authoredInstructionsSchema = z.looseObject({\n content: z.string(),\n role: z.string().optional(),\n});\n\nexport const lowerInstructions = (\n value: AuthoredValue,\n source: string | null,\n): InstructionFragmentIface | null => {\n const parsed = authoredInstructionsSchema.safeParse(value);\n if (!parsed.success) return null;\n const fragment: InstructionFragmentIface = {\n role: parsed.data.role === InstructionRole.User ? InstructionRole.User : InstructionRole.System,\n content: parsed.data.content,\n };\n if (source != null) fragment.source = source;\n return fragment;\n};\n\nexport interface LoweredEnvironmentIface {\n providerName: string;\n providerRef: JsonValue | null;\n options: JsonValue;\n openOptions: JsonValue | null;\n}\n\nconst environmentSchema = z.looseObject({\n providerName: z.string(),\n providerRef: optionalValueSchema,\n options: optionalValueSchema,\n open: callableSchema,\n});\n\nconst openRequestSchema = z.looseObject({\n providerName: z.string(),\n providerRef: optionalValueSchema,\n environmentOptions: optionalValueSchema,\n openOptions: optionalValueSchema,\n});\n\nconst sandboxProviderSchema = z.looseObject({\n name: z.string(),\n environment: callableSchema,\n definition: z.looseObject({}),\n});\n\nexport const isEnvironmentLike = (value: AuthoredValue): boolean =>\n environmentSchema.safeParse(value).success;\n\nexport const isOpenRequestLike = (value: AuthoredValue): boolean =>\n openRequestSchema.safeParse(value).success &&\n isObjectLike(value) &&\n 'environmentOptions' in value;\n\nexport const sandboxProviderNameOf = (value: AuthoredValue): string | null => {\n const parsed = sandboxProviderSchema.safeParse(value);\n return parsed.success ? parsed.data.name : null;\n};\n\nexport const lowerEnvironment = (\n value: AuthoredValue,\n path: string,\n issues: IssueIface[],\n): LoweredEnvironmentIface | null => {\n const warnings = z.array(z.string()).safeParse(fieldOf(value, 'authoringWarnings'));\n if (warnings.success)\n for (const message of warnings.data) issues.push(warning(`${path}: ${message}`));\n const request = isOpenRequestLike(value) ? openRequestSchema.safeParse(value) : null;\n if (request?.success === true) {\n return {\n providerName: request.data.providerName,\n providerRef:\n request.data.providerRef == null\n ? null\n : toJson(request.data.providerRef, { path, issues }),\n options: toJson(request.data.environmentOptions ?? {}, { path: `${path} options`, issues }),\n openOptions: toJson(request.data.openOptions ?? null, {\n path: `${path} open options`,\n issues,\n }),\n };\n }\n const environment = environmentSchema.safeParse(value);\n if (!environment.success) return null;\n return {\n providerName: environment.data.providerName,\n providerRef:\n environment.data.providerRef == null\n ? null\n : toJson(environment.data.providerRef, { path, issues }),\n options: toJson(environment.data.options ?? {}, { path: `${path} options`, issues }),\n openOptions: null,\n };\n};\n\nexport const isDynamicSentinel = (value: AuthoredValue): boolean =>\n authoredKindOf(value) === AuthoredKind.Dynamic;\n\nexport const dynamicEventsOf = (value: AuthoredValue): string[] =>\n entriesOf(fieldOf(value, 'events'))\n .filter(([, handler]) => isCallable(handler))\n .map(([event]) => event);\n"],
|
|
5
|
+
"mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAQK;AACP,YAAY,OAAO;AACnB,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,uBAAuB;AAChC,SAAS,4BAA4B,gBAAgB;AACrD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAOA,IAAK,gBAAL,kBAAKA,mBAAL;AACL,EAAAA,eAAA,WAAQ;AACR,EAAAA,eAAA,aAAU;AACV,EAAAA,eAAA,UAAO;AAHG,SAAAA;AAAA,GAAA;AAWL,MAAM,QAAQ,CAAC,aAAiC,EAAE,UAAU,qBAAqB,QAAQ;AACzF,MAAM,UAAU,CAAC,aAAiC;AAAA,EACvD,UAAU;AAAA,EACV;AACF;AACO,MAAM,OAAO,CAAC,aAAiC,EAAE,UAAU,mBAAoB,QAAQ;AAEvF,MAAM,YAAY,CAAC,QAAgB,QAAiC;AACzE,MAAI,SAAS,GAAG,EAAG,QAAO,GAAG,MAAM,IAAI,GAAG;AAC1C,SAAO,OAAO,WAAW,IAAI,MAAM,GAAG,MAAM,IAAI,GAAG;AACrD;AAUA,MAAM,sBAAsB;AAE5B,MAAM,QAAQ,CAAC,SAA0B,KAAK,WAAW,IAAI,UAAU;AAGhE,MAAM,SAAS,CAAC,OAAsB,YAA2C;AACtF,QAAM,UAAU,QAAQ,QAAQ,OAAO,QAAQ,IAAI;AACnD,MAAI,YAAY,OAAW,QAAO;AAClC,MAAI,SAAS,KAAM,QAAO;AAC1B,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,QAAQ,oBAAoB,KAAK,KAAK,IAAI,eAAe,KAAK,IAAI;AACxE,WAAO,SAAS,OAAO,QAAQ,kBAAkB,KAAK;AAAA,EACxD;AACA,MAAI,SAAS,KAAK,GAAG;AACnB,QAAI,OAAO,SAAS,KAAK,EAAG,QAAO;AACnC,YAAQ,OAAO,KAAK,MAAM,GAAG,MAAM,QAAQ,IAAI,CAAC,yBAAyB,CAAC;AAC1E,WAAO;AAAA,EACT;AACA,MAAI,UAAU,KAAK,EAAG,QAAO;AAC7B,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM;AAAA,MAAI,CAAC,MAAM,UACtB,OAAO,MAAM,EAAE,GAAG,SAAS,MAAM,UAAU,QAAQ,MAAM,KAAK,EAAE,CAAC;AAAA,IACnE;AAAA,EACF;AACA,MAAI,WAAW,KAAK,GAAG;AACrB,YAAQ,OAAO;AAAA,MACb,MAAM,GAAG,MAAM,QAAQ,IAAI,CAAC,oDAAoD;AAAA,IAClF;AACA,WAAO;AAAA,EACT;AACA,MAAI,cAAc,KAAK,KAAK,eAAe,KAAK,KAAK,MAAM;AACzD,UAAM,MAAkB,CAAC;AACzB,eAAW,CAAC,KAAK,IAAI,KAAK,UAAU,KAAK,GAAG;AAC1C,UAAI,SAAS,OAAW;AACxB,UAAI,GAAG,IAAI,OAAO,MAAM,EAAE,GAAG,SAAS,MAAM,UAAU,QAAQ,MAAM,GAAG,EAAE,CAAC;AAAA,IAC5E;AACA,WAAO;AAAA,EACT;AACA,UAAQ,OAAO;AAAA,IACb,MAAM,GAAG,MAAM,QAAQ,IAAI,CAAC,iBAAiB,OAAO,UAAU,SAAS,KAAK,KAAK,CAAC,GAAG;AAAA,EACvF;AACA,SAAO;AACT;AAEA,MAAM,yBAAyB,EAAE,OAAO,EAAE,OAAO,GAAG,mBAAmB;AAEvE,MAAM,2BAA2B,EAAE,YAAY;AAAA,EAC7C,aAAa,EAAE,YAAY;AAAA,IACzB,YAAY,EACT,YAAY,EAAE,OAAO,gBAAgB,QAAQ,eAAe,SAAS,EAAE,CAAC,EACxE,SAAS;AAAA,EACd,CAAC;AACH,CAAC;AAED,MAAM,cAAc,CAAC,UAA6C,iBAAiB,EAAE;AAI9E,MAAM,eAAe,CAAC,SAKJ;AACvB,QAAM,EAAE,QAAQ,MAAM,OAAO,IAAI;AACjC,QAAM,KAAK,KAAK,MAAM,SAAS;AAC/B,QAAM,WAAW,yBAAyB,UAAU,MAAM;AAC1D,QAAM,aAAa,QAAQ,QAAQ,QAAQ,WAAW,GAAG,YAAY;AACrE,MAAI,YAA2B;AAC/B,MAAI,SAAS,WAAW,SAAS,KAAK,WAAW,EAAE,cAAc,MAAM;AACrE,QAAI;AACF,YAAM,UAAU,SAAS,KAAK,WAAW,EAAE,WAAW,EAAE;AACxD,UAAI,WAAW,KAAM,OAAM,IAAI,MAAM,+BAA+B,EAAE,YAAY;AAClF,kBAAY,QAAQ,KAAK,YAAY;AAAA,QACnC,QAAQ;AAAA,MACV,CAAC;AAAA,IACH,SAAS,OAAO;AACd,aAAO,KAAK,MAAM,GAAG,IAAI,2CAA2C,UAAU,KAAK,CAAC,EAAE,CAAC;AACvF,aAAO;AAAA,IACT;AAAA,EACF,WAAW,YAAY,MAAM,GAAG;AAC9B,gBAAY,EAAE,aAAa,QAAQ,EAAE,GAAG,CAAC;AAAA,EAC3C,WAAW,SAAS,SAAS;AAC3B,WAAO;AAAA,MACL;AAAA,QACE,GAAG,IAAI;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT,WAAW,cAAc,MAAM,GAAG;AAChC,gBAAY;AAAA,EACd,OAAO;AACL,WAAO,KAAK,MAAM,GAAG,IAAI,+CAA+C,CAAC;AACzE,WAAO;AAAA,EACT;AACA,QAAM,OAAO,OAAO,WAAW,EAAE,MAAM,OAAO,CAAC;AAC/C,MACE,QAAQ,QACR,MAAM,QAAQ,IAAI,KAClB,CAAC,uBAAuB,UAAU,IAAI,EAAE,WACxC,CAAC,cAAc,IAAI,GACnB;AACA,WAAO,KAAK,MAAM,GAAG,IAAI,uCAAuC,CAAC;AACjE,WAAO;AAAA,EACT;AACA,QAAM,MAAkB,CAAC;AACzB,aAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC9C,QAAI,QAAQ,aAAc,CAAC,SAAS,WAAW,CAAC,YAAY,MAAM,EAAI,KAAI,GAAG,IAAI;AAAA,EACnF;AACA,QAAM,mBAAmB,2BAA2B,GAAG;AACvD,MAAI,oBAAoB,MAAM;AAC5B,WAAO,KAAK,MAAM,GAAG,IAAI,+BAA+B,gBAAgB,EAAE,CAAC;AAC3E,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,MAAM,qBAAqB,EAAE,YAAY;AAAA,EACvC,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,cAAc;AAAA,EACd,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,aAAa,EACV,YAAY;AAAA,IACX,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,cAAc,EAAE,QAAQ,EAAE,SAAS;AAAA,IACnC,iBAAiB,EAAE,QAAQ,EAAE,SAAS;AAAA,IACtC,gBAAgB,EAAE,QAAQ,EAAE,SAAS;AAAA,IACrC,eAAe,EAAE,QAAQ,EAAE,SAAS;AAAA,EACtC,CAAC,EACA,SAAS,EACT,MAAM,MAAS;AACpB,CAAC;AAQM,MAAM,YAAY,CAAC,SAIF;AACtB,QAAM,SAAuB,CAAC;AAC9B,QAAM,OAAO,QAAQ,KAAK,IAAI;AAC9B,QAAM,SAAS,mBAAmB,UAAU,KAAK,KAAK;AACtD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,KAAK,MAAM,GAAG,IAAI,4DAA4D,CAAC;AACtF,WAAO;AAAA,MACL,YAAY;AAAA,QACV,MAAM,KAAK;AAAA,QACX,aAAa;AAAA,QACb,aAAa,EAAE,MAAM,SAAS;AAAA,QAC9B,QAAQ,KAAK;AAAA,MACf;AAAA,MACA,UAAU,aAAa;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACA,QAAM,OAAO,OAAO;AACpB,QAAM,cAAc,SAAS,KAAK,WAAW,IAAI,KAAK,cAAc;AACpE,MAAI,YAAY,WAAW,EAAG,QAAO,KAAK,MAAM,GAAG,IAAI,sBAAsB,CAAC;AAC9E,MAAI,CAAC,WAAW,KAAK,OAAO,EAAG,QAAO,KAAK,MAAM,GAAG,IAAI,4BAA4B,CAAC;AACrF,QAAM,cAAc,aAAa;AAAA,IAC/B,QAAQ,KAAK;AAAA,IACb,MAAM,GAAG,IAAI;AAAA,IACb;AAAA,EACF,CAAC,KAAK;AAAA,IACJ,MAAM;AAAA,EACR;AACA,MAAI,KAAK,YAAY,QAAQ,KAAK,aAAa,OAAO;AACpD,WAAO;AAAA,MACL,MAAM,GAAG,IAAI,uEAAuE;AAAA,IACtF;AAAA,EACF;AACA,QAAM,WAAW,cAAc,KAAK,QAAQ;AAC5C,MAAI,SAAS,SAAS,KAAM,QAAO,KAAK,MAAM,GAAG,IAAI,KAAK,SAAS,KAAK,EAAE,CAAC;AAC3E,MAAI,SAAS,QAAQ,KAAM,QAAO,KAAK,KAAK,GAAG,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC;AACxE,QAAM,aAAkC;AAAA,IACtC,MAAM,KAAK;AAAA,IACX;AAAA,IACA;AAAA,IACA,QAAQ,KAAK;AAAA,EACf;AACA,MAAI,SAAS;AACX,eAAW,gBAAgB,EAAE,MAAM,kBAAkB,MAAM,QAAQ,KAAK,WAAW;AACrF,MAAI,KAAK,gBAAgB,MAAM;AAC7B,UAAM,eAAe,aAAa;AAAA,MAChC,QAAQ,KAAK;AAAA,MACb,MAAM,GAAG,IAAI;AAAA,MACb;AAAA,MACA,IAAI,SAAS;AAAA,IACf,CAAC;AACD,QAAI,gBAAgB,KAAM,YAAW,eAAe;AAAA,EACtD;AACA,QAAM,cAA+D,EAAE,GAAG,KAAK,YAAY;AAC3F,MAAI,KAAK,SAAS,QAAQ,CAAC,gBAAgB,UAAU,KAAK,KAAK,EAAE;AAC/D,WAAO,KAAK,MAAM,GAAG,IAAI,+DAA+D,CAAC;AAC3F,MAAI,SAAS,KAAK,KAAK,EAAG,aAAY,QAAQ,KAAK;AACnD,MAAI,OAAO,KAAK,WAAW,EAAE,SAAS,EAAG,YAAW,cAAc;AAClE,SAAO,EAAE,YAAY,UAAU,SAAS,QAAQ,OAAO;AACzD;AAEA,MAAM,2BAA2B,EAAE,YAAY;AAAA,EAC7C,KAAK;AAAA,EACL,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO,EACJ,YAAY;AAAA,IACX,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACpC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACnC,UAAU,qBAAqB,SAAS;AAAA,EAC1C,CAAC,EACA,SAAS;AACd,CAAC;AAED,MAAM,uBAAuB,EAAE,MAAM;AAAA,EACnC,EACG,OAAO,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAE,CAAC,EAC3C,UAAU,OAAO,EAAE,MAAM,gBAAyB,EAAE;AAAA,EACvD,EACG,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAC9E,UAAU,CAAC,UAAU,EAAE,WAAW,KAAK,WAAW,YAAY,KAAK,cAAc,KAAK,EAAE;AAC7F,CAAC;AAOD,MAAM,eAAe,CACnB,OACA,MACA,WAC2B;AAC3B,MAAI,SAAS,KAAM,QAAO,CAAC;AAC3B,QAAM,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK;AAC/D,MAAI,OAAO,QAAS,QAAO,OAAO;AAClC,SAAO,KAAK,MAAM,GAAG,IAAI,mEAAmE,CAAC;AAC7F,SAAO,CAAC;AACV;AAEA,MAAM,YAAY,CAChB,OACA,MACA,WACsC;AACtC,MAAI,SAAS,KAAM,QAAO;AAC1B,QAAM,SAAS,qBAAqB,UAAU,KAAK;AACnD,MAAI,OAAO,QAAS,QAAO,OAAO;AAClC,SAAO;AAAA,IACL;AAAA,MACE,GAAG,IAAI;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEO,MAAM,kBAAkB,CAAC,SAIF;AAC5B,QAAM,SAAuB,CAAC;AAC9B,QAAM,OAAO,cAAc,KAAK,GAAG;AACnC,QAAM,SAAS,yBAAyB,UAAU,KAAK,KAAK;AAC5D,QAAM,aAAa,OAAO,UAAU,OAAO,OAAO;AAClD,MAAI,cAAc;AAChB,WAAO,KAAK,MAAM,GAAG,IAAI,kDAAkD,CAAC;AAC9E,QAAM,MAAM,SAAS,YAAY,GAAG,IAAI,WAAW,MAAM;AACzD,MAAI,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE;AACzC,WAAO,KAAK,MAAM,GAAG,IAAI,oBAAoB,CAAC;AAChD,QAAM,QAAQ,YAAY;AAC1B,QAAM,kBAAkB,cAAc,YAAY,QAAQ;AAC1D,MAAI,gBAAgB,SAAS,KAAM,QAAO,KAAK,MAAM,GAAG,IAAI,KAAK,gBAAgB,KAAK,EAAE,CAAC;AACzF,MAAI,gBAAgB,QAAQ,KAAM,QAAO,KAAK,KAAK,GAAG,IAAI,KAAK,gBAAgB,IAAI,EAAE,CAAC;AACtF,QAAM,kBAA4C,CAAC;AACnD,QAAM,uBAAuD,CAAC;AAC9D,QAAM,qBAA+B,CAAC;AACtC,MAAI,gBAAgB;AAClB,yBAAqB,KAAK;AAAA,MACxB;AAAA,MACA,EAAE,MAAM,kBAAkB,YAAY,QAAQ,KAAK,WAAW;AAAA,IAChE,CAAC;AACH,aAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,OAAO,YAAY,CAAC,CAAC,GAAG;AACpE,UAAM,UAAU,cAAc,QAAQ;AACtC,QAAI,QAAQ,SAAS;AACnB,aAAO,KAAK,MAAM,GAAG,IAAI,mBAAmB,IAAI,KAAK,QAAQ,KAAK,EAAE,CAAC;AACvE,QAAI,QAAQ,QAAQ,KAAM,QAAO,KAAK,KAAK,GAAG,IAAI,mBAAmB,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC;AAC7F,oBAAgB,KAAK,CAAC,MAAM,QAAQ,MAAM,CAAC;AAC3C,QAAI,QAAQ;AACV,2BAAqB,KAAK;AAAA,QACxB;AAAA,QACA,EAAE,MAAM,kBAAkB,YAAY,QAAQ,KAAK,YAAY,WAAW,KAAK;AAAA,MACjF,CAAC;AAAA,QACE,oBAAmB,KAAK,IAAI;AAAA,EACnC;AACA,QAAM,YAAY,OAAO,YAAY,eAAe;AACpD,QAAM,iBAAiB,OAAO,YAAY,oBAAoB;AAC9D,aAAW,OAAO,mBAAoB,QAAO,eAAe,GAAG;AAC/D,QAAM,gBAAgB,UAAU,GAAG,KAAK,gBAAgB;AACxD,QAAM,QAAQ,OAAO,SAAS;AAC9B,MAAI,YAAiD;AACrD,MAAI,SAAS,MAAM;AACjB,gBAAY,OAAO,YAAY,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,UAAU,IAAI,KAAK,aAAa,CAAC,CAAC;AAC5F,UAAM,YAAY,OAAO,OAAO,gBAAgB,GAAG,IAAI,eAAe,GAAG,IAAI;AAC7E,QAAI,aAAa,MAAM;AACrB,iBAAW,QAAQ,OAAO;AACxB,YAAI,CAAC,OAAO,OAAO,WAAW,IAAI;AAChC,iBAAO,eAAe,gBAAgB,MAAM;AAAA,YAC1C,OAAO;AAAA,YACP,YAAY;AAAA,YACZ,cAAc;AAAA,YACd,UAAU;AAAA,UACZ,CAAC;AAAA,MACL;AAAA,IACF;AACA,eAAW,QAAQ,OAAO,KAAK,SAAS,GAAG;AACzC,UAAI,CAAC,MAAM,SAAS,IAAI,GAAG;AACzB,eAAO;AAAA,UACL,QAAQ,GAAG,IAAI,yBAAyB,IAAI,qCAAqC;AAAA,QACnF;AAAA,MACF;AAAA,IACF;AAAA,EACF,WAAW,gBAAgB,WAAW,aAAa,OAAO,OAAO,KAAK,SAAS,EAAE,SAAS,GAAG;AAE3F,gBAAY,EAAE,KAAK,gBAAgB,QAAQ,GAAG,UAAU;AAAA,EAC1D;AACA,QAAM,OAAO,OAAO,QAAQ,CAAC;AAC7B,aAAW,QAAQ,MAAM;AACvB,QAAI,OAAO,OAAO,WAAW,IAAI;AAC/B,aAAO,KAAK,QAAQ,GAAG,IAAI,yBAAyB,IAAI,0BAA0B,CAAC;AAAA,EACvF;AACA,MAAI,YAAY,YAAY;AAC1B,WAAO,KAAK,MAAM,GAAG,IAAI,0DAA0D,CAAC;AACtF,QAAM,UAAqC;AAAA,IACzC,KAAK,KAAK;AAAA,IACV,MAAM,qBAAqB;AAAA,IAC3B,KAAK,OAAO;AAAA,IACZ,MAAM,UAAU,YAAY,MAAM,GAAG,IAAI,SAAS,MAAM;AAAA,IACxD,SAAS,aAAa,YAAY,SAAS,GAAG,IAAI,YAAY,MAAM;AAAA,IACpE;AAAA,EACF;AACA,MAAI,KAAK,SAAS,EAAG,SAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC;AACrD,MAAI,OAAO,KAAK,cAAc,EAAE,SAAS,EAAG,SAAQ,iBAAiB;AACrE,SAAO,EAAE,SAAS,OAAO;AAC3B;AAEO,MAAM,gBAAgB,CAAC,SAK5B,KAAK,SAAS,WAAW,OAAO,IAC5B,KAAK,WACL;AAAA,QAAc,KAAK,UAAU,KAAK,GAAG,CAAC;AAAA,eAAkB,KAAK,UAAU,KAAK,WAAW,CAAC;AAAA;AAAA;AAAA,EAAY,KAAK,QAAQ;AAEvH,MAAM,sBAAsB,EAAE,YAAY;AAAA,EACxC,aAAa;AAAA,EACb,UAAU;AAAA,EACV,OAAO,qBAAqB,SAAS,EAAE,MAAM,MAAS;AACxD,CAAC;AAOM,MAAM,aAAa,CAAC,SAAmE;AAC5F,QAAM,SAAuB,CAAC;AAC9B,QAAM,SAAS,oBAAoB,UAAU,KAAK,KAAK;AACvD,QAAM,cACJ,OAAO,WAAW,SAAS,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,cAAc;AAClF,QAAM,WAAW,OAAO,WAAW,SAAS,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,WAAW;AAC3F,MAAI,eAAe,QAAQ,YAAY,WAAW;AAChD,WAAO,KAAK,MAAM,SAAS,KAAK,GAAG,sBAAsB,CAAC;AAC5D,MAAI,YAAY,KAAM,QAAO,KAAK,MAAM,SAAS,KAAK,GAAG,iBAAiB,CAAC;AAC3E,QAAM,QAAmC;AAAA,IACvC;AAAA,MACE,MAAM;AAAA,MACN,SAAS,cAAc;AAAA,QACrB,KAAK,KAAK;AAAA,QACV,aAAa,eAAe;AAAA,QAC5B,UAAU,YAAY;AAAA,MACxB,CAAC;AAAA,IACH;AAAA,EACF;AACA,aAAW,CAAC,MAAM,OAAO,KAAK,OAAO;AAAA,KAClC,OAAO,UAAU,OAAO,KAAK,QAAQ,WAAc,CAAC;AAAA,EACvD,GAAG;AACD,QAAI,KAAK,WAAW,GAAG,KAAK,KAAK,MAAM,OAAO,EAAE,SAAS,IAAI,GAAG;AAC9D,aAAO,KAAK,MAAM,SAAS,KAAK,GAAG,SAAS,IAAI,uCAAuC,CAAC;AAAA,IAC1F,WAAW,CAAC,SAAS,OAAO,GAAG;AAC7B,aAAO,KAAK,QAAQ,SAAS,KAAK,GAAG,SAAS,IAAI,6BAA6B,CAAC;AAAA,IAClF,WAAW,SAAS,WAAY,OAAM,KAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,EAC9D;AACA,QAAM,QAA0B,EAAE,KAAK,KAAK,KAAK,MAAM;AACvD,MAAI,eAAe,KAAM,OAAM,cAAc;AAC7C,SAAO,EAAE,OAAO,OAAO;AACzB;AAEA,MAAM,6BAA6B,EAAE,YAAY;AAAA,EAC/C,SAAS,EAAE,OAAO;AAAA,EAClB,MAAM,EAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAEM,MAAM,oBAAoB,CAC/B,OACA,WACoC;AACpC,QAAM,SAAS,2BAA2B,UAAU,KAAK;AACzD,MAAI,CAAC,OAAO,QAAS,QAAO;AAC5B,QAAM,WAAqC;AAAA,IACzC,MAAM,OAAO,KAAK,SAAS,gBAAgB,OAAO,gBAAgB,OAAO,gBAAgB;AAAA,IACzF,SAAS,OAAO,KAAK;AAAA,EACvB;AACA,MAAI,UAAU,KAAM,UAAS,SAAS;AACtC,SAAO;AACT;AASA,MAAM,oBAAoB,EAAE,YAAY;AAAA,EACtC,cAAc,EAAE,OAAO;AAAA,EACvB,aAAa;AAAA,EACb,SAAS;AAAA,EACT,MAAM;AACR,CAAC;AAED,MAAM,oBAAoB,EAAE,YAAY;AAAA,EACtC,cAAc,EAAE,OAAO;AAAA,EACvB,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,aAAa;AACf,CAAC;AAED,MAAM,wBAAwB,EAAE,YAAY;AAAA,EAC1C,MAAM,EAAE,OAAO;AAAA,EACf,aAAa;AAAA,EACb,YAAY,EAAE,YAAY,CAAC,CAAC;AAC9B,CAAC;AAEM,MAAM,oBAAoB,CAAC,UAChC,kBAAkB,UAAU,KAAK,EAAE;AAE9B,MAAM,oBAAoB,CAAC,UAChC,kBAAkB,UAAU,KAAK,EAAE,WACnC,aAAa,KAAK,KAClB,wBAAwB;AAEnB,MAAM,wBAAwB,CAAC,UAAwC;AAC5E,QAAM,SAAS,sBAAsB,UAAU,KAAK;AACpD,SAAO,OAAO,UAAU,OAAO,KAAK,OAAO;AAC7C;AAEO,MAAM,mBAAmB,CAC9B,OACA,MACA,WACmC;AACnC,QAAM,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,QAAQ,OAAO,mBAAmB,CAAC;AAClF,MAAI,SAAS;AACX,eAAW,WAAW,SAAS,KAAM,QAAO,KAAK,QAAQ,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC;AACjF,QAAM,UAAU,kBAAkB,KAAK,IAAI,kBAAkB,UAAU,KAAK,IAAI;AAChF,MAAI,SAAS,YAAY,MAAM;AAC7B,WAAO;AAAA,MACL,cAAc,QAAQ,KAAK;AAAA,MAC3B,aACE,QAAQ,KAAK,eAAe,OACxB,OACA,OAAO,QAAQ,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAAA,MACvD,SAAS,OAAO,QAAQ,KAAK,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,YAAY,OAAO,CAAC;AAAA,MAC1F,aAAa,OAAO,QAAQ,KAAK,eAAe,MAAM;AAAA,QACpD,MAAM,GAAG,IAAI;AAAA,QACb;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,cAAc,kBAAkB,UAAU,KAAK;AACrD,MAAI,CAAC,YAAY,QAAS,QAAO;AACjC,SAAO;AAAA,IACL,cAAc,YAAY,KAAK;AAAA,IAC/B,aACE,YAAY,KAAK,eAAe,OAC5B,OACA,OAAO,YAAY,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAAA,IAC3D,SAAS,OAAO,YAAY,KAAK,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,YAAY,OAAO,CAAC;AAAA,IACnF,aAAa;AAAA,EACf;AACF;AAEO,MAAM,oBAAoB,CAAC,UAChC,eAAe,KAAK,MAAM,aAAa;AAElC,MAAM,kBAAkB,CAAC,UAC9B,UAAU,QAAQ,OAAO,QAAQ,CAAC,EAC/B,OAAO,CAAC,CAAC,EAAE,OAAO,MAAM,WAAW,OAAO,CAAC,EAC3C,IAAI,CAAC,CAAC,KAAK,MAAM,KAAK;",
|
|
6
|
+
"names": ["IssueSeverity"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as z from 'zod';
|
|
2
|
+
import { type AuthoredValue } from "./values.mjs";
|
|
3
|
+
export declare enum SchemaIo {
|
|
4
|
+
Input = "input",
|
|
5
|
+
Output = "output"
|
|
6
|
+
}
|
|
7
|
+
export declare const jsonSchemaError: (schema: AuthoredValue, value: AuthoredValue) => string | null;
|
|
8
|
+
export declare const jsonSchemaDeclarationError: (schema: AuthoredValue) => string | null;
|
|
9
|
+
export declare const standardValidatorSchema: z.ZodObject<{
|
|
10
|
+
'~standard': z.ZodObject<{
|
|
11
|
+
version: z.ZodLiteral<1>;
|
|
12
|
+
vendor: z.ZodString;
|
|
13
|
+
validate: z.ZodCustom<import("./values.mjs").AuthoredCallable, import("./values.mjs").AuthoredCallable>;
|
|
14
|
+
}, z.core.$loose>;
|
|
15
|
+
}, z.core.$loose>;
|
|
16
|
+
export declare const validateSchemaValue: (args: {
|
|
17
|
+
schema: AuthoredValue;
|
|
18
|
+
value: AuthoredValue;
|
|
19
|
+
what: string;
|
|
20
|
+
}) => Promise<AuthoredValue>;
|
|
21
|
+
export declare const resultMatchesSchema: (schema: AuthoredValue, value: AuthoredValue) => boolean;
|