agentic-engineering-harness 0.4.16

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 (280) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +273 -0
  3. package/dist/agents/audit.d.ts +12 -0
  4. package/dist/agents/audit.js +14 -0
  5. package/dist/agents/audit.js.map +1 -0
  6. package/dist/agents/compiler.d.ts +8 -0
  7. package/dist/agents/compiler.js +103 -0
  8. package/dist/agents/compiler.js.map +1 -0
  9. package/dist/agents/config.d.ts +6 -0
  10. package/dist/agents/config.js +161 -0
  11. package/dist/agents/config.js.map +1 -0
  12. package/dist/agents/escalation.d.ts +9 -0
  13. package/dist/agents/escalation.js +75 -0
  14. package/dist/agents/escalation.js.map +1 -0
  15. package/dist/agents/exceptionDetection.d.ts +24 -0
  16. package/dist/agents/exceptionDetection.js +42 -0
  17. package/dist/agents/exceptionDetection.js.map +1 -0
  18. package/dist/agents/findings.d.ts +14 -0
  19. package/dist/agents/findings.js +40 -0
  20. package/dist/agents/findings.js.map +1 -0
  21. package/dist/agents/gitCheckpoint.d.ts +6 -0
  22. package/dist/agents/gitCheckpoint.js +61 -0
  23. package/dist/agents/gitCheckpoint.js.map +1 -0
  24. package/dist/agents/jsonc.d.ts +1 -0
  25. package/dist/agents/jsonc.js +42 -0
  26. package/dist/agents/jsonc.js.map +1 -0
  27. package/dist/agents/outputContracts.d.ts +161 -0
  28. package/dist/agents/outputContracts.js +16 -0
  29. package/dist/agents/outputContracts.js.map +1 -0
  30. package/dist/agents/parallelism.d.ts +14 -0
  31. package/dist/agents/parallelism.js +54 -0
  32. package/dist/agents/parallelism.js.map +1 -0
  33. package/dist/agents/permissions.d.ts +5 -0
  34. package/dist/agents/permissions.js +30 -0
  35. package/dist/agents/permissions.js.map +1 -0
  36. package/dist/agents/qualityConvergence.d.ts +44 -0
  37. package/dist/agents/qualityConvergence.js +77 -0
  38. package/dist/agents/qualityConvergence.js.map +1 -0
  39. package/dist/agents/recovery.d.ts +13 -0
  40. package/dist/agents/recovery.js +35 -0
  41. package/dist/agents/recovery.js.map +1 -0
  42. package/dist/agents/reviewLifecycle.d.ts +30 -0
  43. package/dist/agents/reviewLifecycle.js +233 -0
  44. package/dist/agents/reviewLifecycle.js.map +1 -0
  45. package/dist/agents/routing.d.ts +9 -0
  46. package/dist/agents/routing.js +37 -0
  47. package/dist/agents/routing.js.map +1 -0
  48. package/dist/agents/structuredOutput.d.ts +1 -0
  49. package/dist/agents/structuredOutput.js +54 -0
  50. package/dist/agents/structuredOutput.js.map +1 -0
  51. package/dist/agents/types.d.ts +207 -0
  52. package/dist/agents/types.js +2 -0
  53. package/dist/agents/types.js.map +1 -0
  54. package/dist/cli.d.ts +2 -0
  55. package/dist/cli.js +221 -0
  56. package/dist/cli.js.map +1 -0
  57. package/dist/core/config.d.ts +3 -0
  58. package/dist/core/config.js +59 -0
  59. package/dist/core/config.js.map +1 -0
  60. package/dist/core/doctor.d.ts +8 -0
  61. package/dist/core/doctor.js +59 -0
  62. package/dist/core/doctor.js.map +1 -0
  63. package/dist/core/git.d.ts +8 -0
  64. package/dist/core/git.js +47 -0
  65. package/dist/core/git.js.map +1 -0
  66. package/dist/core/init.d.ts +1 -0
  67. package/dist/core/init.js +52 -0
  68. package/dist/core/init.js.map +1 -0
  69. package/dist/core/quick.d.ts +20 -0
  70. package/dist/core/quick.js +49 -0
  71. package/dist/core/quick.js.map +1 -0
  72. package/dist/core/repair.d.ts +8 -0
  73. package/dist/core/repair.js +7 -0
  74. package/dist/core/repair.js.map +1 -0
  75. package/dist/core/run.d.ts +38 -0
  76. package/dist/core/run.js +165 -0
  77. package/dist/core/run.js.map +1 -0
  78. package/dist/core/sdd.d.ts +10 -0
  79. package/dist/core/sdd.js +88 -0
  80. package/dist/core/sdd.js.map +1 -0
  81. package/dist/core/seal.d.ts +3 -0
  82. package/dist/core/seal.js +74 -0
  83. package/dist/core/seal.js.map +1 -0
  84. package/dist/core/triage.d.ts +22 -0
  85. package/dist/core/triage.js +38 -0
  86. package/dist/core/triage.js.map +1 -0
  87. package/dist/core/types.d.ts +354 -0
  88. package/dist/core/types.js +2 -0
  89. package/dist/core/types.js.map +1 -0
  90. package/dist/core/verify.d.ts +6 -0
  91. package/dist/core/verify.js +51 -0
  92. package/dist/core/verify.js.map +1 -0
  93. package/dist/delivery/finalize.d.ts +17 -0
  94. package/dist/delivery/finalize.js +71 -0
  95. package/dist/delivery/finalize.js.map +1 -0
  96. package/dist/delivery/handoff.d.ts +39 -0
  97. package/dist/delivery/handoff.js +250 -0
  98. package/dist/delivery/handoff.js.map +1 -0
  99. package/dist/entry.d.ts +2 -0
  100. package/dist/entry.js +112 -0
  101. package/dist/entry.js.map +1 -0
  102. package/dist/evals/runner.d.ts +4 -0
  103. package/dist/evals/runner.js +112 -0
  104. package/dist/evals/runner.js.map +1 -0
  105. package/dist/evals/scoring.d.ts +3 -0
  106. package/dist/evals/scoring.js +41 -0
  107. package/dist/evals/scoring.js.map +1 -0
  108. package/dist/evals/types.d.ts +46 -0
  109. package/dist/evals/types.js +2 -0
  110. package/dist/evals/types.js.map +1 -0
  111. package/dist/issues/intake.d.ts +114 -0
  112. package/dist/issues/intake.js +213 -0
  113. package/dist/issues/intake.js.map +1 -0
  114. package/dist/memory/benchmark.d.ts +33 -0
  115. package/dist/memory/benchmark.js +69 -0
  116. package/dist/memory/benchmark.js.map +1 -0
  117. package/dist/metrics/runMetrics.d.ts +9 -0
  118. package/dist/metrics/runMetrics.js +34 -0
  119. package/dist/metrics/runMetrics.js.map +1 -0
  120. package/dist/metrics/usage.d.ts +3 -0
  121. package/dist/metrics/usage.js +53 -0
  122. package/dist/metrics/usage.js.map +1 -0
  123. package/dist/provenance/generate.d.ts +30 -0
  124. package/dist/provenance/generate.js +96 -0
  125. package/dist/provenance/generate.js.map +1 -0
  126. package/dist/providers/engram.d.ts +8 -0
  127. package/dist/providers/engram.js +14 -0
  128. package/dist/providers/engram.js.map +1 -0
  129. package/dist/providers/graphify.d.ts +9 -0
  130. package/dist/providers/graphify.js +28 -0
  131. package/dist/providers/graphify.js.map +1 -0
  132. package/dist/providers/paseo.d.ts +8 -0
  133. package/dist/providers/paseo.js +14 -0
  134. package/dist/providers/paseo.js.map +1 -0
  135. package/dist/providers/types.d.ts +41 -0
  136. package/dist/providers/types.js +2 -0
  137. package/dist/providers/types.js.map +1 -0
  138. package/dist/telemetry/events.d.ts +2 -0
  139. package/dist/telemetry/events.js +29 -0
  140. package/dist/telemetry/events.js.map +1 -0
  141. package/dist/telemetry/otlp.d.ts +3 -0
  142. package/dist/telemetry/otlp.js +57 -0
  143. package/dist/telemetry/otlp.js.map +1 -0
  144. package/dist/toolchain/config.d.ts +10 -0
  145. package/dist/toolchain/config.js +54 -0
  146. package/dist/toolchain/config.js.map +1 -0
  147. package/dist/toolchain/doctor.d.ts +8 -0
  148. package/dist/toolchain/doctor.js +56 -0
  149. package/dist/toolchain/doctor.js.map +1 -0
  150. package/dist/toolchain/mise.d.ts +10 -0
  151. package/dist/toolchain/mise.js +61 -0
  152. package/dist/toolchain/mise.js.map +1 -0
  153. package/dist/toolchain/resolve.d.ts +8 -0
  154. package/dist/toolchain/resolve.js +159 -0
  155. package/dist/toolchain/resolve.js.map +1 -0
  156. package/dist/toolchain/setup.d.ts +7 -0
  157. package/dist/toolchain/setup.js +141 -0
  158. package/dist/toolchain/setup.js.map +1 -0
  159. package/dist/toolchain/types.d.ts +95 -0
  160. package/dist/toolchain/types.js +2 -0
  161. package/dist/toolchain/types.js.map +1 -0
  162. package/dist/utils/process.d.ts +15 -0
  163. package/dist/utils/process.js +94 -0
  164. package/dist/utils/process.js.map +1 -0
  165. package/dist/validators/commands.d.ts +2 -0
  166. package/dist/validators/commands.js +28 -0
  167. package/dist/validators/commands.js.map +1 -0
  168. package/dist/validators/constraints.d.ts +6 -0
  169. package/dist/validators/constraints.js +30 -0
  170. package/dist/validators/constraints.js.map +1 -0
  171. package/dist/validators/diffScope.d.ts +2 -0
  172. package/dist/validators/diffScope.js +36 -0
  173. package/dist/validators/diffScope.js.map +1 -0
  174. package/dist/validators/evidence.d.ts +6 -0
  175. package/dist/validators/evidence.js +8 -0
  176. package/dist/validators/evidence.js.map +1 -0
  177. package/dist/validators/external.d.ts +3 -0
  178. package/dist/validators/external.js +22 -0
  179. package/dist/validators/external.js.map +1 -0
  180. package/dist/validators/gherkin.d.ts +3 -0
  181. package/dist/validators/gherkin.js +59 -0
  182. package/dist/validators/gherkin.js.map +1 -0
  183. package/dist/validators/graphify.d.ts +4 -0
  184. package/dist/validators/graphify.js +108 -0
  185. package/dist/validators/graphify.js.map +1 -0
  186. package/dist/validators/opa.d.ts +3 -0
  187. package/dist/validators/opa.js +43 -0
  188. package/dist/validators/opa.js.map +1 -0
  189. package/dist/validators/openapi.d.ts +25 -0
  190. package/dist/validators/openapi.js +98 -0
  191. package/dist/validators/openapi.js.map +1 -0
  192. package/dist/validators/registry.d.ts +2 -0
  193. package/dist/validators/registry.js +36 -0
  194. package/dist/validators/registry.js.map +1 -0
  195. package/dist/validators/toolCommand.d.ts +5 -0
  196. package/dist/validators/toolCommand.js +33 -0
  197. package/dist/validators/toolCommand.js.map +1 -0
  198. package/dist/validators/types.d.ts +13 -0
  199. package/dist/validators/types.js +2 -0
  200. package/dist/validators/types.js.map +1 -0
  201. package/dist/workers/agentPrompt.d.ts +3 -0
  202. package/dist/workers/agentPrompt.js +84 -0
  203. package/dist/workers/agentPrompt.js.map +1 -0
  204. package/dist/workers/direct.d.ts +13 -0
  205. package/dist/workers/direct.js +30 -0
  206. package/dist/workers/direct.js.map +1 -0
  207. package/dist/workers/factory.d.ts +4 -0
  208. package/dist/workers/factory.js +10 -0
  209. package/dist/workers/factory.js.map +1 -0
  210. package/dist/workers/paseo.d.ts +14 -0
  211. package/dist/workers/paseo.js +29 -0
  212. package/dist/workers/paseo.js.map +1 -0
  213. package/dist/workers/podman.d.ts +13 -0
  214. package/dist/workers/podman.js +22 -0
  215. package/dist/workers/podman.js.map +1 -0
  216. package/dist/workers/prompt.d.ts +4 -0
  217. package/dist/workers/prompt.js +4 -0
  218. package/dist/workers/prompt.js.map +1 -0
  219. package/dist/workers/types.d.ts +11 -0
  220. package/dist/workers/types.js +2 -0
  221. package/dist/workers/types.js.map +1 -0
  222. package/docs/ARCHITECTURE.md +47 -0
  223. package/docs/EVALS.md +28 -0
  224. package/docs/MEMORY.md +28 -0
  225. package/docs/OBSERVABILITY.md +18 -0
  226. package/docs/OSS_STACK.md +27 -0
  227. package/docs/PASEO.md +9 -0
  228. package/docs/PUBLISHING.md +110 -0
  229. package/docs/SDD.md +35 -0
  230. package/docs/SECURITY.md +21 -0
  231. package/docs/V0.2.md +42 -0
  232. package/docs/V0.3.md +40 -0
  233. package/docs/V0.4.11.md +30 -0
  234. package/docs/V0.4.12.md +88 -0
  235. package/docs/V0.4.13.md +203 -0
  236. package/docs/V0.4.14.md +209 -0
  237. package/docs/V0.4.15.md +365 -0
  238. package/docs/V0.4.16.md +229 -0
  239. package/docs/V0.4.md +28 -0
  240. package/docs/VALIDATION.md +23 -0
  241. package/package.json +18 -0
  242. package/policies/core/dependency-policy.rego +12 -0
  243. package/policies/core/schema-policy.rego +12 -0
  244. package/policies/core/trust-boundary.rego +17 -0
  245. package/presets/agents/default.jsonc +80 -0
  246. package/presets/docker.yaml +4 -0
  247. package/presets/dotnet.yaml +12 -0
  248. package/presets/expo.yaml +6 -0
  249. package/presets/generic.yaml +3 -0
  250. package/presets/nextjs.yaml +8 -0
  251. package/presets/node.yaml +6 -0
  252. package/presets/pnpm.yaml +6 -0
  253. package/presets/postgres.yaml +4 -0
  254. package/schemas/agent-output-planner.schema.json +1 -0
  255. package/schemas/agent-topology.schema.json +37 -0
  256. package/schemas/project.schema.json +36 -0
  257. package/schemas/quick-contract.schema.json +17 -0
  258. package/schemas/task-contract.schema.json +18 -0
  259. package/schemas/toolchain.schema.json +70 -0
  260. package/schemas/validation-report.schema.json +15 -0
  261. package/skills/acceptance-traceability/SKILL.md +13 -0
  262. package/skills/deterministic-validation/SKILL.md +15 -0
  263. package/skills/engineering-workflow/SKILL.md +108 -0
  264. package/skills/finding-dedup/SKILL.md +12 -0
  265. package/skills/github-delivery-lifecycle/SKILL.md +16 -0
  266. package/skills/implementation-worker/SKILL.md +17 -0
  267. package/skills/lead-engineer/SKILL.md +30 -0
  268. package/skills/memory-hygiene/SKILL.md +22 -0
  269. package/skills/prompt-drift-audit/SKILL.md +10 -0
  270. package/skills/recovery-classifier/SKILL.md +13 -0
  271. package/skills/routing-normalizer/SKILL.md +17 -0
  272. package/skills/sdd/SKILL.md +21 -0
  273. package/skills/simplify/SKILL.md +16 -0
  274. package/skills/verification-planning/SKILL.md +17 -0
  275. package/skills/worktree-lifecycle/SKILL.md +18 -0
  276. package/templates/AGENTS.md +37 -0
  277. package/templates/agents.source.jsonc +39 -0
  278. package/templates/otel-collector.yaml +21 -0
  279. package/templates/project.yaml +196 -0
  280. package/templates/toolchain.yaml +127 -0
@@ -0,0 +1,161 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { minimatch } from "minimatch";
5
+ import { z } from "zod";
6
+ import { parseJsonc } from "./jsonc.js";
7
+ const permissionSchema = z.enum(["allow", "ask", "deny"]);
8
+ const runtimeCapabilitiesSchema = z.object({ nativeAgent: z.boolean().optional(), nativeAgentViaPaseo: z.boolean().optional(), modelSelection: z.boolean().optional(), variantSelection: z.boolean().optional(), sessions: z.boolean().optional(), structuredOutput: z.boolean().optional() });
9
+ const runtimeSchema = z.object({ adapter: z.string().min(1), paseoProvider: z.string().optional(), command: z.string().optional(), defaultArgs: z.array(z.string()).optional(), capabilities: runtimeCapabilitiesSchema.optional() });
10
+ const runtimeOverrideSchema = runtimeSchema.partial();
11
+ const modelSchema = z.object({ runtime: z.string().min(1), provider: z.string().optional(), model: z.string().min(1), variant: z.string().optional(), temperature: z.number().optional(), options: z.record(z.string(), z.unknown()).optional() });
12
+ const modelOverrideSchema = modelSchema.partial();
13
+ const executionSchema = z.object({ model: z.string().min(1), runtime: z.string().optional(), nativeAgent: z.string().optional(), variant: z.string().optional(), args: z.array(z.string()).optional(), transport: z.enum(["inherit", "paseo", "direct", "podman"]).optional() });
14
+ const permissionsSchema = z.object({ read: permissionSchema.optional(), write: permissionSchema.optional(), shell: permissionSchema.optional(), network: permissionSchema.optional(), delegate: permissionSchema.optional(), review: permissionSchema.optional(), validate: permissionSchema.optional(), gitWrite: permissionSchema.optional() }).optional();
15
+ const agentSchema = z.object({ role: z.string().min(1), domains: z.array(z.string()).optional(), description: z.string().optional(), execution: executionSchema, temperature: z.number().optional(), skills: z.array(z.string()).optional(), mcps: z.array(z.string()).optional(), promptPath: z.string().optional(), orchestratorPromptPath: z.string().optional(), outputContract: z.string().optional(), permissions: permissionsSchema, capabilities: z.array(z.string()).optional(), disabled: z.boolean().optional() });
16
+ const agentOverrideSchema = agentSchema.partial().extend({ execution: executionSchema.partial().optional() });
17
+ const profileSchema = z.object({ description: z.string().optional(), models: z.record(z.string(), modelOverrideSchema).optional(), agents: z.record(z.string(), agentOverrideSchema).optional() });
18
+ const routingSchema = z.object({ id: z.string().min(1), priority: z.number().optional(), when: z.object({ intent: z.union([z.string(), z.array(z.string())]).optional(), domains: z.array(z.string()).optional(), files: z.array(z.string()).optional(), risk: z.union([z.enum(["low", "medium", "high"]), z.array(z.enum(["low", "medium", "high"]))]).optional() }), use: z.string().optional(), reviewers: z.array(z.string()).optional(), validators: z.array(z.string()).optional() });
19
+ const recoveryStepSchema = z.object({ action: z.enum(["same-agent", "reroute", "agent", "lead", "stop"]), agent: z.string().optional() });
20
+ const councilSchema = z.object({ members: z.array(z.object({ model: z.string(), agent: z.string().optional() })), executionMode: z.enum(["parallel", "sequential"]).optional() });
21
+ const removeSchema = z.object({ runtimes: z.array(z.string()).optional(), models: z.array(z.string()).optional(), agents: z.array(z.string()).optional(), profiles: z.array(z.string()).optional(), routing: z.array(z.string()).optional(), councils: z.array(z.string()).optional() });
22
+ const layerSchema = z.object({ version: z.literal(1), extends: z.array(z.string().min(1)).optional(), activeProfile: z.string().optional(), skillRoots: z.array(z.string()).optional(), runtimes: z.record(z.string(), runtimeOverrideSchema).optional(), models: z.record(z.string(), modelOverrideSchema).optional(), agents: z.record(z.string(), agentOverrideSchema).optional(), profiles: z.record(z.string(), profileSchema).optional(), routing: z.array(routingSchema).optional(), recovery: z.record(z.string(), z.array(recoveryStepSchema)).optional(), councils: z.record(z.string(), councilSchema).optional(), remove: removeSchema.optional() });
23
+ const sourceSchema = z.object({ version: z.literal(1), activeProfile: z.string().optional(), skillRoots: z.array(z.string()).optional(), runtimes: z.record(z.string(), runtimeSchema), models: z.record(z.string(), modelSchema), agents: z.record(z.string(), agentSchema), profiles: z.record(z.string(), profileSchema).optional(), routing: z.array(routingSchema).optional(), recovery: z.record(z.string(), z.array(recoveryStepSchema)).optional(), councils: z.record(z.string(), councilSchema).optional() });
24
+ function packageRoot() { return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); }
25
+ export async function loadAgentTopologySource(root, config) {
26
+ const file = path.resolve(root, config.agents?.configPath ?? ".harness/agents.source.jsonc");
27
+ const composed = await loadComposedLayer(file, new Set());
28
+ return sourceSchema.parse(composed);
29
+ }
30
+ async function loadComposedLayer(file, stack) {
31
+ const absolute = path.resolve(file);
32
+ if (stack.has(absolute))
33
+ throw new Error(`Circular agent topology extension detected at ${absolute}.`);
34
+ const nextStack = new Set(stack);
35
+ nextStack.add(absolute);
36
+ const layer = layerSchema.parse(parseJsonc(await fs.readFile(absolute, "utf8")));
37
+ let composed = { version: 1 };
38
+ for (const extension of layer.extends ?? [])
39
+ composed = composeAgentTopologyLayers(composed, await loadComposedLayer(resolveExtension(extension, path.dirname(absolute)), nextStack));
40
+ return composeAgentTopologyLayers(composed, { ...layer, extends: undefined });
41
+ }
42
+ function resolveExtension(extension, fromDirectory) {
43
+ if (extension === "aeh:default")
44
+ return path.join(packageRoot(), "presets", "agents", "default.jsonc");
45
+ if (extension.startsWith("aeh:"))
46
+ throw new Error(`Unknown built-in agent topology preset ${extension}.`);
47
+ return path.isAbsolute(extension) ? extension : path.resolve(fromDirectory, extension);
48
+ }
49
+ export function composeAgentTopologyLayers(base, overlay) {
50
+ const merged = {
51
+ version: 1,
52
+ activeProfile: overlay.activeProfile ?? base.activeProfile,
53
+ skillRoots: union(base.skillRoots ?? [], overlay.skillRoots ?? []),
54
+ runtimes: mergeRecord(base.runtimes, overlay.runtimes, mergeRuntime),
55
+ models: mergeRecord(base.models, overlay.models, mergeModel),
56
+ agents: mergeRecord(base.agents, overlay.agents, mergeAgentLayer),
57
+ profiles: mergeRecord(base.profiles, overlay.profiles, mergeProfile),
58
+ routing: mergeRouting(base.routing ?? [], overlay.routing ?? []),
59
+ recovery: { ...(base.recovery ?? {}), ...(overlay.recovery ?? {}) },
60
+ councils: { ...(base.councils ?? {}), ...(overlay.councils ?? {}) }
61
+ };
62
+ return applyRemovals(merged, overlay.remove);
63
+ }
64
+ function mergeRuntime(base, overlay) { return { ...(base ?? {}), ...overlay, capabilities: { ...(base?.capabilities ?? {}), ...(overlay.capabilities ?? {}) } }; }
65
+ function mergeModel(base, overlay) { return { ...(base ?? {}), ...overlay, options: { ...(base?.options ?? {}), ...(overlay.options ?? {}) } }; }
66
+ function mergeAgentLayer(base, overlay) { return { ...(base ?? {}), ...overlay, execution: { ...(base?.execution ?? {}), ...(overlay.execution ?? {}) }, permissions: { ...(base?.permissions ?? {}), ...(overlay.permissions ?? {}) } }; }
67
+ function mergeProfile(base, overlay) { return { ...(base ?? {}), ...overlay, models: mergeRecord(base?.models, overlay.models, mergeModel), agents: mergeRecord(base?.agents, overlay.agents, mergeAgentLayer) }; }
68
+ function mergeRecord(base, overlay, merger) { if (!base && !overlay)
69
+ return undefined; const result = { ...(base ?? {}) }; for (const [name, value] of Object.entries(overlay ?? {}))
70
+ result[name] = merger(result[name], value); return result; }
71
+ function mergeRouting(base, overlay) { const result = [...base]; for (const rule of overlay) {
72
+ const index = result.findIndex((item) => item.id === rule.id);
73
+ if (index >= 0)
74
+ result[index] = rule;
75
+ else
76
+ result.push(rule);
77
+ } return result; }
78
+ function union(base, overlay) { return [...new Set([...base, ...overlay])]; }
79
+ function applyRemovals(layer, remove) {
80
+ if (!remove)
81
+ return layer;
82
+ const result = structuredClone(layer);
83
+ const removedAgents = deleteMatches(result.agents, remove.agents);
84
+ deleteMatches(result.runtimes, remove.runtimes);
85
+ deleteMatches(result.models, remove.models);
86
+ deleteMatches(result.profiles, remove.profiles);
87
+ deleteMatches(result.councils, remove.councils);
88
+ result.routing = (result.routing ?? []).filter((rule) => !matchesAny(rule.id, remove.routing ?? [])).map((rule) => ({ ...rule, use: rule.use && removedAgents.has(rule.use) ? undefined : rule.use, reviewers: (rule.reviewers ?? []).filter((name) => !removedAgents.has(name)), validators: (rule.validators ?? []).filter((name) => !removedAgents.has(name)) })).filter((rule) => Boolean(rule.use || rule.reviewers?.length || rule.validators?.length));
89
+ for (const [failure, steps] of Object.entries(result.recovery ?? {}))
90
+ result.recovery[failure] = (steps ?? []).filter((step) => !(step.action === "agent" && step.agent && removedAgents.has(step.agent)));
91
+ for (const council of Object.values(result.councils ?? {}))
92
+ council.members = council.members.filter((member) => !member.agent || !removedAgents.has(member.agent));
93
+ return result;
94
+ }
95
+ function deleteMatches(record, patterns) { const removed = new Set(); if (!record || !patterns?.length)
96
+ return removed; for (const name of Object.keys(record))
97
+ if (matchesAny(name, patterns)) {
98
+ delete record[name];
99
+ removed.add(name);
100
+ } return removed; }
101
+ function matchesAny(value, patterns) { return patterns.some((pattern) => minimatch(value, pattern, { dot: true })); }
102
+ export async function loadResolvedAgentTopology(root, config, profileOverride) { return resolveAgentTopology(await loadAgentTopologySource(root, config), profileOverride ?? config.agents?.activeProfile); }
103
+ export function resolveAgentTopology(source, profileOverride) {
104
+ const profileName = profileOverride ?? source.activeProfile;
105
+ const profile = profileName ? source.profiles?.[profileName] : undefined;
106
+ if (profileName && !profile)
107
+ throw new Error(`Unknown agent profile: ${profileName}`);
108
+ const models = structuredClone(source.models);
109
+ for (const [alias, override] of Object.entries(profile?.models ?? {})) {
110
+ if (!models[alias])
111
+ throw new Error(`Profile ${profileName} overrides unknown model alias @${alias}`);
112
+ models[alias] = { ...models[alias], ...override, options: { ...(models[alias].options ?? {}), ...(override.options ?? {}) } };
113
+ }
114
+ const agents = structuredClone(source.agents);
115
+ const overrides = Object.entries(profile?.agents ?? {}).sort(([a], [b]) => wildcardCount(b) - wildcardCount(a));
116
+ for (const [pattern, override] of overrides) {
117
+ const matched = Object.keys(agents).filter((name) => minimatch(name, pattern));
118
+ if (!matched.length && !/[?*\[]/.test(pattern))
119
+ throw new Error(`Profile ${profileName} overrides unknown agent ${pattern}`);
120
+ for (const name of matched)
121
+ agents[name] = mergeAgent(agents[name], override);
122
+ }
123
+ const resolvedModels = {};
124
+ for (const [alias, model] of Object.entries(models)) {
125
+ if (!source.runtimes[model.runtime])
126
+ throw new Error(`Model @${alias} references unknown runtime ${model.runtime}`);
127
+ const id = model.provider && !model.model.includes("/") ? `${model.provider}/${model.model}` : model.model;
128
+ resolvedModels[alias] = { ...model, alias, id };
129
+ }
130
+ const resolvedAgents = {};
131
+ for (const [name, agent] of Object.entries(agents)) {
132
+ const modelRef = agent.execution.model;
133
+ let model;
134
+ if (modelRef.startsWith("@")) {
135
+ const alias = modelRef.slice(1);
136
+ model = resolvedModels[alias];
137
+ if (!model)
138
+ throw new Error(`Agent ${name} references unknown model alias ${modelRef}`);
139
+ }
140
+ else {
141
+ const runtimeName = agent.execution.runtime;
142
+ if (!runtimeName)
143
+ throw new Error(`Agent ${name} uses direct model ${modelRef} and must set execution.runtime`);
144
+ const provider = modelRef.includes("/") ? modelRef.split("/")[0] : undefined;
145
+ model = { alias: modelRef, id: modelRef, runtime: runtimeName, provider, model: modelRef };
146
+ }
147
+ const runtimeName = agent.execution.runtime ?? model.runtime;
148
+ if (runtimeName !== model.runtime && modelRef.startsWith("@"))
149
+ throw new Error(`Agent ${name} runtime ${runtimeName} conflicts with ${modelRef} runtime ${model.runtime}`);
150
+ const runtime = source.runtimes[runtimeName];
151
+ if (!runtime)
152
+ throw new Error(`Agent ${name} references unknown runtime ${runtimeName}`);
153
+ if (agent.execution.nativeAgent && runtime.capabilities?.nativeAgent === false)
154
+ throw new Error(`Runtime ${runtimeName} does not support nativeAgent but ${name} configures ${agent.execution.nativeAgent}`);
155
+ resolvedAgents[name] = { ...agent, name, execution: { ...agent.execution, runtime: runtimeName, variant: agent.execution.variant ?? model.variant, transport: agent.execution.transport ?? "inherit" }, runtime: { ...runtime, name: runtimeName }, model };
156
+ }
157
+ return { version: 1, profile: profileName, skillRoots: source.skillRoots ?? [".harness/skills"], runtimes: source.runtimes, models: resolvedModels, agents: resolvedAgents, routing: source.routing ?? [], recovery: source.recovery ?? {}, councils: source.councils ?? {} };
158
+ }
159
+ function mergeAgent(base, override) { return { ...base, ...override, execution: { ...base.execution, ...(override.execution ?? {}) }, permissions: { ...(base.permissions ?? {}), ...(override.permissions ?? {}) } }; }
160
+ function wildcardCount(value) { return [...value].filter((char) => char === "*" || char === "?").length; }
161
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/agents/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { HarnessProjectConfig, ReviewEscalationStage } from "../core/types.js";
2
+ import type { AgentExecutionSelection, ResolvedAgentTopology } from "./types.js";
3
+ import type { QualityState } from "./qualityConvergence.js";
4
+ export declare const DEFAULT_ESCALATION_STAGES: ReviewEscalationStage[];
5
+ export declare function escalationStages(config: HarnessProjectConfig): ReviewEscalationStage[];
6
+ export declare function nextEscalationIndex(state: QualityState, current: number, config: HarnessProjectConfig): number;
7
+ export declare function resumeAfterReplan(config: HarnessProjectConfig): number;
8
+ export declare function selectionForStage(topology: ResolvedAgentTopology, fallback: AgentExecutionSelection, stage: ReviewEscalationStage): AgentExecutionSelection;
9
+ export declare function overrideSelectionModel(topology: ResolvedAgentTopology, selection: AgentExecutionSelection, modelRef: string): AgentExecutionSelection;
@@ -0,0 +1,75 @@
1
+ import { executionSelectionForAgent } from "./routing.js";
2
+ export const DEFAULT_ESCALATION_STAGES = [
3
+ { name: "normal", action: "remediate" },
4
+ { name: "quality", action: "remediate", agent: "quality-implementer" },
5
+ { name: "senior", action: "remediate", agent: "senior-implementer", model: "@brain" },
6
+ { name: "diagnosis", action: "diagnose", agent: "oracle", model: "@brain" },
7
+ { name: "replan", action: "replan", agent: "planner", model: "@brain" }
8
+ ];
9
+ export function escalationStages(config) {
10
+ const configured = config.workflow?.reviews?.escalation?.stages;
11
+ return configured?.length ? configured : DEFAULT_ESCALATION_STAGES;
12
+ }
13
+ export function nextEscalationIndex(state, current, config) {
14
+ const stages = escalationStages(config);
15
+ if (!stages.length)
16
+ return 0;
17
+ if (state.counts.critical > 0 && state.round === 0)
18
+ return Math.min(config.workflow?.reviews?.escalation?.criticalStartStage ?? 2, stages.length - 1);
19
+ if (state.convergence === "STAGNATING" || state.convergence === "REGRESSING" || state.convergence === "CYCLING")
20
+ return Math.min(current + 1, stages.length - 1);
21
+ if (state.convergence === "IMPROVING" && current > 0)
22
+ return current - 1;
23
+ return Math.min(current, stages.length - 1);
24
+ }
25
+ export function resumeAfterReplan(config) {
26
+ const stages = escalationStages(config);
27
+ const desired = Math.min(config.workflow?.reviews?.escalation?.replanResumeStage ?? 2, Math.max(0, stages.length - 1));
28
+ return Math.max(0, desired - 1);
29
+ }
30
+ export function selectionForStage(topology, fallback, stage) {
31
+ let selection = fallback;
32
+ if (stage.agent) {
33
+ if (topology.agents[stage.agent] && !topology.agents[stage.agent].disabled)
34
+ selection = executionSelectionForAgent(topology, stage.agent);
35
+ else if (stage.action === "diagnose") {
36
+ const diagnostic = Object.values(topology.agents).find((agent) => !agent.disabled && (agent.role === "escalation" || agent.role === "orchestrator"));
37
+ if (diagnostic)
38
+ selection = executionSelectionForAgent(topology, diagnostic.name);
39
+ }
40
+ else if (stage.action === "replan") {
41
+ const planner = Object.values(topology.agents).find((agent) => !agent.disabled && agent.role === "planner");
42
+ if (planner)
43
+ selection = executionSelectionForAgent(topology, planner.name);
44
+ }
45
+ }
46
+ return stage.model ? overrideSelectionModel(topology, selection, stage.model) : selection;
47
+ }
48
+ export function overrideSelectionModel(topology, selection, modelRef) {
49
+ if (!modelRef.startsWith("@"))
50
+ throw new Error(`Escalation model override must use an alias such as @brain; received ${modelRef}.`);
51
+ const alias = modelRef.slice(1);
52
+ const model = topology.models[alias];
53
+ if (!model)
54
+ throw new Error(`Escalation references unknown model alias ${modelRef}.`);
55
+ const runtime = topology.runtimes[model.runtime];
56
+ if (!runtime)
57
+ throw new Error(`Escalation model ${modelRef} references unavailable runtime ${model.runtime}.`);
58
+ const agent = topology.agents[selection.logicalAgent];
59
+ const runtimeChanged = selection.runtimeName !== model.runtime;
60
+ return {
61
+ ...selection,
62
+ runtimeName: model.runtime,
63
+ runtimeAdapter: runtime.adapter,
64
+ paseoProvider: runtime.paseoProvider ?? runtime.adapter,
65
+ modelAlias: alias,
66
+ modelId: model.id,
67
+ modelName: model.model,
68
+ modelProvider: model.provider,
69
+ variant: model.variant,
70
+ nativeAgent: runtimeChanged ? undefined : selection.nativeAgent,
71
+ args: [...(runtime.defaultArgs ?? []), ...(agent?.execution.args ?? [])],
72
+ runtimeCapabilities: runtime.capabilities ?? {}
73
+ };
74
+ }
75
+ //# sourceMappingURL=escalation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escalation.js","sourceRoot":"","sources":["../../src/agents/escalation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import type { WorkerSession } from "../core/types.js";
3
+ import type { NormalizedFinding } from "./outputContracts.js";
4
+ export type ExceptionType = "SPEC_CONTRADICTION" | "REQUIRES_PRODUCT_DECISION" | "BLOCKED_EXTERNAL" | "SYSTEM_FAILURE";
5
+ export interface ExceptionDecision {
6
+ type: ExceptionType;
7
+ humanRequired: boolean;
8
+ rationale: string;
9
+ findings: string[];
10
+ }
11
+ export declare const exceptionDiagnosisSchema: z.ZodObject<{
12
+ classification: z.ZodEnum<{
13
+ IMPLEMENTATION_DEFECT: "IMPLEMENTATION_DEFECT";
14
+ SPEC_CONTRADICTION: "SPEC_CONTRADICTION";
15
+ REQUIRES_PRODUCT_DECISION: "REQUIRES_PRODUCT_DECISION";
16
+ BLOCKED_EXTERNAL: "BLOCKED_EXTERNAL";
17
+ SYSTEM_FAILURE: "SYSTEM_FAILURE";
18
+ }>;
19
+ rationale: z.ZodString;
20
+ recommendedAction: z.ZodString;
21
+ }, z.core.$strip>;
22
+ export declare function detectHumanException(findings: NormalizedFinding[]): ExceptionDecision | undefined;
23
+ export declare function detectRuntimeExternalException(session: WorkerSession): ExceptionDecision | undefined;
24
+ export declare function diagnosisToException(value: z.infer<typeof exceptionDiagnosisSchema>): ExceptionDecision | undefined;
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ export const exceptionDiagnosisSchema = z.object({
3
+ classification: z.enum(["IMPLEMENTATION_DEFECT", "SPEC_CONTRADICTION", "REQUIRES_PRODUCT_DECISION", "BLOCKED_EXTERNAL", "SYSTEM_FAILURE"]),
4
+ rationale: z.string().min(1),
5
+ recommendedAction: z.string().min(1)
6
+ });
7
+ export function detectHumanException(findings) {
8
+ const matches = [];
9
+ for (const finding of findings) {
10
+ const explicit = finding.exceptionType;
11
+ if (explicit && explicit !== "IMPLEMENTATION_DEFECT")
12
+ matches.push({ type: explicit, finding });
13
+ else {
14
+ const category = finding.category.toLowerCase().replace(/[_\s]+/g, "-");
15
+ if (["spec-contradiction", "requirement-contradiction", "conflicting-requirements"].includes(category))
16
+ matches.push({ type: "SPEC_CONTRADICTION", finding });
17
+ else if (["product-decision", "business-decision", "ambiguous-requirement", "product-ambiguity"].includes(category))
18
+ matches.push({ type: "REQUIRES_PRODUCT_DECISION", finding });
19
+ else if (["external-blocker", "missing-secret", "credential-required", "external-permission", "external-dependency-unavailable"].includes(category))
20
+ matches.push({ type: "BLOCKED_EXTERNAL", finding });
21
+ }
22
+ }
23
+ if (!matches.length)
24
+ return undefined;
25
+ const priority = ["SPEC_CONTRADICTION", "REQUIRES_PRODUCT_DECISION", "BLOCKED_EXTERNAL", "SYSTEM_FAILURE"];
26
+ const type = priority.find((candidate) => matches.some((match) => match.type === candidate));
27
+ const relevant = matches.filter((match) => match.type === type).map((match) => match.finding);
28
+ return { type, humanRequired: type !== "SYSTEM_FAILURE", rationale: relevant.map((finding) => finding.evidence).join(" | "), findings: relevant.map((finding) => finding.id) };
29
+ }
30
+ export function detectRuntimeExternalException(session) {
31
+ const text = `${session.stderr}\n${session.stdout}`;
32
+ const patterns = [/missing\s+(api[- ]?key|token|secret|credential)/i, /authentication\s+(required|failed)/i, /not\s+(authenticated|logged\s+in)/i, /credential(s)?\s+(required|missing|unavailable)/i, /permission denied[^\n]*(credential|secret|token|account)/i];
33
+ if (!patterns.some((pattern) => pattern.test(text)))
34
+ return undefined;
35
+ return { type: "BLOCKED_EXTERNAL", humanRequired: true, rationale: text.slice(-2000), findings: [] };
36
+ }
37
+ export function diagnosisToException(value) {
38
+ if (value.classification === "IMPLEMENTATION_DEFECT")
39
+ return undefined;
40
+ return { type: value.classification, humanRequired: value.classification !== "SYSTEM_FAILURE", rationale: value.rationale, findings: [] };
41
+ }
42
+ //# sourceMappingURL=exceptionDetection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceptionDetection.js","sourceRoot":"","sources":["../../src/agents/exceptionDetection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type NormalizedFinding } from "./outputContracts.js";
2
+ export interface FindingMerge {
3
+ into: string;
4
+ from: string[];
5
+ reason: string;
6
+ }
7
+ export interface DedupedFindings {
8
+ inputCount: number;
9
+ outputCount: number;
10
+ findings: NormalizedFinding[];
11
+ merges: FindingMerge[];
12
+ }
13
+ export declare function extractFindings(value: unknown): NormalizedFinding[];
14
+ export declare function dedupeFindings(input: NormalizedFinding[]): DedupedFindings;
@@ -0,0 +1,40 @@
1
+ import { findingSchema, reviewerOutputSchema } from "./outputContracts.js";
2
+ const severityRank = { critical: 5, high: 4, medium: 3, low: 2, note: 1 };
3
+ export function extractFindings(value) { const reviewer = reviewerOutputSchema.safeParse(value); if (reviewer.success)
4
+ return reviewer.data.findings; if (Array.isArray(value))
5
+ return value.map((item) => findingSchema.parse(item)); return [findingSchema.parse(value)]; }
6
+ export function dedupeFindings(input) {
7
+ const output = [];
8
+ const merges = [];
9
+ for (const finding of input) {
10
+ const index = output.findIndex((current) => isDuplicate(current, finding));
11
+ if (index < 0) {
12
+ output.push(structuredClone(finding));
13
+ continue;
14
+ }
15
+ const current = output[index];
16
+ const winner = severityRank[finding.severity] > severityRank[current.severity] ? finding : current;
17
+ const loser = winner === finding ? current : finding;
18
+ const merged = { ...winner, evidence: joinUnique(winner.evidence, loser.evidence), impact: joinUnique(winner.impact, loser.impact), recommendedFix: joinUnique(winner.recommendedFix, loser.recommendedFix), location: { file: winner.location.file, startLine: minDefined(current.location.startLine, finding.location.startLine), endLine: maxDefined(current.location.endLine, finding.location.endLine) } };
19
+ output[index] = merged;
20
+ const existing = merges.find((item) => item.into === merged.id);
21
+ if (existing)
22
+ existing.from.push(loser.id);
23
+ else
24
+ merges.push({ into: merged.id, from: [loser.id], reason: `same/adjacent location and compatible category (${current.category}, ${finding.category})` });
25
+ }
26
+ return { inputCount: input.length, outputCount: output.length, findings: output, merges };
27
+ }
28
+ function isDuplicate(a, b) { if (a.location.file !== b.location.file)
29
+ return false; if (!categoriesCompatible(a.category, b.category))
30
+ return false; const aStart = a.location.startLine ?? 1; const aEnd = a.location.endLine ?? aStart; const bStart = b.location.startLine ?? 1; const bEnd = b.location.endLine ?? bStart; return aStart <= bEnd + 10 && bStart <= aEnd + 10; }
31
+ function categoriesCompatible(a, b) { if (a === b)
32
+ return true; const pairs = [["security", "backend"], ["architecture", "maintainability"], ["api-contract", "backend"], ["coverage", "test"]]; return pairs.some(([x, y]) => (a === x && b === y) || (a === y && b === x)); }
33
+ function joinUnique(a, b) { return a === b ? a : `${a}\n---\n${b}`; }
34
+ function minDefined(a, b) { if (a === undefined)
35
+ return b; if (b === undefined)
36
+ return a; return Math.min(a, b); }
37
+ function maxDefined(a, b) { if (a === undefined)
38
+ return b; if (b === undefined)
39
+ return a; return Math.max(a, b); }
40
+ //# sourceMappingURL=findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/agents/findings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface WorktreeCheckpoint {
2
+ createdAt: string;
3
+ files: Map<string, Buffer | undefined>;
4
+ }
5
+ export declare function createWorktreeCheckpoint(root: string): Promise<WorktreeCheckpoint>;
6
+ export declare function rollbackWorktreeCheckpoint(root: string, checkpoint: WorktreeCheckpoint): Promise<string[]>;
@@ -0,0 +1,61 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { runProcess } from "../utils/process.js";
4
+ export async function createWorktreeCheckpoint(root) {
5
+ const files = new Map();
6
+ for (const relative of await changedPaths(root)) {
7
+ const absolute = path.resolve(root, relative);
8
+ try {
9
+ files.set(relative, await fs.readFile(absolute));
10
+ }
11
+ catch {
12
+ files.set(relative, undefined);
13
+ }
14
+ }
15
+ return { createdAt: new Date().toISOString(), files };
16
+ }
17
+ export async function rollbackWorktreeCheckpoint(root, checkpoint) {
18
+ const current = new Set(await changedPaths(root));
19
+ const all = new Set([...current, ...checkpoint.files.keys()]);
20
+ const restored = [];
21
+ for (const relative of all) {
22
+ const absolute = path.resolve(root, relative);
23
+ if (!absolute.startsWith(`${path.resolve(root)}${path.sep}`) && absolute !== path.resolve(root))
24
+ throw new Error(`Unsafe rollback path: ${relative}`);
25
+ if (checkpoint.files.has(relative)) {
26
+ const content = checkpoint.files.get(relative);
27
+ if (content === undefined)
28
+ await fs.rm(absolute, { recursive: true, force: true });
29
+ else {
30
+ await fs.mkdir(path.dirname(absolute), { recursive: true });
31
+ await fs.writeFile(absolute, content);
32
+ }
33
+ restored.push(relative);
34
+ continue;
35
+ }
36
+ const tracked = await runProcess(`git cat-file -e ${quote(`HEAD:${relative}`)}`, { cwd: root, timeoutMs: 30_000 });
37
+ if (tracked.exitCode === 0) {
38
+ const restore = await runProcess(`git restore --source=HEAD --worktree --staged -- ${quote(relative)}`, { cwd: root, timeoutMs: 30_000 });
39
+ if (restore.exitCode !== 0)
40
+ throw new Error(`Unable to rollback ${relative}: ${restore.stderr || restore.stdout}`);
41
+ }
42
+ else
43
+ await fs.rm(absolute, { recursive: true, force: true });
44
+ restored.push(relative);
45
+ }
46
+ return restored.sort();
47
+ }
48
+ async function changedPaths(root) {
49
+ const commands = ["git diff --name-only HEAD", "git diff --cached --name-only HEAD", "git ls-files --others --exclude-standard"];
50
+ const paths = new Set();
51
+ for (const command of commands) {
52
+ const result = await runProcess(command, { cwd: root, timeoutMs: 30_000 });
53
+ if (result.exitCode !== 0)
54
+ throw new Error(`Unable to inspect worktree for rollback checkpoint: ${result.stderr || result.stdout}`);
55
+ for (const line of result.stdout.split(/\r?\n/).map((value) => value.trim()).filter(Boolean))
56
+ paths.add(line);
57
+ }
58
+ return [...paths].sort();
59
+ }
60
+ function quote(value) { return `'${value.replaceAll("'", "'\\''")}'`; }
61
+ //# sourceMappingURL=gitCheckpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitCheckpoint.js","sourceRoot":"","sources":["../../src/agents/gitCheckpoint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function parseJsonc(text: string): unknown;
@@ -0,0 +1,42 @@
1
+ export function parseJsonc(text) {
2
+ const out = [];
3
+ let i = 0;
4
+ while (i < text.length) {
5
+ const ch = text[i];
6
+ if (ch === '"') {
7
+ out.push(ch);
8
+ i += 1;
9
+ while (i < text.length) {
10
+ const current = text[i];
11
+ out.push(current);
12
+ i += 1;
13
+ if (current === "\\" && i < text.length) {
14
+ out.push(text[i]);
15
+ i += 1;
16
+ continue;
17
+ }
18
+ if (current === '"')
19
+ break;
20
+ }
21
+ continue;
22
+ }
23
+ if (ch === "/" && text[i + 1] === "/") {
24
+ i += 2;
25
+ while (i < text.length && text[i] !== "\n")
26
+ i += 1;
27
+ continue;
28
+ }
29
+ if (ch === "/" && text[i + 1] === "*") {
30
+ i += 2;
31
+ while (i + 1 < text.length && !(text[i] === "*" && text[i + 1] === "/"))
32
+ i += 1;
33
+ i += 2;
34
+ continue;
35
+ }
36
+ out.push(ch);
37
+ i += 1;
38
+ }
39
+ const withoutTrailingCommas = out.join("").replace(/,(\s*[}\]])/g, "$1");
40
+ return JSON.parse(withoutTrailingCommas);
41
+ }
42
+ //# sourceMappingURL=jsonc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonc.js","sourceRoot":"","sources":["../../src/agents/jsonc.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;oBAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAC,CAAC,IAAI,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBACjF,IAAI,OAAO,KAAK,GAAG;oBAAE,MAAM;YAC7B,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACtC,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,CAAC,IAAI,CAAC,CAAC;YAAC,SAAS;QACvE,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACtC,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;gBAAE,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC,IAAI,CAAC,CAAC;YAAC,SAAS;QAC5G,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,qBAAqB,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAC3C,CAAC"}