@zihanw/pi-forge 0.3.1 → 0.4.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +160 -0
- package/PUBLIC_API.md +28 -0
- package/README.md +168 -35
- package/README.zh-CN.md +168 -35
- package/SUBAGENT_ADAPTER_CONTRACT.md +199 -0
- package/dist/agent-profile.d.ts +71 -0
- package/dist/agent-profile.d.ts.map +1 -0
- package/dist/agent-profile.js +303 -0
- package/dist/agent-profile.js.map +1 -0
- package/dist/forge-config.d.ts +8 -0
- package/dist/forge-config.d.ts.map +1 -0
- package/dist/forge-config.js +40 -0
- package/dist/forge-config.js.map +1 -0
- package/dist/forge-extensions.d.ts +28 -0
- package/dist/forge-extensions.d.ts.map +1 -0
- package/dist/forge-extensions.js +198 -0
- package/dist/forge-extensions.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +75 -349
- package/dist/index.js.map +1 -1
- package/dist/lifecycle.d.ts +11 -3
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +92 -6
- package/dist/lifecycle.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +116 -5
- package/dist/loader.js.map +1 -1
- package/dist/payload-capture.d.ts.map +1 -1
- package/dist/payload-capture.js +27 -0
- package/dist/payload-capture.js.map +1 -1
- package/dist/payload-command.d.ts +3 -3
- package/dist/payload-command.d.ts.map +1 -1
- package/dist/payload-command.js.map +1 -1
- package/dist/preset-command.d.ts +1 -1
- package/dist/preset-command.d.ts.map +1 -1
- package/dist/preset-command.js +12 -3
- package/dist/preset-command.js.map +1 -1
- package/dist/preview.d.ts +2 -2
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +2 -3
- package/dist/preview.js.map +1 -1
- package/dist/profile-command.d.ts +12 -0
- package/dist/profile-command.d.ts.map +1 -0
- package/dist/profile-command.js +291 -0
- package/dist/profile-command.js.map +1 -0
- package/dist/profile-service.d.ts +103 -0
- package/dist/profile-service.d.ts.map +1 -0
- package/dist/profile-service.js +215 -0
- package/dist/profile-service.js.map +1 -0
- package/dist/runtime/profile-runtime.d.ts +13 -0
- package/dist/runtime/profile-runtime.d.ts.map +1 -0
- package/dist/runtime/profile-runtime.js +47 -0
- package/dist/runtime/profile-runtime.js.map +1 -0
- package/dist/runtime/prompt-stack-runtime.d.ts +22 -0
- package/dist/runtime/prompt-stack-runtime.d.ts.map +1 -0
- package/dist/runtime/prompt-stack-runtime.js +104 -0
- package/dist/runtime/prompt-stack-runtime.js.map +1 -0
- package/dist/runtime/subagent-runtime.d.ts +30 -0
- package/dist/runtime/subagent-runtime.d.ts.map +1 -0
- package/dist/runtime/subagent-runtime.js +114 -0
- package/dist/runtime/subagent-runtime.js.map +1 -0
- package/dist/runtime/tool-policy-runtime.d.ts +15 -0
- package/dist/runtime/tool-policy-runtime.d.ts.map +1 -0
- package/dist/runtime/tool-policy-runtime.js +170 -0
- package/dist/runtime/tool-policy-runtime.js.map +1 -0
- package/dist/runtime/web-editor-runtime.d.ts +9 -0
- package/dist/runtime/web-editor-runtime.d.ts.map +1 -0
- package/dist/runtime/web-editor-runtime.js +131 -0
- package/dist/runtime/web-editor-runtime.js.map +1 -0
- package/dist/runtime-state.d.ts +6 -0
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +4 -0
- package/dist/runtime-state.js.map +1 -1
- package/dist/storage.d.ts +7 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +22 -0
- package/dist/storage.js.map +1 -1
- package/dist/subagent/backend-registry.d.ts +75 -0
- package/dist/subagent/backend-registry.d.ts.map +1 -0
- package/dist/subagent/backend-registry.js +463 -0
- package/dist/subagent/backend-registry.js.map +1 -0
- package/dist/subagent/canonical.d.ts +10 -0
- package/dist/subagent/canonical.d.ts.map +1 -0
- package/dist/subagent/canonical.js +52 -0
- package/dist/subagent/canonical.js.map +1 -0
- package/dist/subagent/context.d.ts +8 -0
- package/dist/subagent/context.d.ts.map +1 -0
- package/dist/subagent/context.js +125 -0
- package/dist/subagent/context.js.map +1 -0
- package/dist/subagent/contract.d.ts +11 -0
- package/dist/subagent/contract.d.ts.map +1 -0
- package/dist/subagent/contract.js +11 -0
- package/dist/subagent/contract.js.map +1 -0
- package/dist/subagent/diagnostics.d.ts +3 -0
- package/dist/subagent/diagnostics.d.ts.map +1 -0
- package/dist/subagent/diagnostics.js +5 -0
- package/dist/subagent/diagnostics.js.map +1 -0
- package/dist/subagent/index.d.ts +13 -0
- package/dist/subagent/index.d.ts.map +1 -0
- package/dist/subagent/index.js +13 -0
- package/dist/subagent/index.js.map +1 -0
- package/dist/subagent/pi-model-runtime.d.ts +8 -0
- package/dist/subagent/pi-model-runtime.d.ts.map +1 -0
- package/dist/subagent/pi-model-runtime.js +22 -0
- package/dist/subagent/pi-model-runtime.js.map +1 -0
- package/dist/subagent/pi-sdk-backend.d.ts +23 -0
- package/dist/subagent/pi-sdk-backend.d.ts.map +1 -0
- package/dist/subagent/pi-sdk-backend.js +383 -0
- package/dist/subagent/pi-sdk-backend.js.map +1 -0
- package/dist/subagent/pi-subprocess-backend.d.ts +72 -0
- package/dist/subagent/pi-subprocess-backend.d.ts.map +1 -0
- package/dist/subagent/pi-subprocess-backend.js +756 -0
- package/dist/subagent/pi-subprocess-backend.js.map +1 -0
- package/dist/subagent/plan.d.ts +14 -0
- package/dist/subagent/plan.d.ts.map +1 -0
- package/dist/subagent/plan.js +160 -0
- package/dist/subagent/plan.js.map +1 -0
- package/dist/subagent/preflight.d.ts +4 -0
- package/dist/subagent/preflight.d.ts.map +1 -0
- package/dist/subagent/preflight.js +108 -0
- package/dist/subagent/preflight.js.map +1 -0
- package/dist/subagent/request.d.ts +4 -0
- package/dist/subagent/request.d.ts.map +1 -0
- package/dist/subagent/request.js +122 -0
- package/dist/subagent/request.js.map +1 -0
- package/dist/subagent/response.d.ts +8 -0
- package/dist/subagent/response.d.ts.map +1 -0
- package/dist/subagent/response.js +155 -0
- package/dist/subagent/response.js.map +1 -0
- package/dist/subagent/subprocess-bridge.d.ts +21 -0
- package/dist/subagent/subprocess-bridge.d.ts.map +1 -0
- package/dist/subagent/subprocess-bridge.js +87 -0
- package/dist/subagent/subprocess-bridge.js.map +1 -0
- package/dist/subagent/subprocess-report.d.ts +4 -0
- package/dist/subagent/subprocess-report.d.ts.map +1 -0
- package/dist/subagent/subprocess-report.js +55 -0
- package/dist/subagent/subprocess-report.js.map +1 -0
- package/dist/subagent/tools.d.ts +4 -0
- package/dist/subagent/tools.d.ts.map +1 -0
- package/dist/subagent/tools.js +42 -0
- package/dist/subagent/tools.js.map +1 -0
- package/dist/subagent/types.d.ts +384 -0
- package/dist/subagent/types.d.ts.map +1 -0
- package/dist/subagent/types.js +3 -0
- package/dist/subagent/types.js.map +1 -0
- package/dist/subagent/validation.d.ts +35 -0
- package/dist/subagent/validation.d.ts.map +1 -0
- package/dist/subagent/validation.js +500 -0
- package/dist/subagent/validation.js.map +1 -0
- package/dist/subagent-command.d.ts +4 -0
- package/dist/subagent-command.d.ts.map +1 -0
- package/dist/subagent-command.js +153 -0
- package/dist/subagent-command.js.map +1 -0
- package/dist/subagent-contract.d.ts +8 -0
- package/dist/subagent-contract.d.ts.map +1 -0
- package/dist/subagent-contract.js +8 -0
- package/dist/subagent-contract.js.map +1 -0
- package/dist/subagent-host.d.ts +44 -0
- package/dist/subagent-host.d.ts.map +1 -0
- package/dist/subagent-host.js +291 -0
- package/dist/subagent-host.js.map +1 -0
- package/dist/subagent-profile-tool.d.ts +26 -0
- package/dist/subagent-profile-tool.d.ts.map +1 -0
- package/dist/subagent-profile-tool.js +93 -0
- package/dist/subagent-profile-tool.js.map +1 -0
- package/dist/subagent-tool.d.ts +50 -0
- package/dist/subagent-tool.d.ts.map +1 -0
- package/dist/subagent-tool.js +385 -0
- package/dist/subagent-tool.js.map +1 -0
- package/dist/web-editor/client/api.d.ts +9 -0
- package/dist/web-editor/client/api.d.ts.map +1 -0
- package/dist/web-editor/client/api.js +26 -0
- package/dist/web-editor/client/api.js.map +1 -0
- package/dist/web-editor/client/dom.d.ts +13 -0
- package/dist/web-editor/client/dom.d.ts.map +1 -0
- package/dist/web-editor/client/dom.js +30 -0
- package/dist/web-editor/client/dom.js.map +1 -0
- package/dist/web-editor/client/inspector.d.ts +22 -0
- package/dist/web-editor/client/inspector.d.ts.map +1 -0
- package/dist/web-editor/client/inspector.js +226 -0
- package/dist/web-editor/client/inspector.js.map +1 -0
- package/dist/web-editor/client/main.d.ts +2 -0
- package/dist/web-editor/client/main.d.ts.map +1 -0
- package/dist/web-editor/client/main.js +1468 -0
- package/dist/web-editor/client/main.js.map +1 -0
- package/dist/web-editor/client/policy-editor.d.ts +16 -0
- package/dist/web-editor/client/policy-editor.d.ts.map +1 -0
- package/dist/web-editor/client/policy-editor.js +330 -0
- package/dist/web-editor/client/policy-editor.js.map +1 -0
- package/dist/web-editor/client/regex-editor.d.ts +19 -0
- package/dist/web-editor/client/regex-editor.d.ts.map +1 -0
- package/dist/web-editor/client/regex-editor.js +281 -0
- package/dist/web-editor/client/regex-editor.js.map +1 -0
- package/dist/web-editor/client/types.d.ts +60 -0
- package/dist/web-editor/client/types.d.ts.map +1 -0
- package/dist/web-editor/client/types.js +2 -0
- package/dist/web-editor/client/types.js.map +1 -0
- package/dist/web-editor/client-script.d.ts +2 -0
- package/dist/web-editor/client-script.d.ts.map +1 -0
- package/dist/web-editor/client-script.generated.d.ts +2 -0
- package/dist/web-editor/client-script.generated.d.ts.map +1 -0
- package/dist/web-editor/client-script.generated.js +3 -0
- package/dist/web-editor/client-script.generated.js.map +1 -0
- package/dist/web-editor/client-script.js +2 -0
- package/dist/web-editor/client-script.js.map +1 -0
- package/dist/web-editor/page.d.ts.map +1 -1
- package/dist/web-editor/page.js +6 -3249
- package/dist/web-editor/page.js.map +1 -1
- package/dist/web-editor/server.js +4 -4
- package/dist/web-editor/server.js.map +1 -1
- package/dist/web-editor/styles.d.ts +2 -0
- package/dist/web-editor/styles.d.ts.map +1 -0
- package/dist/web-editor/styles.js +996 -0
- package/dist/web-editor/styles.js.map +1 -0
- package/dist/web-editor/types.d.ts +8 -8
- package/dist/web-editor/types.d.ts.map +1 -1
- package/dist/web-host.d.ts +4 -4
- package/dist/web-host.d.ts.map +1 -1
- package/dist/web-host.js +15 -9
- package/dist/web-host.js.map +1 -1
- package/examples/custom-system-status-extension/README.md +34 -27
- package/examples/custom-system-status-extension/index.ts +71 -111
- package/examples/custom-system-status-extension/prompt-stack.json +1 -1
- package/package.json +42 -14
- package/src/compiler.ts +0 -578
- package/src/extension-registry.ts +0 -33
- package/src/index.ts +0 -430
- package/src/lifecycle.ts +0 -171
- package/src/loader.ts +0 -394
- package/src/macro-engine.ts +0 -358
- package/src/payload-capture.ts +0 -85
- package/src/payload-command.ts +0 -138
- package/src/policy.ts +0 -42
- package/src/preset-command.ts +0 -271
- package/src/preview.ts +0 -226
- package/src/regex.ts +0 -500
- package/src/render-helpers.ts +0 -169
- package/src/runtime-state.ts +0 -36
- package/src/sillytavern-importer/items.ts +0 -98
- package/src/sillytavern-importer/macros.ts +0 -159
- package/src/sillytavern-importer/prompt-order.ts +0 -54
- package/src/sillytavern-importer/regex.ts +0 -270
- package/src/sillytavern-importer/report.ts +0 -202
- package/src/sillytavern-importer/types.ts +0 -120
- package/src/sillytavern-importer.ts +0 -152
- package/src/slot-renderers.ts +0 -414
- package/src/stack-migration.ts +0 -159
- package/src/storage.ts +0 -28
- package/src/types.ts +0 -209
- package/src/web-editor/index.ts +0 -2
- package/src/web-editor/page.ts +0 -3330
- package/src/web-editor/server.ts +0 -294
- package/src/web-editor/types.ts +0 -98
- package/src/web-host.ts +0 -232
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
import { posix } from "node:path";
|
|
2
|
+
import { subagentPromptRuntimeFingerprint } from "./canonical.js";
|
|
3
|
+
export const SUBAGENT_LIMIT_NAMES = ["timeoutMs", "maxTurns", "tokenBudget", "maxOutputBytes"];
|
|
4
|
+
export const OPAQUE_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;
|
|
5
|
+
export const NAMESPACE_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
|
|
6
|
+
export const FINGERPRINT_PATTERN = /^sha256:v1:[a-f0-9]{64}$/;
|
|
7
|
+
export function validateMediaReference(value, path, diagnostics) {
|
|
8
|
+
if (!isRecord(value)) {
|
|
9
|
+
diagnostics.push(error("request.media-item", "Media reference must be an object.", path));
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
validateOpaqueId(value.id, `${path}.id`, diagnostics);
|
|
13
|
+
if (value.kind !== "image")
|
|
14
|
+
diagnostics.push(error("request.media-kind", "Only image media is supported in v1.", `${path}.kind`));
|
|
15
|
+
if (typeof value.mimeType !== "string" || !/^image\/[A-Za-z0-9.+-]+$/.test(value.mimeType))
|
|
16
|
+
diagnostics.push(error("request.media-mime", "mimeType must be an image MIME type.", `${path}.mimeType`));
|
|
17
|
+
validateFingerprint(value.digest, `${path}.digest`, diagnostics);
|
|
18
|
+
validateOpaqueId(value.resourceHandle, `${path}.resourceHandle`, diagnostics);
|
|
19
|
+
}
|
|
20
|
+
export function validateSelectedContext(value, path, diagnostics) {
|
|
21
|
+
if (!isRecord(value)) {
|
|
22
|
+
diagnostics.push(error("context.type", "selectedContext must be an object.", path));
|
|
23
|
+
return diagnostics;
|
|
24
|
+
}
|
|
25
|
+
if (!isPositiveInteger(value.maxBytes))
|
|
26
|
+
diagnostics.push(error("context.max-bytes", "maxBytes must be a positive integer.", `${path}.maxBytes`));
|
|
27
|
+
if (!Array.isArray(value.items)) {
|
|
28
|
+
diagnostics.push(error("context.items", "items must be an array.", `${path}.items`));
|
|
29
|
+
return diagnostics;
|
|
30
|
+
}
|
|
31
|
+
const ids = new Set();
|
|
32
|
+
value.items.forEach((item, index) => {
|
|
33
|
+
const itemPath = `${path}.items[${index}]`;
|
|
34
|
+
if (!isRecord(item)) {
|
|
35
|
+
diagnostics.push(error("context.item", "Context item must be an object.", itemPath));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
validateOpaqueId(item.id, `${itemPath}.id`, diagnostics);
|
|
39
|
+
if (typeof item.id === "string" && ids.has(item.id))
|
|
40
|
+
diagnostics.push(error("context.duplicate-id", `Duplicate context item id: ${item.id}`, `${itemPath}.id`));
|
|
41
|
+
if (typeof item.id === "string")
|
|
42
|
+
ids.add(item.id);
|
|
43
|
+
if (!["summary", "user-excerpt", "assistant-excerpt", "tool-result-excerpt", "resource-excerpt"].includes(String(item.kind)))
|
|
44
|
+
diagnostics.push(error("context.kind", "Unsupported context item kind.", `${itemPath}.kind`));
|
|
45
|
+
if (typeof item.text !== "string" || !item.text.trim())
|
|
46
|
+
diagnostics.push(error("context.text", "Context item text must not be empty.", `${itemPath}.text`));
|
|
47
|
+
if (item.required !== undefined && typeof item.required !== "boolean")
|
|
48
|
+
diagnostics.push(error("context.required", "required must be boolean.", `${itemPath}.required`));
|
|
49
|
+
if (!isRecord(item.provenance) || typeof item.provenance.source !== "string" || !item.provenance.source.trim())
|
|
50
|
+
diagnostics.push(error("context.provenance", "Context item provenance.source is required.", `${itemPath}.provenance`));
|
|
51
|
+
});
|
|
52
|
+
return diagnostics;
|
|
53
|
+
}
|
|
54
|
+
export function validateAccessRequest(value, path, diagnostics) {
|
|
55
|
+
if (!isRecord(value)) {
|
|
56
|
+
diagnostics.push(error("access.type", "access must be an object.", path));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (!["none", "read-only", "workspace-write"].includes(String(value.level)))
|
|
60
|
+
diagnostics.push(error("access.level", "Unsupported access level.", `${path}.level`));
|
|
61
|
+
if (!Array.isArray(value.workspaces)) {
|
|
62
|
+
diagnostics.push(error("access.workspaces", "workspaces must be an array.", `${path}.workspaces`));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const handles = new Set();
|
|
66
|
+
let hasWritable = false;
|
|
67
|
+
value.workspaces.forEach((workspace, index) => {
|
|
68
|
+
if (!isRecord(workspace))
|
|
69
|
+
return diagnostics.push(error("access.workspace", "Workspace must be an object.", `${path}.workspaces[${index}]`));
|
|
70
|
+
validateOpaqueId(workspace.handle, `${path}.workspaces[${index}].handle`, diagnostics);
|
|
71
|
+
if (typeof workspace.handle === "string" && handles.has(workspace.handle))
|
|
72
|
+
diagnostics.push(error("access.duplicate-workspace", `Duplicate workspace handle: ${workspace.handle}`, `${path}.workspaces[${index}].handle`));
|
|
73
|
+
if (typeof workspace.handle === "string")
|
|
74
|
+
handles.add(workspace.handle);
|
|
75
|
+
if (workspace.mode !== "read-only" && workspace.mode !== "read-write")
|
|
76
|
+
diagnostics.push(error("access.workspace-mode", "Workspace mode must be read-only or read-write.", `${path}.workspaces[${index}].mode`));
|
|
77
|
+
if (workspace.mode === "read-write")
|
|
78
|
+
hasWritable = true;
|
|
79
|
+
});
|
|
80
|
+
if (value.level === "none" && value.workspaces.length > 0)
|
|
81
|
+
diagnostics.push(error("access.none-workspaces", "Access none cannot include workspaces.", `${path}.workspaces`));
|
|
82
|
+
if (value.level === "read-only" && hasWritable)
|
|
83
|
+
diagnostics.push(error("access.read-only-write", "Read-only access cannot request a read-write workspace.", `${path}.workspaces`));
|
|
84
|
+
if (value.level === "workspace-write" && !hasWritable)
|
|
85
|
+
diagnostics.push(error("access.write-missing", "workspace-write requires at least one read-write workspace.", `${path}.workspaces`));
|
|
86
|
+
if (value.network !== "deny" && value.network !== "allow")
|
|
87
|
+
diagnostics.push(error("access.network", "network must be deny or allow.", `${path}.network`));
|
|
88
|
+
if (value.allowProcess !== undefined && typeof value.allowProcess !== "boolean")
|
|
89
|
+
diagnostics.push(error("access.process", "allowProcess must be boolean.", `${path}.allowProcess`));
|
|
90
|
+
if (value.allowProcess === true && value.level !== "workspace-write")
|
|
91
|
+
diagnostics.push(error("access.process-level", "Process access requires workspace-write.", `${path}.allowProcess`));
|
|
92
|
+
if (value.workingDirectory !== undefined) {
|
|
93
|
+
if (!isRecord(value.workingDirectory))
|
|
94
|
+
diagnostics.push(error("access.cwd", "workingDirectory must be an object.", `${path}.workingDirectory`));
|
|
95
|
+
else {
|
|
96
|
+
if (!handles.has(String(value.workingDirectory.workspaceHandle)))
|
|
97
|
+
diagnostics.push(error("access.cwd-workspace", "workingDirectory must reference a requested workspace.", `${path}.workingDirectory.workspaceHandle`));
|
|
98
|
+
if (!isSafeRelativePath(value.workingDirectory.path, true))
|
|
99
|
+
diagnostics.push(error("access.cwd-path", "workingDirectory.path must be a normalized relative POSIX path.", `${path}.workingDirectory.path`));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (value.level === "none" && value.workingDirectory !== undefined)
|
|
103
|
+
diagnostics.push(error("access.none-cwd", "Access none cannot include a workingDirectory.", `${path}.workingDirectory`));
|
|
104
|
+
}
|
|
105
|
+
export function validateLimitRequest(value, path, diagnostics) {
|
|
106
|
+
if (!isRecord(value)) {
|
|
107
|
+
diagnostics.push(error("limits.type", "limits must be an object.", path));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
for (const [name, requirement] of Object.entries(value)) {
|
|
111
|
+
if (!SUBAGENT_LIMIT_NAMES.includes(name)) {
|
|
112
|
+
diagnostics.push(error("limits.unknown", `Unknown limit: ${name}`, `${path}.${name}`));
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (!isRecord(requirement) || !isPositiveInteger(requirement.value) || !["required", "best-effort"].includes(String(requirement.enforcement))) {
|
|
116
|
+
diagnostics.push(error("limits.requirement", `${name} must contain a positive integer value and required/best-effort enforcement.`, `${path}.${name}`));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export function validateBackendDescriptor(value, path, diagnostics) {
|
|
121
|
+
validateOpaqueId(value.id, `${path}.id`, diagnostics);
|
|
122
|
+
if (typeof value.version !== "string" || !value.version.trim())
|
|
123
|
+
diagnostics.push(error("backend.version", "Backend version is required.", `${path}.version`));
|
|
124
|
+
if (!isRecord(value.capabilities)) {
|
|
125
|
+
diagnostics.push(error("backend.capabilities", "Backend capabilities are required.", `${path}.capabilities`));
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const capabilities = value.capabilities;
|
|
129
|
+
if (!isRecord(capabilities.access))
|
|
130
|
+
diagnostics.push(error("backend.access-capabilities", "Access capabilities are required.", `${path}.capabilities.access`));
|
|
131
|
+
else
|
|
132
|
+
validateAccessCapabilities(capabilities.access, `${path}.capabilities.access`, diagnostics);
|
|
133
|
+
if (!isRecord(capabilities.limits))
|
|
134
|
+
diagnostics.push(error("backend.limit-capabilities", "Limit capabilities are required.", `${path}.capabilities.limits`));
|
|
135
|
+
else {
|
|
136
|
+
for (const name of SUBAGENT_LIMIT_NAMES) {
|
|
137
|
+
const supported = capabilities.limits[name];
|
|
138
|
+
if (!Array.isArray(supported) || supported.some((entry) => !["backend-hard", "host-abort", "best-effort", "unsupported"].includes(String(entry))))
|
|
139
|
+
diagnostics.push(error("backend.limit-capability", `Invalid limit capability list for ${name}.`, `${path}.capabilities.limits.${name}`));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
for (const field of ["cancellation", "traceInspection", "artifactRetention", "remoteTransport"]) {
|
|
143
|
+
if (typeof capabilities[field] !== "boolean")
|
|
144
|
+
diagnostics.push(error("backend.boolean-capability", `${field} must be boolean.`, `${path}.capabilities.${field}`));
|
|
145
|
+
}
|
|
146
|
+
if (!Array.isArray(capabilities.mediaMimeTypes) || capabilities.mediaMimeTypes.some((mime) => typeof mime !== "string" || !mime.includes("/")))
|
|
147
|
+
diagnostics.push(error("backend.media-capabilities", "mediaMimeTypes must be a MIME type array.", `${path}.capabilities.mediaMimeTypes`));
|
|
148
|
+
if (!["exact-preflight", "backend-assisted", "partial"].includes(String(capabilities.promptRuntimeFidelity)))
|
|
149
|
+
diagnostics.push(error("backend.prompt-fidelity", "Invalid promptRuntimeFidelity.", `${path}.capabilities.promptRuntimeFidelity`));
|
|
150
|
+
}
|
|
151
|
+
export function validateToolCatalog(value, diagnostics) {
|
|
152
|
+
const ids = new Set();
|
|
153
|
+
const names = new Set();
|
|
154
|
+
value.forEach((tool, index) => {
|
|
155
|
+
if (!isRecord(tool))
|
|
156
|
+
return diagnostics.push(error("tools.catalog-entry", "Tool catalog entry must be an object.", `toolCatalog[${index}]`));
|
|
157
|
+
validateOpaqueId(tool.id, `toolCatalog[${index}].id`, diagnostics);
|
|
158
|
+
validateOpaqueId(tool.name, `toolCatalog[${index}].name`, diagnostics);
|
|
159
|
+
if (typeof tool.id === "string" && ids.has(tool.id))
|
|
160
|
+
diagnostics.push(error("tools.duplicate-id", `Duplicate tool id: ${tool.id}`, `toolCatalog[${index}].id`));
|
|
161
|
+
if (typeof tool.name === "string" && names.has(tool.name))
|
|
162
|
+
diagnostics.push(error("tools.duplicate-name", `Duplicate tool name: ${tool.name}`, `toolCatalog[${index}].name`));
|
|
163
|
+
if (typeof tool.id === "string")
|
|
164
|
+
ids.add(tool.id);
|
|
165
|
+
if (typeof tool.name === "string")
|
|
166
|
+
names.add(tool.name);
|
|
167
|
+
if (!Array.isArray(tool.effects) || tool.effects.some((effect) => !["filesystem-read", "filesystem-write", "process", "network"].includes(String(effect))))
|
|
168
|
+
diagnostics.push(error("tools.effects", "Tool effects must be a valid effect array.", `toolCatalog[${index}].effects`));
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
export function validatePreparationRuntime(value, path, diagnostics, expectedFidelity) {
|
|
172
|
+
if (!isRecord(value)) {
|
|
173
|
+
diagnostics.push(error("runtime.type", "Prompt runtime must be an object.", path));
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (typeof value.baseSystemPrompt !== "string")
|
|
177
|
+
diagnostics.push(error("runtime.base-prompt", "baseSystemPrompt must be a string.", `${path}.baseSystemPrompt`));
|
|
178
|
+
validateModelReference(value.model, `${path}.model`, diagnostics);
|
|
179
|
+
if (!isIsoDate(value.preparedAt))
|
|
180
|
+
diagnostics.push(error("runtime.prepared-at", "preparedAt must be a canonical ISO timestamp.", `${path}.preparedAt`));
|
|
181
|
+
if (value.fidelity !== "exact-preflight" && value.fidelity !== "backend-assisted")
|
|
182
|
+
diagnostics.push(error("runtime.fidelity", "Runtime fidelity must be exact-preflight or backend-assisted.", `${path}.fidelity`));
|
|
183
|
+
else if (expectedFidelity && value.fidelity !== expectedFidelity)
|
|
184
|
+
diagnostics.push(error("runtime.fidelity-mismatch", `Runtime fidelity must be ${expectedFidelity}.`, `${path}.fidelity`));
|
|
185
|
+
validateFingerprint(value.promptRuntimeFingerprint, `${path}.promptRuntimeFingerprint`, diagnostics);
|
|
186
|
+
validatePromptRuntimeOptions(value.options, `${path}.options`, diagnostics);
|
|
187
|
+
if (isFingerprint(value.promptRuntimeFingerprint)) {
|
|
188
|
+
try {
|
|
189
|
+
if (subagentPromptRuntimeFingerprint(value) !== value.promptRuntimeFingerprint) {
|
|
190
|
+
diagnostics.push(error("runtime.fingerprint", "promptRuntimeFingerprint does not match the runtime snapshot.", `${path}.promptRuntimeFingerprint`));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch (fingerprintError) {
|
|
194
|
+
diagnostics.push(error("runtime.fingerprint-input", fingerprintError instanceof Error ? fingerprintError.message : String(fingerprintError), `${path}.promptRuntimeFingerprint`));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function validatePromptRuntimeOptions(value, path, diagnostics) {
|
|
199
|
+
if (!isRecord(value)) {
|
|
200
|
+
diagnostics.push(error("runtime.options", "Prompt runtime options must be an object.", path));
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (value.customPrompt !== undefined && typeof value.customPrompt !== "string")
|
|
204
|
+
diagnostics.push(error("runtime.custom-prompt", "customPrompt must be a string.", `${path}.customPrompt`));
|
|
205
|
+
if (value.appendSystemPrompt !== undefined && typeof value.appendSystemPrompt !== "string")
|
|
206
|
+
diagnostics.push(error("runtime.append-prompt", "appendSystemPrompt must be a string.", `${path}.appendSystemPrompt`));
|
|
207
|
+
if (typeof value.cwd !== "string" || !value.cwd.trim())
|
|
208
|
+
diagnostics.push(error("runtime.cwd", "cwd must be a non-empty display path.", `${path}.cwd`));
|
|
209
|
+
for (const field of ["selectedTools", "promptGuidelines"]) {
|
|
210
|
+
if (!Array.isArray(value[field]))
|
|
211
|
+
diagnostics.push(error("runtime.string-array", `${field} must be a string array.`, `${path}.${field}`));
|
|
212
|
+
else
|
|
213
|
+
validateUniqueStringArray(value[field], `${path}.${field}`, diagnostics);
|
|
214
|
+
}
|
|
215
|
+
if (!isRecord(value.toolSnippets) || Object.values(value.toolSnippets).some((entry) => typeof entry !== "string"))
|
|
216
|
+
diagnostics.push(error("runtime.tool-snippets", "toolSnippets must map tool names to strings.", `${path}.toolSnippets`));
|
|
217
|
+
if (!Array.isArray(value.contextFiles))
|
|
218
|
+
diagnostics.push(error("runtime.context-files", "contextFiles must be an array.", `${path}.contextFiles`));
|
|
219
|
+
else
|
|
220
|
+
value.contextFiles.forEach((file, index) => {
|
|
221
|
+
if (!isRecord(file) || typeof file.path !== "string" || typeof file.content !== "string")
|
|
222
|
+
diagnostics.push(error("runtime.context-file", "Context files require path and content strings.", `${path}.contextFiles[${index}]`));
|
|
223
|
+
});
|
|
224
|
+
if (!Array.isArray(value.skills))
|
|
225
|
+
diagnostics.push(error("runtime.skills", "skills must be an array.", `${path}.skills`));
|
|
226
|
+
else
|
|
227
|
+
value.skills.forEach((skill, index) => {
|
|
228
|
+
if (!isRecord(skill)
|
|
229
|
+
|| typeof skill.name !== "string" || !skill.name.trim()
|
|
230
|
+
|| typeof skill.description !== "string"
|
|
231
|
+
|| typeof skill.filePath !== "string" || !skill.filePath.trim()
|
|
232
|
+
|| typeof skill.disableModelInvocation !== "boolean") {
|
|
233
|
+
diagnostics.push(error("runtime.skill", "Skills require name, description, filePath, and disableModelInvocation.", `${path}.skills[${index}]`));
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
export function validateAccessReceipt(value, path, diagnostics) {
|
|
238
|
+
if (!isRecord(value)) {
|
|
239
|
+
diagnostics.push(error("access-receipt.type", "Access receipt must be an object.", path));
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (!["none", "read-only", "workspace-write"].includes(String(value.level)))
|
|
243
|
+
diagnostics.push(error("access-receipt.level", "Invalid access receipt level.", `${path}.level`));
|
|
244
|
+
if (!Array.isArray(value.mounts))
|
|
245
|
+
diagnostics.push(error("access-receipt.mounts", "Access receipt mounts must be an array.", `${path}.mounts`));
|
|
246
|
+
else {
|
|
247
|
+
const handles = new Set();
|
|
248
|
+
const mountIds = new Set();
|
|
249
|
+
value.mounts.forEach((mount, index) => {
|
|
250
|
+
if (!isRecord(mount))
|
|
251
|
+
return diagnostics.push(error("access-receipt.mount", "Mount mapping must be an object.", `${path}.mounts[${index}]`));
|
|
252
|
+
validateOpaqueId(mount.workspaceHandle, `${path}.mounts[${index}].workspaceHandle`, diagnostics);
|
|
253
|
+
validateOpaqueId(mount.mountId, `${path}.mounts[${index}].mountId`, diagnostics);
|
|
254
|
+
if (mount.mode !== "read-only" && mount.mode !== "read-write")
|
|
255
|
+
diagnostics.push(error("access-receipt.mount-mode", "Mount mode must be read-only or read-write.", `${path}.mounts[${index}].mode`));
|
|
256
|
+
if (typeof mount.workspaceHandle === "string" && handles.has(mount.workspaceHandle))
|
|
257
|
+
diagnostics.push(error("access-receipt.duplicate-workspace", `Duplicate workspace mapping: ${mount.workspaceHandle}`, `${path}.mounts[${index}].workspaceHandle`));
|
|
258
|
+
if (typeof mount.mountId === "string" && mountIds.has(mount.mountId))
|
|
259
|
+
diagnostics.push(error("access-receipt.duplicate-mount", `Duplicate mount id: ${mount.mountId}`, `${path}.mounts[${index}].mountId`));
|
|
260
|
+
if (typeof mount.workspaceHandle === "string")
|
|
261
|
+
handles.add(mount.workspaceHandle);
|
|
262
|
+
if (typeof mount.mountId === "string")
|
|
263
|
+
mountIds.add(mount.mountId);
|
|
264
|
+
});
|
|
265
|
+
if (value.level === "none" && value.mounts.length > 0)
|
|
266
|
+
diagnostics.push(error("access-receipt.none-mounts", "Access none cannot produce mount mappings.", `${path}.mounts`));
|
|
267
|
+
if (value.level === "read-only" && value.mounts.some((mount) => isRecord(mount) && mount.mode === "read-write"))
|
|
268
|
+
diagnostics.push(error("access-receipt.read-only-write", "Read-only access cannot produce a read-write mount.", `${path}.mounts`));
|
|
269
|
+
if (value.level === "workspace-write" && !value.mounts.some((mount) => isRecord(mount) && mount.mode === "read-write"))
|
|
270
|
+
diagnostics.push(error("access-receipt.write-missing", "workspace-write receipt requires a read-write mount.", `${path}.mounts`));
|
|
271
|
+
if (value.workingDirectory !== undefined) {
|
|
272
|
+
if (!isRecord(value.workingDirectory))
|
|
273
|
+
diagnostics.push(error("access-receipt.cwd", "workingDirectory must be an object.", `${path}.workingDirectory`));
|
|
274
|
+
else {
|
|
275
|
+
if (!mountIds.has(String(value.workingDirectory.mountId)))
|
|
276
|
+
diagnostics.push(error("access-receipt.cwd-mount", "workingDirectory must reference a receipt mount.", `${path}.workingDirectory.mountId`));
|
|
277
|
+
if (!isSafeRelativePath(value.workingDirectory.path, true))
|
|
278
|
+
diagnostics.push(error("access-receipt.cwd-path", "workingDirectory path must be normalized and relative.", `${path}.workingDirectory.path`));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (value.network !== "deny" && value.network !== "allow")
|
|
283
|
+
diagnostics.push(error("access-receipt.network", "Invalid access receipt network policy.", `${path}.network`));
|
|
284
|
+
if (typeof value.process !== "boolean")
|
|
285
|
+
diagnostics.push(error("access-receipt.process", "Access receipt process must be boolean.", `${path}.process`));
|
|
286
|
+
if (value.process === true && value.level !== "workspace-write")
|
|
287
|
+
diagnostics.push(error("access-receipt.process-level", "Process access requires workspace-write.", `${path}.process`));
|
|
288
|
+
if (value.executionBoundary !== undefined && value.executionBoundary !== "isolated" && value.executionBoundary !== "shared-user") {
|
|
289
|
+
diagnostics.push(error("access-receipt.boundary", "executionBoundary must be isolated or shared-user.", `${path}.executionBoundary`));
|
|
290
|
+
}
|
|
291
|
+
const executionBoundary = value.executionBoundary ?? "isolated";
|
|
292
|
+
if (!isRecord(value.enforcement))
|
|
293
|
+
diagnostics.push(error("access-receipt.enforcement", "Access enforcement receipt is required.", `${path}.enforcement`));
|
|
294
|
+
else {
|
|
295
|
+
validateAccessCapabilities(value.enforcement, `${path}.enforcement`, diagnostics);
|
|
296
|
+
if (executionBoundary === "shared-user") {
|
|
297
|
+
for (const field of ["readOnlyMountIsolation", "readWriteMountIsolation", "symlinkSafeContainment", "processIsolation", "agentNetworkIsolation"]) {
|
|
298
|
+
if (value.enforcement[field] === true)
|
|
299
|
+
diagnostics.push(error("access-receipt.shared-user-claim", `A shared-user boundary cannot claim ${field}.`, `${path}.enforcement.${field}`));
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (executionBoundary === "isolated" && value.level === "read-only" && (!value.enforcement.readOnlyMountIsolation || !value.enforcement.symlinkSafeContainment))
|
|
303
|
+
diagnostics.push(error("access-receipt.read-isolation", "Isolated read-only access requires mount isolation and symlink-safe containment.", `${path}.enforcement`));
|
|
304
|
+
if (value.level === "workspace-write" && (!value.enforcement.readWriteMountIsolation || !value.enforcement.symlinkSafeContainment))
|
|
305
|
+
diagnostics.push(error("access-receipt.write-isolation", "Workspace-write receipt requires write isolation and symlink-safe containment.", `${path}.enforcement`));
|
|
306
|
+
if (value.process === true && !value.enforcement.processIsolation)
|
|
307
|
+
diagnostics.push(error("access-receipt.process-isolation", "Process receipt requires process isolation.", `${path}.enforcement.processIsolation`));
|
|
308
|
+
if (value.network === "deny" && !value.enforcement.agentNetworkIsolation)
|
|
309
|
+
diagnostics.push(error("access-receipt.network-isolation", "Denied network receipt requires agent network isolation.", `${path}.enforcement.agentNetworkIsolation`));
|
|
310
|
+
}
|
|
311
|
+
if (value.level === "none" && value.workingDirectory !== undefined)
|
|
312
|
+
diagnostics.push(error("access-receipt.none-cwd", "Access none cannot produce a workingDirectory.", `${path}.workingDirectory`));
|
|
313
|
+
}
|
|
314
|
+
export function validateAccessCapabilities(value, path, diagnostics) {
|
|
315
|
+
for (const field of [
|
|
316
|
+
"readOnlyMountIsolation", "readWriteMountIsolation", "symlinkSafeContainment", "processIsolation", "agentNetworkIsolation",
|
|
317
|
+
]) {
|
|
318
|
+
if (typeof value[field] !== "boolean")
|
|
319
|
+
diagnostics.push(error("access-capability.boolean", `${field} must be boolean.`, `${path}.${field}`));
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
export function validateLimitReceipt(value, path, diagnostics) {
|
|
323
|
+
if (!isRecord(value)) {
|
|
324
|
+
diagnostics.push(error("limit-receipt.type", "Limit receipt must be an object.", path));
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
for (const [name, receipt] of Object.entries(value)) {
|
|
328
|
+
if (!SUBAGENT_LIMIT_NAMES.includes(name) || !isRecord(receipt) || !isPositiveInteger(receipt.value) || !["backend-hard", "host-abort", "best-effort"].includes(String(receipt.enforcement))) {
|
|
329
|
+
diagnostics.push(error("limit-receipt.entry", `Invalid enforced limit receipt: ${name}`, `${path}.${name}`));
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
export function validateAccessEnforcement(request, receipt) {
|
|
334
|
+
const diagnostics = [];
|
|
335
|
+
const executionBoundary = receipt.executionBoundary ?? "isolated";
|
|
336
|
+
if (receipt.level !== request.level)
|
|
337
|
+
diagnostics.push(error("preflight.access-level", "Access receipt level does not match request.", "access.level"));
|
|
338
|
+
if (receipt.network !== request.network)
|
|
339
|
+
diagnostics.push(error("preflight.network", "Access receipt network policy does not match request.", "access.network"));
|
|
340
|
+
if (receipt.process !== (request.allowProcess === true))
|
|
341
|
+
diagnostics.push(error("preflight.process", "Access receipt process policy does not match request.", "access.process"));
|
|
342
|
+
if (executionBoundary === "isolated" && request.level === "read-only" && (!receipt.enforcement.readOnlyMountIsolation || !receipt.enforcement.symlinkSafeContainment))
|
|
343
|
+
diagnostics.push(error("preflight.read-isolation", "Isolated read-only access requires mount isolation and symlink-safe containment.", "access.enforcement"));
|
|
344
|
+
if (request.level === "workspace-write" && (!receipt.enforcement.readWriteMountIsolation || !receipt.enforcement.symlinkSafeContainment))
|
|
345
|
+
diagnostics.push(error("preflight.write-isolation", "Workspace-write access requires write isolation and symlink-safe containment.", "access.enforcement"));
|
|
346
|
+
if (request.allowProcess && !receipt.enforcement.processIsolation)
|
|
347
|
+
diagnostics.push(error("preflight.process-isolation", "Process access requires process isolation.", "access.enforcement.processIsolation"));
|
|
348
|
+
if (request.network === "deny" && !receipt.enforcement.agentNetworkIsolation)
|
|
349
|
+
diagnostics.push(error("preflight.network-isolation", "Denied agent network requires network isolation.", "access.enforcement.agentNetworkIsolation"));
|
|
350
|
+
const mapped = new Map(receipt.mounts.map((mount) => [mount.workspaceHandle, mount]));
|
|
351
|
+
for (const workspace of request.workspaces) {
|
|
352
|
+
const mount = mapped.get(workspace.handle);
|
|
353
|
+
if (!mount)
|
|
354
|
+
diagnostics.push(error("preflight.mount-missing", `Missing mount mapping for ${workspace.handle}.`, "access.mounts"));
|
|
355
|
+
else if (mount.mode !== workspace.mode)
|
|
356
|
+
diagnostics.push(error("preflight.mount-mode", `Mount mode mismatch for ${workspace.handle}.`, "access.mounts"));
|
|
357
|
+
}
|
|
358
|
+
for (const mount of receipt.mounts) {
|
|
359
|
+
if (!request.workspaces.some((workspace) => workspace.handle === mount.workspaceHandle))
|
|
360
|
+
diagnostics.push(error("preflight.mount-extra", `Unexpected mount mapping for ${mount.workspaceHandle}.`, "access.mounts"));
|
|
361
|
+
}
|
|
362
|
+
if (request.workingDirectory) {
|
|
363
|
+
const requestedMount = mapped.get(request.workingDirectory.workspaceHandle);
|
|
364
|
+
if (!receipt.workingDirectory || receipt.workingDirectory.mountId !== requestedMount?.mountId || receipt.workingDirectory.path !== request.workingDirectory.path)
|
|
365
|
+
diagnostics.push(error("preflight.cwd", "Working-directory receipt does not match the request.", "access.workingDirectory"));
|
|
366
|
+
}
|
|
367
|
+
else if (receipt.workingDirectory) {
|
|
368
|
+
diagnostics.push(error("preflight.cwd-extra", "Backend produced an unrequested working directory.", "access.workingDirectory"));
|
|
369
|
+
}
|
|
370
|
+
return diagnostics;
|
|
371
|
+
}
|
|
372
|
+
export function validatePreparedMessage(value, path, diagnostics) {
|
|
373
|
+
if (!isRecord(value)) {
|
|
374
|
+
diagnostics.push(error("plan.message", "Prepared message must be an object.", path));
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
if (!["user", "assistant", "custom"].includes(String(value.role)))
|
|
378
|
+
diagnostics.push(error("plan.message-role", "Unsupported prepared message role.", `${path}.role`));
|
|
379
|
+
if (!Array.isArray(value.content) || value.content.length === 0) {
|
|
380
|
+
diagnostics.push(error("plan.message-content", "Prepared message content must be a non-empty array.", `${path}.content`));
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
value.content.forEach((part, index) => {
|
|
384
|
+
if (!isRecord(part))
|
|
385
|
+
return diagnostics.push(error("plan.content-part", "Content part must be an object.", `${path}.content[${index}]`));
|
|
386
|
+
if (part.type === "text") {
|
|
387
|
+
if (typeof part.text !== "string")
|
|
388
|
+
diagnostics.push(error("plan.text-part", "Text content requires text.", `${path}.content[${index}].text`));
|
|
389
|
+
}
|
|
390
|
+
else if (part.type === "media") {
|
|
391
|
+
validateOpaqueId(part.mediaId, `${path}.content[${index}].mediaId`, diagnostics);
|
|
392
|
+
if (typeof part.mimeType !== "string" || !part.mimeType.includes("/"))
|
|
393
|
+
diagnostics.push(error("plan.media-mime", "Media content requires mimeType.", `${path}.content[${index}].mimeType`));
|
|
394
|
+
validateFingerprint(part.digest, `${path}.content[${index}].digest`, diagnostics);
|
|
395
|
+
if (part.backendResourceId !== undefined)
|
|
396
|
+
validateOpaqueId(part.backendResourceId, `${path}.content[${index}].backendResourceId`, diagnostics);
|
|
397
|
+
}
|
|
398
|
+
else
|
|
399
|
+
diagnostics.push(error("plan.content-type", "Unsupported prepared content part type.", `${path}.content[${index}].type`));
|
|
400
|
+
});
|
|
401
|
+
if (value.protectedTask !== undefined && typeof value.protectedTask !== "boolean")
|
|
402
|
+
diagnostics.push(error("plan.protected-flag", "protectedTask must be boolean.", `${path}.protectedTask`));
|
|
403
|
+
}
|
|
404
|
+
export function validateContextBudgetReceipt(value, path, diagnostics) {
|
|
405
|
+
if (!isRecord(value)) {
|
|
406
|
+
diagnostics.push(error("context-receipt.type", "Context budget receipt must be an object.", path));
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
if (!isPositiveInteger(value.maxBytes))
|
|
410
|
+
diagnostics.push(error("context-receipt.max", "maxBytes must be a positive integer.", `${path}.maxBytes`));
|
|
411
|
+
if (!isNonNegativeInteger(value.includedBytes) || (isPositiveInteger(value.maxBytes) && value.includedBytes > value.maxBytes))
|
|
412
|
+
diagnostics.push(error("context-receipt.bytes", "includedBytes must be non-negative and no greater than maxBytes.", `${path}.includedBytes`));
|
|
413
|
+
for (const field of ["includedItemIds", "omittedItemIds"]) {
|
|
414
|
+
if (!Array.isArray(value[field]))
|
|
415
|
+
diagnostics.push(error("context-receipt.ids", `${field} must be an array.`, `${path}.${field}`));
|
|
416
|
+
else
|
|
417
|
+
validateUniqueStringArray(value[field], `${path}.${field}`, diagnostics);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
export function validateUniqueStringArray(value, path, diagnostics) {
|
|
421
|
+
const seen = new Set();
|
|
422
|
+
value.forEach((item, index) => {
|
|
423
|
+
if (typeof item !== "string")
|
|
424
|
+
diagnostics.push(error("array.string", "Expected a string.", `${path}[${index}]`));
|
|
425
|
+
else if (seen.has(item))
|
|
426
|
+
diagnostics.push(error("array.duplicate", `Duplicate value: ${item}`, `${path}[${index}]`));
|
|
427
|
+
else
|
|
428
|
+
seen.add(item);
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
export function validateDiagnosticArray(value, path, diagnostics) {
|
|
432
|
+
value.forEach((item, index) => {
|
|
433
|
+
if (!isRecord(item) || !["error", "warning", "info"].includes(String(item.level)) || typeof item.code !== "string" || typeof item.message !== "string")
|
|
434
|
+
diagnostics.push(error("diagnostic.invalid", "Diagnostic requires level, code, and message.", `${path}[${index}]`));
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
export function validateUsage(value, path, diagnostics) {
|
|
438
|
+
if (!isRecord(value)) {
|
|
439
|
+
diagnostics.push(error("usage.type", "usage must be an object.", path));
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
if (value.tokens !== undefined) {
|
|
443
|
+
if (!isRecord(value.tokens) || !isNonNegativeInteger(value.tokens.input) || !isNonNegativeInteger(value.tokens.output) || !isNonNegativeInteger(value.tokens.total))
|
|
444
|
+
diagnostics.push(error("usage.tokens", "Token usage values must be non-negative integers.", `${path}.tokens`));
|
|
445
|
+
else if (value.tokens.total < value.tokens.input + value.tokens.output)
|
|
446
|
+
diagnostics.push(error("usage.token-total", "Token total cannot be less than input + output.", `${path}.tokens.total`));
|
|
447
|
+
}
|
|
448
|
+
if (value.cost !== undefined && (!isRecord(value.cost) || !isNonNegativeFinite(value.cost.amount) || typeof value.cost.currency !== "string" || !/^[A-Z]{3}$/.test(value.cost.currency)))
|
|
449
|
+
diagnostics.push(error("usage.cost", "Cost requires a non-negative amount and ISO 4217 currency code.", `${path}.cost`));
|
|
450
|
+
}
|
|
451
|
+
export function validateModelReference(value, path, diagnostics) {
|
|
452
|
+
if (!isRecord(value) || typeof value.provider !== "string" || !value.provider.trim() || typeof value.id !== "string" || !value.id.trim())
|
|
453
|
+
diagnostics.push(error("model.reference", "Model reference requires provider and id.", path));
|
|
454
|
+
}
|
|
455
|
+
export function validateOpaqueId(value, path, diagnostics) {
|
|
456
|
+
if (typeof value !== "string" || !OPAQUE_ID_PATTERN.test(value))
|
|
457
|
+
diagnostics.push(error("id.invalid", "Expected an opaque id using letters, numbers, dot, underscore, colon, or hyphen (max 128).", path));
|
|
458
|
+
}
|
|
459
|
+
export function validateNamespace(value, path, diagnostics) {
|
|
460
|
+
if (typeof value !== "string" || !NAMESPACE_PATTERN.test(value))
|
|
461
|
+
diagnostics.push(error("namespace.invalid", "Expected a namespace using letters, numbers, dot, underscore, or hyphen (max 128).", path));
|
|
462
|
+
}
|
|
463
|
+
export function validateFingerprint(value, path, diagnostics) {
|
|
464
|
+
if (!isFingerprint(value))
|
|
465
|
+
diagnostics.push(error("fingerprint.invalid", "Expected sha256:v1 followed by 64 lowercase hex characters.", path));
|
|
466
|
+
}
|
|
467
|
+
export function isFingerprint(value) {
|
|
468
|
+
return typeof value === "string" && FINGERPRINT_PATTERN.test(value);
|
|
469
|
+
}
|
|
470
|
+
export function isSafeRelativePath(value, allowDot = false) {
|
|
471
|
+
if (typeof value !== "string" || value.includes("\\") || value.startsWith("/") || value.includes("\0"))
|
|
472
|
+
return false;
|
|
473
|
+
if (allowDot && value === ".")
|
|
474
|
+
return true;
|
|
475
|
+
if (!value || posix.normalize(value) !== value)
|
|
476
|
+
return false;
|
|
477
|
+
return value.split("/").every((segment) => segment !== "." && segment !== "..");
|
|
478
|
+
}
|
|
479
|
+
export function isIsoDate(value) {
|
|
480
|
+
return typeof value === "string" && !Number.isNaN(Date.parse(value)) && new Date(value).toISOString() === value;
|
|
481
|
+
}
|
|
482
|
+
export function isRecord(value) {
|
|
483
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
484
|
+
}
|
|
485
|
+
export function isPositiveInteger(value) {
|
|
486
|
+
return Number.isSafeInteger(value) && value > 0;
|
|
487
|
+
}
|
|
488
|
+
export function isNonNegativeInteger(value) {
|
|
489
|
+
return Number.isSafeInteger(value) && value >= 0;
|
|
490
|
+
}
|
|
491
|
+
export function isNonNegativeFinite(value) {
|
|
492
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0;
|
|
493
|
+
}
|
|
494
|
+
export function hasErrors(diagnostics) {
|
|
495
|
+
return diagnostics.some((diagnostic) => diagnostic.level === "error");
|
|
496
|
+
}
|
|
497
|
+
export function error(code, message, path) {
|
|
498
|
+
return { level: "error", code, message, path };
|
|
499
|
+
}
|
|
500
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/subagent/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { ForgeSubagentRuntime } from "./runtime/subagent-runtime.ts";
|
|
3
|
+
export declare function registerForgeSubagentCommand(pi: ExtensionAPI, runtime: ForgeSubagentRuntime, profileIds: () => string[]): void;
|
|
4
|
+
//# sourceMappingURL=subagent-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-command.d.ts","sourceRoot":"","sources":["../src/subagent-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,iCAAiC,CAAC;AAE7F,OAAO,KAAK,EAA4B,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAIpG,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,MAAM,EAAE,GAAG,IAAI,CA+D9H"}
|