@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.
Files changed (255) hide show
  1. package/CHANGELOG.md +160 -0
  2. package/PUBLIC_API.md +28 -0
  3. package/README.md +168 -35
  4. package/README.zh-CN.md +168 -35
  5. package/SUBAGENT_ADAPTER_CONTRACT.md +199 -0
  6. package/dist/agent-profile.d.ts +71 -0
  7. package/dist/agent-profile.d.ts.map +1 -0
  8. package/dist/agent-profile.js +303 -0
  9. package/dist/agent-profile.js.map +1 -0
  10. package/dist/forge-config.d.ts +8 -0
  11. package/dist/forge-config.d.ts.map +1 -0
  12. package/dist/forge-config.js +40 -0
  13. package/dist/forge-config.js.map +1 -0
  14. package/dist/forge-extensions.d.ts +28 -0
  15. package/dist/forge-extensions.d.ts.map +1 -0
  16. package/dist/forge-extensions.js +198 -0
  17. package/dist/forge-extensions.js.map +1 -0
  18. package/dist/index.d.ts +8 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +75 -349
  21. package/dist/index.js.map +1 -1
  22. package/dist/lifecycle.d.ts +11 -3
  23. package/dist/lifecycle.d.ts.map +1 -1
  24. package/dist/lifecycle.js +92 -6
  25. package/dist/lifecycle.js.map +1 -1
  26. package/dist/loader.d.ts.map +1 -1
  27. package/dist/loader.js +116 -5
  28. package/dist/loader.js.map +1 -1
  29. package/dist/payload-capture.d.ts.map +1 -1
  30. package/dist/payload-capture.js +27 -0
  31. package/dist/payload-capture.js.map +1 -1
  32. package/dist/payload-command.d.ts +3 -3
  33. package/dist/payload-command.d.ts.map +1 -1
  34. package/dist/payload-command.js.map +1 -1
  35. package/dist/preset-command.d.ts +1 -1
  36. package/dist/preset-command.d.ts.map +1 -1
  37. package/dist/preset-command.js +12 -3
  38. package/dist/preset-command.js.map +1 -1
  39. package/dist/preview.d.ts +2 -2
  40. package/dist/preview.d.ts.map +1 -1
  41. package/dist/preview.js +2 -3
  42. package/dist/preview.js.map +1 -1
  43. package/dist/profile-command.d.ts +12 -0
  44. package/dist/profile-command.d.ts.map +1 -0
  45. package/dist/profile-command.js +291 -0
  46. package/dist/profile-command.js.map +1 -0
  47. package/dist/profile-service.d.ts +103 -0
  48. package/dist/profile-service.d.ts.map +1 -0
  49. package/dist/profile-service.js +215 -0
  50. package/dist/profile-service.js.map +1 -0
  51. package/dist/runtime/profile-runtime.d.ts +13 -0
  52. package/dist/runtime/profile-runtime.d.ts.map +1 -0
  53. package/dist/runtime/profile-runtime.js +47 -0
  54. package/dist/runtime/profile-runtime.js.map +1 -0
  55. package/dist/runtime/prompt-stack-runtime.d.ts +22 -0
  56. package/dist/runtime/prompt-stack-runtime.d.ts.map +1 -0
  57. package/dist/runtime/prompt-stack-runtime.js +104 -0
  58. package/dist/runtime/prompt-stack-runtime.js.map +1 -0
  59. package/dist/runtime/subagent-runtime.d.ts +30 -0
  60. package/dist/runtime/subagent-runtime.d.ts.map +1 -0
  61. package/dist/runtime/subagent-runtime.js +114 -0
  62. package/dist/runtime/subagent-runtime.js.map +1 -0
  63. package/dist/runtime/tool-policy-runtime.d.ts +15 -0
  64. package/dist/runtime/tool-policy-runtime.d.ts.map +1 -0
  65. package/dist/runtime/tool-policy-runtime.js +170 -0
  66. package/dist/runtime/tool-policy-runtime.js.map +1 -0
  67. package/dist/runtime/web-editor-runtime.d.ts +9 -0
  68. package/dist/runtime/web-editor-runtime.d.ts.map +1 -0
  69. package/dist/runtime/web-editor-runtime.js +131 -0
  70. package/dist/runtime/web-editor-runtime.js.map +1 -0
  71. package/dist/runtime-state.d.ts +6 -0
  72. package/dist/runtime-state.d.ts.map +1 -1
  73. package/dist/runtime-state.js +4 -0
  74. package/dist/runtime-state.js.map +1 -1
  75. package/dist/storage.d.ts +7 -0
  76. package/dist/storage.d.ts.map +1 -1
  77. package/dist/storage.js +22 -0
  78. package/dist/storage.js.map +1 -1
  79. package/dist/subagent/backend-registry.d.ts +75 -0
  80. package/dist/subagent/backend-registry.d.ts.map +1 -0
  81. package/dist/subagent/backend-registry.js +463 -0
  82. package/dist/subagent/backend-registry.js.map +1 -0
  83. package/dist/subagent/canonical.d.ts +10 -0
  84. package/dist/subagent/canonical.d.ts.map +1 -0
  85. package/dist/subagent/canonical.js +52 -0
  86. package/dist/subagent/canonical.js.map +1 -0
  87. package/dist/subagent/context.d.ts +8 -0
  88. package/dist/subagent/context.d.ts.map +1 -0
  89. package/dist/subagent/context.js +125 -0
  90. package/dist/subagent/context.js.map +1 -0
  91. package/dist/subagent/contract.d.ts +11 -0
  92. package/dist/subagent/contract.d.ts.map +1 -0
  93. package/dist/subagent/contract.js +11 -0
  94. package/dist/subagent/contract.js.map +1 -0
  95. package/dist/subagent/diagnostics.d.ts +3 -0
  96. package/dist/subagent/diagnostics.d.ts.map +1 -0
  97. package/dist/subagent/diagnostics.js +5 -0
  98. package/dist/subagent/diagnostics.js.map +1 -0
  99. package/dist/subagent/index.d.ts +13 -0
  100. package/dist/subagent/index.d.ts.map +1 -0
  101. package/dist/subagent/index.js +13 -0
  102. package/dist/subagent/index.js.map +1 -0
  103. package/dist/subagent/pi-model-runtime.d.ts +8 -0
  104. package/dist/subagent/pi-model-runtime.d.ts.map +1 -0
  105. package/dist/subagent/pi-model-runtime.js +22 -0
  106. package/dist/subagent/pi-model-runtime.js.map +1 -0
  107. package/dist/subagent/pi-sdk-backend.d.ts +23 -0
  108. package/dist/subagent/pi-sdk-backend.d.ts.map +1 -0
  109. package/dist/subagent/pi-sdk-backend.js +383 -0
  110. package/dist/subagent/pi-sdk-backend.js.map +1 -0
  111. package/dist/subagent/pi-subprocess-backend.d.ts +72 -0
  112. package/dist/subagent/pi-subprocess-backend.d.ts.map +1 -0
  113. package/dist/subagent/pi-subprocess-backend.js +756 -0
  114. package/dist/subagent/pi-subprocess-backend.js.map +1 -0
  115. package/dist/subagent/plan.d.ts +14 -0
  116. package/dist/subagent/plan.d.ts.map +1 -0
  117. package/dist/subagent/plan.js +160 -0
  118. package/dist/subagent/plan.js.map +1 -0
  119. package/dist/subagent/preflight.d.ts +4 -0
  120. package/dist/subagent/preflight.d.ts.map +1 -0
  121. package/dist/subagent/preflight.js +108 -0
  122. package/dist/subagent/preflight.js.map +1 -0
  123. package/dist/subagent/request.d.ts +4 -0
  124. package/dist/subagent/request.d.ts.map +1 -0
  125. package/dist/subagent/request.js +122 -0
  126. package/dist/subagent/request.js.map +1 -0
  127. package/dist/subagent/response.d.ts +8 -0
  128. package/dist/subagent/response.d.ts.map +1 -0
  129. package/dist/subagent/response.js +155 -0
  130. package/dist/subagent/response.js.map +1 -0
  131. package/dist/subagent/subprocess-bridge.d.ts +21 -0
  132. package/dist/subagent/subprocess-bridge.d.ts.map +1 -0
  133. package/dist/subagent/subprocess-bridge.js +87 -0
  134. package/dist/subagent/subprocess-bridge.js.map +1 -0
  135. package/dist/subagent/subprocess-report.d.ts +4 -0
  136. package/dist/subagent/subprocess-report.d.ts.map +1 -0
  137. package/dist/subagent/subprocess-report.js +55 -0
  138. package/dist/subagent/subprocess-report.js.map +1 -0
  139. package/dist/subagent/tools.d.ts +4 -0
  140. package/dist/subagent/tools.d.ts.map +1 -0
  141. package/dist/subagent/tools.js +42 -0
  142. package/dist/subagent/tools.js.map +1 -0
  143. package/dist/subagent/types.d.ts +384 -0
  144. package/dist/subagent/types.d.ts.map +1 -0
  145. package/dist/subagent/types.js +3 -0
  146. package/dist/subagent/types.js.map +1 -0
  147. package/dist/subagent/validation.d.ts +35 -0
  148. package/dist/subagent/validation.d.ts.map +1 -0
  149. package/dist/subagent/validation.js +500 -0
  150. package/dist/subagent/validation.js.map +1 -0
  151. package/dist/subagent-command.d.ts +4 -0
  152. package/dist/subagent-command.d.ts.map +1 -0
  153. package/dist/subagent-command.js +153 -0
  154. package/dist/subagent-command.js.map +1 -0
  155. package/dist/subagent-contract.d.ts +8 -0
  156. package/dist/subagent-contract.d.ts.map +1 -0
  157. package/dist/subagent-contract.js +8 -0
  158. package/dist/subagent-contract.js.map +1 -0
  159. package/dist/subagent-host.d.ts +44 -0
  160. package/dist/subagent-host.d.ts.map +1 -0
  161. package/dist/subagent-host.js +291 -0
  162. package/dist/subagent-host.js.map +1 -0
  163. package/dist/subagent-profile-tool.d.ts +26 -0
  164. package/dist/subagent-profile-tool.d.ts.map +1 -0
  165. package/dist/subagent-profile-tool.js +93 -0
  166. package/dist/subagent-profile-tool.js.map +1 -0
  167. package/dist/subagent-tool.d.ts +50 -0
  168. package/dist/subagent-tool.d.ts.map +1 -0
  169. package/dist/subagent-tool.js +385 -0
  170. package/dist/subagent-tool.js.map +1 -0
  171. package/dist/web-editor/client/api.d.ts +9 -0
  172. package/dist/web-editor/client/api.d.ts.map +1 -0
  173. package/dist/web-editor/client/api.js +26 -0
  174. package/dist/web-editor/client/api.js.map +1 -0
  175. package/dist/web-editor/client/dom.d.ts +13 -0
  176. package/dist/web-editor/client/dom.d.ts.map +1 -0
  177. package/dist/web-editor/client/dom.js +30 -0
  178. package/dist/web-editor/client/dom.js.map +1 -0
  179. package/dist/web-editor/client/inspector.d.ts +22 -0
  180. package/dist/web-editor/client/inspector.d.ts.map +1 -0
  181. package/dist/web-editor/client/inspector.js +226 -0
  182. package/dist/web-editor/client/inspector.js.map +1 -0
  183. package/dist/web-editor/client/main.d.ts +2 -0
  184. package/dist/web-editor/client/main.d.ts.map +1 -0
  185. package/dist/web-editor/client/main.js +1468 -0
  186. package/dist/web-editor/client/main.js.map +1 -0
  187. package/dist/web-editor/client/policy-editor.d.ts +16 -0
  188. package/dist/web-editor/client/policy-editor.d.ts.map +1 -0
  189. package/dist/web-editor/client/policy-editor.js +330 -0
  190. package/dist/web-editor/client/policy-editor.js.map +1 -0
  191. package/dist/web-editor/client/regex-editor.d.ts +19 -0
  192. package/dist/web-editor/client/regex-editor.d.ts.map +1 -0
  193. package/dist/web-editor/client/regex-editor.js +281 -0
  194. package/dist/web-editor/client/regex-editor.js.map +1 -0
  195. package/dist/web-editor/client/types.d.ts +60 -0
  196. package/dist/web-editor/client/types.d.ts.map +1 -0
  197. package/dist/web-editor/client/types.js +2 -0
  198. package/dist/web-editor/client/types.js.map +1 -0
  199. package/dist/web-editor/client-script.d.ts +2 -0
  200. package/dist/web-editor/client-script.d.ts.map +1 -0
  201. package/dist/web-editor/client-script.generated.d.ts +2 -0
  202. package/dist/web-editor/client-script.generated.d.ts.map +1 -0
  203. package/dist/web-editor/client-script.generated.js +3 -0
  204. package/dist/web-editor/client-script.generated.js.map +1 -0
  205. package/dist/web-editor/client-script.js +2 -0
  206. package/dist/web-editor/client-script.js.map +1 -0
  207. package/dist/web-editor/page.d.ts.map +1 -1
  208. package/dist/web-editor/page.js +6 -3249
  209. package/dist/web-editor/page.js.map +1 -1
  210. package/dist/web-editor/server.js +4 -4
  211. package/dist/web-editor/server.js.map +1 -1
  212. package/dist/web-editor/styles.d.ts +2 -0
  213. package/dist/web-editor/styles.d.ts.map +1 -0
  214. package/dist/web-editor/styles.js +996 -0
  215. package/dist/web-editor/styles.js.map +1 -0
  216. package/dist/web-editor/types.d.ts +8 -8
  217. package/dist/web-editor/types.d.ts.map +1 -1
  218. package/dist/web-host.d.ts +4 -4
  219. package/dist/web-host.d.ts.map +1 -1
  220. package/dist/web-host.js +15 -9
  221. package/dist/web-host.js.map +1 -1
  222. package/examples/custom-system-status-extension/README.md +34 -27
  223. package/examples/custom-system-status-extension/index.ts +71 -111
  224. package/examples/custom-system-status-extension/prompt-stack.json +1 -1
  225. package/package.json +42 -14
  226. package/src/compiler.ts +0 -578
  227. package/src/extension-registry.ts +0 -33
  228. package/src/index.ts +0 -430
  229. package/src/lifecycle.ts +0 -171
  230. package/src/loader.ts +0 -394
  231. package/src/macro-engine.ts +0 -358
  232. package/src/payload-capture.ts +0 -85
  233. package/src/payload-command.ts +0 -138
  234. package/src/policy.ts +0 -42
  235. package/src/preset-command.ts +0 -271
  236. package/src/preview.ts +0 -226
  237. package/src/regex.ts +0 -500
  238. package/src/render-helpers.ts +0 -169
  239. package/src/runtime-state.ts +0 -36
  240. package/src/sillytavern-importer/items.ts +0 -98
  241. package/src/sillytavern-importer/macros.ts +0 -159
  242. package/src/sillytavern-importer/prompt-order.ts +0 -54
  243. package/src/sillytavern-importer/regex.ts +0 -270
  244. package/src/sillytavern-importer/report.ts +0 -202
  245. package/src/sillytavern-importer/types.ts +0 -120
  246. package/src/sillytavern-importer.ts +0 -152
  247. package/src/slot-renderers.ts +0 -414
  248. package/src/stack-migration.ts +0 -159
  249. package/src/storage.ts +0 -28
  250. package/src/types.ts +0 -209
  251. package/src/web-editor/index.ts +0 -2
  252. package/src/web-editor/page.ts +0 -3330
  253. package/src/web-editor/server.ts +0 -294
  254. package/src/web-editor/types.ts +0 -98
  255. 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"}