@mobrienv/autoloop-harness 0.8.0 → 0.9.2

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 (116) hide show
  1. package/dist/acceptance.d.ts +31 -0
  2. package/dist/acceptance.js +69 -0
  3. package/dist/acceptance.js.map +1 -0
  4. package/dist/ask.d.ts +16 -0
  5. package/dist/ask.js +47 -0
  6. package/dist/ask.js.map +1 -0
  7. package/dist/backend/types.d.ts +3 -0
  8. package/dist/backend/types.js +3 -0
  9. package/dist/backend/types.js.map +1 -1
  10. package/dist/circuit-breaker.d.ts +27 -0
  11. package/dist/circuit-breaker.js +41 -0
  12. package/dist/circuit-breaker.js.map +1 -0
  13. package/dist/completion-lint.d.ts +29 -0
  14. package/dist/completion-lint.js +51 -0
  15. package/dist/completion-lint.js.map +1 -0
  16. package/dist/config-helpers.js +141 -8
  17. package/dist/config-helpers.js.map +1 -1
  18. package/dist/control/command-adapter.d.ts +19 -0
  19. package/dist/control/command-adapter.js +57 -0
  20. package/dist/control/command-adapter.js.map +1 -0
  21. package/dist/control/dispatch.js +14 -0
  22. package/dist/control/dispatch.js.map +1 -1
  23. package/dist/control/types.d.ts +11 -2
  24. package/dist/display.d.ts +9 -2
  25. package/dist/display.js +37 -1
  26. package/dist/display.js.map +1 -1
  27. package/dist/emit.d.ts +27 -0
  28. package/dist/emit.js +321 -2
  29. package/dist/emit.js.map +1 -1
  30. package/dist/events.d.ts +36 -3
  31. package/dist/fanout-runner.d.ts +25 -0
  32. package/dist/fanout-runner.js +54 -0
  33. package/dist/fanout-runner.js.map +1 -0
  34. package/dist/file-mod-audit.d.ts +29 -0
  35. package/dist/file-mod-audit.js +63 -0
  36. package/dist/file-mod-audit.js.map +1 -0
  37. package/dist/git-diff.d.ts +19 -0
  38. package/dist/git-diff.js +74 -0
  39. package/dist/git-diff.js.map +1 -0
  40. package/dist/hooks.d.ts +78 -0
  41. package/dist/hooks.js +239 -0
  42. package/dist/hooks.js.map +1 -0
  43. package/dist/index.d.ts +15 -2
  44. package/dist/index.js +181 -5
  45. package/dist/index.js.map +1 -1
  46. package/dist/intent.d.ts +45 -0
  47. package/dist/intent.js +127 -0
  48. package/dist/intent.js.map +1 -0
  49. package/dist/iteration-diff.d.ts +32 -0
  50. package/dist/iteration-diff.js +92 -0
  51. package/dist/iteration-diff.js.map +1 -0
  52. package/dist/iteration.d.ts +20 -0
  53. package/dist/iteration.js +383 -16
  54. package/dist/iteration.js.map +1 -1
  55. package/dist/metareview.d.ts +9 -1
  56. package/dist/metareview.js +68 -30
  57. package/dist/metareview.js.map +1 -1
  58. package/dist/notify.d.ts +9 -2
  59. package/dist/notify.js +16 -4
  60. package/dist/notify.js.map +1 -1
  61. package/dist/parallel.d.ts +16 -0
  62. package/dist/parallel.js +28 -1
  63. package/dist/parallel.js.map +1 -1
  64. package/dist/postconditions.d.ts +25 -0
  65. package/dist/postconditions.js +107 -0
  66. package/dist/postconditions.js.map +1 -0
  67. package/dist/postfire-verify.d.ts +31 -0
  68. package/dist/postfire-verify.js +64 -0
  69. package/dist/postfire-verify.js.map +1 -0
  70. package/dist/premature-quit.d.ts +25 -0
  71. package/dist/premature-quit.js +54 -0
  72. package/dist/premature-quit.js.map +1 -0
  73. package/dist/progress.d.ts +20 -0
  74. package/dist/progress.js +56 -0
  75. package/dist/progress.js.map +1 -0
  76. package/dist/prompt.js +8 -2
  77. package/dist/prompt.js.map +1 -1
  78. package/dist/provisional.d.ts +42 -0
  79. package/dist/provisional.js +92 -0
  80. package/dist/provisional.js.map +1 -0
  81. package/dist/registry-bridge.js +25 -0
  82. package/dist/registry-bridge.js.map +1 -1
  83. package/dist/resume.d.ts +61 -0
  84. package/dist/resume.js +226 -0
  85. package/dist/resume.js.map +1 -0
  86. package/dist/scratchpad.js +27 -8
  87. package/dist/scratchpad.js.map +1 -1
  88. package/dist/stage.d.ts +21 -0
  89. package/dist/stage.js +131 -0
  90. package/dist/stage.js.map +1 -0
  91. package/dist/stop.d.ts +29 -2
  92. package/dist/stop.js +106 -0
  93. package/dist/stop.js.map +1 -1
  94. package/dist/suspend-state.d.ts +32 -0
  95. package/dist/suspend-state.js +104 -0
  96. package/dist/suspend-state.js.map +1 -0
  97. package/dist/tamper.d.ts +21 -0
  98. package/dist/tamper.js +88 -0
  99. package/dist/tamper.js.map +1 -0
  100. package/dist/types.d.ts +247 -2
  101. package/dist/types.js +91 -1
  102. package/dist/types.js.map +1 -1
  103. package/dist/wave/finalize-wave.d.ts +15 -5
  104. package/dist/wave/finalize-wave.js +56 -2
  105. package/dist/wave/finalize-wave.js.map +1 -1
  106. package/dist/wave/launch-branches.d.ts +23 -2
  107. package/dist/wave/launch-branches.js +56 -3
  108. package/dist/wave/launch-branches.js.map +1 -1
  109. package/dist/wave/stage-branch-runner.d.ts +12 -0
  110. package/dist/wave/stage-branch-runner.js +130 -0
  111. package/dist/wave/stage-branch-runner.js.map +1 -0
  112. package/dist/wave/types.d.ts +40 -2
  113. package/dist/wave.d.ts +32 -1
  114. package/dist/wave.js +163 -34
  115. package/dist/wave.js.map +1 -1
  116. package/package.json +83 -3
@@ -1 +1 @@
1
- {"version":3,"file":"display.js","sourceRoot":"","sources":["../src/display.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAI5D,MAAM,UAAU,YAAY,CAAC,OAAmB,EAAE,IAAiB;IACjE,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG;QACZ,mBAAmB;QACnB,qBAAqB;QACrB,WAAW,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QAC/B,eAAe,OAAO,CAAC,UAAU,EAAE;QACnC,gBAAgB,OAAO,CAAC,UAAU,EAAE;QACpC,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;QACpC,WAAW,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QAClC,iBAAiB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QACpC,uBAAuB,IAAI,CAAC,KAAK,CAAC,QAAQ,iCAAiC;QAC3E,GAAG,IAAI;KACR,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,gBAAgB;YACnB,OAAO;gBACL,2GAA2G;aAC5G,CAAC;QACJ,KAAK,iBAAiB;YACpB,OAAO;gBACL,kGAAkG;aACnG,CAAC;QACJ,KAAK,gBAAgB;YACnB,OAAO;gBACL,0HAA0H;aAC3H,CAAC;QACJ;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAiB,EACjB,IAAsB;IAEtB,MAAM,QAAQ,GAAG,SAAS,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,CAAC,WAAW,YAAY,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;IAC7H,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CACT,6BAA6B,IAAI,CAAC,YAAY,gBAAgB,CAC/D,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,iBAAiB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC;IAC9E,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CACT,+BAA+B,IAAI,CAAC,YAAY,gBAAgB,CACjE,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAsB,EACtB,QAAgB;IAEhB,IAAI,CAAC,uBAAuB,EAAE;QAAE,OAAO;IACvC,MAAM,OAAO,GACX,QAAQ,IAAI,EAAE;QACZ,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,QAAQ,GAAG,EAAE,GAAG;QACnD,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC;IACrB,MAAM,KAAK,GAAG,sBAAsB,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAOjC;IACC,MAAM,KAAK,GAAG;QACZ,YAAY;QACZ,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;QAChC,UAAU,IAAI,CAAC,KAAK,EAAE;QACtB,QAAQ,IAAI,CAAC,SAAS,EAAE;QACxB,QAAQ,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;QAC9C,UAAU,IAAI,CAAC,WAAW,IAAI,QAAQ,EAAE;KACzC,CAAC;IACF,IAAI,IAAI,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAe;IACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,+BAA+B,SAAS,GAAG,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,WAAmB,GAAG;IAEtB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CACT,2BAA2B,KAAK,OAAO,KAAK,CAAC,MAAM,YAAY,CAChE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,UAAkB;IAElB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO;IACzB,MAAM,MAAM,GAAG,UAAU;QACvB,CAAC,CAAC,gDAAgD,UAAU,KAAK;QACjE,CAAC,CAAC,sCAAsC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAChE,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,QAAQ,CAAC,+BAA+B,EAAE;YAC3D,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,CAAS;IAChD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAiB,EAAE,KAAa,EAAE,OAAe;IACnE,MAAM,KAAK,GAA2B;QACpC,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,CAAC;KACR,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,OAAe;IAClE,qEAAqE;IACrE,2DAA2D;IAC3D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAAe;IAC9D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../src/display.ts"],"names":[],"mappings":"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"}
package/dist/emit.d.ts CHANGED
@@ -11,6 +11,33 @@ export interface EmitResult {
11
11
  error?: string;
12
12
  }
13
13
  export declare function emit(projectDir: string, topic: string, payload: string): EmitResult;
14
+ /**
15
+ * Parse `payload` as a JSON object, returning its fields if (and only if) the
16
+ * whole payload is a well-formed JSON object literal. This is the ONE
17
+ * definition of "structured branch output": the evidence-gate keys check
18
+ * (`payloadEvidenceKeys`) and the fan-out stage branch runner both parse
19
+ * through this function, so "a branch emitted structured data" means the same
20
+ * thing everywhere. A branch whose payload does not parse as a JSON object
21
+ * (free prose, a bare string, an array, ...) is not structured — callers treat
22
+ * that as a dead/schema-invalid branch rather than guessing at fields.
23
+ */
24
+ export declare function parseJsonObjectPayload(payload: string): Record<string, unknown> | undefined;
25
+ /**
26
+ * Evidence keys present in a payload. A key is "present" only when it carries a
27
+ * *machine-checkable* value:
28
+ *
29
+ * - a `key=value` token (the value must immediately follow `=`), or
30
+ * - a top-level key in a JSON object payload with a non-empty scalar value.
31
+ *
32
+ * The `=` (or JSON) requirement is deliberate: a free-prose `key: value` form
33
+ * would let ordinary English that merely mentions a required word satisfy the
34
+ * gate (e.g. "tests: all green, coverage: looks good"), defeating the point of
35
+ * requiring proof. So colon-prose does NOT count — agents must emit structured
36
+ * `key=value` pairs or a JSON object. Matching is case-sensitive on the key.
37
+ */
38
+ export declare function payloadEvidenceKeys(payload: string): Set<string>;
39
+ /** Required evidence keys absent from the payload, in declaration order. */
40
+ export declare function missingEvidence(requires: string[], payload: string): string[];
14
41
  export declare function invalidEvent(emittedTopic: string, allowedEvents: string[], parallelEnabled: boolean, completionEvent: string): boolean;
15
42
  export declare function parallelDispatchBase(topic: string): string;
16
43
  export declare function parallelJoinedTopic(topic: string): string;
package/dist/emit.js CHANGED
@@ -1,10 +1,15 @@
1
+ import { spawnSync } from "node:child_process";
1
2
  import { mkdirSync } from "node:fs";
2
3
  import { dirname } from "node:path";
3
4
  import { joinCsv, jsonField, listText, splitCsv, } from "@mobrienv/autoloop-core";
4
5
  import * as config from "@mobrienv/autoloop-core/config";
6
+ import { classifyGateOutcome, validateEvidenceRequirement, } from "@mobrienv/autoloop-core/evidence";
5
7
  import { appendAgentEvent, appendEvent, latestIterationForRun, latestRunId, } from "@mobrienv/autoloop-core/journal";
6
- import { materializeOpenFrom } from "@mobrienv/autoloop-core/tasks";
8
+ import { materializeOpenFrom, resolveFile, } from "@mobrienv/autoloop-core/tasks";
7
9
  import * as topology from "@mobrienv/autoloop-core/topology";
10
+ import { printHookOutput } from "./display.js";
11
+ import { parseMutationDirective } from "./hooks.js";
12
+ import { writeSuspendState } from "./suspend-state.js";
8
13
  const COORDINATION_TOPICS = new Set([
9
14
  "issue.discovered",
10
15
  "issue.resolved",
@@ -61,10 +66,152 @@ function dispatchParallelTopic(topic) {
61
66
  export function reservedParallelJoinedTopic(topic) {
62
67
  return topic.endsWith(".parallel.joined");
63
68
  }
69
+ /**
70
+ * Run pre_emit/post_emit hooks. `emit()` runs out-of-process (the agent
71
+ * invokes the `autoloops emit` tool script, which spawns a fresh CLI process
72
+ * calling `harness.emit()`) so there is no live `LoopContext` to drive
73
+ * `runPhaseHooks` through — this is a disk/config-driven parallel
74
+ * implementation reading `HookSpec`s straight from the project's raw TOML.
75
+ *
76
+ * `on_error = "suspend"` is honored as `block` here (see design note: the
77
+ * emit subprocess cannot itself block the harness's iteration loop) but ALSO
78
+ * writes durable suspend state, so the harness detects it at the next
79
+ * iteration boundary (`runIteration` start) and halts there instead of
80
+ * silently continuing.
81
+ */
82
+ function runEmitPhaseHooks(projectDir, journalFile, phase, runId, iteration, topic, payload) {
83
+ const specs = config
84
+ .loadHookSpecs(projectDir)
85
+ .filter((s) => s.phase === phase);
86
+ const outcome = { blocked: false };
87
+ for (const spec of specs) {
88
+ if (!spec.command)
89
+ continue;
90
+ const env = {
91
+ ...process.env,
92
+ AUTOLOOP_PROJECT_DIR: projectDir,
93
+ AUTOLOOP_RUN_ID: runId,
94
+ AUTOLOOP_ITERATION: iteration,
95
+ AUTOLOOP_EMIT_TOPIC: outcome.mutatedTopic ?? topic,
96
+ AUTOLOOP_EMIT_PAYLOAD: outcome.mutatedPayload ?? payload,
97
+ };
98
+ const result = spawnSync(spec.command, {
99
+ shell: true,
100
+ cwd: projectDir,
101
+ encoding: "utf-8",
102
+ env,
103
+ });
104
+ const combined = (result.stdout ?? "") +
105
+ (result.stderr ? `\n[stderr]\n${result.stderr}` : "");
106
+ const status = result.status ?? -1;
107
+ const failed = status !== 0 || Boolean(result.error);
108
+ appendEvent(journalFile, runId, iteration, "hook.output", `"hook": ${JSON.stringify(phase)}, "exit_code": ${status}, "output": ${JSON.stringify(combined.trim())}`);
109
+ printHookOutput(phase, status, combined.trim(), failed);
110
+ if (!failed && spec.mutate === "event") {
111
+ const directive = parseMutationDirective(combined.split("\n[stderr]\n")[0], "event");
112
+ if (directive) {
113
+ if (directive.topic !== undefined)
114
+ outcome.mutatedTopic = directive.topic;
115
+ if (directive.payload !== undefined)
116
+ outcome.mutatedPayload = directive.payload;
117
+ }
118
+ }
119
+ if (!failed)
120
+ continue;
121
+ const detail = (result.stderr ?? "").trim() || (result.stdout ?? "").trim() || "";
122
+ const msg = `hook ${phase} failed (exit ${status}): ${detail.split("\n")[0] ?? ""}`;
123
+ if (spec.onError === "warn")
124
+ continue;
125
+ outcome.blocked = true;
126
+ outcome.blockedMessage = msg;
127
+ if (spec.onError === "suspend") {
128
+ const stateDir = process.env.AUTOLOOP_STATE_DIR || config.stateDirPath(projectDir);
129
+ writeSuspendState(stateDir, {
130
+ runId,
131
+ phase,
132
+ iteration: Number(iteration) || 0,
133
+ reason: msg,
134
+ hookCommand: spec.command,
135
+ createdAt: new Date().toISOString(),
136
+ resumeIteration: Number(iteration) || 0,
137
+ }, journalFile);
138
+ }
139
+ return outcome;
140
+ }
141
+ return outcome;
142
+ }
64
143
  export function emit(projectDir, topic, payload) {
144
+ const result = emitCore(projectDir, topic, payload);
145
+ if (!result.ok)
146
+ return result;
147
+ // post_emit hooks run after a successful accept. They cannot un-journal the
148
+ // already-accepted event, but a `block` policy still surfaces as a failed
149
+ // result (visible to the agent/CLI caller) and a `suspend` policy writes
150
+ // durable suspend state for the harness to catch at the next iteration
151
+ // boundary.
152
+ const journalFile = resolveEmitJournalFile(projectDir);
153
+ const validation = emitValidationContext(projectDir, journalFile);
154
+ const postEmit = runEmitPhaseHooks(projectDir, journalFile, "post_emit", validation.runId, validation.iteration, result.topic ?? topic, payload);
155
+ if (postEmit.blocked) {
156
+ return {
157
+ ok: false,
158
+ topic: result.topic,
159
+ error: postEmit.blockedMessage ?? "post_emit hook blocked this event",
160
+ };
161
+ }
162
+ return result;
163
+ }
164
+ function emitCore(projectDir, topic, payload) {
65
165
  const journalFile = resolveEmitJournalFile(projectDir);
66
166
  mkdirSync(dirname(journalFile), { recursive: true });
67
167
  const validation = emitValidationContext(projectDir, journalFile);
168
+ // pre_emit hooks: run before any gating so a configured mutation can steer
169
+ // routing/gate decisions too. Runs disk/config-driven (see
170
+ // `runEmitPhaseHooks`) since this call is out-of-process from the harness.
171
+ const preEmit = runEmitPhaseHooks(projectDir, journalFile, "pre_emit", validation.runId, validation.iteration, topic, payload);
172
+ if (preEmit.mutatedTopic !== undefined)
173
+ topic = preEmit.mutatedTopic;
174
+ if (preEmit.mutatedPayload !== undefined)
175
+ payload = preEmit.mutatedPayload;
176
+ if (preEmit.blocked) {
177
+ return {
178
+ ok: false,
179
+ topic,
180
+ error: preEmit.blockedMessage ?? "pre_emit hook blocked this event",
181
+ };
182
+ }
183
+ // Evidence gate (opt-in): applies to ANY configured event, BEFORE routing /
184
+ // coordination / completion handling, so a declared gate is never silently
185
+ // bypassed (e.g. on a coordination/operator topic). A success event must
186
+ // carry its required evidence in the payload, else it is rejected and the
187
+ // typed `blocked` event is journaled instead — preserving an evidence-bearing
188
+ // quality gate over a topology that otherwise only checks routing. No
189
+ // `[[gate]]` for this topic => no-op.
190
+ const gate = topology.gateForEvent(validation.topo, topic);
191
+ if (gate && gate.requires.length > 0) {
192
+ const missing = missingEvidence(gate.requires, payload);
193
+ if (missing.length > 0) {
194
+ return rejectEvidenceGate(journalFile, topic, gate, missing, payload, validation);
195
+ }
196
+ }
197
+ // Typed evidence gate (opt-in, additive to `requires` above): each
198
+ // `evidence` rule is validated for presence plus (per-type) a status/
199
+ // threshold check. Any shortfall rejects the emit and journals the routed
200
+ // typed event — `blocked` for missing evidence (soft retry), `failed` (or
201
+ // `blocked` as a fallback) for evidence that was supplied but did not pass.
202
+ if (gate && gate.evidence.length > 0) {
203
+ const shortfalls = gate.evidence
204
+ .map((req) => validateEvidenceRequirement(req, payload))
205
+ .filter((s) => s !== null);
206
+ if (shortfalls.length > 0) {
207
+ return rejectTypedEvidenceGate(journalFile, topic, gate, shortfalls, payload, validation);
208
+ }
209
+ }
210
+ // The human-ask event is always accepted regardless of routing — it pauses
211
+ // the loop for a human answer; the harness owns the block, not `[handoff]`.
212
+ if (validation.askEvent !== "" && topic === validation.askEvent) {
213
+ return acceptEmit(journalFile, topic, payload, validation);
214
+ }
68
215
  if (coordinationTopic(topic)) {
69
216
  return acceptEmit(journalFile, topic, payload, validation);
70
217
  }
@@ -73,8 +220,16 @@ export function emit(projectDir, topic, payload) {
73
220
  }
74
221
  // Task completion gate: block completion if open blocking tasks remain.
75
222
  // Soft tasks (soft === true) are advisory and never block completion.
223
+ //
224
+ // Resolve via tasks.resolveFile (NOT config.resolveTasksFile) so the gate
225
+ // honors the AUTOLOOP_TASKS_FILE env override — the same resolver the task
226
+ // CLI and the agent's `task add`/`task complete` use (tools.ts exports
227
+ // AUTOLOOP_TASKS_FILE into the agent env). This keeps the gate reading the
228
+ // exact store the tasks are written to, including when an external parent
229
+ // (e.g. ralph) points autoloop at a canonical store. Using the config path
230
+ // here would silently read a different file and miss open tasks.
76
231
  if (topic === validation.completionEvent) {
77
- const tasksFile = config.resolveTasksFile(projectDir);
232
+ const tasksFile = resolveFile(projectDir);
78
233
  const blockingTasks = materializeOpenFrom(tasksFile).filter((t) => t.soft !== true);
79
234
  if (blockingTasks.length > 0) {
80
235
  return rejectTaskGate(journalFile, topic, blockingTasks, validation);
@@ -85,6 +240,91 @@ export function emit(projectDir, topic, payload) {
85
240
  }
86
241
  return acceptEmit(journalFile, topic, payload, validation);
87
242
  }
243
+ /**
244
+ * Whether a JSON value counts as evidence: a non-empty string, a finite number
245
+ * (incl. 0, e.g. `errors=0`), or `true`. Empty strings, `false`, `null`,
246
+ * objects, and arrays do NOT count — they are vacuous and must not satisfy a
247
+ * gate.
248
+ */
249
+ function isEvidenceValue(v) {
250
+ if (typeof v === "string")
251
+ return v.trim() !== "";
252
+ if (typeof v === "number")
253
+ return Number.isFinite(v);
254
+ if (typeof v === "boolean")
255
+ return v === true;
256
+ return false;
257
+ }
258
+ /**
259
+ * Parse `payload` as a JSON object, returning its fields if (and only if) the
260
+ * whole payload is a well-formed JSON object literal. This is the ONE
261
+ * definition of "structured branch output": the evidence-gate keys check
262
+ * (`payloadEvidenceKeys`) and the fan-out stage branch runner both parse
263
+ * through this function, so "a branch emitted structured data" means the same
264
+ * thing everywhere. A branch whose payload does not parse as a JSON object
265
+ * (free prose, a bare string, an array, ...) is not structured — callers treat
266
+ * that as a dead/schema-invalid branch rather than guessing at fields.
267
+ */
268
+ export function parseJsonObjectPayload(payload) {
269
+ if (!payload)
270
+ return undefined;
271
+ const trimmed = payload.trim();
272
+ if (!trimmed.startsWith("{"))
273
+ return undefined;
274
+ try {
275
+ const obj = JSON.parse(trimmed);
276
+ if (obj === null || typeof obj !== "object" || Array.isArray(obj)) {
277
+ return undefined;
278
+ }
279
+ return obj;
280
+ }
281
+ catch {
282
+ return undefined;
283
+ }
284
+ }
285
+ /**
286
+ * Evidence keys present in a payload. A key is "present" only when it carries a
287
+ * *machine-checkable* value:
288
+ *
289
+ * - a `key=value` token (the value must immediately follow `=`), or
290
+ * - a top-level key in a JSON object payload with a non-empty scalar value.
291
+ *
292
+ * The `=` (or JSON) requirement is deliberate: a free-prose `key: value` form
293
+ * would let ordinary English that merely mentions a required word satisfy the
294
+ * gate (e.g. "tests: all green, coverage: looks good"), defeating the point of
295
+ * requiring proof. So colon-prose does NOT count — agents must emit structured
296
+ * `key=value` pairs or a JSON object. Matching is case-sensitive on the key.
297
+ */
298
+ export function payloadEvidenceKeys(payload) {
299
+ const present = new Set();
300
+ if (!payload)
301
+ return present;
302
+ // JSON object payloads: top-level keys with a non-empty scalar value.
303
+ const obj = parseJsonObjectPayload(payload);
304
+ if (obj) {
305
+ for (const [k, v] of Object.entries(obj)) {
306
+ if (isEvidenceValue(v))
307
+ present.add(k);
308
+ }
309
+ }
310
+ // Structured `key=value` tokens. The value must immediately follow `=` (no
311
+ // space skip), so a trailing `key=` with no value is absent, and free prose
312
+ // is not matched. Values may be quoted.
313
+ const re = /([A-Za-z_][\w.-]*)=("[^"]*"|'[^']*'|[^\s,;]+)/g;
314
+ let m = re.exec(payload);
315
+ while (m !== null) {
316
+ const value = m[2].replace(/^["']|["']$/g, "").trim();
317
+ if (value !== "")
318
+ present.add(m[1]);
319
+ m = re.exec(payload);
320
+ }
321
+ return present;
322
+ }
323
+ /** Required evidence keys absent from the payload, in declaration order. */
324
+ export function missingEvidence(requires, payload) {
325
+ const present = payloadEvidenceKeys(payload);
326
+ return requires.filter((key) => !present.has(key));
327
+ }
88
328
  export function invalidEvent(emittedTopic, allowedEvents, parallelEnabled, completionEvent) {
89
329
  if (!emittedTopic)
90
330
  return false;
@@ -152,9 +392,25 @@ export function routingTopic(topic) {
152
392
  "review.finish",
153
393
  "backend.start",
154
394
  "backend.finish",
395
+ // Telemetry/observability emits, NOT routing. Without these the per-iteration
396
+ // `backend.usage` (and any `hook.output`) would clobber the routing position every
397
+ // cycle, collapsing topology backpressure to all-roles freedom after iteration 1 —
398
+ // letting the agent self-route and skip required intermediate steps.
399
+ "backend.usage",
400
+ "hook.output",
401
+ "hook.suspend",
155
402
  "event.invalid",
156
403
  "operator.guidance",
157
404
  "operator.guidance.consumed",
405
+ // Human-in-the-loop topics are not routing: a `human.ask` pause must not
406
+ // move the routing position, or the iteration after an ask would have an
407
+ // empty allowed-event set (no topology transition) and the agent would be
408
+ // unconstrained for that cycle. The ask.* topics are harness-written with
409
+ // fixed names; `human.ask` is the default ask event.
410
+ "human.ask",
411
+ "ask.pending",
412
+ "ask.answered",
413
+ "ask.timeout",
158
414
  "",
159
415
  ]);
160
416
  if (nonRouting.has(topic))
@@ -175,6 +431,8 @@ function emitValidationContext(projectDir, journalFile) {
175
431
  allowedEvents: envCsvList("AUTOLOOP_ALLOWED_EVENTS"),
176
432
  parallelEnabled,
177
433
  completionEvent: compEvent,
434
+ topo,
435
+ askEvent: config.get(cfg, "event_loop.ask_event", "human.ask"),
178
436
  };
179
437
  }
180
438
  function resolveEmitRunId(journalFile) {
@@ -231,6 +489,67 @@ export function resolveEmitJournalFile(projectDir) {
231
489
  return envEvents;
232
490
  return config.resolveJournalFile(projectDir);
233
491
  }
492
+ function rejectEvidenceGate(journalFile, topic, gate, missing, payload, validation) {
493
+ // Journal the typed blocked event with the evidence shortfall + the original
494
+ // summary, so an observer (and the next iteration's prompt) sees why it was
495
+ // blocked and what is still needed.
496
+ appendEvent(journalFile, validation.runId, validation.iteration, gate.blocked, jsonField("gated_event", topic) +
497
+ ", " +
498
+ jsonField("missing_evidence", joinCsv(missing)) +
499
+ ", " +
500
+ jsonField("required_evidence", joinCsv(gate.requires)) +
501
+ ", " +
502
+ jsonField("summary", payload));
503
+ return {
504
+ ok: false,
505
+ topic,
506
+ error: "`" +
507
+ topic +
508
+ "` requires evidence " +
509
+ listText(gate.requires) +
510
+ "; missing: " +
511
+ listText(missing) +
512
+ ". Emitted `" +
513
+ gate.blocked +
514
+ "` instead. Include the evidence in the payload (e.g. `key=value`) and emit `" +
515
+ topic +
516
+ "` again.",
517
+ };
518
+ }
519
+ function rejectTypedEvidenceGate(journalFile, topic, gate, shortfalls, payload, validation) {
520
+ const target = classifyGateOutcome(shortfalls, gate);
521
+ const missingKeys = shortfalls
522
+ .filter((s) => s.reason === "missing")
523
+ .map((s) => s.key);
524
+ const thresholdShortfalls = shortfalls.filter((s) => s.reason === "threshold" || s.reason === "status");
525
+ const evidenceTypes = joinCsv(Array.from(new Set(shortfalls.map((s) => s.type))));
526
+ const requiredEvidence = joinCsv(gate.evidence.map((e) => e.key));
527
+ const fields = [
528
+ jsonField("gated_event", topic),
529
+ jsonField("missing_evidence", joinCsv(missingKeys)),
530
+ jsonField("evidence_type", evidenceTypes),
531
+ jsonField("required_evidence", requiredEvidence),
532
+ ];
533
+ if (thresholdShortfalls.length > 0) {
534
+ fields.push(jsonField("threshold_failure", joinCsv(thresholdShortfalls.map((s) => `${s.key}:${s.detail}`))));
535
+ }
536
+ fields.push(jsonField("summary", payload));
537
+ appendEvent(journalFile, validation.runId, validation.iteration, target, fields.join(", "));
538
+ const shortfallText = shortfalls
539
+ .map((s) => `${s.key} (${s.reason}: ${s.detail})`)
540
+ .join("; ");
541
+ return {
542
+ ok: false,
543
+ topic,
544
+ error: "`" +
545
+ topic +
546
+ "` failed typed evidence validation: " +
547
+ shortfallText +
548
+ ". Emitted `" +
549
+ target +
550
+ "` instead.",
551
+ };
552
+ }
234
553
  function rejectTaskGate(journalFile, topic, openTasks, validation) {
235
554
  appendEvent(journalFile, validation.runId, validation.iteration, "task.gate", jsonField("blocked_topic", topic) +
236
555
  ", " +
package/dist/emit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"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"}
package/dist/events.d.ts CHANGED
@@ -1,7 +1,19 @@
1
+ import type { StopReason } from "./types.js";
1
2
  export type LoopEvent = {
2
3
  type: "log";
3
4
  level: string;
4
5
  message: string;
6
+ } | {
7
+ type: "loop.start";
8
+ runId: string;
9
+ prompt: string;
10
+ workDir: string;
11
+ projectDir: string;
12
+ preset: string;
13
+ backend: string;
14
+ maxIterations: number;
15
+ completionEvent: string;
16
+ completionPromise: string;
5
17
  } | {
6
18
  type: "iteration.start";
7
19
  iteration: number;
@@ -10,8 +22,9 @@ export type LoopEvent = {
10
22
  } | {
11
23
  type: "loop.finish";
12
24
  iterations: number;
13
- stopReason: string;
25
+ stopReason: StopReason;
14
26
  runId: string;
27
+ costUsd: number;
15
28
  } | {
16
29
  type: "iteration.banner";
17
30
  iteration: number;
@@ -35,6 +48,18 @@ export type LoopEvent = {
35
48
  } | {
36
49
  type: "review.banner";
37
50
  iteration: number;
51
+ } | {
52
+ type: "ask.pending";
53
+ runId: string;
54
+ iteration: number;
55
+ questionId: string;
56
+ question: string;
57
+ } | {
58
+ type: "ask.answered";
59
+ runId: string;
60
+ iteration: number;
61
+ questionId: string;
62
+ answer: string;
38
63
  } | {
39
64
  type: "backend.output";
40
65
  output: string;
@@ -42,12 +67,20 @@ export type LoopEvent = {
42
67
  } | {
43
68
  type: "failure.diagnostic";
44
69
  output: string;
45
- stopReason: string;
70
+ stopReason: StopReason;
71
+ } | {
72
+ type: "policy.file_modification_violation";
73
+ runId: string;
74
+ iteration: number;
75
+ role: string;
76
+ files: string[];
77
+ reason: "disallowed_tools" | "read_only";
46
78
  } | {
47
79
  type: "summary";
48
80
  runId: string;
49
81
  iterations: number;
50
- stopReason: string;
82
+ stopReason: StopReason;
83
+ costUsd: number;
51
84
  journalFile: string;
52
85
  memoryFile: string;
53
86
  reviewEvery: number;
@@ -0,0 +1,25 @@
1
+ import { type BranchResult, type FanoutStage, type StageOutcome } from "@mobrienv/autoloop-core/fanout";
2
+ /** One branch to run: which role/prompt, with which objective, at which index. */
3
+ export interface BranchSpec {
4
+ branchId: string;
5
+ stageId: string;
6
+ /** The role this branch runs (for K-identical) or the distinct sub-role. */
7
+ role: string;
8
+ /** Per-branch objective/lens (distinct panels vary this). */
9
+ objective: string;
10
+ index: number;
11
+ }
12
+ /**
13
+ * Expand a stage into branch specs. A K-identical panel (`role` + `branches`)
14
+ * produces N copies of the same role; an N-distinct panel (`roles`) produces one
15
+ * branch per sub-role. Distinct wins when both are set.
16
+ */
17
+ export declare function expandStageBranches(stage: FanoutStage): BranchSpec[];
18
+ export type BranchRunner = (spec: BranchSpec) => Promise<BranchResult>;
19
+ /**
20
+ * Run a fan-out stage: expand branches, execute up to `concurrency` at once,
21
+ * convert a thrown/rejected branch into a dead branch (so one failure never
22
+ * sinks the wave), then reduce to a routing decision. `reduceStage` applies the
23
+ * branch schema, quorum, and vote/dedup.
24
+ */
25
+ export declare function runFanoutStage(stage: FanoutStage, runBranch: BranchRunner, concurrency: number): Promise<StageOutcome>;
@@ -0,0 +1,54 @@
1
+ // Fan-out stage orchestrator.
2
+ //
3
+ // Expands a FanoutStage into its branch specs, runs them concurrency-bounded
4
+ // (run-wide semaphore via mapLimit), isolates per-branch failure to a dead
5
+ // branch, and reduces the results with reduceStage. The actual branch executor
6
+ // (`runBranch`) is INJECTED: the orchestration here is pure and deterministically
7
+ // testable, while the real executor — spawning a backend CLI subprocess per
8
+ // branch — is a single seam wired into the iteration loop separately.
9
+ import { mapLimit } from "@mobrienv/autoloop-core/concurrency";
10
+ import { reduceStage, } from "@mobrienv/autoloop-core/fanout";
11
+ /**
12
+ * Expand a stage into branch specs. A K-identical panel (`role` + `branches`)
13
+ * produces N copies of the same role; an N-distinct panel (`roles`) produces one
14
+ * branch per sub-role. Distinct wins when both are set.
15
+ */
16
+ export function expandStageBranches(stage) {
17
+ if (stage.roles.length > 0) {
18
+ return stage.roles.map((role, index) => ({
19
+ branchId: `${stage.id}.${index}`,
20
+ stageId: stage.id,
21
+ role,
22
+ objective: role,
23
+ index,
24
+ }));
25
+ }
26
+ const n = Math.max(0, stage.branches);
27
+ return Array.from({ length: n }, (_, index) => ({
28
+ branchId: `${stage.id}.${index}`,
29
+ stageId: stage.id,
30
+ role: stage.role,
31
+ objective: stage.role,
32
+ index,
33
+ }));
34
+ }
35
+ /**
36
+ * Run a fan-out stage: expand branches, execute up to `concurrency` at once,
37
+ * convert a thrown/rejected branch into a dead branch (so one failure never
38
+ * sinks the wave), then reduce to a routing decision. `reduceStage` applies the
39
+ * branch schema, quorum, and vote/dedup.
40
+ */
41
+ export async function runFanoutStage(stage, runBranch, concurrency) {
42
+ const specs = expandStageBranches(stage);
43
+ const results = await mapLimit(specs, concurrency, async (spec) => {
44
+ try {
45
+ return await runBranch(spec);
46
+ }
47
+ catch (err) {
48
+ const msg = err instanceof Error ? err.message : String(err);
49
+ return { branchId: spec.branchId, ok: false, error: msg };
50
+ }
51
+ });
52
+ return reduceStage(stage, results);
53
+ }
54
+ //# sourceMappingURL=fanout-runner.js.map