pi-harness-runtime 0.9.25 → 0.10.0

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 (321) hide show
  1. package/CHANGELOG.md +27 -7
  2. package/README.md +51 -51
  3. package/harness/auto-compact.ts +1 -1
  4. package/harness/autonomous-review.ts +88 -0
  5. package/harness/context-compact-orchestrator.ts +23 -23
  6. package/harness/context-window-manager.ts +5 -5
  7. package/harness/continue-prompt.ts +3 -3
  8. package/harness/e2e/minimax-quota-scraper.ts +1 -1
  9. package/harness/forked-summarizer.ts +4 -4
  10. package/harness/herdr-agents.ts +91 -0
  11. package/harness/index.ts +5 -5
  12. package/harness/loop-code-agent.ts +284 -0
  13. package/harness/loop-controller.ts +201 -0
  14. package/harness/loop-review-agent.ts +295 -0
  15. package/harness/loop-runtime.ts +10 -10
  16. package/harness/loop-types.ts +118 -0
  17. package/harness/notification-events.ts +3 -3
  18. package/harness/output-limit-handler.ts +1 -1
  19. package/harness/partial-recovery.ts +3 -3
  20. package/harness/session-memory.ts +5 -5
  21. package/index.ts +46 -32
  22. package/package.json +1 -1
  23. package/packages/a2a-adapter/package.json +1 -1
  24. package/packages/a2a-adapter/src/types.ts +5 -5
  25. package/packages/auth/package.json +1 -1
  26. package/packages/autonomous-refactor/package.json +1 -1
  27. package/packages/autonomous-runtime/dist/inbox.d.ts +3 -3
  28. package/packages/autonomous-runtime/dist/inbox.js +12 -12
  29. package/packages/autonomous-runtime/dist/lease.js +14 -14
  30. package/packages/autonomous-runtime/dist/types.js +1 -1
  31. package/packages/autonomous-runtime/package.json +1 -1
  32. package/packages/autonomous-runtime/src/inbox.ts +12 -12
  33. package/packages/autonomous-runtime/src/lease.ts +15 -15
  34. package/packages/autonomous-runtime/src/types.ts +13 -13
  35. package/packages/autonomous-runtime/tsconfig.tsbuildinfo +1 -1
  36. package/packages/cache-strategy/package.json +1 -1
  37. package/packages/capability-registry/dist/types.js +1 -1
  38. package/packages/capability-registry/package.json +1 -1
  39. package/packages/capability-registry/src/types.ts +5 -5
  40. package/packages/checkpoint/README.md +6 -6
  41. package/packages/checkpoint/dist/differ.js +2 -2
  42. package/packages/checkpoint/dist/engine.js +3 -3
  43. package/packages/checkpoint/dist/index.js +5 -5
  44. package/packages/checkpoint/dist/storage.js +3 -3
  45. package/packages/checkpoint/dist/types.js +1 -1
  46. package/packages/checkpoint/package.json +1 -1
  47. package/packages/checkpoint/src/differ.ts +2 -2
  48. package/packages/checkpoint/src/engine.ts +3 -3
  49. package/packages/checkpoint/src/index.ts +5 -5
  50. package/packages/checkpoint/src/storage.ts +3 -3
  51. package/packages/checkpoint/src/types.ts +10 -10
  52. package/packages/checkpoint/tsconfig.tsbuildinfo +1 -1
  53. package/packages/cli-plugin-sdk/package.json +1 -1
  54. package/packages/clipboard/dist/src/clipboard.d.ts.map +1 -1
  55. package/packages/clipboard/dist/src/clipboard.js +15 -7
  56. package/packages/clipboard/dist/src/clipboard.js.map +1 -1
  57. package/packages/clipboard/package.json +1 -1
  58. package/packages/clipboard/src/clipboard.ts +16 -9
  59. package/packages/code-generation/README.md +13 -13
  60. package/packages/code-generation/dist/faker.js +4 -4
  61. package/packages/code-generation/dist/generator.js +3 -3
  62. package/packages/code-generation/dist/index.js +3 -3
  63. package/packages/code-generation/dist/templates/registry.js +1 -1
  64. package/packages/code-generation/dist/types.js +1 -1
  65. package/packages/code-generation/package.json +1 -1
  66. package/packages/code-generation/src/faker.ts +5 -5
  67. package/packages/code-generation/src/generator.ts +4 -4
  68. package/packages/code-generation/src/index.ts +3 -3
  69. package/packages/code-generation/src/templates/registry.ts +1 -1
  70. package/packages/code-generation/src/types.ts +10 -10
  71. package/packages/code-generation/tsconfig.tsbuildinfo +1 -1
  72. package/packages/code-review/README.md +13 -13
  73. package/packages/code-review/dist/engine.js +3 -3
  74. package/packages/code-review/dist/index.js +3 -3
  75. package/packages/code-review/dist/types.js +1 -1
  76. package/packages/code-review/package.json +1 -1
  77. package/packages/code-review/src/engine.ts +3 -3
  78. package/packages/code-review/src/index.ts +3 -3
  79. package/packages/code-review/src/types.ts +10 -10
  80. package/packages/code-review/tsconfig.tsbuildinfo +1 -1
  81. package/packages/codex-adapter/package.json +1 -1
  82. package/packages/context-compiler/dist/compiler.js +1 -1
  83. package/packages/context-compiler/package.json +1 -1
  84. package/packages/context-compiler/src/compiler.ts +1 -1
  85. package/packages/context-compiler/src/types.ts +11 -11
  86. package/packages/context-compiler/test/context-compiler.test.ts +11 -11
  87. package/packages/context-discovery/package.json +1 -1
  88. package/packages/context-manager/package.json +1 -1
  89. package/packages/cookie-sanitizer/README.md +27 -27
  90. package/packages/cookie-sanitizer/package.json +1 -1
  91. package/packages/cost-optimizer/package.json +1 -1
  92. package/packages/cost-optimizer/src/types.ts +5 -5
  93. package/packages/dependency-analyzer/package.json +1 -1
  94. package/packages/django-plugin/dist/analyzer.js +7 -7
  95. package/packages/django-plugin/package.json +1 -1
  96. package/packages/django-plugin/src/analyzer.ts +7 -7
  97. package/packages/doc-generator/package.json +1 -1
  98. package/packages/evaluation-engine/dist/engine.js +9 -9
  99. package/packages/evaluation-engine/package.json +1 -1
  100. package/packages/evaluation-engine/src/engine.ts +9 -9
  101. package/packages/evaluation-engine/src/types.ts +3 -3
  102. package/packages/evaluation-runner/package.json +1 -1
  103. package/packages/event-bus/dist/src/herdr-bus.d.ts +121 -0
  104. package/packages/event-bus/dist/src/herdr-bus.d.ts.map +1 -0
  105. package/packages/event-bus/dist/src/herdr-bus.js +322 -0
  106. package/packages/event-bus/dist/src/herdr-bus.js.map +1 -0
  107. package/packages/event-bus/dist/src/index.d.ts +2 -0
  108. package/packages/event-bus/dist/src/index.d.ts.map +1 -1
  109. package/packages/event-bus/dist/src/index.js +1 -0
  110. package/packages/event-bus/dist/src/index.js.map +1 -1
  111. package/packages/event-bus/package.json +1 -1
  112. package/packages/event-bus/src/herdr-bus.ts +525 -0
  113. package/packages/event-bus/src/index.ts +29 -0
  114. package/packages/event-store/package.json +1 -1
  115. package/packages/experience-replay/dist/replay.js +7 -7
  116. package/packages/experience-replay/package.json +1 -1
  117. package/packages/experience-replay/src/replay.ts +7 -7
  118. package/packages/experience-replay/src/types.ts +5 -5
  119. package/packages/feedback-collector/package.json +1 -1
  120. package/packages/framework-detector/README.md +18 -18
  121. package/packages/framework-detector/dist/detector.js +3 -3
  122. package/packages/framework-detector/dist/index.js +3 -3
  123. package/packages/framework-detector/dist/signatures/registry.js +24 -24
  124. package/packages/framework-detector/dist/types.js +1 -1
  125. package/packages/framework-detector/package.json +1 -1
  126. package/packages/framework-detector/src/detector.ts +3 -3
  127. package/packages/framework-detector/src/index.ts +3 -3
  128. package/packages/framework-detector/src/signatures/registry.ts +24 -24
  129. package/packages/framework-detector/src/types.ts +7 -7
  130. package/packages/framework-detector/tsconfig.tsbuildinfo +1 -1
  131. package/packages/framework-plugin-sdk/README.md +23 -23
  132. package/packages/framework-plugin-sdk/dist/index.js +2 -2
  133. package/packages/framework-plugin-sdk/dist/manager.js +3 -3
  134. package/packages/framework-plugin-sdk/dist/types.js +2 -2
  135. package/packages/framework-plugin-sdk/package.json +1 -1
  136. package/packages/framework-plugin-sdk/src/index.ts +2 -2
  137. package/packages/framework-plugin-sdk/src/manager.ts +3 -3
  138. package/packages/framework-plugin-sdk/src/types.ts +10 -10
  139. package/packages/framework-plugin-sdk/tsconfig.tsbuildinfo +1 -1
  140. package/packages/frappe-plugin/dist/analyzer.js +8 -8
  141. package/packages/frappe-plugin/dist/types.js +1 -1
  142. package/packages/frappe-plugin/package.json +1 -1
  143. package/packages/frappe-plugin/src/analyzer.ts +8 -8
  144. package/packages/frappe-plugin/src/types.ts +10 -10
  145. package/packages/generic-web-plugin/dist/analyzer.js +5 -5
  146. package/packages/generic-web-plugin/package.json +1 -1
  147. package/packages/generic-web-plugin/src/analyzer.ts +5 -5
  148. package/packages/health-monitor/package.json +1 -1
  149. package/packages/health-monitor/src/monitor.ts +1 -1
  150. package/packages/intent-analyzer/package.json +1 -1
  151. package/packages/laravel-plugin/dist/analyzer.js +11 -11
  152. package/packages/laravel-plugin/package.json +1 -1
  153. package/packages/laravel-plugin/src/analyzer.ts +11 -11
  154. package/packages/learning-engine/dist/engine.js +5 -5
  155. package/packages/learning-engine/dist/types.js +1 -1
  156. package/packages/learning-engine/package.json +1 -1
  157. package/packages/learning-engine/src/engine.ts +5 -5
  158. package/packages/learning-engine/src/types.ts +6 -6
  159. package/packages/mcp-adapter/package.json +1 -1
  160. package/packages/memory-engine/dist/engine.js +8 -8
  161. package/packages/memory-engine/dist/types.js +2 -2
  162. package/packages/memory-engine/package.json +1 -1
  163. package/packages/memory-engine/src/engine.ts +8 -8
  164. package/packages/memory-engine/src/types.ts +9 -9
  165. package/packages/model-registry/package.json +1 -1
  166. package/packages/model-registry/src/types.ts +4 -4
  167. package/packages/nextjs-plugin/dist/analyzer.js +9 -9
  168. package/packages/nextjs-plugin/package.json +1 -1
  169. package/packages/nextjs-plugin/src/analyzer.ts +9 -9
  170. package/packages/notification/dist/notification-center.js +1 -1
  171. package/packages/notification/package.json +1 -1
  172. package/packages/notification/src/notification-center.ts +1 -1
  173. package/packages/observability/dist/alerts.js +2 -2
  174. package/packages/observability/dist/health.js +4 -4
  175. package/packages/observability/dist/index.js +6 -6
  176. package/packages/observability/dist/logger.js +7 -7
  177. package/packages/observability/dist/metrics.js +11 -11
  178. package/packages/observability/dist/tracer.js +3 -3
  179. package/packages/observability/dist/types.js +1 -1
  180. package/packages/observability/package.json +1 -1
  181. package/packages/observability/src/alerts.ts +2 -2
  182. package/packages/observability/src/health.ts +4 -4
  183. package/packages/observability/src/index.ts +6 -6
  184. package/packages/observability/src/logger.ts +7 -7
  185. package/packages/observability/src/metrics.ts +11 -11
  186. package/packages/observability/src/tracer.ts +3 -3
  187. package/packages/observability/src/types.ts +7 -7
  188. package/packages/observability/test/observability.test.ts +4 -4
  189. package/packages/observability/tsconfig.tsbuildinfo +1 -1
  190. package/packages/performance-optimizer/dist/optimizer.js +1 -1
  191. package/packages/performance-optimizer/package.json +1 -1
  192. package/packages/performance-optimizer/src/optimizer.ts +1 -1
  193. package/packages/performance-optimizer/src/types.ts +4 -4
  194. package/packages/privilege-broker/package.json +1 -1
  195. package/packages/project-analyzer/dist/analyzer.js +4 -4
  196. package/packages/project-analyzer/dist/index.js +8 -8
  197. package/packages/project-analyzer/dist/signals.js +3 -3
  198. package/packages/project-analyzer/dist/types.js +1 -1
  199. package/packages/project-analyzer/package.json +1 -1
  200. package/packages/project-analyzer/src/analyzer.ts +4 -4
  201. package/packages/project-analyzer/src/index.ts +9 -9
  202. package/packages/project-analyzer/src/signals.ts +4 -4
  203. package/packages/project-analyzer/src/types.ts +15 -15
  204. package/packages/project-analyzer/test/index.test.ts +17 -17
  205. package/packages/project-analyzer/tsconfig.tsbuildinfo +1 -1
  206. package/packages/projection-engine/package.json +1 -1
  207. package/packages/prompt-compiler/dist/section-builder.js +1 -1
  208. package/packages/prompt-compiler/dist/types.js +3 -3
  209. package/packages/prompt-compiler/package.json +1 -1
  210. package/packages/prompt-compiler/src/section-builder.ts +1 -1
  211. package/packages/prompt-compiler/src/types.ts +12 -12
  212. package/packages/prompt-compiler/test/prompt-compiler.test.ts +12 -12
  213. package/packages/prompt-versioning/package.json +1 -1
  214. package/packages/provider-adapter-sdk/dist/builder.js +1 -1
  215. package/packages/provider-adapter-sdk/dist/index.js +5 -5
  216. package/packages/provider-adapter-sdk/dist/registry.js +1 -1
  217. package/packages/provider-adapter-sdk/dist/tester.js +1 -1
  218. package/packages/provider-adapter-sdk/dist/types.js +1 -1
  219. package/packages/provider-adapter-sdk/package.json +1 -1
  220. package/packages/provider-adapter-sdk/src/builder.ts +1 -1
  221. package/packages/provider-adapter-sdk/src/index.ts +6 -6
  222. package/packages/provider-adapter-sdk/src/registry.ts +1 -1
  223. package/packages/provider-adapter-sdk/src/tester.ts +1 -1
  224. package/packages/provider-adapter-sdk/src/types.ts +5 -5
  225. package/packages/provider-adapter-sdk/tsconfig.tsbuildinfo +1 -1
  226. package/packages/provider-router/package.json +1 -1
  227. package/packages/provider-router/src/types.ts +4 -4
  228. package/packages/provider-selector/package.json +1 -1
  229. package/packages/providers/dist/deepagents-adapter.js +1 -1
  230. package/packages/providers/package.json +1 -1
  231. package/packages/providers/src/deepagents-adapter.ts +1 -1
  232. package/packages/quota-manager/package.json +1 -1
  233. package/packages/rate-limiter/package.json +1 -1
  234. package/packages/react-vite-plugin/dist/analyzer.js +7 -7
  235. package/packages/react-vite-plugin/package.json +1 -1
  236. package/packages/react-vite-plugin/src/analyzer.ts +7 -7
  237. package/packages/release-manager/package.json +1 -1
  238. package/packages/requirement-compiler/dist/compiler.js +17 -17
  239. package/packages/requirement-compiler/dist/types.js +2 -2
  240. package/packages/requirement-compiler/package.json +1 -1
  241. package/packages/requirement-compiler/src/compiler.ts +17 -17
  242. package/packages/requirement-compiler/src/types.ts +21 -21
  243. package/packages/requirement-compiler/test/requirement-compiler.test.ts +17 -17
  244. package/packages/runtime/dist/command-executor.js +1 -1
  245. package/packages/runtime/dist/local-runtime-agent.js +1 -1
  246. package/packages/runtime/dist/policy-engine.js +1 -1
  247. package/packages/runtime/dist/runtime-api.js +1 -1
  248. package/packages/runtime/dist/workspace-manager.js +1 -1
  249. package/packages/runtime/package.json +1 -1
  250. package/packages/runtime/src/command-executor.ts +1 -1
  251. package/packages/runtime/src/local-runtime-agent.ts +1 -1
  252. package/packages/runtime/src/policy-engine.ts +1 -1
  253. package/packages/runtime/src/runtime-api.ts +1 -1
  254. package/packages/runtime/src/workspace-manager.ts +1 -1
  255. package/packages/scheduler/package.json +1 -1
  256. package/packages/scheduler-adapter/package.json +1 -1
  257. package/packages/session/README.md +18 -18
  258. package/packages/session/dist/history.js +3 -3
  259. package/packages/session/dist/index.js +5 -5
  260. package/packages/session/dist/manager.js +3 -3
  261. package/packages/session/dist/policy.js +2 -2
  262. package/packages/session/dist/store.js +2 -2
  263. package/packages/session/dist/types.js +1 -1
  264. package/packages/session/package.json +1 -1
  265. package/packages/session/src/history.ts +3 -3
  266. package/packages/session/src/index.ts +5 -5
  267. package/packages/session/src/manager.ts +3 -3
  268. package/packages/session/src/policy.ts +4 -4
  269. package/packages/session/src/store.ts +3 -3
  270. package/packages/session/src/types.ts +10 -10
  271. package/packages/session/tsconfig.tsbuildinfo +1 -1
  272. package/packages/session-api/package.json +1 -1
  273. package/packages/session-export/package.json +1 -1
  274. package/packages/shared-context/package.json +1 -1
  275. package/packages/skill-registry/package.json +1 -1
  276. package/packages/skill-registry/src/types.ts +4 -4
  277. package/packages/sprint-planner/package.json +1 -1
  278. package/packages/subscription-engine/package.json +1 -1
  279. package/packages/task-compiler/dist/compiler.js +7 -7
  280. package/packages/task-compiler/dist/decompose.js +11 -11
  281. package/packages/task-compiler/dist/file-scope.js +6 -6
  282. package/packages/task-compiler/dist/graph.js +6 -6
  283. package/packages/task-compiler/dist/index.js +2 -2
  284. package/packages/task-compiler/dist/types.js +5 -5
  285. package/packages/task-compiler/dist/validate.js +2 -2
  286. package/packages/task-compiler/dist/verification.js +2 -2
  287. package/packages/task-compiler/package.json +1 -1
  288. package/packages/task-compiler/src/command-policy.ts +1 -1
  289. package/packages/task-compiler/src/compiler.ts +7 -7
  290. package/packages/task-compiler/src/decompose.ts +11 -11
  291. package/packages/task-compiler/src/file-scope.ts +6 -6
  292. package/packages/task-compiler/src/graph.ts +6 -6
  293. package/packages/task-compiler/src/index.ts +3 -3
  294. package/packages/task-compiler/src/types.ts +14 -14
  295. package/packages/task-compiler/src/validate.ts +2 -2
  296. package/packages/task-compiler/src/verification.ts +2 -2
  297. package/packages/task-compiler/test/task-compiler.test.ts +10 -10
  298. package/packages/test-data-generator/README.md +13 -13
  299. package/packages/test-data-generator/dist/faker-adapter.js +4 -4
  300. package/packages/test-data-generator/dist/generator.js +3 -3
  301. package/packages/test-data-generator/dist/index.js +3 -3
  302. package/packages/test-data-generator/dist/types.js +1 -1
  303. package/packages/test-data-generator/package.json +1 -1
  304. package/packages/test-data-generator/src/faker-adapter.ts +4 -4
  305. package/packages/test-data-generator/src/generator.ts +3 -3
  306. package/packages/test-data-generator/src/index.ts +3 -3
  307. package/packages/test-data-generator/src/types.ts +9 -9
  308. package/packages/test-data-generator/tsconfig.tsbuildinfo +1 -1
  309. package/packages/test-generator/package.json +1 -1
  310. package/packages/token-estimation/package.json +1 -1
  311. package/packages/token-optimizer/package.json +1 -1
  312. package/packages/tui/package.json +1 -1
  313. package/packages/types/package.json +1 -1
  314. package/packages/types/src/agent-worker-types.ts +5 -5
  315. package/packages/types/src/runtime-types.ts +12 -12
  316. package/packages/types/tsconfig.tsbuildinfo +1 -1
  317. package/packages/workflow-events/package.json +1 -1
  318. package/packages/workspace-scanner/package.json +1 -1
  319. package/packages/worktree/package.json +1 -1
  320. package/renderer.ts +7 -7
  321. package/skills/harness-runtime/SKILL.md +15 -15
@@ -18,24 +18,24 @@ export async function compileRequirement(raw, deps) {
18
18
  ...deps,
19
19
  };
20
20
  const clock = deps?.clock ?? (() => new Date());
21
- // ─── Pre-flight validation ────────────────────────────────────────────────
21
+ // --- Pre-flight validation ------------------------------------------------
22
22
  if (!raw.text.trim() && !raw.title?.trim()) {
23
23
  throw new RequirementCompileError(RequirementCompileErrorCodes.EMPTY_REQUIREMENT, `Requirement ${raw.id} has no text or title.`, { requirementId: raw.id });
24
24
  }
25
- // ─── Step 1: Extract statements ─────────────────────────────────────────
25
+ // --- Step 1: Extract statements -----------------------------------------
26
26
  const extractor = deps?.extractor ?? { extract: extractStatements };
27
27
  const extractionResult = extractor.extract(raw);
28
- // ─── Step 2: Classify statements ──────────────────────────────────────
28
+ // --- Step 2: Classify statements --------------------------------------
29
29
  const classifier = deps?.classifier ?? { classify: classifyStatements };
30
30
  const classification = classifier.classify(extractionResult.statements, config);
31
- // ─── Step 3: Build goals ─────────────────────────────────────────────────
31
+ // --- Step 3: Build goals -------------------------------------------------
32
32
  const goals = classification.goals.map((stmt, i) => ({
33
33
  id: `goal-${i + 1}`,
34
34
  description: stmt.originalText,
35
35
  sourceRefs: [stmt.sourceRef],
36
36
  priority: undefined,
37
37
  }));
38
- // ─── Step 4: Build constraints ────────────────────────────────────────────
38
+ // --- Step 4: Build constraints --------------------------------------------
39
39
  const constraints = classification.constraints.map((stmt, i) => ({
40
40
  id: `constraint-${i + 1}`,
41
41
  description: stmt.originalText,
@@ -43,7 +43,7 @@ export async function compileRequirement(raw, deps) {
43
43
  sourceRefs: [stmt.sourceRef],
44
44
  blocking: true,
45
45
  }));
46
- // ─── Step 5: Build preferences ───────────────────────────────────────────
46
+ // --- Step 5: Build preferences -------------------------------------------
47
47
  const preferenceConstraints = classification.preferences.map((stmt, i) => ({
48
48
  id: `pref-constraint-${i + 1}`,
49
49
  description: stmt.originalText,
@@ -51,12 +51,12 @@ export async function compileRequirement(raw, deps) {
51
51
  sourceRefs: [stmt.sourceRef],
52
52
  blocking: false,
53
53
  }));
54
- // ─── Step 6: Detect ambiguities ───────────────────────────────────────────
54
+ // --- Step 6: Detect ambiguities -------------------------------------------
55
55
  const ambiguityDetector = deps?.ambiguityDetector ?? {
56
56
  detect: detectAmbiguities,
57
57
  };
58
58
  const ambiguities = ambiguityDetector.detect(classification, config);
59
- // ─── Step 7: Normalize acceptance criteria ────────────────────────────────
59
+ // --- Step 7: Normalize acceptance criteria --------------------------------
60
60
  const acceptanceNormalizer = deps?.acceptanceNormalizer ?? {
61
61
  normalize: normalizeAcceptanceCriteria,
62
62
  };
@@ -74,17 +74,17 @@ export async function compileRequirement(raw, deps) {
74
74
  automatable: false,
75
75
  }));
76
76
  }
77
- // ─── Step 8: Detect risks ─────────────────────────────────────────────────
77
+ // --- Step 8: Detect risks -------------------------------------------------
78
78
  const riskDetector = deps?.riskDetector ?? { detect: detectRisks };
79
79
  const riskTags = riskDetector.detect(classification);
80
- // ─── Step 9: Extract terminology ──────────────────────────────────────────
80
+ // --- Step 9: Extract terminology ------------------------------------------
81
81
  const terminology = classification.terminologyMentions.map((stmt) => ({
82
82
  term: stmt.originalText,
83
83
  definition: stmt.normalizedText,
84
84
  language: /[ก-๙]/.test(stmt.originalText) ? "th" : "en",
85
85
  sourceRef: stmt.sourceRef,
86
86
  }));
87
- // ─── Step 10: Identify actors ──────────────────────────────────────────────
87
+ // --- Step 10: Identify actors ----------------------------------------------
88
88
  const actors = [];
89
89
  const actorNames = new Set();
90
90
  // Scan all meaningful statements for actor mentions
@@ -143,7 +143,7 @@ export async function compileRequirement(raw, deps) {
143
143
  }
144
144
  }
145
145
  }
146
- // ─── Step 11: Identify non-goals ──────────────────────────────────────────
146
+ // --- Step 11: Identify non-goals ------------------------------------------
147
147
  const nonGoals = [];
148
148
  for (const stmt of classification.constraints) {
149
149
  // Explicit "will not" or "should not" statements in non-goal context
@@ -152,7 +152,7 @@ export async function compileRequirement(raw, deps) {
152
152
  nonGoals.push(stmt.originalText);
153
153
  }
154
154
  }
155
- // ─── Step 12: Build workflows ─────────────────────────────────────────────
155
+ // --- Step 12: Build workflows ---------------------------------------------
156
156
  const workflows = [];
157
157
  // Group consecutive statements into workflows heuristically
158
158
  const goalStatements = [
@@ -170,7 +170,7 @@ export async function compileRequirement(raw, deps) {
170
170
  sourceRefs: goalStatements.flatMap((s) => [s.sourceRef]),
171
171
  });
172
172
  }
173
- // ─── Step 13: Determine status ────────────────────────────────────────────
173
+ // --- Step 13: Determine status --------------------------------------------
174
174
  let status = "ready";
175
175
  const blockingAmbiguities = ambiguities.filter((a) => a.blocking);
176
176
  if (blockingAmbiguities.length > 0 &&
@@ -196,13 +196,13 @@ export async function compileRequirement(raw, deps) {
196
196
  (!raw.text.trim() || isVague)) {
197
197
  throw new RequirementCompileError(RequirementCompileErrorCodes.EMPTY_REQUIREMENT, `Requirement ${raw.id} contains no identifiable goals or constraints.`, { requirementId: raw.id });
198
198
  }
199
- // ─── Step 14: Build source references ────────────────────────────────────
199
+ // --- Step 14: Build source references ------------------------------------
200
200
  const sourceRefs = extractionResult.statements.map((s) => s.sourceRef);
201
- // ─── Step 15: Assemble problem statement ─────────────────────────────────
201
+ // --- Step 15: Assemble problem statement ---------------------------------
202
202
  const problemStatement = goals.length > 0
203
203
  ? goals.map((g) => g.description).join("; ")
204
204
  : (raw.title ?? raw.text.slice(0, 200));
205
- // ─── Step 16: Build final compiled requirement ────────────────────────────
205
+ // --- Step 16: Build final compiled requirement ----------------------------
206
206
  const compiled = {
207
207
  id: raw.id,
208
208
  title: raw.title ?? problemStatement.slice(0, 80),
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Type definitions for raw and compiled requirements.
5
5
  */
6
- // ─── SDK Version ────────────────────────────────────────────────────────────
6
+ // --- SDK Version ------------------------------------------------------------
7
7
  export const SDK_VERSION = "1.0.0";
8
8
  export const DEFAULT_COMPILER_CONFIG = {
9
9
  projectLanguage: "en",
@@ -101,7 +101,7 @@ export const DEFAULT_COMPILER_CONFIG = {
101
101
  "ควร",
102
102
  ],
103
103
  };
104
- // ─── Compiler Errors ──────────────────────────────────────────────────────
104
+ // --- Compiler Errors ------------------------------------------------------
105
105
  /**
106
106
  * Error codes for requirement compilation failures.
107
107
  * Use this enum-like object for programmatic error checking.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/requirement-compiler",
3
- "version": "0.9.24",
3
+ "version": "0.9.25",
4
4
  "description": "Compiles raw requirements into validated CompiledRequirement with ambiguity detection and risk tagging",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -34,7 +34,7 @@ export async function compileRequirement(
34
34
 
35
35
  const clock = deps?.clock ?? (() => new Date());
36
36
 
37
- // ─── Pre-flight validation ────────────────────────────────────────────────
37
+ // --- Pre-flight validation ------------------------------------------------
38
38
 
39
39
  if (!raw.text.trim() && !raw.title?.trim()) {
40
40
  throw new RequirementCompileError(
@@ -44,12 +44,12 @@ export async function compileRequirement(
44
44
  );
45
45
  }
46
46
 
47
- // ─── Step 1: Extract statements ─────────────────────────────────────────
47
+ // --- Step 1: Extract statements -----------------------------------------
48
48
 
49
49
  const extractor = deps?.extractor ?? { extract: extractStatements };
50
50
  const extractionResult = extractor.extract(raw);
51
51
 
52
- // ─── Step 2: Classify statements ──────────────────────────────────────
52
+ // --- Step 2: Classify statements --------------------------------------
53
53
 
54
54
  const classifier = deps?.classifier ?? { classify: classifyStatements };
55
55
  const classification: ClassificationResult = classifier.classify(
@@ -57,7 +57,7 @@ export async function compileRequirement(
57
57
  config,
58
58
  );
59
59
 
60
- // ─── Step 3: Build goals ─────────────────────────────────────────────────
60
+ // --- Step 3: Build goals -------------------------------------------------
61
61
 
62
62
  const goals = classification.goals.map((stmt, i) => ({
63
63
  id: `goal-${i + 1}`,
@@ -66,7 +66,7 @@ export async function compileRequirement(
66
66
  priority: undefined as "high" | "medium" | "low" | undefined,
67
67
  }));
68
68
 
69
- // ─── Step 4: Build constraints ────────────────────────────────────────────
69
+ // --- Step 4: Build constraints --------------------------------------------
70
70
 
71
71
  const constraints = classification.constraints.map((stmt, i) => ({
72
72
  id: `constraint-${i + 1}`,
@@ -76,7 +76,7 @@ export async function compileRequirement(
76
76
  blocking: true,
77
77
  }));
78
78
 
79
- // ─── Step 5: Build preferences ───────────────────────────────────────────
79
+ // --- Step 5: Build preferences -------------------------------------------
80
80
 
81
81
  const preferenceConstraints = classification.preferences.map((stmt, i) => ({
82
82
  id: `pref-constraint-${i + 1}`,
@@ -86,14 +86,14 @@ export async function compileRequirement(
86
86
  blocking: false,
87
87
  }));
88
88
 
89
- // ─── Step 6: Detect ambiguities ───────────────────────────────────────────
89
+ // --- Step 6: Detect ambiguities -------------------------------------------
90
90
 
91
91
  const ambiguityDetector = deps?.ambiguityDetector ?? {
92
92
  detect: detectAmbiguities,
93
93
  };
94
94
  const ambiguities = ambiguityDetector.detect(classification, config);
95
95
 
96
- // ─── Step 7: Normalize acceptance criteria ────────────────────────────────
96
+ // --- Step 7: Normalize acceptance criteria --------------------------------
97
97
 
98
98
  const acceptanceNormalizer = deps?.acceptanceNormalizer ?? {
99
99
  normalize: normalizeAcceptanceCriteria,
@@ -116,12 +116,12 @@ export async function compileRequirement(
116
116
  }));
117
117
  }
118
118
 
119
- // ─── Step 8: Detect risks ─────────────────────────────────────────────────
119
+ // --- Step 8: Detect risks -------------------------------------------------
120
120
 
121
121
  const riskDetector = deps?.riskDetector ?? { detect: detectRisks };
122
122
  const riskTags = riskDetector.detect(classification);
123
123
 
124
- // ─── Step 9: Extract terminology ──────────────────────────────────────────
124
+ // --- Step 9: Extract terminology ------------------------------------------
125
125
 
126
126
  const terminology = classification.terminologyMentions.map((stmt) => ({
127
127
  term: stmt.originalText,
@@ -130,7 +130,7 @@ export async function compileRequirement(
130
130
  sourceRef: stmt.sourceRef,
131
131
  }));
132
132
 
133
- // ─── Step 10: Identify actors ──────────────────────────────────────────────
133
+ // --- Step 10: Identify actors ----------------------------------------------
134
134
 
135
135
  const actors: CompiledRequirement["actors"] = [];
136
136
  const actorNames = new Set<string>();
@@ -208,7 +208,7 @@ export async function compileRequirement(
208
208
  }
209
209
  }
210
210
 
211
- // ─── Step 11: Identify non-goals ──────────────────────────────────────────
211
+ // --- Step 11: Identify non-goals ------------------------------------------
212
212
 
213
213
  const nonGoals: string[] = [];
214
214
  for (const stmt of classification.constraints) {
@@ -221,7 +221,7 @@ export async function compileRequirement(
221
221
  }
222
222
  }
223
223
 
224
- // ─── Step 12: Build workflows ─────────────────────────────────────────────
224
+ // --- Step 12: Build workflows ---------------------------------------------
225
225
 
226
226
  const workflows: CompiledRequirement["workflows"] = [];
227
227
  // Group consecutive statements into workflows heuristically
@@ -241,7 +241,7 @@ export async function compileRequirement(
241
241
  });
242
242
  }
243
243
 
244
- // ─── Step 13: Determine status ────────────────────────────────────────────
244
+ // --- Step 13: Determine status --------------------------------------------
245
245
 
246
246
  let status: CompiledRequirement["status"] = "ready";
247
247
 
@@ -287,18 +287,18 @@ export async function compileRequirement(
287
287
  );
288
288
  }
289
289
 
290
- // ─── Step 14: Build source references ────────────────────────────────────
290
+ // --- Step 14: Build source references ------------------------------------
291
291
 
292
292
  const sourceRefs = extractionResult.statements.map((s) => s.sourceRef);
293
293
 
294
- // ─── Step 15: Assemble problem statement ─────────────────────────────────
294
+ // --- Step 15: Assemble problem statement ---------------------------------
295
295
 
296
296
  const problemStatement =
297
297
  goals.length > 0
298
298
  ? goals.map((g) => g.description).join("; ")
299
299
  : (raw.title ?? raw.text.slice(0, 200));
300
300
 
301
- // ─── Step 16: Build final compiled requirement ────────────────────────────
301
+ // --- Step 16: Build final compiled requirement ----------------------------
302
302
 
303
303
  const compiled: CompiledRequirement = {
304
304
  id: raw.id,
@@ -4,11 +4,11 @@
4
4
  * Type definitions for raw and compiled requirements.
5
5
  */
6
6
 
7
- // ─── SDK Version ────────────────────────────────────────────────────────────
7
+ // --- SDK Version ------------------------------------------------------------
8
8
 
9
9
  export const SDK_VERSION = "1.0.0";
10
10
 
11
- // ─── Source Reference ─────────────────────────────────────────────────────
11
+ // --- Source Reference -----------------------------------------------------
12
12
 
13
13
  /**
14
14
  * Reference to a source location in the original requirement.
@@ -26,7 +26,7 @@ export interface SourceReference {
26
26
  text: string;
27
27
  }
28
28
 
29
- // ─── Attachment ────────────────────────────────────────────────────────────
29
+ // --- Attachment ------------------------------------------------------------
30
30
 
31
31
  /**
32
32
  * Reference to an attached file (screenshot, document, etc.).
@@ -42,7 +42,7 @@ export interface AttachmentReference {
42
42
  description?: string;
43
43
  }
44
44
 
45
- // ─── Raw Requirement (Input) ─────────────────────────────────────────────
45
+ // --- Raw Requirement (Input) ---------------------------------------------
46
46
 
47
47
  /**
48
48
  * Raw requirement as submitted by a user or received from an API.
@@ -64,7 +64,7 @@ export interface RawRequirement {
64
64
  submittedAt: string;
65
65
  }
66
66
 
67
- // ─── Statement Types ──────────────────────────────────────────────────────
67
+ // --- Statement Types ------------------------------------------------------
68
68
 
69
69
  /**
70
70
  * Kinds of statements extracted from raw requirement text.
@@ -109,7 +109,7 @@ export interface ExtractedStatement {
109
109
  userMarkedMandatory?: boolean;
110
110
  }
111
111
 
112
- // ─── Goals ────────────────────────────────────────────────────────────────
112
+ // --- Goals ----------------------------------------------------------------
113
113
 
114
114
  /**
115
115
  * A goal extracted from the requirement.
@@ -125,7 +125,7 @@ export interface RequirementGoal {
125
125
  priority?: "high" | "medium" | "low";
126
126
  }
127
127
 
128
- // ─── Constraints ──────────────────────────────────────────────────────────
128
+ // --- Constraints ----------------------------------------------------------
129
129
 
130
130
  /**
131
131
  * A constraint that the solution must satisfy.
@@ -145,7 +145,7 @@ export interface RequirementConstraint {
145
145
  blocking: boolean;
146
146
  }
147
147
 
148
- // ─── Actors ───────────────────────────────────────────────────────────────
148
+ // --- Actors ---------------------------------------------------------------
149
149
 
150
150
  /**
151
151
  * An actor (user role, system, service) identified in the requirement.
@@ -161,7 +161,7 @@ export interface RequirementActor {
161
161
  sourceRefs: SourceReference[];
162
162
  }
163
163
 
164
- // ─── Workflows ────────────────────────────────────────────────────────────
164
+ // --- Workflows ------------------------------------------------------------
165
165
 
166
166
  /**
167
167
  * A workflow or use case described in the requirement.
@@ -183,7 +183,7 @@ export interface RequirementWorkflow {
183
183
  sourceRefs: SourceReference[];
184
184
  }
185
185
 
186
- // ─── Acceptance Criteria ─────────────────────────────────────────────────
186
+ // --- Acceptance Criteria -------------------------------------------------
187
187
 
188
188
  /**
189
189
  * Normalized acceptance criterion using Given/When/Then format.
@@ -205,7 +205,7 @@ export interface AcceptanceCriterion {
205
205
  originalText?: string;
206
206
  }
207
207
 
208
- // ─── Ambiguities ──────────────────────────────────────────────────────────
208
+ // --- Ambiguities ----------------------------------------------------------
209
209
 
210
210
  /**
211
211
  * An ambiguous area in the requirement that needs clarification.
@@ -231,7 +231,7 @@ export interface RequirementAmbiguity {
231
231
  | "unknown";
232
232
  }
233
233
 
234
- // ─── Assumptions ─────────────────────────────────────────────────────────
234
+ // --- Assumptions ---------------------------------------------------------
235
235
 
236
236
  /**
237
237
  * An assumption that was made to fill a gap.
@@ -247,7 +247,7 @@ export interface RequirementAssumption {
247
247
  reversible: boolean;
248
248
  }
249
249
 
250
- // ─── Terminology ───────────────────────────────────────────────────────────
250
+ // --- Terminology -----------------------------------------------------------
251
251
 
252
252
  /**
253
253
  * Domain terminology mapping.
@@ -263,7 +263,7 @@ export interface TerminologyEntry {
263
263
  sourceRef?: SourceReference;
264
264
  }
265
265
 
266
- // ─── Risk Tags ────────────────────────────────────────────────────────────
266
+ // --- Risk Tags ------------------------------------------------------------
267
267
 
268
268
  /**
269
269
  * Risk areas that require additional review.
@@ -289,7 +289,7 @@ export interface RiskTag {
289
289
  description: string;
290
290
  }
291
291
 
292
- // ─── Compilation Status ───────────────────────────────────────────────────
292
+ // --- Compilation Status ---------------------------------------------------
293
293
 
294
294
  /**
295
295
  * Status of a compiled requirement.
@@ -302,7 +302,7 @@ export type RequirementStatus =
302
302
  /** Rejected (empty, impossible, or policy violation) */
303
303
  | "rejected";
304
304
 
305
- // ─── Compiled Requirement (Output) ────────────────────────────────────────
305
+ // --- Compiled Requirement (Output) ----------------------------------------
306
306
 
307
307
  /**
308
308
  * Fully compiled requirement with validated structure.
@@ -344,7 +344,7 @@ export interface CompiledRequirement {
344
344
  compiledAt: string;
345
345
  }
346
346
 
347
- // ─── Extraction Result ────────────────────────────────────────────────────
347
+ // --- Extraction Result ----------------------------------------------------
348
348
 
349
349
  /**
350
350
  * Result of statement extraction from raw text.
@@ -356,7 +356,7 @@ export interface ExtractionResult {
356
356
  lines: string[];
357
357
  }
358
358
 
359
- // ─── Classification Result ─────────────────────────────────────────────────
359
+ // --- Classification Result -------------------------------------------------
360
360
 
361
361
  /**
362
362
  * Result of statement classification.
@@ -384,7 +384,7 @@ export interface ClassificationResult {
384
384
  unknown: ExtractedStatement[];
385
385
  }
386
386
 
387
- // ─── Compiler Configuration ────────────────────────────────────────────────
387
+ // --- Compiler Configuration ------------------------------------------------
388
388
 
389
389
  /**
390
390
  * Configuration for the Requirement Compiler.
@@ -517,7 +517,7 @@ export const DEFAULT_COMPILER_CONFIG: RequirementCompilerConfig = {
517
517
  ],
518
518
  };
519
519
 
520
- // ─── Compiler Dependencies ─────────────────────────────────────────────────
520
+ // --- Compiler Dependencies -------------------------------------------------
521
521
 
522
522
  /**
523
523
  * Dependencies injected into the compiler.
@@ -564,7 +564,7 @@ export interface AcceptanceNormalizer {
564
564
  normalize(statements: ExtractedStatement[]): AcceptanceCriterion[];
565
565
  }
566
566
 
567
- // ─── Compiler Errors ──────────────────────────────────────────────────────
567
+ // --- Compiler Errors ------------------------------------------------------
568
568
 
569
569
  /**
570
570
  * Error codes for requirement compilation failures.
@@ -26,7 +26,7 @@ import {
26
26
  } from "../src/index.js";
27
27
  import type { RawRequirement, ExtractedStatement } from "../src/types.js";
28
28
 
29
- // ─── Test utilities ──────────────────────────────────────────────────────
29
+ // --- Test utilities ------------------------------------------------------
30
30
 
31
31
  function makeRaw(
32
32
  text: string,
@@ -47,7 +47,7 @@ async function compile(text: string, overrides?: Partial<RawRequirement>) {
47
47
  return compileRequirement(makeRaw(text, overrides));
48
48
  }
49
49
 
50
- // ─── Test 1: Explicit requirement remains explicit ─────────────────────
50
+ // --- Test 1: Explicit requirement remains explicit ---------------------
51
51
 
52
52
  describe("Explicit requirement remains explicit", () => {
53
53
  it("goal statement becomes a goal", async () => {
@@ -71,7 +71,7 @@ describe("Explicit requirement remains explicit", () => {
71
71
  });
72
72
  });
73
73
 
74
- // ─── Test 2: Preference is NOT promoted to mandatory ───────────────────
74
+ // --- Test 2: Preference is NOT promoted to mandatory -------------------
75
75
 
76
76
  describe("Preference is not promoted to mandatory", () => {
77
77
  it("preference becomes non-blocking constraint", async () => {
@@ -95,7 +95,7 @@ describe("Preference is not promoted to mandatory", () => {
95
95
  });
96
96
  });
97
97
 
98
- // ─── Test 3: Contradictory statements create ambiguity ─────────────────
98
+ // --- Test 3: Contradictory statements create ambiguity -----------------
99
99
 
100
100
  describe("Contradictory statements create ambiguity", () => {
101
101
  it("opposing must/must not creates contradiction ambiguity", async () => {
@@ -159,7 +159,7 @@ describe("Contradictory statements create ambiguity", () => {
159
159
  });
160
160
  });
161
161
 
162
- // ─── Test 4: Acceptance criteria normalize to Given/When/Then ───────────
162
+ // --- Test 4: Acceptance criteria normalize to Given/When/Then -----------
163
163
 
164
164
  describe("Acceptance criteria normalize to Given/When/Then", () => {
165
165
  it("Given/When/Then statement parses correctly", () => {
@@ -236,7 +236,7 @@ describe("Acceptance criteria normalize to Given/When/Then", () => {
236
236
  });
237
237
  });
238
238
 
239
- // ─── Test 5: Thai terminology preserved in glossary ────────────────────
239
+ // --- Test 5: Thai terminology preserved in glossary --------------------
240
240
 
241
241
  describe("Thai terminology remains in glossary", () => {
242
242
  it("Thai term is preserved in terminology", async () => {
@@ -267,7 +267,7 @@ describe("Thai terminology remains in glossary", () => {
267
267
  });
268
268
  });
269
269
 
270
- // ─── Test 6: Financial requirement receives risk tag ──────────────────
270
+ // --- Test 6: Financial requirement receives risk tag ------------------
271
271
 
272
272
  describe("Financial requirement receives risk tag", () => {
273
273
  it("payment keyword triggers financial risk", async () => {
@@ -300,7 +300,7 @@ describe("Financial requirement receives risk tag", () => {
300
300
  });
301
301
  });
302
302
 
303
- // ─── Test 7: Empty requirement is rejected ───────────────────────────
303
+ // --- Test 7: Empty requirement is rejected ---------------------------
304
304
 
305
305
  describe("Empty requirement is rejected", () => {
306
306
  it("rejects empty text requirement", async () => {
@@ -345,7 +345,7 @@ describe("Empty requirement is rejected", () => {
345
345
  });
346
346
  });
347
347
 
348
- // ─── Test 8: Source references remain traceable ─────────────────────────
348
+ // --- Test 8: Source references remain traceable -------------------------
349
349
 
350
350
  describe("Source references remain traceable", () => {
351
351
  it("every goal has a source reference", async () => {
@@ -408,7 +408,7 @@ describe("Source references remain traceable", () => {
408
408
  });
409
409
  });
410
410
 
411
- // ─── Extractor tests ─────────────────────────────────────────────────────
411
+ // --- Extractor tests -----------------------------------------------------
412
412
 
413
413
  describe("Statement extraction", () => {
414
414
  it("extracts numbered list items", () => {
@@ -433,7 +433,7 @@ describe("Statement extraction", () => {
433
433
  });
434
434
  });
435
435
 
436
- // ─── Classifier tests ───────────────────────────────────────────────────
436
+ // --- Classifier tests ---------------------------------------------------
437
437
 
438
438
  describe("Statement classification", () => {
439
439
  it("classifies must statements as explicit_behavior", () => {
@@ -492,7 +492,7 @@ describe("Statement classification", () => {
492
492
  });
493
493
  });
494
494
 
495
- // ─── Risk detection tests ────────────────────────────────────────────────
495
+ // --- Risk detection tests ------------------------------------------------
496
496
 
497
497
  describe("Risk detection", () => {
498
498
  it("detects destructive operation risk", async () => {
@@ -527,7 +527,7 @@ describe("Risk detection", () => {
527
527
  });
528
528
  });
529
529
 
530
- // ─── Ambiguity detection tests ───────────────────────────────────────────
530
+ // --- Ambiguity detection tests -------------------------------------------
531
531
 
532
532
  describe("Ambiguity detection", () => {
533
533
  it("detects vague terms", () => {
@@ -646,7 +646,7 @@ describe("Ambiguity detection", () => {
646
646
  });
647
647
  });
648
648
 
649
- // ─── Workflow tests ──────────────────────────────────────────────────────
649
+ // --- Workflow tests ------------------------------------------------------
650
650
 
651
651
  describe("Workflow extraction", () => {
652
652
  it("groups multiple goals into a workflow", async () => {
@@ -661,7 +661,7 @@ describe("Workflow extraction", () => {
661
661
  });
662
662
  });
663
663
 
664
- // ─── Actor extraction tests ─────────────────────────────────────────────
664
+ // --- Actor extraction tests ---------------------------------------------
665
665
 
666
666
  describe("Actor extraction", () => {
667
667
  it("extracts actors from statements", async () => {
@@ -677,7 +677,7 @@ describe("Actor extraction", () => {
677
677
  });
678
678
  });
679
679
 
680
- // ─── Error handling tests ──────────────────────────────────────────────
680
+ // --- Error handling tests ----------------------------------------------
681
681
 
682
682
  describe("Error handling", () => {
683
683
  it("RequirementCompileError has correct properties", () => {
@@ -712,7 +712,7 @@ describe("Error handling", () => {
712
712
  });
713
713
  });
714
714
 
715
- // ─── Multilingual tests ─────────────────────────────────────────────────
715
+ // --- Multilingual tests -------------------------------------------------
716
716
 
717
717
  describe("Multilingual handling", () => {
718
718
  it("preserves Thai business terms", async () => {
@@ -346,7 +346,7 @@ export class CommandExecutor extends EventEmitter {
346
346
  getPolicy() {
347
347
  return { ...this.policy };
348
348
  }
349
- // ─── Private Methods ────────────────────────────────────────────────
349
+ // --- Private Methods ------------------------------------------------
350
350
  waitForExit(_proc) {
351
351
  // Note: This method is for synchronous execution.
352
352
  // For async execution, use execAsync() which properly handles events.
@@ -161,7 +161,7 @@ export class LocalRuntimeAgent extends EventEmitter {
161
161
  getAuthSessions() {
162
162
  return Array.from(this.authSessions.values());
163
163
  }
164
- // ─── Private Methods ────────────────────────────────────────────────
164
+ // --- Private Methods ------------------------------------------------
165
165
  async handleRequest(req, res) {
166
166
  const url = new URL(req.url ?? "/", `http://${req.headers.host}`);
167
167
  const path = url.pathname;
@@ -364,7 +364,7 @@ export class PolicyEngine extends EventEmitter {
364
364
  return false;
365
365
  }
366
366
  }
367
- // ─── Private Methods ────────────────────────────────────────────────
367
+ // --- Private Methods ------------------------------------------------
368
368
  matchesPolicy(context, policy) {
369
369
  const condition = policy.condition;
370
370
  // Check subject