@zihanw/pi-forge 0.3.2 → 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 (244) hide show
  1. package/CHANGELOG.md +160 -0
  2. package/PUBLIC_API.md +28 -0
  3. package/README.md +137 -11
  4. package/README.zh-CN.md +137 -11
  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.map +1 -1
  15. package/dist/forge-extensions.js +19 -3
  16. package/dist/forge-extensions.js.map +1 -1
  17. package/dist/index.d.ts +7 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +75 -361
  20. package/dist/index.js.map +1 -1
  21. package/dist/lifecycle.d.ts +11 -3
  22. package/dist/lifecycle.d.ts.map +1 -1
  23. package/dist/lifecycle.js +90 -4
  24. package/dist/lifecycle.js.map +1 -1
  25. package/dist/loader.d.ts.map +1 -1
  26. package/dist/loader.js +116 -5
  27. package/dist/loader.js.map +1 -1
  28. package/dist/payload-capture.d.ts.map +1 -1
  29. package/dist/payload-capture.js +27 -0
  30. package/dist/payload-capture.js.map +1 -1
  31. package/dist/payload-command.d.ts +3 -3
  32. package/dist/payload-command.d.ts.map +1 -1
  33. package/dist/payload-command.js.map +1 -1
  34. package/dist/preview.d.ts +2 -2
  35. package/dist/preview.d.ts.map +1 -1
  36. package/dist/preview.js +2 -3
  37. package/dist/preview.js.map +1 -1
  38. package/dist/profile-command.d.ts +12 -0
  39. package/dist/profile-command.d.ts.map +1 -0
  40. package/dist/profile-command.js +291 -0
  41. package/dist/profile-command.js.map +1 -0
  42. package/dist/profile-service.d.ts +103 -0
  43. package/dist/profile-service.d.ts.map +1 -0
  44. package/dist/profile-service.js +215 -0
  45. package/dist/profile-service.js.map +1 -0
  46. package/dist/runtime/profile-runtime.d.ts +13 -0
  47. package/dist/runtime/profile-runtime.d.ts.map +1 -0
  48. package/dist/runtime/profile-runtime.js +47 -0
  49. package/dist/runtime/profile-runtime.js.map +1 -0
  50. package/dist/runtime/prompt-stack-runtime.d.ts +22 -0
  51. package/dist/runtime/prompt-stack-runtime.d.ts.map +1 -0
  52. package/dist/runtime/prompt-stack-runtime.js +104 -0
  53. package/dist/runtime/prompt-stack-runtime.js.map +1 -0
  54. package/dist/runtime/subagent-runtime.d.ts +30 -0
  55. package/dist/runtime/subagent-runtime.d.ts.map +1 -0
  56. package/dist/runtime/subagent-runtime.js +114 -0
  57. package/dist/runtime/subagent-runtime.js.map +1 -0
  58. package/dist/runtime/tool-policy-runtime.d.ts +15 -0
  59. package/dist/runtime/tool-policy-runtime.d.ts.map +1 -0
  60. package/dist/runtime/tool-policy-runtime.js +170 -0
  61. package/dist/runtime/tool-policy-runtime.js.map +1 -0
  62. package/dist/runtime/web-editor-runtime.d.ts +9 -0
  63. package/dist/runtime/web-editor-runtime.d.ts.map +1 -0
  64. package/dist/runtime/web-editor-runtime.js +131 -0
  65. package/dist/runtime/web-editor-runtime.js.map +1 -0
  66. package/dist/runtime-state.d.ts +4 -0
  67. package/dist/runtime-state.d.ts.map +1 -1
  68. package/dist/runtime-state.js +2 -0
  69. package/dist/runtime-state.js.map +1 -1
  70. package/dist/storage.d.ts +3 -0
  71. package/dist/storage.d.ts.map +1 -1
  72. package/dist/storage.js +9 -0
  73. package/dist/storage.js.map +1 -1
  74. package/dist/subagent/backend-registry.d.ts +75 -0
  75. package/dist/subagent/backend-registry.d.ts.map +1 -0
  76. package/dist/subagent/backend-registry.js +463 -0
  77. package/dist/subagent/backend-registry.js.map +1 -0
  78. package/dist/subagent/canonical.d.ts +10 -0
  79. package/dist/subagent/canonical.d.ts.map +1 -0
  80. package/dist/subagent/canonical.js +52 -0
  81. package/dist/subagent/canonical.js.map +1 -0
  82. package/dist/subagent/context.d.ts +8 -0
  83. package/dist/subagent/context.d.ts.map +1 -0
  84. package/dist/subagent/context.js +125 -0
  85. package/dist/subagent/context.js.map +1 -0
  86. package/dist/subagent/contract.d.ts +11 -0
  87. package/dist/subagent/contract.d.ts.map +1 -0
  88. package/dist/subagent/contract.js +11 -0
  89. package/dist/subagent/contract.js.map +1 -0
  90. package/dist/subagent/diagnostics.d.ts +3 -0
  91. package/dist/subagent/diagnostics.d.ts.map +1 -0
  92. package/dist/subagent/diagnostics.js +5 -0
  93. package/dist/subagent/diagnostics.js.map +1 -0
  94. package/dist/subagent/index.d.ts +13 -0
  95. package/dist/subagent/index.d.ts.map +1 -0
  96. package/dist/subagent/index.js +13 -0
  97. package/dist/subagent/index.js.map +1 -0
  98. package/dist/subagent/pi-model-runtime.d.ts +8 -0
  99. package/dist/subagent/pi-model-runtime.d.ts.map +1 -0
  100. package/dist/subagent/pi-model-runtime.js +22 -0
  101. package/dist/subagent/pi-model-runtime.js.map +1 -0
  102. package/dist/subagent/pi-sdk-backend.d.ts +23 -0
  103. package/dist/subagent/pi-sdk-backend.d.ts.map +1 -0
  104. package/dist/subagent/pi-sdk-backend.js +383 -0
  105. package/dist/subagent/pi-sdk-backend.js.map +1 -0
  106. package/dist/subagent/pi-subprocess-backend.d.ts +72 -0
  107. package/dist/subagent/pi-subprocess-backend.d.ts.map +1 -0
  108. package/dist/subagent/pi-subprocess-backend.js +756 -0
  109. package/dist/subagent/pi-subprocess-backend.js.map +1 -0
  110. package/dist/subagent/plan.d.ts +14 -0
  111. package/dist/subagent/plan.d.ts.map +1 -0
  112. package/dist/subagent/plan.js +160 -0
  113. package/dist/subagent/plan.js.map +1 -0
  114. package/dist/subagent/preflight.d.ts +4 -0
  115. package/dist/subagent/preflight.d.ts.map +1 -0
  116. package/dist/subagent/preflight.js +108 -0
  117. package/dist/subagent/preflight.js.map +1 -0
  118. package/dist/subagent/request.d.ts +4 -0
  119. package/dist/subagent/request.d.ts.map +1 -0
  120. package/dist/subagent/request.js +122 -0
  121. package/dist/subagent/request.js.map +1 -0
  122. package/dist/subagent/response.d.ts +8 -0
  123. package/dist/subagent/response.d.ts.map +1 -0
  124. package/dist/subagent/response.js +155 -0
  125. package/dist/subagent/response.js.map +1 -0
  126. package/dist/subagent/subprocess-bridge.d.ts +21 -0
  127. package/dist/subagent/subprocess-bridge.d.ts.map +1 -0
  128. package/dist/subagent/subprocess-bridge.js +87 -0
  129. package/dist/subagent/subprocess-bridge.js.map +1 -0
  130. package/dist/subagent/subprocess-report.d.ts +4 -0
  131. package/dist/subagent/subprocess-report.d.ts.map +1 -0
  132. package/dist/subagent/subprocess-report.js +55 -0
  133. package/dist/subagent/subprocess-report.js.map +1 -0
  134. package/dist/subagent/tools.d.ts +4 -0
  135. package/dist/subagent/tools.d.ts.map +1 -0
  136. package/dist/subagent/tools.js +42 -0
  137. package/dist/subagent/tools.js.map +1 -0
  138. package/dist/subagent/types.d.ts +384 -0
  139. package/dist/subagent/types.d.ts.map +1 -0
  140. package/dist/subagent/types.js +3 -0
  141. package/dist/subagent/types.js.map +1 -0
  142. package/dist/subagent/validation.d.ts +35 -0
  143. package/dist/subagent/validation.d.ts.map +1 -0
  144. package/dist/subagent/validation.js +500 -0
  145. package/dist/subagent/validation.js.map +1 -0
  146. package/dist/subagent-command.d.ts +4 -0
  147. package/dist/subagent-command.d.ts.map +1 -0
  148. package/dist/subagent-command.js +153 -0
  149. package/dist/subagent-command.js.map +1 -0
  150. package/dist/subagent-contract.d.ts +8 -0
  151. package/dist/subagent-contract.d.ts.map +1 -0
  152. package/dist/subagent-contract.js +8 -0
  153. package/dist/subagent-contract.js.map +1 -0
  154. package/dist/subagent-host.d.ts +44 -0
  155. package/dist/subagent-host.d.ts.map +1 -0
  156. package/dist/subagent-host.js +291 -0
  157. package/dist/subagent-host.js.map +1 -0
  158. package/dist/subagent-profile-tool.d.ts +26 -0
  159. package/dist/subagent-profile-tool.d.ts.map +1 -0
  160. package/dist/subagent-profile-tool.js +93 -0
  161. package/dist/subagent-profile-tool.js.map +1 -0
  162. package/dist/subagent-tool.d.ts +50 -0
  163. package/dist/subagent-tool.d.ts.map +1 -0
  164. package/dist/subagent-tool.js +385 -0
  165. package/dist/subagent-tool.js.map +1 -0
  166. package/dist/web-editor/client/api.d.ts +9 -0
  167. package/dist/web-editor/client/api.d.ts.map +1 -0
  168. package/dist/web-editor/client/api.js +26 -0
  169. package/dist/web-editor/client/api.js.map +1 -0
  170. package/dist/web-editor/client/dom.d.ts +13 -0
  171. package/dist/web-editor/client/dom.d.ts.map +1 -0
  172. package/dist/web-editor/client/dom.js +30 -0
  173. package/dist/web-editor/client/dom.js.map +1 -0
  174. package/dist/web-editor/client/inspector.d.ts +22 -0
  175. package/dist/web-editor/client/inspector.d.ts.map +1 -0
  176. package/dist/web-editor/client/inspector.js +226 -0
  177. package/dist/web-editor/client/inspector.js.map +1 -0
  178. package/dist/web-editor/client/main.d.ts +2 -0
  179. package/dist/web-editor/client/main.d.ts.map +1 -0
  180. package/dist/web-editor/client/main.js +1468 -0
  181. package/dist/web-editor/client/main.js.map +1 -0
  182. package/dist/web-editor/client/policy-editor.d.ts +16 -0
  183. package/dist/web-editor/client/policy-editor.d.ts.map +1 -0
  184. package/dist/web-editor/client/policy-editor.js +330 -0
  185. package/dist/web-editor/client/policy-editor.js.map +1 -0
  186. package/dist/web-editor/client/regex-editor.d.ts +19 -0
  187. package/dist/web-editor/client/regex-editor.d.ts.map +1 -0
  188. package/dist/web-editor/client/regex-editor.js +281 -0
  189. package/dist/web-editor/client/regex-editor.js.map +1 -0
  190. package/dist/web-editor/client/types.d.ts +60 -0
  191. package/dist/web-editor/client/types.d.ts.map +1 -0
  192. package/dist/web-editor/client/types.js +2 -0
  193. package/dist/web-editor/client/types.js.map +1 -0
  194. package/dist/web-editor/client-script.d.ts +2 -0
  195. package/dist/web-editor/client-script.d.ts.map +1 -0
  196. package/dist/web-editor/client-script.generated.d.ts +2 -0
  197. package/dist/web-editor/client-script.generated.d.ts.map +1 -0
  198. package/dist/web-editor/client-script.generated.js +3 -0
  199. package/dist/web-editor/client-script.generated.js.map +1 -0
  200. package/dist/web-editor/client-script.js +2 -0
  201. package/dist/web-editor/client-script.js.map +1 -0
  202. package/dist/web-editor/page.d.ts.map +1 -1
  203. package/dist/web-editor/page.js +6 -3249
  204. package/dist/web-editor/page.js.map +1 -1
  205. package/dist/web-editor/styles.d.ts +2 -0
  206. package/dist/web-editor/styles.d.ts.map +1 -0
  207. package/dist/web-editor/styles.js +996 -0
  208. package/dist/web-editor/styles.js.map +1 -0
  209. package/dist/web-host.d.ts +3 -3
  210. package/dist/web-host.d.ts.map +1 -1
  211. package/dist/web-host.js +6 -0
  212. package/dist/web-host.js.map +1 -1
  213. package/package.json +42 -14
  214. package/src/compiler.ts +0 -578
  215. package/src/extension-registry.ts +0 -33
  216. package/src/forge-extensions.ts +0 -223
  217. package/src/index.ts +0 -445
  218. package/src/lifecycle.ts +0 -171
  219. package/src/loader.ts +0 -394
  220. package/src/macro-engine.ts +0 -358
  221. package/src/payload-capture.ts +0 -85
  222. package/src/payload-command.ts +0 -138
  223. package/src/policy.ts +0 -42
  224. package/src/preset-command.ts +0 -280
  225. package/src/preview.ts +0 -226
  226. package/src/regex.ts +0 -500
  227. package/src/render-helpers.ts +0 -169
  228. package/src/runtime-state.ts +0 -40
  229. package/src/sillytavern-importer/items.ts +0 -98
  230. package/src/sillytavern-importer/macros.ts +0 -159
  231. package/src/sillytavern-importer/prompt-order.ts +0 -54
  232. package/src/sillytavern-importer/regex.ts +0 -270
  233. package/src/sillytavern-importer/report.ts +0 -202
  234. package/src/sillytavern-importer/types.ts +0 -120
  235. package/src/sillytavern-importer.ts +0 -152
  236. package/src/slot-renderers.ts +0 -414
  237. package/src/stack-migration.ts +0 -159
  238. package/src/storage.ts +0 -45
  239. package/src/types.ts +0 -209
  240. package/src/web-editor/index.ts +0 -2
  241. package/src/web-editor/page.ts +0 -3330
  242. package/src/web-editor/server.ts +0 -294
  243. package/src/web-editor/types.ts +0 -98
  244. package/src/web-host.ts +0 -232
@@ -0,0 +1,463 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { SUBAGENT_CONTRACT_VERSION, canonicalSubagentJson, hasSubagentErrors, validateAgentExecutionPlan, validateAgentProfileSnapshot, validateAgentRequest, validateAgentResponse, validateBackendPreflight, validatePreparationRuntime, validateSubagentTraceReference, } from "./contract.js";
3
+ export class SubagentBackendRegistryError extends Error {
4
+ code;
5
+ constructor(code, message) {
6
+ super(message);
7
+ this.name = "SubagentBackendRegistryError";
8
+ this.code = code;
9
+ }
10
+ }
11
+ export class SubagentBackendRegistry {
12
+ #backends = new Map();
13
+ #preflights = new Map();
14
+ #traces = new Map();
15
+ #activeRuns = new Map();
16
+ #idFactory;
17
+ #now;
18
+ constructor(options = {}) {
19
+ this.#idFactory = options.idFactory ?? ((kind) => `${kind}:${randomUUID()}`);
20
+ this.#now = options.now ?? Date.now;
21
+ }
22
+ get size() {
23
+ return this.#backends.size;
24
+ }
25
+ register(backend) {
26
+ validateRegistration(backend);
27
+ const id = backend.descriptor.id;
28
+ if (this.#backends.has(id))
29
+ throw new SubagentBackendRegistryError("backend.duplicate", `A subagent backend is already registered as ${id}.`);
30
+ this.#backends.set(id, backend);
31
+ return () => this.unregister(id);
32
+ }
33
+ unregister(backendId) {
34
+ if ([...this.#activeRuns.values()].some((run) => run.backend.descriptor.id === backendId)) {
35
+ throw new SubagentBackendRegistryError("backend.active", `Cannot unregister backend ${backendId} while one of its runs is active or draining.`);
36
+ }
37
+ const removed = this.#backends.delete(backendId);
38
+ if (!removed)
39
+ return false;
40
+ for (const [id, record] of this.#preflights)
41
+ if (record.backendId === backendId)
42
+ this.#preflights.delete(id);
43
+ for (const [handle, record] of this.#traces)
44
+ if (record.reference.backendId === backendId)
45
+ this.#traces.delete(handle);
46
+ return true;
47
+ }
48
+ descriptors() {
49
+ return [...this.#backends.values()]
50
+ .map((backend) => structuredClone(backend.descriptor))
51
+ .sort((left, right) => left.id.localeCompare(right.id));
52
+ }
53
+ forgetPreflight(preflightId) {
54
+ if ([...this.#activeRuns.values()].some((run) => run.plan.preflightId === preflightId)) {
55
+ throw new SubagentBackendRegistryError("preflight.active", `Cannot forget preflight ${preflightId} while its run is active or draining.`);
56
+ }
57
+ return this.#preflights.delete(preflightId);
58
+ }
59
+ async discard(preflightId) {
60
+ if ([...this.#activeRuns.values()].some((run) => run.plan.preflightId === preflightId)) {
61
+ throw new SubagentBackendRegistryError("preflight.active", `Cannot discard preflight ${preflightId} while its run is active or draining.`);
62
+ }
63
+ const record = this.#preflights.get(preflightId);
64
+ if (!record)
65
+ return false;
66
+ const backend = this.#requireBackend(record.backendId);
67
+ await backend.discard?.(preflightId);
68
+ this.#preflights.delete(preflightId);
69
+ return true;
70
+ }
71
+ async preflight(backendId, request, snapshot, signal) {
72
+ const backend = this.#requireBackend(backendId);
73
+ const inputDiagnostics = [...validateAgentRequest(request), ...validateAgentProfileSnapshot(snapshot)];
74
+ if (hasSubagentErrors(inputDiagnostics))
75
+ return this.#rejectedPreflight(backend, inputDiagnostics);
76
+ if (signal?.aborted)
77
+ return this.#rejectedPreflight(backend, [diagnostic("preflight.cancelled", "Preflight was cancelled before backend discovery.")]);
78
+ let result;
79
+ try {
80
+ result = await backend.preflight({ request: structuredClone(request), snapshot: structuredClone(snapshot), signal });
81
+ }
82
+ catch (error) {
83
+ return this.#rejectedPreflight(backend, [diagnostic("preflight.backend-error", errorMessage(error))]);
84
+ }
85
+ const diagnostics = validateBackendPreflight(result, request, snapshot);
86
+ if (result.backend?.id !== backendId || !sameDescriptor(result.backend, backend.descriptor)) {
87
+ diagnostics.push(diagnostic("preflight.backend-identity", "Backend preflight descriptor does not match its registered identity.", "backend"));
88
+ }
89
+ if (this.#preflights.has(result.preflightId))
90
+ diagnostics.push(diagnostic("preflight.duplicate-id", "Backend reused an existing preflightId.", "preflightId"));
91
+ if (hasSubagentErrors(diagnostics))
92
+ return this.#rejectedPreflight(backend, diagnostics, validOpaqueId(result.preflightId) ? result.preflightId : undefined);
93
+ if (result.status === "accepted") {
94
+ this.#preflights.set(result.preflightId, {
95
+ backendId,
96
+ requestId: request.requestId,
97
+ profileFingerprint: snapshot.profileFingerprint,
98
+ requestCanonical: canonicalSubagentJson(request),
99
+ snapshotCanonical: canonicalSubagentJson(snapshot),
100
+ preflightCanonical: canonicalSubagentJson(result),
101
+ });
102
+ }
103
+ return structuredClone(result);
104
+ }
105
+ async prepare(backendId, input, hostPreparer, signal) {
106
+ const backend = this.#requireBackend(backendId);
107
+ this.#assertPreflightBinding(input.preflight, input.request, input.snapshot);
108
+ const record = this.#preflights.get(input.preflight.preflightId);
109
+ if (record.preparation)
110
+ throw new SubagentBackendRegistryError("preparation.already-bound", "Accepted preflight already has a host preparation bound to it.");
111
+ if (signal?.aborted)
112
+ throw new SubagentBackendRegistryError("preparation.cancelled", "Preparation was cancelled before it started.");
113
+ const fidelity = backend.descriptor.capabilities.promptRuntimeFidelity;
114
+ if (fidelity === "partial")
115
+ throw new SubagentBackendRegistryError("preparation.partial", "A partial prompt runtime cannot prepare an execution plan.");
116
+ let hostResult;
117
+ const prepare = async (runtime) => {
118
+ if (hostResult)
119
+ throw new SubagentBackendRegistryError("preparation.duplicate", "Backend attempted to prepare the same request more than once.");
120
+ const runtimeDiagnostics = [];
121
+ validatePreparationRuntime(runtime, "runtime", runtimeDiagnostics, fidelity);
122
+ if (runtime.model.provider !== input.preflight.model.provider || runtime.model.id !== input.preflight.model.id) {
123
+ runtimeDiagnostics.push(diagnostic("preparation.runtime-model", "Prompt runtime model does not match the accepted preflight model.", "runtime.model"));
124
+ }
125
+ if (hasSubagentErrors(runtimeDiagnostics))
126
+ throw new SubagentBackendRegistryError("preparation.invalid-runtime", summarizeDiagnostics(runtimeDiagnostics));
127
+ const exactInput = { ...structuredClone(input), runtime: structuredClone(runtime) };
128
+ hostResult = {
129
+ runtime: structuredClone(runtime),
130
+ preparation: structuredClone(await hostPreparer(exactInput)),
131
+ };
132
+ return structuredClone(hostResult);
133
+ };
134
+ if (fidelity === "exact-preflight") {
135
+ if (!input.preflight.promptRuntime)
136
+ throw new SubagentBackendRegistryError("preparation.runtime-missing", "Exact-preflight backend did not provide a prompt runtime receipt.");
137
+ const result = await prepare(input.preflight.promptRuntime);
138
+ this.#bindPreparation(record, result);
139
+ return result;
140
+ }
141
+ if (!backend.prepare)
142
+ throw new SubagentBackendRegistryError("preparation.unsupported", `Backend ${backendId} advertises backend-assisted preparation but has no prepare method.`);
143
+ const backendResult = structuredClone(await backend.prepare(structuredClone(input), { signal, prepare }));
144
+ if (!hostResult)
145
+ throw new SubagentBackendRegistryError("preparation.host-bypass", `Backend ${backendId} returned without invoking host preparation.`);
146
+ if (canonicalSubagentJson(backendResult) !== canonicalSubagentJson(hostResult)) {
147
+ throw new SubagentBackendRegistryError("preparation.host-mismatch", `Backend ${backendId} altered the host preparation result.`);
148
+ }
149
+ this.#bindPreparation(record, backendResult);
150
+ return backendResult;
151
+ }
152
+ async execute(plan, options) {
153
+ const backend = this.#requireBackend(plan.backendId);
154
+ const planDiagnostics = validateAgentExecutionPlan(plan);
155
+ if (hasSubagentErrors(planDiagnostics))
156
+ throw new SubagentBackendRegistryError("execution.invalid-plan", summarizeDiagnostics(planDiagnostics));
157
+ const preflightRecord = this.#preflights.get(plan.preflightId);
158
+ if (!preflightRecord
159
+ || preflightRecord.backendId !== plan.backendId
160
+ || preflightRecord.requestId !== plan.requestId
161
+ || preflightRecord.profileFingerprint !== plan.profile.profileFingerprint
162
+ || preflightRecord.snapshotCanonical !== canonicalSubagentJson(plan.profile)
163
+ || preflightRecord.preflightCanonical !== canonicalSubagentJson(plan.preflight)) {
164
+ throw new SubagentBackendRegistryError("execution.unbound-preflight", "Execution plan is not bound to an accepted registry preflight.");
165
+ }
166
+ const preparation = preflightRecord.preparation;
167
+ if (!preparation
168
+ || preparation.promptRuntimeFingerprint !== plan.promptRuntimeFingerprint
169
+ || preparation.systemPrompt !== plan.systemPrompt
170
+ || preparation.messagesCanonical !== canonicalSubagentJson(plan.messages)
171
+ || preparation.effectiveToolIdsCanonical !== canonicalSubagentJson(plan.effectiveToolIds)
172
+ || preparation.contextBudgetCanonical !== canonicalSubagentJson(plan.contextBudget ?? null)) {
173
+ throw new SubagentBackendRegistryError("execution.unbound-preparation", "Execution plan does not match the exact host preparation bound to its preflight.");
174
+ }
175
+ if (!validNamespace(options.authorizationScope))
176
+ throw new SubagentBackendRegistryError("execution.authorization", "authorizationScope must be a normalized namespace.");
177
+ if (this.#activeRuns.has(plan.runId))
178
+ throw new SubagentBackendRegistryError("execution.duplicate-run", `Run ${plan.runId} is already active.`);
179
+ const startedAt = this.#now();
180
+ const controller = new AbortController();
181
+ let resolveTerminal;
182
+ const terminal = new Promise((resolve) => { resolveTerminal = resolve; });
183
+ const active = { backend, plan, controller, settled: false, terminal };
184
+ this.#activeRuns.set(plan.runId, active);
185
+ let timeout;
186
+ let externalAbort;
187
+ const settle = (response) => {
188
+ if (active.settled)
189
+ return false;
190
+ active.settled = true;
191
+ if (timeout)
192
+ clearTimeout(timeout);
193
+ if (externalAbort && options.signal)
194
+ options.signal.removeEventListener("abort", externalAbort);
195
+ resolveTerminal(response);
196
+ return true;
197
+ };
198
+ const cancelRun = (kind, reason) => {
199
+ if (active.settled || active.cancellation)
200
+ return;
201
+ active.cancellation = { kind, reason };
202
+ controller.abort(reason);
203
+ active.cancelPromise = Promise.resolve(backend.cancel?.({ runId: plan.runId, reason })).catch(() => undefined);
204
+ };
205
+ active.requestCancellation = cancelRun;
206
+ const settleCancellation = () => {
207
+ const cancellation = active.cancellation;
208
+ if (!cancellation)
209
+ return false;
210
+ const durationMs = elapsed(this.#now(), startedAt);
211
+ return settle(cancellation.kind === "timed-out"
212
+ ? { ...responseCommon(plan, durationMs), status: "timed-out", reason: cancellation.reason, enforcedTimeoutMs: plan.limits.timeoutMs.value }
213
+ : { ...responseCommon(plan, durationMs), status: "cancelled", reason: cancellation.reason });
214
+ };
215
+ if (options.signal) {
216
+ externalAbort = () => cancelRun("cancelled", abortReason(options.signal, "user"));
217
+ if (options.signal.aborted)
218
+ externalAbort();
219
+ else
220
+ options.signal.addEventListener("abort", externalAbort, { once: true });
221
+ }
222
+ const timeoutLimit = plan.limits.timeoutMs;
223
+ if (!active.settled && timeoutLimit?.enforcement === "host-abort") {
224
+ timeout = setTimeout(() => cancelRun("timed-out", "host timeout"), timeoutLimit.value);
225
+ }
226
+ const backendExecution = Promise.resolve()
227
+ .then(async () => {
228
+ if (active.cancellation) {
229
+ await active.cancelPromise;
230
+ await backend.discard?.(plan.preflightId);
231
+ settleCancellation();
232
+ return;
233
+ }
234
+ const result = await backend.execute(structuredClone(plan), {
235
+ signal: controller.signal,
236
+ onUpdate: options.onUpdate
237
+ ? (update) => {
238
+ try {
239
+ options.onUpdate?.(structuredClone(update));
240
+ }
241
+ catch {
242
+ // UI/reporting callbacks cannot fail backend execution.
243
+ }
244
+ }
245
+ : undefined,
246
+ });
247
+ if (active.cancellation) {
248
+ await active.cancelPromise;
249
+ settleCancellation();
250
+ return;
251
+ }
252
+ settle(this.#normalizeBackendResponse(result, plan, options.authorizationScope, elapsed(this.#now(), startedAt)));
253
+ })
254
+ .catch(async (error) => {
255
+ if (active.cancellation) {
256
+ await active.cancelPromise;
257
+ settleCancellation();
258
+ return;
259
+ }
260
+ settle({
261
+ ...responseCommon(plan, elapsed(this.#now(), startedAt)),
262
+ status: "failed",
263
+ error: { code: "backend-execution", message: errorMessage(error), retryable: false },
264
+ });
265
+ })
266
+ .finally(() => {
267
+ if (timeout)
268
+ clearTimeout(timeout);
269
+ if (externalAbort && options.signal)
270
+ options.signal.removeEventListener("abort", externalAbort);
271
+ if (this.#activeRuns.get(plan.runId) === active)
272
+ this.#activeRuns.delete(plan.runId);
273
+ this.#preflights.delete(plan.preflightId);
274
+ });
275
+ void backendExecution;
276
+ return terminal;
277
+ }
278
+ async cancel(runId, reason = "user") {
279
+ const active = this.#activeRuns.get(runId);
280
+ if (!active || active.settled || active.cancellation)
281
+ return false;
282
+ active.requestCancellation?.("cancelled", reason);
283
+ await active.terminal;
284
+ return true;
285
+ }
286
+ async inspectTrace(reference, authorizationScope, signal) {
287
+ const diagnostics = validateSubagentTraceReference(reference);
288
+ if (hasSubagentErrors(diagnostics))
289
+ throw new SubagentBackendRegistryError("trace.invalid", summarizeDiagnostics(diagnostics));
290
+ const record = this.#traces.get(reference.handle);
291
+ if (!record || !sameTraceReference(record.reference, reference))
292
+ throw new SubagentBackendRegistryError("trace.unknown", "Trace handle is unknown or does not match its registered route.");
293
+ if (reference.authorizationScope !== authorizationScope)
294
+ throw new SubagentBackendRegistryError("trace.forbidden", "Trace authorization scope does not match the caller.");
295
+ if (reference.expiresAt && Date.parse(reference.expiresAt) <= this.#now()) {
296
+ this.#traces.delete(reference.handle);
297
+ throw new SubagentBackendRegistryError("trace.expired", "Trace handle has expired.");
298
+ }
299
+ const backend = this.#requireBackend(reference.backendId);
300
+ if (!backend.descriptor.capabilities.traceInspection || !backend.inspectTrace) {
301
+ throw new SubagentBackendRegistryError("trace.unsupported", `Backend ${reference.backendId} does not support trace inspection.`);
302
+ }
303
+ return backend.inspectTrace({ traceId: record.backendTraceId, signal });
304
+ }
305
+ forgetTrace(handle) {
306
+ return this.#traces.delete(handle);
307
+ }
308
+ #requireBackend(backendId) {
309
+ const backend = this.#backends.get(backendId);
310
+ if (!backend)
311
+ throw new SubagentBackendRegistryError("backend.unknown", `Unknown subagent backend: ${backendId}`);
312
+ return backend;
313
+ }
314
+ #assertPreflightBinding(preflight, request, snapshot) {
315
+ const record = this.#preflights.get(preflight.preflightId);
316
+ if (!record
317
+ || record.backendId !== preflight.backend.id
318
+ || record.requestId !== request.requestId
319
+ || record.profileFingerprint !== snapshot.profileFingerprint
320
+ || record.requestCanonical !== canonicalSubagentJson(request)
321
+ || record.snapshotCanonical !== canonicalSubagentJson(snapshot)
322
+ || record.preflightCanonical !== canonicalSubagentJson(preflight)) {
323
+ throw new SubagentBackendRegistryError("preparation.unbound-preflight", "Preparation input is not bound to an accepted registry preflight.");
324
+ }
325
+ }
326
+ #bindPreparation(record, result) {
327
+ record.preparation = {
328
+ promptRuntimeFingerprint: result.runtime.promptRuntimeFingerprint,
329
+ systemPrompt: result.preparation.systemPrompt,
330
+ messagesCanonical: canonicalSubagentJson(result.preparation.messages),
331
+ effectiveToolIdsCanonical: canonicalSubagentJson(result.preparation.toolNegotiation.effectiveToolIds),
332
+ contextBudgetCanonical: canonicalSubagentJson(result.preparation.contextBudget ?? null),
333
+ };
334
+ }
335
+ #rejectedPreflight(backend, diagnostics, preflightId) {
336
+ return {
337
+ status: "rejected",
338
+ preflightId: preflightId ?? this.#idFactory("preflight"),
339
+ backend: structuredClone(backend.descriptor),
340
+ diagnostics: ensureErrorDiagnostics(diagnostics),
341
+ };
342
+ }
343
+ #normalizeBackendResponse(result, plan, authorizationScope, durationMs) {
344
+ let trace;
345
+ if (result.trace) {
346
+ if (!validOpaqueId(result.trace.id) || (result.trace.expiresAt !== undefined && !validIsoDate(result.trace.expiresAt))) {
347
+ return invalidBackendResponse(plan, durationMs, "Backend returned malformed trace routing metadata.");
348
+ }
349
+ trace = {
350
+ handle: this.#uniqueId("trace", this.#traces),
351
+ backendId: plan.backendId,
352
+ authorizationScope,
353
+ expiresAt: result.trace.expiresAt,
354
+ };
355
+ }
356
+ const { trace: _backendTrace, ...responseFields } = result;
357
+ const response = { ...responseFields, durationMs, trace };
358
+ const diagnostics = validateAgentResponse(response, { plan });
359
+ if (hasSubagentErrors(diagnostics))
360
+ return invalidBackendResponse(plan, durationMs, summarizeDiagnostics(diagnostics));
361
+ if (trace && result.trace)
362
+ this.#traces.set(trace.handle, { reference: trace, backendTraceId: result.trace.id });
363
+ return structuredClone(response);
364
+ }
365
+ #uniqueId(kind, values) {
366
+ for (let attempt = 0; attempt < 10; attempt += 1) {
367
+ const id = this.#idFactory(kind);
368
+ if (validOpaqueId(id) && !values.has(id))
369
+ return id;
370
+ }
371
+ throw new SubagentBackendRegistryError(`${kind}.id`, `Could not allocate a unique valid ${kind} identifier.`);
372
+ }
373
+ }
374
+ function validateRegistration(backend) {
375
+ if (!backend || typeof backend !== "object")
376
+ throw new SubagentBackendRegistryError("backend.type", "Subagent backend must be an object.");
377
+ if (typeof backend.preflight !== "function" || typeof backend.execute !== "function") {
378
+ throw new SubagentBackendRegistryError("backend.methods", "Subagent backend must implement preflight and execute.");
379
+ }
380
+ const diagnostics = validateBackendPreflight({
381
+ status: "rejected",
382
+ preflightId: "descriptor-check",
383
+ backend: backend.descriptor,
384
+ diagnostics: [diagnostic("backend.descriptor-check", "Descriptor validation sentinel.")],
385
+ });
386
+ if (hasSubagentErrors(diagnostics))
387
+ throw new SubagentBackendRegistryError("backend.descriptor", summarizeDiagnostics(diagnostics));
388
+ if (backend.descriptor.capabilities.promptRuntimeFidelity === "backend-assisted" && typeof backend.prepare !== "function") {
389
+ throw new SubagentBackendRegistryError("backend.prepare", "A backend-assisted backend must implement prepare.");
390
+ }
391
+ if (backend.descriptor.capabilities.traceInspection && typeof backend.inspectTrace !== "function") {
392
+ throw new SubagentBackendRegistryError("backend.trace", "A trace-inspection backend must implement inspectTrace.");
393
+ }
394
+ }
395
+ function responseCommon(plan, durationMs) {
396
+ return {
397
+ schemaVersion: SUBAGENT_CONTRACT_VERSION,
398
+ requestId: plan.requestId,
399
+ runId: plan.runId,
400
+ backendId: plan.backendId,
401
+ profileFingerprint: plan.profile.profileFingerprint,
402
+ executionFingerprint: plan.executionFingerprint,
403
+ model: structuredClone(plan.model),
404
+ effectiveToolIds: [...plan.effectiveToolIds],
405
+ enforcement: { access: structuredClone(plan.access), limits: structuredClone(plan.limits) },
406
+ durationMs,
407
+ artifacts: [],
408
+ };
409
+ }
410
+ function invalidBackendResponse(plan, durationMs, detail) {
411
+ return {
412
+ ...responseCommon(plan, durationMs),
413
+ status: "failed",
414
+ error: { code: "backend-invalid-response", message: detail, retryable: false },
415
+ };
416
+ }
417
+ function diagnostic(code, message, path) {
418
+ return { level: "error", code, message, path };
419
+ }
420
+ function ensureErrorDiagnostics(diagnostics) {
421
+ const cloned = structuredClone(diagnostics);
422
+ if (cloned.some((item) => item.level === "error"))
423
+ return [...cloned];
424
+ return [diagnostic("registry.rejected", "Registry rejected the backend operation."), ...cloned];
425
+ }
426
+ function summarizeDiagnostics(diagnostics) {
427
+ return diagnostics.filter((item) => item.level === "error").slice(0, 4).map((item) => `${item.code}: ${item.message}`).join("; ") || "Subagent validation failed.";
428
+ }
429
+ function sameDescriptor(left, right) {
430
+ try {
431
+ return canonicalSubagentJson(left) === canonicalSubagentJson(right);
432
+ }
433
+ catch {
434
+ return false;
435
+ }
436
+ }
437
+ function sameTraceReference(left, right) {
438
+ return left.handle === right.handle
439
+ && left.backendId === right.backendId
440
+ && left.authorizationScope === right.authorizationScope
441
+ && left.expiresAt === right.expiresAt;
442
+ }
443
+ function validOpaqueId(value) {
444
+ return typeof value === "string" && /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(value);
445
+ }
446
+ function validNamespace(value) {
447
+ return typeof value === "string" && /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(value);
448
+ }
449
+ function validIsoDate(value) {
450
+ return !Number.isNaN(Date.parse(value)) && new Date(value).toISOString() === value;
451
+ }
452
+ function elapsed(now, start) {
453
+ return Math.max(0, now - start);
454
+ }
455
+ function abortReason(signal, fallback) {
456
+ if (!signal)
457
+ return fallback;
458
+ return typeof signal.reason === "string" && signal.reason.trim() ? signal.reason : fallback;
459
+ }
460
+ function errorMessage(error) {
461
+ return error instanceof Error ? error.message : String(error);
462
+ }
463
+ //# sourceMappingURL=backend-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-registry.js","sourceRoot":"","sources":["../../src/subagent/backend-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { AgentProfile } from "../agent-profile.ts";
2
+ import type { PromptStack } from "../types.ts";
3
+ import { type AgentExecutionPlan, type SubagentFingerprint, type SubagentPreparationRuntime } from "./types.ts";
4
+ export declare function canonicalSubagentJson(value: unknown): string;
5
+ export declare function subagentFingerprint(value: unknown): SubagentFingerprint;
6
+ export declare function subagentSourceProfileFingerprint(profile: AgentProfile): SubagentFingerprint;
7
+ export declare function subagentPromptStackFingerprint(stack: PromptStack): SubagentFingerprint;
8
+ export declare function subagentPromptRuntimeFingerprint(runtime: Omit<SubagentPreparationRuntime, "promptRuntimeFingerprint"> | SubagentPreparationRuntime): SubagentFingerprint;
9
+ export declare function subagentExecutionFingerprint(plan: Omit<AgentExecutionPlan, "executionFingerprint"> | AgentExecutionPlan): SubagentFingerprint;
10
+ //# sourceMappingURL=canonical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../src/subagent/canonical.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAA+B,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7I,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE5D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAEvE;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,YAAY,GAAG,mBAAmB,CAE3F;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAEtF;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,IAAI,CAAC,0BAA0B,EAAE,0BAA0B,CAAC,GAAG,0BAA0B,GAAG,mBAAmB,CAGxK;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,GAAG,kBAAkB,GAAG,mBAAmB,CAG7I"}
@@ -0,0 +1,52 @@
1
+ import { createHash } from "node:crypto";
2
+ import { SUBAGENT_FINGERPRINT_PREFIX } from "./types.js";
3
+ export function canonicalSubagentJson(value) {
4
+ return canonicalize(value, "$", new Set());
5
+ }
6
+ export function subagentFingerprint(value) {
7
+ return `${SUBAGENT_FINGERPRINT_PREFIX}${createHash("sha256").update(canonicalSubagentJson(value)).digest("hex")}`;
8
+ }
9
+ export function subagentSourceProfileFingerprint(profile) {
10
+ return subagentFingerprint(profile);
11
+ }
12
+ export function subagentPromptStackFingerprint(stack) {
13
+ return subagentFingerprint(stack);
14
+ }
15
+ export function subagentPromptRuntimeFingerprint(runtime) {
16
+ const { promptRuntimeFingerprint: _ignored, ...behavior } = runtime;
17
+ return subagentFingerprint(behavior);
18
+ }
19
+ export function subagentExecutionFingerprint(plan) {
20
+ const { executionFingerprint: _ignored, ...behavior } = plan;
21
+ return subagentFingerprint(behavior);
22
+ }
23
+ function canonicalize(value, path, ancestors) {
24
+ if (value === null)
25
+ return "null";
26
+ if (typeof value === "string" || typeof value === "boolean")
27
+ return JSON.stringify(value);
28
+ if (typeof value === "number") {
29
+ if (!Number.isFinite(value))
30
+ throw new TypeError(`Cannot fingerprint non-finite number at ${path}.`);
31
+ return JSON.stringify(Object.is(value, -0) ? 0 : value);
32
+ }
33
+ if (typeof value !== "object")
34
+ throw new TypeError(`Cannot fingerprint ${typeof value} at ${path}.`);
35
+ if (ancestors.has(value))
36
+ throw new TypeError(`Cannot fingerprint cyclic value at ${path}.`);
37
+ ancestors.add(value);
38
+ try {
39
+ if (Array.isArray(value))
40
+ return `[${value.map((item, index) => canonicalize(item, `${path}[${index}]`, ancestors)).join(",")}]`;
41
+ const prototype = Object.getPrototypeOf(value);
42
+ if (prototype !== Object.prototype && prototype !== null)
43
+ throw new TypeError(`Cannot fingerprint non-plain object at ${path}.`);
44
+ const record = value;
45
+ const keys = Object.keys(record).filter((key) => record[key] !== undefined).sort();
46
+ return `{${keys.map((key) => `${JSON.stringify(key)}:${canonicalize(record[key], `${path}.${key}`, ancestors)}`).join(",")}}`;
47
+ }
48
+ finally {
49
+ ancestors.delete(value);
50
+ }
51
+ }
52
+ //# sourceMappingURL=canonical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../src/subagent/canonical.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { AgentRequest, SubagentContextBudgetResult, SubagentContextItem, SubagentInitialMessagesResult, SubagentPreparedMessage, SubagentSelectedContext, SubagentTaskInput } from "./types.ts";
2
+ export declare function budgetSubagentContext(context: SubagentSelectedContext): SubagentContextBudgetResult;
3
+ export declare function renderSubagentSelectedContext(items: readonly SubagentContextItem[]): string;
4
+ export declare function createProtectedSubagentTask(input: SubagentTaskInput): SubagentPreparedMessage;
5
+ export declare function prepareSubagentInitialMessages(request: AgentRequest, promptStackMessages?: readonly SubagentPreparedMessage[]): SubagentInitialMessagesResult;
6
+ export declare function appendProtectedSubagentTask(messages: readonly SubagentPreparedMessage[], input: SubagentTaskInput): SubagentPreparedMessage[];
7
+ export declare function isProtectedSubagentTaskPreserved(messages: readonly SubagentPreparedMessage[], input: SubagentTaskInput): boolean;
8
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/subagent/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAgC,2BAA2B,EAAE,mBAAmB,EAAE,6BAA6B,EAA+B,uBAAuB,EAAE,uBAAuB,EAAE,iBAAiB,EAAsB,MAAM,YAAY,CAAC;AAGpR,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,uBAAuB,GAAG,2BAA2B,CA6CnG;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,GAAG,MAAM,CAQ3F;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,GAAG,uBAAuB,CAU7F;AAED,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,YAAY,EACrB,mBAAmB,GAAE,SAAS,uBAAuB,EAAO,GAC1D,6BAA6B,CAwB/B;AAED,wBAAgB,2BAA2B,CAC1C,QAAQ,EAAE,SAAS,uBAAuB,EAAE,EAC5C,KAAK,EAAE,iBAAiB,GACtB,uBAAuB,EAAE,CAE3B;AAED,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,SAAS,uBAAuB,EAAE,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAOhI"}