@zihanw/pi-forge 0.4.0-beta.1 → 0.4.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 (227) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/PUBLIC_API.md +3 -26
  3. package/README.md +90 -601
  4. package/README.zh-CN.md +86 -585
  5. package/SUBAGENT_ADAPTER_CONTRACT.md +3 -197
  6. package/dist/agent-profile.d.ts +24 -1
  7. package/dist/agent-profile.d.ts.map +1 -1
  8. package/dist/agent-profile.js +146 -36
  9. package/dist/agent-profile.js.map +1 -1
  10. package/dist/catalog.d.ts +27 -0
  11. package/dist/catalog.d.ts.map +1 -0
  12. package/dist/catalog.js +59 -0
  13. package/dist/catalog.js.map +1 -0
  14. package/dist/forge-config.d.ts +106 -0
  15. package/dist/forge-config.d.ts.map +1 -1
  16. package/dist/forge-config.js +305 -18
  17. package/dist/forge-config.js.map +1 -1
  18. package/dist/index.d.ts +5 -5
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +55 -8
  21. package/dist/index.js.map +1 -1
  22. package/dist/lifecycle.d.ts +2 -1
  23. package/dist/lifecycle.d.ts.map +1 -1
  24. package/dist/lifecycle.js +7 -4
  25. package/dist/lifecycle.js.map +1 -1
  26. package/dist/loader.d.ts +17 -1
  27. package/dist/loader.d.ts.map +1 -1
  28. package/dist/loader.js +84 -25
  29. package/dist/loader.js.map +1 -1
  30. package/dist/preset-command.d.ts +1 -1
  31. package/dist/preset-command.d.ts.map +1 -1
  32. package/dist/preset-command.js +38 -10
  33. package/dist/preset-command.js.map +1 -1
  34. package/dist/profile-command.d.ts.map +1 -1
  35. package/dist/profile-command.js +46 -21
  36. package/dist/profile-command.js.map +1 -1
  37. package/dist/profile-service.d.ts +6 -3
  38. package/dist/profile-service.d.ts.map +1 -1
  39. package/dist/profile-service.js +55 -13
  40. package/dist/profile-service.js.map +1 -1
  41. package/dist/resource-identity.d.ts +33 -0
  42. package/dist/resource-identity.d.ts.map +1 -0
  43. package/dist/resource-identity.js +56 -0
  44. package/dist/resource-identity.js.map +1 -0
  45. package/dist/runtime/profile-runtime.d.ts.map +1 -1
  46. package/dist/runtime/profile-runtime.js +7 -2
  47. package/dist/runtime/profile-runtime.js.map +1 -1
  48. package/dist/runtime/prompt-stack-runtime.d.ts +1 -1
  49. package/dist/runtime/prompt-stack-runtime.d.ts.map +1 -1
  50. package/dist/runtime/prompt-stack-runtime.js +22 -12
  51. package/dist/runtime/prompt-stack-runtime.js.map +1 -1
  52. package/dist/runtime/subagent-runtime.d.ts +23 -8
  53. package/dist/runtime/subagent-runtime.d.ts.map +1 -1
  54. package/dist/runtime/subagent-runtime.js +296 -67
  55. package/dist/runtime/subagent-runtime.js.map +1 -1
  56. package/dist/storage.d.ts +11 -0
  57. package/dist/storage.d.ts.map +1 -1
  58. package/dist/storage.js +51 -2
  59. package/dist/storage.js.map +1 -1
  60. package/dist/subagent/canonical.d.ts +19 -7
  61. package/dist/subagent/canonical.d.ts.map +1 -1
  62. package/dist/subagent/canonical.js +19 -47
  63. package/dist/subagent/canonical.js.map +1 -1
  64. package/dist/subagent/contract.d.ts +1 -2
  65. package/dist/subagent/contract.d.ts.map +1 -1
  66. package/dist/subagent/contract.js +1 -2
  67. package/dist/subagent/contract.js.map +1 -1
  68. package/dist/subagent/index.d.ts +4 -3
  69. package/dist/subagent/index.d.ts.map +1 -1
  70. package/dist/subagent/index.js +4 -3
  71. package/dist/subagent/index.js.map +1 -1
  72. package/dist/subagent/plan.d.ts +5 -1
  73. package/dist/subagent/plan.d.ts.map +1 -1
  74. package/dist/subagent/plan.js +29 -32
  75. package/dist/subagent/plan.js.map +1 -1
  76. package/dist/subagent/request.d.ts.map +1 -1
  77. package/dist/subagent/request.js +36 -4
  78. package/dist/subagent/request.js.map +1 -1
  79. package/dist/subagent/types.d.ts +66 -178
  80. package/dist/subagent/types.d.ts.map +1 -1
  81. package/dist/subagent/types.js +1 -1
  82. package/dist/subagent/types.js.map +1 -1
  83. package/dist/subagent/validation.d.ts +14 -14
  84. package/dist/subagent/validation.d.ts.map +1 -1
  85. package/dist/subagent/validation.js +52 -238
  86. package/dist/subagent/validation.js.map +1 -1
  87. package/dist/subagent-command.d.ts +2 -1
  88. package/dist/subagent-command.d.ts.map +1 -1
  89. package/dist/subagent-command.js +115 -19
  90. package/dist/subagent-command.js.map +1 -1
  91. package/dist/subagent-host.d.ts.map +1 -1
  92. package/dist/subagent-host.js +43 -16
  93. package/dist/subagent-host.js.map +1 -1
  94. package/dist/subagent-profile-tool.d.ts +25 -2
  95. package/dist/subagent-profile-tool.d.ts.map +1 -1
  96. package/dist/subagent-profile-tool.js +41 -9
  97. package/dist/subagent-profile-tool.js.map +1 -1
  98. package/dist/subagent-tool.d.ts +31 -4
  99. package/dist/subagent-tool.d.ts.map +1 -1
  100. package/dist/subagent-tool.js +311 -137
  101. package/dist/subagent-tool.js.map +1 -1
  102. package/dist/types.d.ts +3 -0
  103. package/dist/types.d.ts.map +1 -1
  104. package/dist/types.js.map +1 -1
  105. package/dist/web-editor/client-script.generated.d.ts +1 -1
  106. package/dist/web-editor/client-script.generated.d.ts.map +1 -1
  107. package/dist/web-editor/client-script.generated.js +1 -1
  108. package/dist/web-editor/client-script.generated.js.map +1 -1
  109. package/dist/web-editor/client-styles.d.ts +2 -0
  110. package/dist/web-editor/client-styles.d.ts.map +1 -0
  111. package/dist/web-editor/client-styles.generated.d.ts +2 -0
  112. package/dist/web-editor/client-styles.generated.d.ts.map +1 -0
  113. package/dist/web-editor/client-styles.generated.js +3 -0
  114. package/dist/web-editor/client-styles.generated.js.map +1 -0
  115. package/dist/web-editor/client-styles.js +2 -0
  116. package/dist/web-editor/client-styles.js.map +1 -0
  117. package/dist/web-editor/page.d.ts +2 -0
  118. package/dist/web-editor/page.d.ts.map +1 -1
  119. package/dist/web-editor/page.js +11 -73
  120. package/dist/web-editor/page.js.map +1 -1
  121. package/dist/web-editor/server.d.ts.map +1 -1
  122. package/dist/web-editor/server.js +176 -1
  123. package/dist/web-editor/server.js.map +1 -1
  124. package/dist/web-editor/styles.d.ts.map +1 -1
  125. package/dist/web-editor/styles.js +60 -3
  126. package/dist/web-editor/styles.js.map +1 -1
  127. package/dist/web-editor/types.d.ts +87 -0
  128. package/dist/web-editor/types.d.ts.map +1 -1
  129. package/dist/web-host.d.ts +13 -2
  130. package/dist/web-host.d.ts.map +1 -1
  131. package/dist/web-host.js +371 -27
  132. package/dist/web-host.js.map +1 -1
  133. package/docs/README.md +41 -0
  134. package/docs/concepts/agent-profiles.md +60 -0
  135. package/docs/concepts/prompt-stacks.md +95 -0
  136. package/docs/design/README.md +17 -0
  137. package/docs/design/roadmap-0.4-archive.md +216 -0
  138. package/docs/design/subagents/design-review.md +220 -0
  139. package/docs/design/subagents/interface-design.md +274 -0
  140. package/docs/design/subagents/sdk-spike-findings.md +117 -0
  141. package/docs/development/complexity-review.md +86 -0
  142. package/docs/development/release.md +31 -0
  143. package/docs/development/roadmap.md +36 -0
  144. package/docs/development/scoped-global-profiles-stacks.md +325 -0
  145. package/docs/development/setup.md +75 -0
  146. package/docs/getting-started.md +95 -0
  147. package/docs/guides/custom-macros-and-slots.md +68 -0
  148. package/docs/guides/debugging.md +39 -0
  149. package/docs/guides/delegation.md +107 -0
  150. package/docs/guides/sillytavern-import.md +47 -0
  151. package/docs/guides/use-cases.md +65 -0
  152. package/docs/guides/web-editor.md +75 -0
  153. package/docs/reference/commands.md +60 -0
  154. package/docs/reference/configuration.md +66 -0
  155. package/docs/reference/features.md +280 -0
  156. package/docs/reference/macros-and-slots.md +82 -0
  157. package/docs/reference/public-api.md +28 -0
  158. package/docs/reference/stack-schema.md +167 -0
  159. package/docs/reference/subagent-adapter.md +204 -0
  160. package/docs/zh-CN/README.md +37 -0
  161. package/docs/zh-CN/concepts/agent-profiles.md +46 -0
  162. package/docs/zh-CN/concepts/prompt-stacks.md +42 -0
  163. package/docs/zh-CN/getting-started.md +81 -0
  164. package/docs/zh-CN/guides/delegation.md +66 -0
  165. package/docs/zh-CN/guides/web-editor.md +45 -0
  166. package/docs/zh-CN/reference/commands.md +60 -0
  167. package/package.json +29 -15
  168. package/dist/subagent/backend-registry.d.ts +0 -75
  169. package/dist/subagent/backend-registry.d.ts.map +0 -1
  170. package/dist/subagent/backend-registry.js +0 -463
  171. package/dist/subagent/backend-registry.js.map +0 -1
  172. package/dist/subagent/diagnostics.d.ts +0 -3
  173. package/dist/subagent/diagnostics.d.ts.map +0 -1
  174. package/dist/subagent/diagnostics.js +0 -5
  175. package/dist/subagent/diagnostics.js.map +0 -1
  176. package/dist/subagent/pi-model-runtime.d.ts +0 -8
  177. package/dist/subagent/pi-model-runtime.d.ts.map +0 -1
  178. package/dist/subagent/pi-model-runtime.js +0 -22
  179. package/dist/subagent/pi-model-runtime.js.map +0 -1
  180. package/dist/subagent/pi-sdk-backend.d.ts +0 -23
  181. package/dist/subagent/pi-sdk-backend.d.ts.map +0 -1
  182. package/dist/subagent/pi-sdk-backend.js +0 -383
  183. package/dist/subagent/pi-sdk-backend.js.map +0 -1
  184. package/dist/subagent/pi-subprocess-backend.d.ts +0 -72
  185. package/dist/subagent/pi-subprocess-backend.d.ts.map +0 -1
  186. package/dist/subagent/pi-subprocess-backend.js +0 -756
  187. package/dist/subagent/pi-subprocess-backend.js.map +0 -1
  188. package/dist/subagent/subprocess-bridge.d.ts +0 -21
  189. package/dist/subagent/subprocess-bridge.d.ts.map +0 -1
  190. package/dist/subagent/subprocess-bridge.js +0 -87
  191. package/dist/subagent/subprocess-bridge.js.map +0 -1
  192. package/dist/subagent/subprocess-report.d.ts +0 -4
  193. package/dist/subagent/subprocess-report.d.ts.map +0 -1
  194. package/dist/subagent/subprocess-report.js +0 -55
  195. package/dist/subagent/subprocess-report.js.map +0 -1
  196. package/dist/subagent-contract.d.ts +0 -8
  197. package/dist/subagent-contract.d.ts.map +0 -1
  198. package/dist/subagent-contract.js +0 -8
  199. package/dist/subagent-contract.js.map +0 -1
  200. package/dist/web-editor/client/api.d.ts +0 -9
  201. package/dist/web-editor/client/api.d.ts.map +0 -1
  202. package/dist/web-editor/client/api.js +0 -26
  203. package/dist/web-editor/client/api.js.map +0 -1
  204. package/dist/web-editor/client/dom.d.ts +0 -13
  205. package/dist/web-editor/client/dom.d.ts.map +0 -1
  206. package/dist/web-editor/client/dom.js +0 -30
  207. package/dist/web-editor/client/dom.js.map +0 -1
  208. package/dist/web-editor/client/inspector.d.ts +0 -22
  209. package/dist/web-editor/client/inspector.d.ts.map +0 -1
  210. package/dist/web-editor/client/inspector.js +0 -226
  211. package/dist/web-editor/client/inspector.js.map +0 -1
  212. package/dist/web-editor/client/main.d.ts +0 -2
  213. package/dist/web-editor/client/main.d.ts.map +0 -1
  214. package/dist/web-editor/client/main.js +0 -1468
  215. package/dist/web-editor/client/main.js.map +0 -1
  216. package/dist/web-editor/client/policy-editor.d.ts +0 -16
  217. package/dist/web-editor/client/policy-editor.d.ts.map +0 -1
  218. package/dist/web-editor/client/policy-editor.js +0 -330
  219. package/dist/web-editor/client/policy-editor.js.map +0 -1
  220. package/dist/web-editor/client/regex-editor.d.ts +0 -19
  221. package/dist/web-editor/client/regex-editor.d.ts.map +0 -1
  222. package/dist/web-editor/client/regex-editor.js +0 -281
  223. package/dist/web-editor/client/regex-editor.js.map +0 -1
  224. package/dist/web-editor/client/types.d.ts +0 -60
  225. package/dist/web-editor/client/types.d.ts.map +0 -1
  226. package/dist/web-editor/client/types.js +0 -2
  227. package/dist/web-editor/client/types.js.map +0 -1
@@ -1,53 +1,96 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { SUBAGENT_CONTRACT_VERSION, createAgentExecutionPlan, hasSubagentErrors, } from "../subagent/contract.js";
2
+ import { createExecutionRuntime, error, } from "@zihanw/pi-subagent-runtime";
3
+ import { PI_READ_ONLY_TOOL_CATALOG, PiSubprocessBackend, } from "@zihanw/pi-subagent-runtime/backends/subprocess";
4
+ import { PiRpcBackend, } from "@zihanw/pi-subagent-runtime/backends/rpc";
5
+ import { resolveResourceSelector } from "../catalog.js";
6
+ import { formatResourceKey, parseResourceSelector } from "../resource-identity.js";
7
+ import { MAX_SUBAGENT_TIMEOUT_MS, MIN_SUBAGENT_TIMEOUT_MS, isValidSubagentTimeoutMs, loadForgeSubagentSettings, resolveSubagentProfilePolicy, } from "../forge-config.js";
8
+ import { SUBAGENT_CONTRACT_VERSION, createAgentExecutionPlan, hasSubagentErrors, negotiateSubagentTools, } from "../subagent/contract.js";
3
9
  import { prepareSubagentHostPlan, resolveSubagentHostProfile } from "../subagent-host.js";
4
- import { SubagentBackendRegistry } from "../subagent/backend-registry.js";
5
- import { PiSubprocessBackend } from "../subagent/pi-subprocess-backend.js";
6
- export function createForgeSubagentRuntime(state) {
7
- let modelRegistry;
8
- let cwd;
9
- let registry;
10
- let backend;
10
+ export function createForgeSubagentRuntime(state, options = {}) {
11
+ let generation;
12
+ const prepared = new Map();
13
+ const reports = new Map();
14
+ // Backend IDs are fixed at construction; keep them available without an
15
+ // extension context for command completions and settings validation.
16
+ const backendIds = ["pi-subprocess-readonly", "pi-rpc-readonly"];
11
17
  function ensure(ctx) {
12
- if (registry && backend && modelRegistry === ctx.modelRegistry && cwd === ctx.cwd)
13
- return { registry, backend };
14
- if (backend)
15
- void backend.dispose();
16
- modelRegistry = ctx.modelRegistry;
17
- cwd = ctx.cwd;
18
- registry = new SubagentBackendRegistry();
19
- backend = new PiSubprocessBackend({ modelRegistry, cwd });
20
- registry.register(backend);
21
- return { registry, backend };
18
+ if (generation && generation.modelRegistry === ctx.modelRegistry && generation.cwd === ctx.cwd)
19
+ return generation;
20
+ if (generation) {
21
+ void generation.runtime.dispose();
22
+ for (const backend of generation.backends.values())
23
+ void backend.dispose();
24
+ }
25
+ const runtime = createExecutionRuntime();
26
+ const subprocess = new PiSubprocessBackend({
27
+ modelRegistry: ctx.modelRegistry,
28
+ cwd: ctx.cwd,
29
+ ...options.subprocess,
30
+ });
31
+ const rpc = new PiRpcBackend({
32
+ modelRegistry: ctx.modelRegistry,
33
+ cwd: ctx.cwd,
34
+ ...options.rpc,
35
+ });
36
+ const backends = new Map([
37
+ [subprocess.descriptor.id, subprocess],
38
+ [rpc.descriptor.id, rpc],
39
+ ]);
40
+ for (const backend of backends.values())
41
+ runtime.registerBackend(backend);
42
+ generation = { runtime, backends, modelRegistry: ctx.modelRegistry, cwd: ctx.cwd };
43
+ return generation;
22
44
  }
23
45
  function descriptors(ctx) {
24
- return ensure(ctx).registry.descriptors();
46
+ return ensure(ctx).runtime.listBackends().map(descriptorForHost);
25
47
  }
26
- async function prepare(profileId, task, ctx) {
48
+ async function prepare(profileId, task, ctx, run) {
27
49
  const diagnostics = [];
28
50
  if (!ctx.isProjectTrusted())
29
51
  return { ok: false, diagnostics: [error("host.trust", "Project is not trusted; subagent profiles remain disabled.")] };
30
- const matches = state.profiles.filter((candidate) => candidate.profile.id === profileId);
31
- if (matches.length !== 1) {
32
- return { ok: false, diagnostics: [error(matches.length === 0 ? "host.profile-missing" : "host.profile-ambiguous", matches.length === 0 ? `Unknown agent profile: ${profileId}` : `Agent profile id is ambiguous: ${profileId}`)] };
52
+ const parsedSelector = parseResourceSelector(profileId);
53
+ if (!parsedSelector.ok) {
54
+ return { ok: false, diagnostics: [error("host.profile-missing", `Unknown agent profile: ${profileId}`)] };
55
+ }
56
+ const loadedProfile = resolveResourceSelector(state.profiles, parsedSelector.selector);
57
+ if (!loadedProfile) {
58
+ return { ok: false, diagnostics: [error("host.profile-missing", `Unknown agent profile: ${profileId}`)] };
33
59
  }
34
- const resolution = resolveSubagentHostProfile(matches[0], { promptStacks: state.stacks });
60
+ const canonicalProfileId = formatResourceKey(loadedProfile.key);
61
+ const policy = resolveSubagentProfilePolicy(loadForgeSubagentSettings(ctx), canonicalProfileId);
62
+ if (!policy.enabled) {
63
+ return {
64
+ ok: false,
65
+ diagnostics: [error("host.profile-disabled", `Agent profile "${profileId}" is not enabled for subagent delegation in subagents.profiles.`)],
66
+ };
67
+ }
68
+ const timeoutMs = run?.timeoutMs ?? policy.timeout.milliseconds;
69
+ if (!isValidSubagentTimeoutMs(timeoutMs)) {
70
+ return {
71
+ ok: false,
72
+ diagnostics: [error("host.timeout", `Subagent timeout must be an integer from ${MIN_SUBAGENT_TIMEOUT_MS} to ${MAX_SUBAGENT_TIMEOUT_MS} milliseconds.`)],
73
+ };
74
+ }
75
+ const resolution = resolveSubagentHostProfile(loadedProfile, { promptStacks: state.stacks });
35
76
  diagnostics.push(...resolution.diagnostics);
36
77
  if (!resolution.snapshot || hasSubagentErrors(diagnostics))
37
78
  return { ok: false, diagnostics };
79
+ const snapshot = resolution.snapshot;
38
80
  const request = {
39
81
  schemaVersion: SUBAGENT_CONTRACT_VERSION,
40
82
  requestId: `request:${randomUUID()}`,
41
- profileId,
42
- expectedProfileFingerprint: resolution.snapshot.profileFingerprint,
83
+ profileId: canonicalProfileId,
84
+ expectedProfileFingerprint: snapshot.profileFingerprint,
43
85
  input: { text: task },
44
86
  access: {
45
87
  level: "read-only",
46
88
  workspaces: [{ handle: "project", mode: "read-only" }],
47
89
  workingDirectory: { workspaceHandle: "project", path: "." },
48
90
  network: "allow",
91
+ executionBoundary: "shared-user",
49
92
  },
50
- limits: { timeoutMs: { value: 60_000, enforcement: "best-effort" } },
93
+ limits: { timeoutMs: { value: timeoutMs, enforcement: "best-effort" } },
51
94
  resultProjection: { maxChars: 12_000 },
52
95
  parent: { sessionId: ctx.sessionManager.getSessionId(), depth: 0, maxDepth: 1 },
53
96
  // The command layer obtains explicit user consent before execution. A dry plan
@@ -55,60 +98,246 @@ export function createForgeSubagentRuntime(state) {
55
98
  remoteEgressConsent: true,
56
99
  };
57
100
  const current = ensure(ctx);
58
- const preflight = await current.registry.preflight(current.backend.descriptor.id, request, resolution.snapshot, ctx.signal);
59
- diagnostics.push(...preflight.diagnostics);
60
- if (preflight.status === "rejected")
61
- return { ok: false, diagnostics };
101
+ const backendId = run?.backendId ?? options.backendId ?? policy.backend.id;
102
+ const backend = current.backends.get(backendId);
103
+ if (!backend)
104
+ return { ok: false, diagnostics: [error("host.backend", `Backend is not registered: ${backendId}`)] };
105
+ const intent = executionIntentFor(request, snapshot);
106
+ let hostPreparation;
107
+ let handle;
62
108
  try {
63
- const prepared = await current.registry.prepare(current.backend.descriptor.id, { request, snapshot: resolution.snapshot, preflight }, prepareSubagentHostPlan, ctx.signal);
64
- diagnostics.push(...prepared.preparation.diagnostics, ...prepared.preparation.toolNegotiation.diagnostics);
65
- const planned = createAgentExecutionPlan({
66
- runId: `run:${randomUUID()}`,
67
- request,
68
- snapshot: resolution.snapshot,
69
- preflight,
70
- preparation: prepared.preparation,
71
- runtime: prepared.runtime,
109
+ handle = await current.runtime.prepare({
110
+ backendId,
111
+ intent,
112
+ ...(ctx.signal ? { signal: ctx.signal } : {}),
113
+ compile: async (promptRuntime, acceptedPreflight) => {
114
+ const output = prepareSubagentHostPlan({
115
+ request,
116
+ snapshot,
117
+ preflight: preflightForHost(acceptedPreflight),
118
+ runtime: promptRuntime,
119
+ });
120
+ hostPreparation = output;
121
+ return {
122
+ systemPrompt: output.systemPrompt,
123
+ messages: output.messages.map(portableMessage),
124
+ };
125
+ },
72
126
  });
73
- diagnostics.push(...planned.diagnostics);
74
- if (!planned.plan || hasSubagentErrors(diagnostics)) {
75
- await current.registry.discard(preflight.preflightId);
76
- return { ok: false, diagnostics };
77
- }
78
- return { ok: true, prepared: { request, preflight, plan: planned.plan, diagnostics } };
79
127
  }
80
- catch (preparationError) {
81
- await current.registry.discard(preflight.preflightId);
82
- diagnostics.push(error("host.preparation", preparationError instanceof Error ? preparationError.message : String(preparationError)));
128
+ catch (prepareError) {
129
+ diagnostics.push(error("host.preparation", prepareError instanceof Error ? prepareError.message : String(prepareError)));
83
130
  return { ok: false, diagnostics };
84
131
  }
132
+ const sealed = handle.snapshot();
133
+ diagnostics.push(...sealed.preflight.diagnostics);
134
+ if (!hostPreparation) {
135
+ await handle.discard();
136
+ diagnostics.push(error("host.preparation", "Host compilation did not complete."));
137
+ return { ok: false, diagnostics };
138
+ }
139
+ diagnostics.push(...hostPreparation.diagnostics, ...hostPreparation.toolNegotiation.diagnostics);
140
+ const planned = createAgentExecutionPlan({
141
+ runId: handle.id,
142
+ request,
143
+ snapshot,
144
+ preflight: preflightForHost(sealed.preflight),
145
+ preparation: hostPreparation,
146
+ runtime: sealed.promptRuntime,
147
+ conversationFingerprint: sealed.conversationFingerprint,
148
+ executionFingerprint: sealed.executionFingerprint,
149
+ });
150
+ diagnostics.push(...planned.diagnostics);
151
+ if (!planned.plan || hasSubagentErrors(diagnostics)) {
152
+ await handle.discard();
153
+ return { ok: false, diagnostics };
154
+ }
155
+ // The runtime owns the conversation and execution fingerprints; the plan
156
+ // constructed above carries the sealed values that approval displays and
157
+ // execution binds to. The host never recomputes them.
158
+ prepared.set(handle.id, { generation: current, handle, backend });
159
+ return { ok: true, prepared: { request, preflight: planned.plan.preflight, plan: planned.plan, diagnostics } };
85
160
  }
86
- async function discard(prepared) {
87
- if (!registry)
161
+ async function discard(preparedRun) {
162
+ const record = prepared.get(preparedRun.plan.runId);
163
+ if (!record)
88
164
  return;
89
- await registry.discard(prepared.preflight.preflightId);
165
+ prepared.delete(preparedRun.plan.runId);
166
+ await record.handle.discard();
90
167
  }
91
- async function execute(prepared, ctx, signal, onUpdate) {
168
+ async function execute(preparedRun, ctx, signal, onUpdate) {
169
+ const record = prepared.get(preparedRun.plan.runId);
170
+ if (!record)
171
+ throw new Error("Subagent prepared run is unknown to this runtime generation.");
92
172
  const current = ensure(ctx);
93
- return current.registry.execute(prepared.plan, {
94
- authorizationScope: `session.${ctx.sessionManager.getSessionId().replace(/[^A-Za-z0-9._-]/g, "-")}`,
95
- signal,
96
- onUpdate,
97
- });
173
+ if (record.generation !== current)
174
+ throw new Error("Subagent prepared run belongs to a previous runtime generation.");
175
+ prepared.delete(preparedRun.plan.runId);
176
+ const run = current.runtime.execute(record.handle);
177
+ reports.set(run.id, { backend: record.backend, preparedRunId: record.handle.id });
178
+ if (onUpdate) {
179
+ run.subscribe((event) => {
180
+ onUpdate({
181
+ phase: event.phase,
182
+ message: event.message,
183
+ ...(event.details === undefined ? {} : { details: event.details }),
184
+ });
185
+ });
186
+ }
187
+ let cancelOnAbort;
188
+ if (signal) {
189
+ cancelOnAbort = () => { void run.cancel(cancelReason(signal)); };
190
+ if (signal.aborted)
191
+ cancelOnAbort();
192
+ else
193
+ signal.addEventListener("abort", cancelOnAbort, { once: true });
194
+ }
195
+ try {
196
+ const result = await run.result;
197
+ return responseForHost(preparedRun, result);
198
+ }
199
+ finally {
200
+ if (signal && cancelOnAbort) {
201
+ signal.removeEventListener("abort", cancelOnAbort);
202
+ }
203
+ }
98
204
  }
99
205
  function takeReport(runId) {
100
- return backend?.takeReport(runId);
206
+ const location = reports.get(runId);
207
+ if (!location)
208
+ return undefined;
209
+ reports.delete(runId);
210
+ // Both process backends sanitize retained reports at the source.
211
+ return location.backend.takeReport(location.preparedRunId);
101
212
  }
102
213
  async function dispose() {
103
- await backend?.dispose();
104
- backend = undefined;
105
- registry = undefined;
106
- modelRegistry = undefined;
107
- cwd = undefined;
214
+ prepared.clear();
215
+ reports.clear();
216
+ if (!generation)
217
+ return;
218
+ await generation.runtime.dispose();
219
+ await Promise.all([...generation.backends.values()].map((backend) => backend.dispose()));
220
+ generation = undefined;
221
+ }
222
+ return { backendIds: () => [...backendIds], descriptors, prepare, discard, execute, takeReport, dispose };
223
+ }
224
+ function executionIntentFor(request, snapshot) {
225
+ const negotiation = negotiateSubagentTools(forgeToolCatalog(), snapshot.promptStack?.tools, request.access);
226
+ return {
227
+ model: structuredClone(snapshot.profile.model),
228
+ thinkingLevel: snapshot.profile.thinkingLevel,
229
+ requestedTools: negotiation.effectiveToolNames,
230
+ access: {
231
+ level: request.access.level,
232
+ executionBoundary: "shared-user",
233
+ workspaces: structuredClone(request.access.workspaces),
234
+ ...(request.access.workingDirectory ? { workingDirectory: structuredClone(request.access.workingDirectory) } : {}),
235
+ network: request.access.network,
236
+ ...(request.access.allowProcess === undefined ? {} : { allowProcess: request.access.allowProcess }),
237
+ },
238
+ limits: structuredClone(request.limits),
239
+ provenance: {
240
+ profile: snapshot.profileFingerprint,
241
+ profileId: snapshot.profileId,
242
+ ...(snapshot.promptStackFingerprint ? { promptStack: snapshot.promptStackFingerprint } : {}),
243
+ ...(snapshot.promptStackId ? { promptStackId: snapshot.promptStackId } : {}),
244
+ },
245
+ };
246
+ }
247
+ function forgeToolCatalog() {
248
+ return PI_READ_ONLY_TOOL_CATALOG.map((tool) => ({
249
+ ...structuredClone(tool),
250
+ effects: [...tool.effects],
251
+ }));
252
+ }
253
+ function preflightForHost(preflight) {
254
+ return {
255
+ status: "accepted",
256
+ preflightId: preflight.preflightId,
257
+ backend: descriptorForHost(preflight.backend),
258
+ model: structuredClone(preflight.model),
259
+ thinkingLevel: (preflight.thinkingLevel ?? "medium"),
260
+ toolCatalog: structuredClone(preflight.toolCatalog),
261
+ access: structuredClone(preflight.access),
262
+ limits: structuredClone(preflight.limits),
263
+ ...(preflight.promptRuntime ? { promptRuntime: preflight.promptRuntime } : {}),
264
+ diagnostics: [...preflight.diagnostics].map((diagnostic) => ({ ...diagnostic })),
265
+ };
266
+ }
267
+ function descriptorForHost(descriptor) {
268
+ return {
269
+ id: descriptor.id,
270
+ version: descriptor.version,
271
+ capabilities: {
272
+ access: structuredClone(descriptor.capabilities.access),
273
+ executionBoundaries: [...descriptor.capabilities.executionBoundaries],
274
+ limits: structuredClone(descriptor.capabilities.limits),
275
+ cancellation: descriptor.capabilities.cancellation,
276
+ mediaMimeTypes: [...descriptor.capabilities.mediaMimeTypes],
277
+ traceInspection: false,
278
+ artifactRetention: false,
279
+ remoteTransport: descriptor.capabilities.remoteTransport,
280
+ promptRuntimeFidelity: descriptor.capabilities.promptRuntimeFidelity,
281
+ },
282
+ };
283
+ }
284
+ function portableMessage(message) {
285
+ return { role: message.role, content: structuredClone(message.content) };
286
+ }
287
+ function responseForHost(prepared, result) {
288
+ const common = {
289
+ schemaVersion: SUBAGENT_CONTRACT_VERSION,
290
+ requestId: prepared.request.requestId,
291
+ runId: result.runId,
292
+ backendId: result.backendId,
293
+ profileFingerprint: prepared.plan.profile.profileFingerprint,
294
+ executionFingerprint: result.executionFingerprint,
295
+ model: structuredClone(result.model),
296
+ effectiveToolIds: [...result.effectiveToolIds],
297
+ enforcement: {
298
+ access: structuredClone(result.enforcement.access),
299
+ limits: structuredClone(result.enforcement.limits),
300
+ },
301
+ durationMs: result.durationMs,
302
+ artifacts: [],
303
+ ...(result.usage ? { usage: structuredClone(result.usage) } : {}),
304
+ };
305
+ const partialOutput = result.output ? { text: result.output.text, partial: true } : undefined;
306
+ switch (result.status) {
307
+ case "completed":
308
+ return { ...common, status: "completed", output: { text: result.output.text, partial: false } };
309
+ case "failed":
310
+ return {
311
+ ...common,
312
+ status: "failed",
313
+ error: structuredClone(result.error),
314
+ ...(partialOutput ? { output: partialOutput } : {}),
315
+ };
316
+ case "cancelled":
317
+ return {
318
+ ...common,
319
+ status: "cancelled",
320
+ reason: result.reason,
321
+ ...(partialOutput ? { output: partialOutput } : {}),
322
+ };
323
+ case "timed-out":
324
+ return {
325
+ ...common,
326
+ status: "timed-out",
327
+ reason: result.reason,
328
+ enforcedTimeoutMs: result.enforcedTimeoutMs,
329
+ ...(partialOutput ? { output: partialOutput } : {}),
330
+ };
331
+ case "limit-reached":
332
+ return {
333
+ ...common,
334
+ status: "limit-reached",
335
+ reachedLimit: result.reachedLimit,
336
+ ...(partialOutput ? { output: partialOutput } : {}),
337
+ };
108
338
  }
109
- return { descriptors, prepare, discard, execute, takeReport, dispose };
110
339
  }
111
- function error(code, message) {
112
- return { level: "error", code, message };
340
+ function cancelReason(signal) {
341
+ return typeof signal.reason === "string" && signal.reason ? signal.reason : "Subagent execution cancelled.";
113
342
  }
114
343
  //# sourceMappingURL=subagent-runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-runtime.js","sourceRoot":"","sources":["../../src/runtime/subagent-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EACN,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAOjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAuC,MAAM,iCAAiC,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAA8B,MAAM,sCAAsC,CAAC;AAsBvG,MAAM,UAAU,0BAA0B,CAAC,KAA0B;IACpE,IAAI,aAAwC,CAAC;IAC7C,IAAI,GAAuB,CAAC;IAC5B,IAAI,QAA6C,CAAC;IAClD,IAAI,OAAwC,CAAC;IAE7C,SAAS,MAAM,CAAC,GAAqB;QACpC,IAAI,QAAQ,IAAI,OAAO,IAAI,aAAa,KAAK,GAAG,CAAC,aAAa,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG;YAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAChH,IAAI,OAAO;YAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;QAClC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACd,QAAQ,GAAG,IAAI,uBAAuB,EAAE,CAAC;QACzC,OAAO,GAAG,IAAI,mBAAmB,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,SAAS,WAAW,CAAC,GAAqB;QACzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,SAAiB,EAAE,IAAY,EAAE,GAAqB;QAC5E,MAAM,WAAW,GAAyB,EAAE,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,4DAA4D,CAAC,CAAC,EAAE,CAAC;QACpJ,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACzF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,wBAAwB,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC,CAAC,kCAAkC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC;QACpO,CAAC;QACD,MAAM,UAAU,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3F,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,iBAAiB,CAAC,WAAW,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAE9F,MAAM,OAAO,GAAiB;YAC7B,aAAa,EAAE,yBAAyB;YACxC,SAAS,EAAE,WAAW,UAAU,EAAE,EAAE;YACpC,SAAS;YACT,0BAA0B,EAAE,UAAU,CAAC,QAAQ,CAAC,kBAAkB;YAClE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YACrB,MAAM,EAAE;gBACP,KAAK,EAAE,WAAW;gBAClB,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;gBACtD,gBAAgB,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;gBAC3D,OAAO,EAAE,OAAO;aAChB;YACD,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE;YACpE,gBAAgB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;YACtC,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC/E,+EAA+E;YAC/E,iFAAiF;YACjF,mBAAmB,EAAE,IAAI;SACzB,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5H,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,SAAS,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAEvE,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAC9C,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAC7B,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,EACrD,uBAAuB,EACvB,GAAG,CAAC,MAAM,CACV,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YAC3G,MAAM,OAAO,GAAG,wBAAwB,CAAC;gBACxC,KAAK,EAAE,OAAO,UAAU,EAAE,EAAE;gBAC5B,OAAO;gBACP,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,SAAS;gBACT,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;aACzB,CAAC,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrD,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBACtD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YACnC,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;QACxF,CAAC;QAAC,OAAO,gBAAgB,EAAE,CAAC;YAC3B,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACtD,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,gBAAgB,YAAY,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACrI,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QACnC,CAAC;IACF,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,QAAkC;QACxD,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,QAAkC,EAAE,GAAqB,EAAE,MAAoB,EAAE,QAA2D;QAClK,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC9C,kBAAkB,EAAE,WAAW,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE;YACnG,MAAM;YACN,QAAQ;SACR,CAAC,CAAC;IACJ,CAAC;IAED,SAAS,UAAU,CAAC,KAAa;QAChC,OAAO,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,UAAU,OAAO;QACrB,MAAM,OAAO,EAAE,OAAO,EAAE,CAAC;QACzB,OAAO,GAAG,SAAS,CAAC;QACpB,QAAQ,GAAG,SAAS,CAAC;QACrB,aAAa,GAAG,SAAS,CAAC;QAC1B,GAAG,GAAG,SAAS,CAAC;IACjB,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,KAAK,CAAC,IAAY,EAAE,OAAe;IAC3C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"subagent-runtime.js","sourceRoot":"","sources":["../../src/runtime/subagent-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACN,sBAAsB,EACtB,KAAK,GAOL,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,yBAAyB,EACzB,mBAAmB,GAGnB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EACN,YAAY,GAEZ,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EACN,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,GAStB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAwD1F,MAAM,UAAU,0BAA0B,CACzC,KAA0B,EAC1B,UAAuC,EAAE;IAEzC,IAAI,UAAyC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoE,CAAC;IAC5F,wEAAwE;IACxE,qEAAqE;IACrE,MAAM,UAAU,GAAG,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAAC;IAEjE,SAAS,MAAM,CAAC,GAAqB;QACpC,IAAI,UAAU,IAAI,UAAU,CAAC,aAAa,KAAK,GAAG,CAAC,aAAa,IAAI,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG;YAAE,OAAO,UAAU,CAAC;QAClH,IAAI,UAAU,EAAE,CAAC;YAChB,KAAK,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAClC,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5E,CAAC;QACD,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,IAAI,mBAAmB,CAAC;YAC1C,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,OAAO,CAAC,UAAU;SACrB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC;YAC5B,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,OAAO,CAAC,GAAG;SACd,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAA+B;YACtD,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC;YACtC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC;SACxB,CAAC,CAAC;QACH,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;YAAE,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC1E,UAAU,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QACnF,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,SAAS,WAAW,CAAC,GAAqB;QACzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,SAAiB,EAAE,IAAY,EAAE,GAAqB,EAAE,GAAgD;QAC9H,MAAM,WAAW,GAAyB,EAAE,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,4DAA4D,CAAC,CAAC,EAAE,CAAC;QACpJ,MAAM,cAAc,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;YACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,0BAA0B,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC;QAC3G,CAAC;QACD,MAAM,aAAa,GAAG,uBAAuB,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvF,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,0BAA0B,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC;QAC3G,CAAC;QACD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,4BAA4B,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAChG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,WAAW,EAAE,CAAC,KAAK,CAAC,uBAAuB,EAAE,kBAAkB,SAAS,iEAAiE,CAAC,CAAC;aAC3I,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;QAChE,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,WAAW,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,4CAA4C,uBAAuB,OAAO,uBAAuB,gBAAgB,CAAC,CAAC;aACvJ,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAAG,0BAA0B,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7F,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,iBAAiB,CAAC,WAAW,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAC9F,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QAErC,MAAM,OAAO,GAAiB;YAC7B,aAAa,EAAE,yBAAyB;YACxC,SAAS,EAAE,WAAW,UAAU,EAAE,EAAE;YACpC,SAAS,EAAE,kBAAkB;YAC7B,0BAA0B,EAAE,QAAQ,CAAC,kBAAkB;YACvD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YACrB,MAAM,EAAE;gBACP,KAAK,EAAE,WAAW;gBAClB,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;gBACtD,gBAAgB,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;gBAC3D,OAAO,EAAE,OAAO;gBAChB,iBAAiB,EAAE,aAAa;aAChC;YACD,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE;YACvE,gBAAgB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;YACtC,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC/E,+EAA+E;YAC/E,iFAAiF;YACjF,mBAAmB,EAAE,IAAI;SACzB,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,8BAA8B,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC;QACpH,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAErD,IAAI,eAAsD,CAAC;QAC3D,IAAI,MAAmB,CAAC;QACxB,IAAI,CAAC;YACJ,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBACtC,SAAS;gBACT,MAAM;gBACN,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,EAAE;oBACnD,MAAM,MAAM,GAAG,uBAAuB,CAAC;wBACtC,OAAO;wBACP,QAAQ;wBACR,SAAS,EAAE,gBAAgB,CAAC,iBAAiB,CAAC;wBAC9C,OAAO,EAAE,aAAa;qBACtB,CAAC,CAAC;oBACH,eAAe,GAAG,MAAM,CAAC;oBACzB,OAAO;wBACN,YAAY,EAAE,MAAM,CAAC,YAAY;wBACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC;qBAC9C,CAAC;gBACH,CAAC;aACD,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,YAAY,EAAE,CAAC;YACvB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,YAAY,YAAY,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACzH,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACjC,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,CAAC,eAAe,EAAE,CAAC;YACtB,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,oCAAoC,CAAC,CAAC,CAAC;YAClF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QACnC,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,WAAW,EAAE,GAAG,eAAe,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG,wBAAwB,CAAC;YACxC,KAAK,EAAE,MAAM,CAAC,EAAE;YAChB,OAAO;YACP,QAAQ;YACR,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;YAC7C,WAAW,EAAE,eAAe;YAC5B,OAAO,EAAE,MAAM,CAAC,aAAa;YAC7B,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;YACvD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;SACjD,CAAC,CAAC;QACH,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;YACrD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QACnC,CAAC;QACD,yEAAyE;QACzE,yEAAyE;QACzE,sDAAsD;QACtD,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAClE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;IAChH,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,WAAqC;QAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,WAAqC,EAAE,GAAqB,EAAE,MAAoB,EAAE,QAA2D;QACrK,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC7F,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACtH,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAClF,IAAI,QAAQ,EAAE,CAAC;YACd,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBACvB,QAAQ,CAAC;oBACR,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;iBAClE,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,aAAuC,CAAC;QAC5C,IAAI,MAAM,EAAE,CAAC;YACZ,aAAa,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,MAAM,CAAC,OAAO;gBAAE,aAAa,EAAE,CAAC;;gBAC/B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;YAChC,OAAO,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;gBAAS,CAAC;YACV,IAAI,MAAM,IAAI,aAAa,EAAE,CAAC;gBAC7B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YACpD,CAAC;QACF,CAAC;IACF,CAAC;IAED,SAAS,UAAU,CAAC,KAAa;QAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtB,iEAAiE;QACjE,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,UAAU,OAAO;QACrB,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzF,UAAU,GAAG,SAAS,CAAC;IACxB,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAC3G,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAqB,EAAE,QAAgE;IAClH,MAAM,WAAW,GAAG,sBAAsB,CACzC,gBAAgB,EAAE,EAClB,QAAQ,CAAC,WAAW,EAAE,KAAK,EAC3B,OAAO,CAAC,MAAM,CACd,CAAC;IACF,OAAO;QACN,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAC9C,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,aAAa;QAC7C,cAAc,EAAE,WAAW,CAAC,kBAAkB;QAC9C,MAAM,EAAE;YACP,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;YAC3B,iBAAiB,EAAE,aAAa;YAChC,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;YACtD,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClH,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;YAC/B,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;SACnG;QACD,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;QACvC,UAAU,EAAE;YACX,OAAO,EAAE,QAAQ,CAAC,kBAAkB;YACpC,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5E;KACD,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACxB,OAAO,yBAAyB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/C,GAAG,eAAe,CAAC,IAAI,CAAC;QACxB,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;KAC1B,CAAC,CAA4C,CAAC;AAChD,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAyE;IAClG,OAAO;QACN,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC;QAC7C,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC;QACvC,aAAa,EAAE,CAAC,SAAS,CAAC,aAAa,IAAI,QAAQ,CAA8C;QACjG,WAAW,EAAE,eAAe,CAAC,SAAS,CAAC,WAAW,CAA4C;QAC9F,MAAM,EAAE,eAAe,CAAC,SAAS,CAAC,MAAM,CAAuC;QAC/E,MAAM,EAAE,eAAe,CAAC,SAAS,CAAC,MAAM,CAAuC;QAC/E,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,WAAW,EAAE,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;KAChF,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAmE;IAC7F,OAAO;QACN,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,YAAY,EAAE;YACb,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC;YACvD,mBAAmB,EAAE,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,mBAAmB,CAAC;YACrE,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAwD;YAC9G,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,YAAY;YAClD,cAAc,EAAE,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,cAAc,CAAC;YAC3D,eAAe,EAAE,KAAK;YACtB,iBAAiB,EAAE,KAAK;YACxB,eAAe,EAAE,UAAU,CAAC,YAAY,CAAC,eAAe;YACxD,qBAAqB,EAAE,UAAU,CAAC,YAAY,CAAC,qBAAqB;SACpE;KACD,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,OAAgC;IACxD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,QAAkC,EAAE,MAAiB;IAC7E,MAAM,MAAM,GAAG;QACd,aAAa,EAAE,yBAAyB;QACxC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS;QACrC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB;QAC5D,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;QACjD,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC,gBAAgB,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAC9C,WAAW,EAAE;YACZ,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAA2C;YAC5F,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAA2C;SAC5F;QACD,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,EAAE;QACb,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,WAAW;YACf,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;QACjG,KAAK,QAAQ;YACZ,OAAO;gBACN,GAAG,MAAM;gBACT,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC;gBACpC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnD,CAAC;QACH,KAAK,WAAW;YACf,OAAO;gBACN,GAAG,MAAM;gBACT,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnD,CAAC;QACH,KAAK,WAAW;YACf,OAAO;gBACN,GAAG,MAAM;gBACT,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnD,CAAC;QACH,KAAK,eAAe;YACnB,OAAO;gBACN,GAAG,MAAM;gBACT,MAAM,EAAE,eAAe;gBACvB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnD,CAAC;IACJ,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,MAAmB;IACxC,OAAO,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,+BAA+B,CAAC;AAC7G,CAAC"}
package/dist/storage.d.ts CHANGED
@@ -1,13 +1,24 @@
1
+ /** Development/test override for the user-owned global Forge root. */
2
+ export declare const GLOBAL_FORGE_DIR_ENV = "PI_FORGE_GLOBAL_DIR";
1
3
  export declare function promptStacksDir(cwd: string): string;
2
4
  export declare function agentProfilesDir(cwd: string): string;
3
5
  export declare function agentProfilePath(cwd: string, id: string): string;
4
6
  export declare function isInsideAgentProfileStorage(cwd: string, filePath: string): boolean;
7
+ export declare function isSafeAgentProfileMutationPath(cwd: string, filePath: string): boolean;
5
8
  export declare function forgeDir(cwd: string): string;
6
9
  export declare function forgeExtensionsDir(cwd: string): string;
7
10
  export declare function globalForgeDir(): string;
11
+ export declare function globalPromptStacksDir(): string;
12
+ export declare function globalAgentProfilesDir(): string;
13
+ export declare function globalAgentProfilePath(id: string): string;
8
14
  export declare function globalForgeExtensionsDir(): string;
15
+ export declare function isInsideGlobalAgentProfileStorage(filePath: string): boolean;
16
+ export declare function isSafeGlobalAgentProfileMutationPath(filePath: string): boolean;
9
17
  export declare function legacyPromptStacksDir(cwd: string): string;
10
18
  export declare function promptStackReadDirs(cwd: string): string[];
11
19
  export declare function promptStackPath(cwd: string, id: string): string;
12
20
  export declare function isInsidePromptStackStorage(cwd: string, filePath: string): boolean;
21
+ export declare function isSafePromptStackMutationPath(cwd: string, filePath: string): boolean;
22
+ export declare function isInsideGlobalPromptStackStorage(filePath: string): boolean;
23
+ export declare function isSafeGlobalPromptStackMutationPath(filePath: string): boolean;
13
24
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAElF;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEzD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEjF"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAIA,sEAAsE;AACtE,eAAO,MAAM,oBAAoB,wBAAwB,CAAC;AAE1D,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAElF;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGrF;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED,wBAAgB,oCAAoC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG9E;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEzD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEjF;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGpF;AAED,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED,wBAAgB,mCAAmC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG7E"}
package/dist/storage.js CHANGED
@@ -1,5 +1,8 @@
1
+ import { existsSync, lstatSync } from "node:fs";
1
2
  import { homedir } from "node:os";
2
- import { isAbsolute, join, relative, resolve } from "node:path";
3
+ import { isAbsolute, join, relative, resolve, sep } from "node:path";
4
+ /** Development/test override for the user-owned global Forge root. */
5
+ export const GLOBAL_FORGE_DIR_ENV = "PI_FORGE_GLOBAL_DIR";
3
6
  export function promptStacksDir(cwd) {
4
7
  return join(cwd, ".pi", "forge", "prompt-stacks");
5
8
  }
@@ -12,6 +15,11 @@ export function agentProfilePath(cwd, id) {
12
15
  export function isInsideAgentProfileStorage(cwd, filePath) {
13
16
  return isInsideDir(agentProfilesDir(cwd), filePath);
14
17
  }
18
+ export function isSafeAgentProfileMutationPath(cwd, filePath) {
19
+ if (!isInsideAgentProfileStorage(cwd, filePath))
20
+ return false;
21
+ return pathTraversesNoSymlink(cwd, filePath);
22
+ }
15
23
  export function forgeDir(cwd) {
16
24
  return join(cwd, ".pi", "forge");
17
25
  }
@@ -19,11 +27,28 @@ export function forgeExtensionsDir(cwd) {
19
27
  return join(forgeDir(cwd), "extensions");
20
28
  }
21
29
  export function globalForgeDir() {
22
- return join(homedir(), ".pi", "forge");
30
+ return process.env[GLOBAL_FORGE_DIR_ENV] ?? join(homedir(), ".pi", "forge");
31
+ }
32
+ export function globalPromptStacksDir() {
33
+ return join(globalForgeDir(), "prompt-stacks");
34
+ }
35
+ export function globalAgentProfilesDir() {
36
+ return join(globalForgeDir(), "agent-profiles");
37
+ }
38
+ export function globalAgentProfilePath(id) {
39
+ return join(globalAgentProfilesDir(), `${id}.json`);
23
40
  }
24
41
  export function globalForgeExtensionsDir() {
25
42
  return join(globalForgeDir(), "extensions");
26
43
  }
44
+ export function isInsideGlobalAgentProfileStorage(filePath) {
45
+ return isInsideDir(globalAgentProfilesDir(), filePath);
46
+ }
47
+ export function isSafeGlobalAgentProfileMutationPath(filePath) {
48
+ if (!isInsideGlobalAgentProfileStorage(filePath))
49
+ return false;
50
+ return pathTraversesNoSymlink(globalForgeDir(), filePath);
51
+ }
27
52
  export function legacyPromptStacksDir(cwd) {
28
53
  return join(cwd, ".pi", "prompt-stacks");
29
54
  }
@@ -36,10 +61,34 @@ export function promptStackPath(cwd, id) {
36
61
  export function isInsidePromptStackStorage(cwd, filePath) {
37
62
  return promptStackReadDirs(cwd).some((dir) => isInsideDir(dir, filePath));
38
63
  }
64
+ export function isSafePromptStackMutationPath(cwd, filePath) {
65
+ if (!isInsidePromptStackStorage(cwd, filePath))
66
+ return false;
67
+ return pathTraversesNoSymlink(cwd, filePath);
68
+ }
69
+ export function isInsideGlobalPromptStackStorage(filePath) {
70
+ return isInsideDir(globalPromptStacksDir(), filePath);
71
+ }
72
+ export function isSafeGlobalPromptStackMutationPath(filePath) {
73
+ if (!isInsideGlobalPromptStackStorage(filePath))
74
+ return false;
75
+ return pathTraversesNoSymlink(globalForgeDir(), filePath);
76
+ }
39
77
  function isInsideDir(rootDir, filePath) {
40
78
  const root = resolve(rootDir);
41
79
  const target = resolve(filePath);
42
80
  const rel = relative(root, target);
43
81
  return !!rel && !rel.startsWith("..") && !isAbsolute(rel);
44
82
  }
83
+ function pathTraversesNoSymlink(root, filePath) {
84
+ const resolvedRoot = resolve(root);
85
+ const target = resolve(filePath);
86
+ let current = resolvedRoot;
87
+ for (const segment of relative(resolvedRoot, target).split(sep)) {
88
+ current = join(current, segment);
89
+ if (existsSync(current) && lstatSync(current).isSymbolicLink())
90
+ return false;
91
+ }
92
+ return true;
93
+ }
45
94
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhE,MAAM,UAAU,eAAe,CAAC,GAAW;IAC1C,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC3C,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,EAAU;IACvD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,GAAW,EAAE,QAAgB;IACxE,OAAO,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IACnC,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,wBAAwB;IACvC,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAChD,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC9C,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,EAAU;IACtD,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,GAAW,EAAE,QAAgB;IACvE,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,QAAgB;IACrD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,22 @@
1
1
  import type { AgentProfile } from "../agent-profile.ts";
2
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;
3
+ import { type Fingerprint } from "@zihanw/pi-subagent-runtime";
4
+ /**
5
+ * Canonical serialization and fingerprints are owned by
6
+ * @zihanw/pi-subagent-runtime core. Forge re-exports them under the
7
+ * `Subagent`-prefixed names the 0.4 host contract always used, so callers
8
+ * stay source-compatible while the single portable definition lives in the
9
+ * runtime package. The exposed algorithms are identical, so existing
10
+ * fingerprint values are unchanged.
11
+ *
12
+ * Note: conversation and execution fingerprints are issued only by the
13
+ * runtime during plan sealing; the host never computes them. The helpers
14
+ * below cover host-owned source provenance (profiles and prompt stacks).
15
+ */
16
+ export { canonicalJson as canonicalSubagentJson } from "@zihanw/pi-subagent-runtime";
17
+ export { fingerprint as subagentFingerprint } from "@zihanw/pi-subagent-runtime";
18
+ export { FINGERPRINT_PREFIX as SUBAGENT_FINGERPRINT_PREFIX } from "@zihanw/pi-subagent-runtime";
19
+ export { promptRuntimeFingerprint as subagentPromptRuntimeFingerprint } from "@zihanw/pi-subagent-runtime";
20
+ export declare function subagentSourceProfileFingerprint(profile: AgentProfile): Fingerprint;
21
+ export declare function subagentPromptStackFingerprint(stack: PromptStack): Fingerprint;
10
22
  //# sourceMappingURL=canonical.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../src/subagent/canonical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAEN,KAAK,WAAW,EAChB,MAAM,6BAA6B,CAAC;AAErC;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,aAAa,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,WAAW,IAAI,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,kBAAkB,IAAI,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAE,wBAAwB,IAAI,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAE3G,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,CAEnF;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAE9E"}