@cad0p/pi-steering 0.1.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 (246) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/LICENSE +29 -0
  3. package/README.md +920 -0
  4. package/dist/__test-helpers__.d.ts +95 -0
  5. package/dist/__test-helpers__.d.ts.map +1 -0
  6. package/dist/__test-helpers__.js +174 -0
  7. package/dist/__test-helpers__.js.map +1 -0
  8. package/dist/bin/pi-steering.d.ts +9 -0
  9. package/dist/bin/pi-steering.d.ts.map +1 -0
  10. package/dist/bin/pi-steering.js +506 -0
  11. package/dist/bin/pi-steering.js.map +1 -0
  12. package/dist/compat.d.ts +50 -0
  13. package/dist/compat.d.ts.map +1 -0
  14. package/dist/compat.js +180 -0
  15. package/dist/compat.js.map +1 -0
  16. package/dist/defaults.d.ts +61 -0
  17. package/dist/defaults.d.ts.map +1 -0
  18. package/dist/defaults.js +106 -0
  19. package/dist/defaults.js.map +1 -0
  20. package/dist/define-config.d.ts +235 -0
  21. package/dist/define-config.d.ts.map +1 -0
  22. package/dist/define-config.js +118 -0
  23. package/dist/define-config.js.map +1 -0
  24. package/dist/define-predicate.d.ts +49 -0
  25. package/dist/define-predicate.d.ts.map +1 -0
  26. package/dist/define-predicate.js +35 -0
  27. package/dist/define-predicate.js.map +1 -0
  28. package/dist/evaluator-internals/context.d.ts +186 -0
  29. package/dist/evaluator-internals/context.d.ts.map +1 -0
  30. package/dist/evaluator-internals/context.js +219 -0
  31. package/dist/evaluator-internals/context.js.map +1 -0
  32. package/dist/evaluator-internals/override.d.ts +19 -0
  33. package/dist/evaluator-internals/override.d.ts.map +1 -0
  34. package/dist/evaluator-internals/override.js +79 -0
  35. package/dist/evaluator-internals/override.js.map +1 -0
  36. package/dist/evaluator-internals/predicates.d.ts +152 -0
  37. package/dist/evaluator-internals/predicates.d.ts.map +1 -0
  38. package/dist/evaluator-internals/predicates.js +849 -0
  39. package/dist/evaluator-internals/predicates.js.map +1 -0
  40. package/dist/evaluator-internals/speculative-synthesis.d.ts +102 -0
  41. package/dist/evaluator-internals/speculative-synthesis.d.ts.map +1 -0
  42. package/dist/evaluator-internals/speculative-synthesis.js +101 -0
  43. package/dist/evaluator-internals/speculative-synthesis.js.map +1 -0
  44. package/dist/evaluator.d.ts +101 -0
  45. package/dist/evaluator.d.ts.map +1 -0
  46. package/dist/evaluator.js +714 -0
  47. package/dist/evaluator.js.map +1 -0
  48. package/dist/helpers/walker-unknown-cwd-reason.d.ts +68 -0
  49. package/dist/helpers/walker-unknown-cwd-reason.d.ts.map +1 -0
  50. package/dist/helpers/walker-unknown-cwd-reason.js +73 -0
  51. package/dist/helpers/walker-unknown-cwd-reason.js.map +1 -0
  52. package/dist/index.d.ts +42 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +93 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/internal/drop-unused-observers.d.ts +43 -0
  57. package/dist/internal/drop-unused-observers.d.ts.map +1 -0
  58. package/dist/internal/drop-unused-observers.js +50 -0
  59. package/dist/internal/drop-unused-observers.js.map +1 -0
  60. package/dist/internal/finalize-plugin-state.d.ts +22 -0
  61. package/dist/internal/finalize-plugin-state.d.ts.map +1 -0
  62. package/dist/internal/finalize-plugin-state.js +14 -0
  63. package/dist/internal/finalize-plugin-state.js.map +1 -0
  64. package/dist/internal/merge-observers.d.ts +30 -0
  65. package/dist/internal/merge-observers.d.ts.map +1 -0
  66. package/dist/internal/merge-observers.js +27 -0
  67. package/dist/internal/merge-observers.js.map +1 -0
  68. package/dist/internal/pattern-utils.d.ts +33 -0
  69. package/dist/internal/pattern-utils.d.ts.map +1 -0
  70. package/dist/internal/pattern-utils.js +20 -0
  71. package/dist/internal/pattern-utils.js.map +1 -0
  72. package/dist/internal/ref-text.d.ts +11 -0
  73. package/dist/internal/ref-text.d.ts.map +1 -0
  74. package/dist/internal/ref-text.js +15 -0
  75. package/dist/internal/ref-text.js.map +1 -0
  76. package/dist/internal/session-runtime.d.ts +44 -0
  77. package/dist/internal/session-runtime.d.ts.map +1 -0
  78. package/dist/internal/session-runtime.js +143 -0
  79. package/dist/internal/session-runtime.js.map +1 -0
  80. package/dist/internal/watch-matcher.d.ts +56 -0
  81. package/dist/internal/watch-matcher.d.ts.map +1 -0
  82. package/dist/internal/watch-matcher.js +179 -0
  83. package/dist/internal/watch-matcher.js.map +1 -0
  84. package/dist/loader.d.ts +97 -0
  85. package/dist/loader.d.ts.map +1 -0
  86. package/dist/loader.js +527 -0
  87. package/dist/loader.js.map +1 -0
  88. package/dist/observer-dispatcher.d.ts +69 -0
  89. package/dist/observer-dispatcher.d.ts.map +1 -0
  90. package/dist/observer-dispatcher.js +184 -0
  91. package/dist/observer-dispatcher.js.map +1 -0
  92. package/dist/plugin-merger.d.ts +175 -0
  93. package/dist/plugin-merger.d.ts.map +1 -0
  94. package/dist/plugin-merger.js +450 -0
  95. package/dist/plugin-merger.js.map +1 -0
  96. package/dist/plugins/git/branch-tracker.d.ts +85 -0
  97. package/dist/plugins/git/branch-tracker.d.ts.map +1 -0
  98. package/dist/plugins/git/branch-tracker.js +181 -0
  99. package/dist/plugins/git/branch-tracker.js.map +1 -0
  100. package/dist/plugins/git/cwd-extensions.d.ts +10 -0
  101. package/dist/plugins/git/cwd-extensions.d.ts.map +1 -0
  102. package/dist/plugins/git/cwd-extensions.js +155 -0
  103. package/dist/plugins/git/cwd-extensions.js.map +1 -0
  104. package/dist/plugins/git/git-ops.d.ts +89 -0
  105. package/dist/plugins/git/git-ops.d.ts.map +1 -0
  106. package/dist/plugins/git/git-ops.js +107 -0
  107. package/dist/plugins/git/git-ops.js.map +1 -0
  108. package/dist/plugins/git/index.d.ts +225 -0
  109. package/dist/plugins/git/index.d.ts.map +1 -0
  110. package/dist/plugins/git/index.js +52 -0
  111. package/dist/plugins/git/index.js.map +1 -0
  112. package/dist/plugins/git/predicates.d.ts +312 -0
  113. package/dist/plugins/git/predicates.d.ts.map +1 -0
  114. package/dist/plugins/git/predicates.js +580 -0
  115. package/dist/plugins/git/predicates.js.map +1 -0
  116. package/dist/plugins/git/rules.d.ts +209 -0
  117. package/dist/plugins/git/rules.d.ts.map +1 -0
  118. package/dist/plugins/git/rules.js +267 -0
  119. package/dist/plugins/git/rules.js.map +1 -0
  120. package/dist/schema.d.ts +1799 -0
  121. package/dist/schema.d.ts.map +1 -0
  122. package/dist/schema.js +4 -0
  123. package/dist/schema.js.map +1 -0
  124. package/dist/testing/index.d.ts +621 -0
  125. package/dist/testing/index.d.ts.map +1 -0
  126. package/dist/testing/index.js +747 -0
  127. package/dist/testing/index.js.map +1 -0
  128. package/examples/README.md +83 -0
  129. package/examples/combined-git-discipline/README.md +52 -0
  130. package/examples/combined-git-discipline/node_modules/.bin/pi-steering +43 -0
  131. package/examples/combined-git-discipline/package.json +18 -0
  132. package/examples/combined-git-discipline/steering.json +27 -0
  133. package/examples/combined-git-discipline/steering.test.ts +42 -0
  134. package/examples/combined-git-discipline/steering.ts +64 -0
  135. package/examples/combined-git-discipline/tsconfig.json +7 -0
  136. package/examples/draft-prs-only/README.md +42 -0
  137. package/examples/draft-prs-only/node_modules/.bin/pi-steering +43 -0
  138. package/examples/draft-prs-only/package.json +18 -0
  139. package/examples/draft-prs-only/steering.json +12 -0
  140. package/examples/draft-prs-only/steering.test.ts +48 -0
  141. package/examples/draft-prs-only/steering.ts +36 -0
  142. package/examples/draft-prs-only/tsconfig.json +7 -0
  143. package/examples/dynamic-reason-runtime-cwd/README.md +148 -0
  144. package/examples/dynamic-reason-runtime-cwd/node_modules/.bin/pi-steering +43 -0
  145. package/examples/dynamic-reason-runtime-cwd/package.json +18 -0
  146. package/examples/dynamic-reason-runtime-cwd/steering.test.ts +130 -0
  147. package/examples/dynamic-reason-runtime-cwd/steering.ts +82 -0
  148. package/examples/dynamic-reason-runtime-cwd/tsconfig.json +7 -0
  149. package/examples/force-push-strict/README.md +75 -0
  150. package/examples/force-push-strict/node_modules/.bin/pi-steering +43 -0
  151. package/examples/force-push-strict/package.json +18 -0
  152. package/examples/force-push-strict/steering.json +12 -0
  153. package/examples/force-push-strict/steering.test.ts +51 -0
  154. package/examples/force-push-strict/steering.ts +54 -0
  155. package/examples/force-push-strict/tsconfig.json +7 -0
  156. package/examples/no-amend/README.md +52 -0
  157. package/examples/no-amend/node_modules/.bin/pi-steering +43 -0
  158. package/examples/no-amend/package.json +18 -0
  159. package/examples/no-amend/steering.cwd-scoped.json +12 -0
  160. package/examples/no-amend/steering.json +11 -0
  161. package/examples/no-amend/steering.test.ts +49 -0
  162. package/examples/no-amend/steering.ts +38 -0
  163. package/examples/no-amend/tsconfig.json +7 -0
  164. package/examples/work-item-plugin/README.md +103 -0
  165. package/examples/work-item-plugin/node_modules/.bin/pi-steering +43 -0
  166. package/examples/work-item-plugin/package.json +19 -0
  167. package/examples/work-item-plugin/src/index.test.ts +168 -0
  168. package/examples/work-item-plugin/src/index.ts +122 -0
  169. package/examples/work-item-plugin/src/observers/npm-test-tracker.test.ts +95 -0
  170. package/examples/work-item-plugin/src/observers/npm-test-tracker.ts +88 -0
  171. package/examples/work-item-plugin/src/observers/retest-required-tracker.test.ts +81 -0
  172. package/examples/work-item-plugin/src/observers/retest-required-tracker.ts +81 -0
  173. package/examples/work-item-plugin/src/predicates/work-item-format.test.ts +157 -0
  174. package/examples/work-item-plugin/src/predicates/work-item-format.ts +99 -0
  175. package/examples/work-item-plugin/src/rules/commit-description-check.test.ts +107 -0
  176. package/examples/work-item-plugin/src/rules/commit-description-check.ts +83 -0
  177. package/examples/work-item-plugin/src/rules/commit-requires-work-item.test.ts +79 -0
  178. package/examples/work-item-plugin/src/rules/commit-requires-work-item.ts +56 -0
  179. package/examples/work-item-plugin/src/rules/push-requires-tests.test.ts +245 -0
  180. package/examples/work-item-plugin/src/rules/push-requires-tests.ts +62 -0
  181. package/examples/work-item-plugin/tsconfig.json +8 -0
  182. package/package.json +88 -0
  183. package/skills/steering-authoring/SKILL.md +102 -0
  184. package/src/INVARIANTS.md +116 -0
  185. package/src/__test-helpers__.ts +243 -0
  186. package/src/bin/pi-steering.test.ts +920 -0
  187. package/src/bin/pi-steering.ts +584 -0
  188. package/src/compat.test.ts +431 -0
  189. package/src/compat.ts +282 -0
  190. package/src/defaults.test.ts +585 -0
  191. package/src/defaults.ts +148 -0
  192. package/src/define-config.test.ts +888 -0
  193. package/src/define-config.ts +375 -0
  194. package/src/define-predicate.test.ts +70 -0
  195. package/src/define-predicate.ts +57 -0
  196. package/src/evaluator-internals/context.ts +290 -0
  197. package/src/evaluator-internals/override.test.ts +99 -0
  198. package/src/evaluator-internals/override.ts +83 -0
  199. package/src/evaluator-internals/predicates.ts +1037 -0
  200. package/src/evaluator-internals/speculative-synthesis.test.ts +411 -0
  201. package/src/evaluator-internals/speculative-synthesis.ts +199 -0
  202. package/src/evaluator.test.ts +6296 -0
  203. package/src/evaluator.ts +1106 -0
  204. package/src/factory-time-load.test.ts +630 -0
  205. package/src/helpers/walker-unknown-cwd-reason.test.ts +73 -0
  206. package/src/helpers/walker-unknown-cwd-reason.ts +83 -0
  207. package/src/index.test.ts +836 -0
  208. package/src/index.ts +229 -0
  209. package/src/internal/drop-unused-observers.test.ts +141 -0
  210. package/src/internal/drop-unused-observers.ts +81 -0
  211. package/src/internal/finalize-plugin-state.ts +43 -0
  212. package/src/internal/merge-observers.ts +51 -0
  213. package/src/internal/pattern-utils.test.ts +52 -0
  214. package/src/internal/pattern-utils.ts +38 -0
  215. package/src/internal/ref-text.test.ts +54 -0
  216. package/src/internal/ref-text.ts +17 -0
  217. package/src/internal/session-runtime.test.ts +629 -0
  218. package/src/internal/session-runtime.ts +201 -0
  219. package/src/internal/watch-matcher.test.ts +326 -0
  220. package/src/internal/watch-matcher.ts +200 -0
  221. package/src/jsdoc-propagation.test.ts +277 -0
  222. package/src/loader.test.ts +1098 -0
  223. package/src/loader.ts +581 -0
  224. package/src/not-block-onunknown.test.ts +554 -0
  225. package/src/observer-dispatcher.test.ts +939 -0
  226. package/src/observer-dispatcher.ts +290 -0
  227. package/src/per-predicate-typing.test.ts +361 -0
  228. package/src/plugin-merger.test.ts +790 -0
  229. package/src/plugin-merger.ts +598 -0
  230. package/src/plugins/git/README.md +485 -0
  231. package/src/plugins/git/branch-tracker.test.ts +281 -0
  232. package/src/plugins/git/branch-tracker.ts +187 -0
  233. package/src/plugins/git/cwd-extensions.test.ts +230 -0
  234. package/src/plugins/git/cwd-extensions.ts +160 -0
  235. package/src/plugins/git/git-ops.test.ts +397 -0
  236. package/src/plugins/git/git-ops.ts +173 -0
  237. package/src/plugins/git/index.ts +253 -0
  238. package/src/plugins/git/integration.test.ts +705 -0
  239. package/src/plugins/git/predicates.test.ts +1401 -0
  240. package/src/plugins/git/predicates.ts +693 -0
  241. package/src/plugins/git/rules.test.ts +1001 -0
  242. package/src/plugins/git/rules.ts +307 -0
  243. package/src/schema.test.ts +259 -0
  244. package/src/schema.ts +1963 -0
  245. package/src/testing/index.test.ts +1696 -0
  246. package/src/testing/index.ts +1472 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/dist/schema.js ADDED
@@ -0,0 +1,4 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Part of pi-steering.
3
+ export {};
4
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,uBAAuB"}
@@ -0,0 +1,621 @@
1
+ /**
2
+ * Testing primitives for rule and plugin authors.
3
+ *
4
+ * Subpath export: `@cad0p/pi-steering/testing`. Also re-exported
5
+ * at the package root for discoverability.
6
+ *
7
+ * Phase 5a ships four low-level primitives that wrap the engine's
8
+ * internals without forcing authors to stand up a pi runtime stub:
9
+ *
10
+ * - {@link loadHarness} — build an evaluator + dispatcher
11
+ * pair from a static
12
+ * {@link SteeringConfig}. No walk-up
13
+ * loading — tests pass explicit
14
+ * config.
15
+ * - {@link mockContext} — build a {@link PredicateContext}
16
+ * for unit-testing predicate
17
+ * handlers in isolation.
18
+ * - {@link mockObserverContext} — same for {@link ObserverContext}.
19
+ * - {@link getAppendedEntries} — read back `appendEntry` writes
20
+ * captured by either mock context.
21
+ *
22
+ * The convenience wrappers (`testPredicate`, `expectBlocks`,
23
+ * `runMatrix`, …) that build on these live in a Phase 5b follow-up.
24
+ *
25
+ * Design notes:
26
+ *
27
+ * - `exec` is deliberately stub-required. The defaults reject with a
28
+ * clear error so a test forgetting to stub fails loudly instead of
29
+ * silently evaluating predicates against an always-empty exec
30
+ * result.
31
+ * - `appendEntry` captures are tracked in a module-level WeakMap
32
+ * keyed by the context object, so {@link getAppendedEntries}
33
+ * accesses cleanly without leaking state across tests and without
34
+ * requiring users to pass capture buffers around.
35
+ * - `findEntries` draws from an entries array passed in at context
36
+ * build time; it does NOT pick up entries written via the
37
+ * context's own `appendEntry`. That mirrors the production
38
+ * evaluator's per-call snapshot semantics — appends are visible
39
+ * on the NEXT evaluation, not the current one.
40
+ */
41
+ import type { ExtensionContext, ExecResult as PiExecResult, ToolCallEvent, ToolCallEventResult } from "@earendil-works/pi-coding-agent";
42
+ import { type EvaluatorHost, type EvaluatorRuntime } from "../evaluator.ts";
43
+ import type { SyntheticEntry } from "../evaluator-internals/speculative-synthesis.ts";
44
+ import { type ObserverDispatcher } from "../observer-dispatcher.ts";
45
+ import type { ResolvedPluginState } from "../plugin-merger.ts";
46
+ import type { ExecOpts, ExecResult, Observer, ObserverContext, PredicateContext, PredicateHandler, PredicateToolInput, PredicateVerdict, ToolResultEvent as SchemaToolResultEvent, SteeringConfig, SteeringDiagnostic, WhenWalkerState } from "../schema.ts";
47
+ /**
48
+ * Build-once, invoke-many handle a test uses to drive the engine
49
+ * against a scenario. `evaluate` and `dispatch` have identical
50
+ * signatures to {@link EvaluatorRuntime.evaluate} and
51
+ * {@link ObserverDispatcher.dispatch} so production call sites can be
52
+ * ported verbatim.
53
+ */
54
+ export interface Harness {
55
+ /** See {@link EvaluatorRuntime.evaluate}. */
56
+ evaluate: EvaluatorRuntime["evaluate"];
57
+ /** See {@link ObserverDispatcher.dispatch}. */
58
+ dispatch: ObserverDispatcher["dispatch"];
59
+ /**
60
+ * The effective config the harness was built from (after default
61
+ * injection and `disable` filtering).
62
+ *
63
+ * No-op short-circuit caveat: when `harness.diagnostics` has an
64
+ * error-class entry, treat `harness.config` as the post-merge,
65
+ * post-disabledRules-filter snapshot pi-steering would have
66
+ * handed to `buildEvaluator` if the diagnostics had been clean —
67
+ * provided as a debugging artifact, NOT an executable config
68
+ * production would accept (production would have thrown).
69
+ * Inspect `harness.diagnostics` first to learn which surface
70
+ * flagged a problem, then fix the source config and re-load
71
+ * before reading `config` for any "production would have run on
72
+ * this shape" interpretation.
73
+ */
74
+ readonly config: SteeringConfig;
75
+ /**
76
+ * The plugin merger's resolved state, for introspection /
77
+ * assertions.
78
+ *
79
+ * No-op short-circuit caveat: when an error-class diagnostic fires
80
+ * and the harness returns the no-op evaluator/dispatcher pair,
81
+ * `resolved.diagnostics` carries the FULL diagnostic list (merge-
82
+ * side + user-config-name + resolve-side) to mirror
83
+ * `harness.diagnostics`. In the regular path, `resolved.diagnostics`
84
+ * carries only the resolve-side stream — see
85
+ * {@link SteeringDiagnosticKind} for the per-kind
86
+ * loader-vs-merger split. Consumers should prefer
87
+ * `harness.diagnostics` for the canonical full list.
88
+ */
89
+ readonly resolved: ResolvedPluginState;
90
+ /**
91
+ * Every {@link SteeringDiagnostic} produced while building the
92
+ * harness — merge-side (within-layer collisions, cross-config
93
+ * collisions when {@link LoadHarnessOptions.includeDefaults} is
94
+ * `true`) and plugin-merger-side (predicate / observer / rule /
95
+ * extension-orphan / reserved-name / invalid-name diagnostics,
96
+ * plus user-config rule and observer name validation).
97
+ *
98
+ * Unlike production, `loadHarness` does NOT throw on error-class
99
+ * diagnostics. Plugin-author tests assert directly on this array
100
+ * (e.g. `harness.diagnostics.some(d => d.kind === "reserved-tracker-name")`)
101
+ * so the failure surface is observable in test output rather than
102
+ * a thrown error that hides which other diagnostics fired. Both
103
+ * plugin-shipped and user-config malformed names route through the
104
+ * same `kind: "invalid-name"` diagnostic stream — plugin-author
105
+ * tests can use a uniform matrix of malformed-name cases without
106
+ * worrying about which surface raised the issue.
107
+ *
108
+ * Production-strictness divergence: `loadHarness` does NOT honor
109
+ * the merged config's `failOnWarnings` flag. Production's
110
+ * `buildSessionRuntime` throws when `failOnWarnings !== false`
111
+ * (default `true`) AND any warning-class diagnostic is present;
112
+ * the harness ignores `failOnWarnings` and returns a real
113
+ * evaluator/dispatcher running on the post-collision merged
114
+ * state. Tests intending to use the harness as a "production
115
+ * prediction" should check this array against the strict-mode
116
+ * rule themselves, e.g.
117
+ * `harness.diagnostics.some(d => d.type === "error" || (config.failOnWarnings !== false && d.type === "warning"))`
118
+ * before treating the harness's verdict as production-faithful.
119
+ */
120
+ readonly diagnostics: readonly SteeringDiagnostic[];
121
+ }
122
+ /**
123
+ * Options for {@link loadHarness}.
124
+ */
125
+ export interface LoadHarnessOptions {
126
+ /** The config under test. */
127
+ readonly config: SteeringConfig;
128
+ /**
129
+ * Prepend {@link DEFAULT_PLUGINS} to `config.plugins` and
130
+ * {@link DEFAULT_RULES} to `config.rules` at the innermost
131
+ * position. Mirrors the production flag via
132
+ * `!config.disableDefaults`, but kept explicit here so tests can
133
+ * exercise default rules without editing the config under test.
134
+ *
135
+ * Default: `false`.
136
+ */
137
+ readonly includeDefaults?: boolean;
138
+ /**
139
+ * Host to drive `exec` / `appendEntry` off. Defaults to an
140
+ * in-memory stub whose `exec` rejects with a clear error (tests
141
+ * needing exec must stub it explicitly) and whose `appendEntry`
142
+ * is a silent sink.
143
+ */
144
+ readonly host?: EvaluatorHost;
145
+ }
146
+ /**
147
+ * Build an evaluator + observer dispatcher pair from a static
148
+ * {@link SteeringConfig}. Tests drive rules through the same pipeline
149
+ * production uses, without needing a pi runtime stub or walk-up
150
+ * loading.
151
+ */
152
+ export declare function loadHarness(options: LoadHarnessOptions): Harness;
153
+ /**
154
+ * Shape of an entry fed into {@link mockContext} / {@link
155
+ * mockObserverContext} to back `findEntries`. Mirrors the subset of
156
+ * pi's `CustomEntry` the evaluator + dispatcher actually read.
157
+ */
158
+ export interface MockEntry {
159
+ readonly type: "custom";
160
+ readonly customType: string;
161
+ readonly data: unknown;
162
+ readonly timestamp: string;
163
+ }
164
+ /**
165
+ * Options for {@link priorEntry}.
166
+ */
167
+ export interface PriorEntryOptions {
168
+ /**
169
+ * Agent-loop index to stamp on the payload. The engine's live
170
+ * `appendEntry` wrapper stamps this automatically on every write;
171
+ * fixture entries must reproduce the same shape so `when.happened:
172
+ * { in: "agent_loop" }` scope filtering works identically whether
173
+ * the entry was written at runtime or seeded into the mock.
174
+ *
175
+ * Defaults to `0`. Set to the value of {@link MockContextOptions.agentLoopIndex}
176
+ * to place the entry in the current agent loop; set to a lower
177
+ * value (or 0 with `agentLoopIndex: 1+` on the context) to place
178
+ * it in a prior agent loop.
179
+ */
180
+ readonly agentLoopIndex?: number;
181
+ /**
182
+ * ISO-8601 timestamp string. Defaults to `"2026-01-01T00:00:00.000Z"`.
183
+ * Use distinct, monotonically-increasing timestamps when seeding
184
+ * multiple entries the `since` invalidation sentinel needs to
185
+ * order.
186
+ */
187
+ readonly timestamp?: string;
188
+ }
189
+ /**
190
+ * Build a {@link MockEntry} for {@link MockContextOptions.entries}
191
+ * (and the observer-context equivalent) with the reserved
192
+ * `_agentLoopIndex` tag stamped on the payload exactly as the live
193
+ * engine's `appendEntry` wrapper would.
194
+ *
195
+ * The reserved-key name is kept as an internal detail of the engine
196
+ * so plugin / fixture authors don't have to remember the underscore
197
+ * prefix. A typo on the `agentLoopIndex` field of {@link PriorEntryOptions}
198
+ * is a TypeScript compile error; the equivalent typo on a hand-rolled
199
+ * `data: { agentLoopIndex: 5 }` literal is silent — the entry passes
200
+ * through `findEntries` but then fails to match the current
201
+ * agent-loop scope, and the rule under test appears to misbehave.
202
+ *
203
+ * Payload shaping mirrors the live `createAppendEntry`:
204
+ * - Plain-object `data`: merged as `{ ...data, _agentLoopIndex }`.
205
+ * - Anything else (arrays, Date, Map, Set, Error, primitives,
206
+ * null, undefined): wrapped as `{ value: data, _agentLoopIndex }`.
207
+ *
208
+ * @example
209
+ * const ctx = mockContext({
210
+ * agentLoopIndex: 5,
211
+ * entries: [
212
+ * priorEntry("ws-sync-done", {}, { agentLoopIndex: 5 }),
213
+ * ],
214
+ * });
215
+ * // `when.happened: { event: "ws-sync-done", in: "agent_loop" }`
216
+ * // now sees the entry as "happened in the current loop".
217
+ */
218
+ export declare function priorEntry(customType: string, data?: unknown, opts?: PriorEntryOptions): MockEntry;
219
+ /**
220
+ * Re-exported for plugin authors constructing `toolCallEvents`
221
+ * fixtures on {@link MockContextOptions}. Structurally `{ data,
222
+ * timestamp, speculative: true }` — the same shape the walker-level
223
+ * speculative-entry synthesis pass produces in production. Plugin
224
+ * predicates that filter out speculative entries check
225
+ * `entry.speculative === true`.
226
+ */
227
+ export type { SyntheticEntry } from "../evaluator-internals/speculative-synthesis.ts";
228
+ /**
229
+ * Options for {@link mockContext}.
230
+ */
231
+ export interface MockContextOptions {
232
+ /** Defaults to `"/tmp/test"`. */
233
+ readonly cwd?: string;
234
+ /** Engine agent-loop counter. Defaults to `0`. */
235
+ readonly agentLoopIndex?: number;
236
+ /**
237
+ * Which tool this predicate is evaluating under. Defaults to
238
+ * `"bash"`. Drives the default shape of {@link input} when the
239
+ * caller doesn't supply one.
240
+ */
241
+ readonly tool?: "bash" | "write" | "edit";
242
+ /**
243
+ * Tool input. Omitted: derived from {@link tool} as the empty
244
+ * shape for that tool (bash: `{ command: "" }`, write:
245
+ * `{ path: "", content: "" }`, edit: `{ path: "", edits: [] }`).
246
+ */
247
+ readonly input?: PredicateToolInput;
248
+ /**
249
+ * Walker-state snapshot the predicate sees via
250
+ * {@link PredicateContext.walkerState}.
251
+ *
252
+ * Defaults to `{ cwd: options.cwd, env: new Map() }` so the
253
+ * built-in `when.cwd` predicate and any plugin reading
254
+ * `walkerState.env` work without wiring up a full walker. Callers
255
+ * who want a specific env map or branch tracker state pass it in
256
+ * via this option.
257
+ *
258
+ * The typed shape is {@link WhenWalkerState} with every field
259
+ * optional (partial) so tests that only care about one dimension
260
+ * don't have to fill in the others. The engine's production path
261
+ * always populates `cwd` + `env`; the mock's default matches.
262
+ *
263
+ * Partial override: fields you pass merge over the defaults, so
264
+ * `mockContext({ walkerState: { cwd: "/x" } })` keeps the default
265
+ * empty env Map (same shape as production). Pass `env` explicitly
266
+ * only when you need a seeded map.
267
+ */
268
+ readonly walkerState?: Partial<WhenWalkerState> & Record<string, unknown>;
269
+ /**
270
+ * Stub for `ctx.exec`. Defaults to rejecting with a clear error
271
+ * message — tests that call out to exec must stub explicitly
272
+ * (silent `undefined` would make predicate logic hard to reason
273
+ * about).
274
+ */
275
+ readonly exec?: (cmd: string, args: readonly string[], opts?: ExecOpts) => ExecResult | Promise<ExecResult>;
276
+ /**
277
+ * Prior session entries `findEntries` reads from. Filtered by
278
+ * customType; timestamps parsed from the ISO string to epoch-ms,
279
+ * matching the production shape.
280
+ *
281
+ * For rules that use `when.happened: { in: "agent_loop" }` (or
282
+ * `in: "session"` with the same-loop filter), construct entries
283
+ * via {@link priorEntry} so the engine's reserved
284
+ * `_agentLoopIndex` tag is stamped correctly — hand-rolled
285
+ * literals with a typo (`agentLoopIndex` instead of the underscore
286
+ * form) silently fail to match the current agent-loop scope and
287
+ * the rule appears to misbehave.
288
+ */
289
+ readonly entries?: ReadonlyArray<MockEntry>;
290
+ /**
291
+ * Per-ref speculative events the built-in `when.happened` predicate
292
+ * reads from `ctx.walkerState.events` (see
293
+ * {@link PredicateContext.walkerState}'s reserved `events` key).
294
+ * Keys are the `customType` event literals; values are the
295
+ * synthetic entries for that type. When provided, overwrites any
296
+ * `events` entry on the caller's {@link walkerState}.
297
+ *
298
+ * Use this to drive `when.happened` with `in: "tool_call"` (or any plugin
299
+ * predicate that introspects `walkerState.events`) in isolation
300
+ * without wiring up `loadHarness` + a full bash event. The shape
301
+ * matches what the walker-level synthesis pass produces in
302
+ * production — `{ data, timestamp, speculative: true }` per entry.
303
+ */
304
+ readonly toolCallEvents?: Readonly<Record<string, readonly SyntheticEntry[]>>;
305
+ }
306
+ /**
307
+ * Build a {@link PredicateContext} for unit-testing predicates in
308
+ * isolation. See {@link MockContextOptions} for defaults. The returned
309
+ * context's `appendEntry` captures into a buffer accessible via
310
+ * {@link getAppendedEntries}.
311
+ */
312
+ export declare function mockContext(options?: MockContextOptions): PredicateContext;
313
+ /**
314
+ * Options for {@link mockObserverContext}. Observers don't see
315
+ * `tool`, `input`, or `walkerState` — those are predicate-side
316
+ * concepts — so those fields are omitted here.
317
+ */
318
+ export type MockObserverContextOptions = Omit<MockContextOptions, "tool" | "input" | "walkerState" | "toolCallEvents">;
319
+ /**
320
+ * Build an {@link ObserverContext} for unit-testing observer
321
+ * `onResult` handlers. Same capture + `findEntries` pattern as
322
+ * {@link mockContext}.
323
+ *
324
+ * Note: production `ObserverContext` does NOT expose `exec` — but the
325
+ * mock does (as an `exec`-like stub on a different property name is
326
+ * more confusing than forbidding it outright). Observer authors that
327
+ * reach for `exec` are probably using the wrong hook; rules / plugins
328
+ * carrying that logic belong in a predicate. The mock still accepts
329
+ * the stub so tests composing an observer + predicate through a shared
330
+ * options object don't have to strip the field.
331
+ *
332
+ * We DO NOT attach `exec` to the returned ObserverContext — the
333
+ * schema doesn't expose it. The stub is accepted but silently unused
334
+ * at this phase; the follow-up `testObserver` wrapper (Phase 5b) will
335
+ * surface a warning when the stub is set but can never fire.
336
+ */
337
+ export declare function mockObserverContext(options?: MockObserverContextOptions): ObserverContext;
338
+ /**
339
+ * Shape of a session-entry produced by {@link createRecordingHost}'s
340
+ * `appendEntry`, readable by an {@link ExtensionContext} built from
341
+ * {@link mockExtensionContext}. Mirrors the subset of pi's
342
+ * `CustomEntry` the engine reads — `id` and `parentId` exist on real
343
+ * pi entries, so we populate them too to keep type-shape drift from
344
+ * masking silent divergence.
345
+ */
346
+ export interface RecordedSessionEntry {
347
+ readonly type: "custom";
348
+ readonly customType: string;
349
+ readonly data: unknown;
350
+ readonly timestamp: string;
351
+ readonly id: string;
352
+ readonly parentId: string | null;
353
+ }
354
+ /**
355
+ * Exec-call record captured by {@link createRecordingHost}. One entry
356
+ * per invocation, in registration order. `args` is defensively copied
357
+
358
+ * so later mutation of the caller's argv array doesn't corrupt the
359
+ * record.
360
+ */
361
+ export interface RecordedExecCall {
362
+ readonly cmd: string;
363
+ readonly args: readonly string[];
364
+ readonly cwd: string;
365
+ }
366
+ /**
367
+ * Options for {@link createRecordingHost}.
368
+ */
369
+ export interface CreateRecordingHostOptions {
370
+ /**
371
+ * Stub for `host.exec`. Receives the normalized `cwd` (either the
372
+ * caller's `opts.cwd` or `"/"`). Defaults to resolving with an
373
+ * empty successful result — override when tests need to assert
374
+ * behavior against a specific stdout / exit code.
375
+ */
376
+ readonly exec?: (cmd: string, args: readonly string[], cwd: string) => Promise<PiExecResult>;
377
+ }
378
+ /**
379
+ * Recording {@link EvaluatorHost}. Every `exec` and `appendEntry`
380
+ * call is captured into readable accumulators; `entries` mirrors the
381
+ * `appendEntry` writes in the shape pi's `sessionManager.getEntries()`
382
+ * returns, so feeding `host.entries` into {@link mockExtensionContext}
383
+ * makes the engine's writes visible to its subsequent reads in the
384
+ * same test.
385
+ *
386
+ * Note: `entries` and `execCalls` / `appendedEntries` are returned as
387
+ * mutable arrays so asserts can use `.some`, `.find`, etc. directly
388
+ * without a copy. They are owned by the host; don't splice or reassign
389
+ * them out from under it.
390
+ */
391
+ export interface RecordingHost extends EvaluatorHost {
392
+ /**
393
+ * Session-entry log backing {@link mockExtensionContext}. Mutated
394
+ * in-place on every `appendEntry` call. Pass this array to
395
+ * `mockExtensionContext(cwd, host.entries)` so the host and the
396
+ * ctx share the same store.
397
+ */
398
+ readonly entries: RecordedSessionEntry[];
399
+ /** Every `exec` invocation, in call order. */
400
+ readonly execCalls: RecordedExecCall[];
401
+ /**
402
+ * Every `appendEntry(type, data)` invocation, in call order. The
403
+ * `data` field is stored verbatim — NOT the auto-tagged shape the
404
+ * engine produces (that's reflected in {@link entries} instead).
405
+ * This buffer is the raw host-level log; use it for assertions that
406
+ * care about exactly which calls the engine made.
407
+ */
408
+ readonly appendedEntries: Array<{
409
+ type: string;
410
+ data: unknown;
411
+ }>;
412
+ }
413
+ /**
414
+ * Build a {@link RecordingHost}. Every `exec` call is recorded, and
415
+ * every `appendEntry` call appends both to {@link RecordingHost.
416
+ * appendedEntries} (raw host-level log) and to {@link RecordingHost.
417
+ * entries} (session-entry shape used by {@link mockExtensionContext}).
418
+ *
419
+ * Timestamps on the session-entry log are monotonically-incrementing
420
+ * ISO strings starting at `2026-01-01T00:00:00Z` (+ 1s per entry) so
421
+ * chronological-order asserts stay stable across test runs without a
422
+ * live clock dependency. Override with a wrapping host if your test
423
+ * needs real timestamps.
424
+ *
425
+ * The default `exec` stub resolves with an empty successful result —
426
+ * safer than rejecting by default because most tests don't exercise
427
+ * exec at all and a loud reject would swamp the signal. Opt in to
428
+ * rejection via `options.exec` when a test must assert "exec was NOT
429
+ * called".
430
+ */
431
+ export declare function createRecordingHost(options?: CreateRecordingHostOptions): RecordingHost;
432
+ /**
433
+ * Build a minimal {@link ExtensionContext} stub backed by a
434
+ * {@link RecordedSessionEntry} array. Used with {@link loadHarness}'s
435
+ * `harness.evaluate` / `harness.dispatch` when a test needs the engine
436
+ * to see entries a {@link RecordingHost} previously recorded.
437
+ *
438
+ * Only `cwd` and `sessionManager.getEntries()` are populated — the
439
+ * two fields the engine actually reads. Everything else on
440
+ * `ExtensionContext` throws on access (via an `unknown` cast) so an
441
+ * accidental reliance on unsupported surface surfaces as a clear
442
+ * `TypeError` rather than silently passing.
443
+ *
444
+ * Pass `host.entries` from {@link createRecordingHost} to share the
445
+ * backing store between the engine's writes and its subsequent reads.
446
+ *
447
+ * Choosing between this and {@link loadHarness} alone:
448
+ *
449
+ * - Use {@link loadHarness} + {@link expectBlocks}/{@link expectAllows}
450
+ * when the test only asserts block vs allow on a single event.
451
+ * - Use {@link createRecordingHost} + `mockExtensionContext` when the
452
+ * test drives a multi-call sequence, asserts on session-entry
453
+ * shape, or inspects exec calls.
454
+ */
455
+ export declare function mockExtensionContext(cwd: string, entries?: ReadonlyArray<RecordedSessionEntry>): ExtensionContext;
456
+ /**
457
+ * Read the `appendEntry` capture buffer for a mock context.
458
+ *
459
+ * Returns an empty array when:
460
+ * - nothing has been appended yet, OR
461
+ * - the context wasn't built by {@link mockContext} /
462
+ * {@link mockObserverContext} (safe lookup — no throw).
463
+ *
464
+ * The returned array is a snapshot (copy) so callers can iterate
465
+ * without worrying about concurrent appends racing the assertion.
466
+ */
467
+ export declare function getAppendedEntries(ctx: PredicateContext | ObserverContext): ReadonlyArray<{
468
+ customType: string;
469
+ data?: unknown;
470
+ }>;
471
+ /**
472
+ * Convenience shape for a bash tool-call event. Accepted by
473
+ * {@link expectBlocks}, {@link expectAllows}, {@link expectRuleFires},
474
+ * and {@link runMatrix} in place of a full {@link ToolCallEvent}.
475
+ */
476
+ export interface BashShorthand {
477
+ readonly command: string;
478
+ readonly cwd?: string;
479
+ }
480
+ /** Convenience shape for a write tool-call event. */
481
+ export interface WriteShorthand {
482
+ readonly write: {
483
+ readonly path: string;
484
+ readonly content: string;
485
+ };
486
+ readonly cwd?: string;
487
+ }
488
+ /** Convenience shape for an edit tool-call event. */
489
+ export interface EditShorthand {
490
+ readonly edit: {
491
+ readonly path: string;
492
+ readonly edits: ReadonlyArray<{
493
+ readonly oldText: string;
494
+ readonly newText: string;
495
+ }>;
496
+ };
497
+ readonly cwd?: string;
498
+ }
499
+ /** Union of the bash/write/edit shorthands. */
500
+ export type ToolCallShorthand = BashShorthand | WriteShorthand | EditShorthand;
501
+ /**
502
+ * Convenience shape for a tool-result event, accepted by
503
+ * {@link testObserver}. Mirrors the minimal {@link SchemaToolResultEvent}
504
+ * fields observers actually read.
505
+ */
506
+ export interface ToolResultShorthand {
507
+ readonly toolName: string;
508
+ readonly input?: unknown;
509
+ readonly output?: unknown;
510
+ readonly exitCode?: number;
511
+ }
512
+ /**
513
+ * Drive a single {@link PredicateHandler} against a {@link mockContext}.
514
+ * Returns the boolean verdict.
515
+ *
516
+ * Usage:
517
+ * ```ts
518
+ * const fires = await testPredicate(branch, /^main$/, {
519
+ * walkerState: { branch: "main" },
520
+ * });
521
+ * ```
522
+ *
523
+ * Chain-aware predicates (e.g. the built-in `happened` with its
524
+ * `&&`-chain speculative allow) read per-ref synthetic events from
525
+ * `ctx.walkerState.events`. Populate `toolCallEvents` (or set
526
+ * `walkerState` directly) in {@link MockContextOptions} to simulate
527
+ * that surface in isolation without wiring up `loadHarness` + a
528
+ * full bash event.
529
+ */
530
+ export declare function testPredicate<A = unknown>(predicate: PredicateHandler<A>, args: A, options?: MockContextOptions): Promise<PredicateVerdict>;
531
+ /**
532
+ * Fire an {@link Observer} at an event, returning the captured
533
+ * `appendEntry` writes plus whether the observer's `watch` filter
534
+ * accepted the event. Use the `entries` field to assert what the
535
+ * observer recorded; use `watchMatched` to assert the filter gated
536
+ * firing correctly.
537
+ *
538
+ * If the observer's `watch` did NOT match, `onResult` is NOT called
539
+ * (mirrors production dispatch).
540
+ *
541
+ * If `options.exec` is supplied, emits a `console.warn` — observers
542
+ * don't see `exec`, so the stub can never fire. Exists on the options
543
+ * shape only because {@link MockObserverContextOptions} is derived
544
+ * from {@link MockContextOptions} for ergonomic test composition.
545
+ */
546
+ export declare function testObserver(observer: Observer, event: SchemaToolResultEvent | ToolResultShorthand, options?: MockObserverContextOptions): Promise<{
547
+ entries: ReadonlyArray<{
548
+ customType: string;
549
+ data?: unknown;
550
+ }>;
551
+ watchMatched: boolean;
552
+ }>;
553
+ /** Options for {@link expectBlocks}. */
554
+ export interface ExpectBlocksOptions {
555
+ /**
556
+ * Expected rule name — matched against the `[steering:<name>@<source>]`
557
+ * prefix (source-tagged format per ADR §11). The source suffix is
558
+ * ignored for matching; pass the bare rule name.
559
+ */
560
+ readonly rule?: string;
561
+ /** Expected reason — exact string match (string) or pattern match (RegExp). */
562
+ readonly reason?: string | RegExp;
563
+ }
564
+ /**
565
+ * Assert that the harness blocks the given event. Returns the block
566
+ * payload for further inspection. Throws on allow.
567
+ *
568
+ * Optional `expected.rule` / `expected.reason` narrow the assertion:
569
+ * - `rule: "no-force-push"` — the fired rule's name must match.
570
+ * - `reason: /force-push/` — the reason string must match (exact
571
+ * string or regex).
572
+ */
573
+ export declare function expectBlocks(harness: Harness, event: ToolCallEvent | ToolCallShorthand, expected?: ExpectBlocksOptions): Promise<ToolCallEventResult>;
574
+ /**
575
+ * Assert that the harness allows the given event (no rule fires).
576
+ * Throws with a rich message on block.
577
+ */
578
+ export declare function expectAllows(harness: Harness, event: ToolCallEvent | ToolCallShorthand): Promise<void>;
579
+ /**
580
+ * Assert that a specific rule fires on the given event. Thin alias
581
+ * over {@link expectBlocks}; kept as a distinct helper for tests whose
582
+ * intent is "which rule fired" rather than "the tool was blocked".
583
+ */
584
+ export declare function expectRuleFires(harness: Harness, event: ToolCallEvent | ToolCallShorthand, ruleName: string): Promise<void>;
585
+ /** One row of a {@link runMatrix} input. */
586
+ export interface MatrixCase {
587
+ readonly name: string;
588
+ readonly event: ToolCallEvent | ToolCallShorthand;
589
+ readonly expect: "block" | "allow" | {
590
+ readonly block: true;
591
+ readonly rule?: string;
592
+ };
593
+ readonly cwd?: string;
594
+ }
595
+ /** Per-case outcome. */
596
+ export interface MatrixCaseResult {
597
+ readonly case: MatrixCase;
598
+ readonly passed: boolean;
599
+ readonly actual: "block" | "allow";
600
+ readonly reason?: string;
601
+ readonly errorMessage?: string;
602
+ }
603
+ /** Aggregate outcome of {@link runMatrix}. */
604
+ export interface MatrixResult {
605
+ readonly total: number;
606
+ readonly passed: number;
607
+ readonly failed: number;
608
+ readonly cases: ReadonlyArray<MatrixCaseResult>;
609
+ }
610
+ /**
611
+ * Batch-evaluate a list of cases against a harness. Never throws —
612
+ * failures surface in `result.cases`. Pair with {@link formatMatrix}
613
+ * to render a human-readable report.
614
+ */
615
+ export declare function runMatrix(harness: Harness, cases: readonly MatrixCase[]): Promise<MatrixResult>;
616
+ /**
617
+ * Pretty-print a {@link MatrixResult}. ASCII-friendly for CI log
618
+ * aggregators; structure mirrors the adversarial-matrix report style.
619
+ */
620
+ export declare function formatMatrix(result: MatrixResult): string;
621
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}