@autopilot-harness/core 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 (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +8 -0
  3. package/dist/autopilot-ignore.d.ts +23 -0
  4. package/dist/autopilot-ignore.d.ts.map +1 -0
  5. package/dist/autopilot-ignore.js +271 -0
  6. package/dist/autopilot-ignore.js.map +1 -0
  7. package/dist/checklist-md.d.ts +62 -0
  8. package/dist/checklist-md.d.ts.map +1 -0
  9. package/dist/checklist-md.js +217 -0
  10. package/dist/checklist-md.js.map +1 -0
  11. package/dist/code-edit-detector.d.ts +10 -0
  12. package/dist/code-edit-detector.d.ts.map +1 -0
  13. package/dist/code-edit-detector.js +44 -0
  14. package/dist/code-edit-detector.js.map +1 -0
  15. package/dist/i18n-render.d.ts +3 -0
  16. package/dist/i18n-render.d.ts.map +1 -0
  17. package/dist/i18n-render.js +8 -0
  18. package/dist/i18n-render.js.map +1 -0
  19. package/dist/index.d.ts +20 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +20 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/list-tracks.d.ts +29 -0
  24. package/dist/list-tracks.d.ts.map +1 -0
  25. package/dist/list-tracks.js +232 -0
  26. package/dist/list-tracks.js.map +1 -0
  27. package/dist/migrate.d.ts +19 -0
  28. package/dist/migrate.d.ts.map +1 -0
  29. package/dist/migrate.js +101 -0
  30. package/dist/migrate.js.map +1 -0
  31. package/dist/phase-actions.d.ts +35 -0
  32. package/dist/phase-actions.d.ts.map +1 -0
  33. package/dist/phase-actions.js +480 -0
  34. package/dist/phase-actions.js.map +1 -0
  35. package/dist/project-config.d.ts +29 -0
  36. package/dist/project-config.d.ts.map +1 -0
  37. package/dist/project-config.js +301 -0
  38. package/dist/project-config.js.map +1 -0
  39. package/dist/project-path.d.ts +26 -0
  40. package/dist/project-path.d.ts.map +1 -0
  41. package/dist/project-path.js +104 -0
  42. package/dist/project-path.js.map +1 -0
  43. package/dist/review-engine.d.ts +263 -0
  44. package/dist/review-engine.d.ts.map +1 -0
  45. package/dist/review-engine.js +2273 -0
  46. package/dist/review-engine.js.map +1 -0
  47. package/dist/review-i18n.d.ts +29 -0
  48. package/dist/review-i18n.d.ts.map +1 -0
  49. package/dist/review-i18n.js +54 -0
  50. package/dist/review-i18n.js.map +1 -0
  51. package/dist/review-lenses.d.ts +13 -0
  52. package/dist/review-lenses.d.ts.map +1 -0
  53. package/dist/review-lenses.js +43 -0
  54. package/dist/review-lenses.js.map +1 -0
  55. package/dist/review-runtime.d.ts +12 -0
  56. package/dist/review-runtime.d.ts.map +1 -0
  57. package/dist/review-runtime.js +37 -0
  58. package/dist/review-runtime.js.map +1 -0
  59. package/dist/review-scope.d.ts +9 -0
  60. package/dist/review-scope.d.ts.map +1 -0
  61. package/dist/review-scope.js +92 -0
  62. package/dist/review-scope.js.map +1 -0
  63. package/dist/sqlite.d.ts +15 -0
  64. package/dist/sqlite.d.ts.map +1 -0
  65. package/dist/sqlite.js +38 -0
  66. package/dist/sqlite.js.map +1 -0
  67. package/dist/state-store.d.ts +277 -0
  68. package/dist/state-store.d.ts.map +1 -0
  69. package/dist/state-store.js +1091 -0
  70. package/dist/state-store.js.map +1 -0
  71. package/dist/track-slug.d.ts +4 -0
  72. package/dist/track-slug.d.ts.map +1 -0
  73. package/dist/track-slug.js +18 -0
  74. package/dist/track-slug.js.map +1 -0
  75. package/dist/transcript-followup.d.ts +59 -0
  76. package/dist/transcript-followup.d.ts.map +1 -0
  77. package/dist/transcript-followup.js +310 -0
  78. package/dist/transcript-followup.js.map +1 -0
  79. package/dist/trigger-parser.d.ts +54 -0
  80. package/dist/trigger-parser.d.ts.map +1 -0
  81. package/dist/trigger-parser.js +250 -0
  82. package/dist/trigger-parser.js.map +1 -0
  83. package/dist/verify-report.d.ts +52 -0
  84. package/dist/verify-report.d.ts.map +1 -0
  85. package/dist/verify-report.js +195 -0
  86. package/dist/verify-report.js.map +1 -0
  87. package/package.json +41 -0
@@ -0,0 +1,263 @@
1
+ import { type ConfirmLens } from "./review-lenses.js";
2
+ import type { ReviewScope } from "./project-config.js";
3
+ import { type SessionRow, type StateStore } from "./state-store.js";
4
+ import { type VerifyCommandConfig } from "./verify-report.js";
5
+ export type FollowupKind = "review.fix" | "review.confirm" | "review.confirm_final" | "advance" | "done" | "review_complete" | "recover" | "recover_planning" | "recover_ambient" | "stuck" | "verify_fix";
6
+ export interface FollowupAction {
7
+ kind: FollowupKind;
8
+ message: string;
9
+ /** false = deliver message once without requesting another agent turn. */
10
+ loop: boolean;
11
+ meta?: Record<string, string | number | boolean>;
12
+ }
13
+ export interface StopHandlerInput {
14
+ conversationId: string;
15
+ status: "completed" | "error" | "aborted";
16
+ loopCount: number;
17
+ /** Cursor transcript path — enables pending redelivery / in-flight gating. */
18
+ transcriptPath?: string;
19
+ }
20
+ export interface ReviewEngineConfig {
21
+ confirmRounds: number;
22
+ /** When completed-stop fix→confirm may run. Default executing_only. */
23
+ reviewScope: ReviewScope;
24
+ verifyEnabled: boolean;
25
+ verifyCommands: VerifyCommandConfig[];
26
+ maxIdleStops: number;
27
+ /** 0 = never pause on turn errors. */
28
+ maxErrorsBeforePause: number;
29
+ projectRoot: string;
30
+ /**
31
+ * Error-stop recover debounce / same-window coalesce (ms).
32
+ * Default {@link RECOVER_DEBOUNCE_MS} (3000). Tests pass 0 to skip sleep.
33
+ */
34
+ recoverDebounceMs?: number;
35
+ /** Override sync sleep used by recover debounce (tests). */
36
+ sleepSync?: (ms: number) => void;
37
+ /** Optional override for verify report path (tests). */
38
+ verifyReportPath?: string;
39
+ /** Render followup message; default English templates. */
40
+ renderFollowup?: (kind: FollowupKind, vars: Record<string, string | number>) => string;
41
+ /** Resolve confirm lens; default English CONFIRM_LENSES. */
42
+ resolveLens?: (roundIndex: number, confirmRounds: number) => ConfirmLens;
43
+ }
44
+ export declare class ReviewEngine {
45
+ private readonly store;
46
+ private readonly config;
47
+ constructor(store: StateStore, config: ReviewEngineConfig);
48
+ private render;
49
+ private lens;
50
+ /**
51
+ * FS trust root: StateStore is authoritative.
52
+ * config.projectRoot must not widen the boundary (mismatched/evil config).
53
+ */
54
+ private trustedProjectRoot;
55
+ /**
56
+ * Parse session checklist only when realpath stays under the project root.
57
+ * O_NOFOLLOW alone cannot stop intermediate directory symlink escapes or a
58
+ * poisoned absolute checklist_path in the session row.
59
+ */
60
+ private parseSessionChecklist;
61
+ private reviewChainResetFields;
62
+ private renderAdvanceOrDone;
63
+ /** Resolve sticky reviewing id from chain, or fall back to hint / firstUnchecked. */
64
+ private resolveReviewingItemId;
65
+ /** E1: afterFileEdit product code → code_edited=1 (+ sticky reviewing_item_id). */
66
+ onCodeEdited(conversationId: string): void;
67
+ handleStop(input: StopHandlerInput): FollowupAction | null;
68
+ private pendingBlocksAdvance;
69
+ private tryRedeliverPending;
70
+ private inferPendingKind;
71
+ private emit;
72
+ /**
73
+ * Cursor Stop button (and similar host interrupts) arrive as status=aborted.
74
+ * Do not inject recover — that fights the user and loops with loop_limit:null.
75
+ * Drop recover/stuck pending so transcript revert cannot redeliver them later.
76
+ * Clear sticky code_edited so Stop→revert→resend cannot open a phantom fix
77
+ * chain on the next completed stop (disk may already be clean).
78
+ * Leave fix/confirm pending alone (delivery retry still valid if inject raced).
79
+ * Both clears share one exclusiveWrite so a mid-abort failure cannot leave
80
+ * recover gone while code_edited sticky (or the reverse).
81
+ */
82
+ private handleAbortedStop;
83
+ private handleErrorStop;
84
+ private resolveRecoverDebounceMs;
85
+ private sleepRecoverDebounce;
86
+ /**
87
+ * Error recover: claim under exclusiveWrite → sleep debounce → emit at most
88
+ * once per window. Concurrent error stops in the same window coalesce to null.
89
+ * Outside the window, if still dead, redeliver once (new window).
90
+ * Emit ownership is CAS'd on `pending_followup_at` so claimer+redeliver
91
+ * cannot both return followup_message after overlapping sleeps.
92
+ */
93
+ private debouncedErrorRecover;
94
+ /**
95
+ * Claim the recover inject slot for this error storm.
96
+ * - coalesced: another stop already owns the window → do not emit
97
+ * - claimer/redeliver: pending written; `stamp` is pending_followup_at for CAS emit
98
+ * - failed: exclusiveWrite threw
99
+ */
100
+ private tryClaimErrorRecoverWindow;
101
+ /**
102
+ * After debounce: skip inject if the session already revived or recover is
103
+ * already in-flight on the transcript; otherwise CAS-emit on claim stamp.
104
+ */
105
+ private finishErrorRecoverAfterDebounce;
106
+ /**
107
+ * True when finish-time inflight is the same dead harness tip snapped at claim.
108
+ * Requires the same harness kind first (fix vs confirm must not match), then
109
+ * exact match. Only fix tips allow finish starting with claim's 48-char prefix
110
+ * (round digits appear early in en/zh). Confirm is exact-only: English confirm
111
+ * puts {lensTitle} after ~100 chars, so a 48-prefix would treat different
112
+ * lenses as the same tip. Advance/Briefly stay exact-only for the same
113
+ * shared-lead-in reason.
114
+ */
115
+ private isSameDeadHarnessTip;
116
+ /**
117
+ * Classify completed-stop orphan transcript errors from one tail read.
118
+ * - none: no unresolved turn_ended error
119
+ * - skip_recover_tip: unresolved error AND a recover tip after that error
120
+ * (do not re-bump error_count / re-enter handleErrorStop)
121
+ * - salvage: unresolved error with no post-error recover tip yet
122
+ *
123
+ * Invariant: a newer turn_ended error after an old unanswered recover tip must
124
+ * salvage again — the prior tip does not cover the new failure.
125
+ */
126
+ private classifyCompletedOrphan;
127
+ /** Coarse kind bucket so fix/confirm/advance tips cannot share a prefix match. */
128
+ private harnessFollowupKind;
129
+ /**
130
+ * Atomically take emit ownership: only the stop whose claim stamp still
131
+ * matches may return followup. Winner bumps pending_followup_at so a racing
132
+ * redeliver lands in-window and coalesces instead of double-injecting.
133
+ */
134
+ private tryCasRecoverEmit;
135
+ private clearRecoverPendingBestEffort;
136
+ /**
137
+ * Block completed-stop recover redelivery for ~holdMs using pending_redeliver_at
138
+ * against {@link PENDING_REDELIVER_COOLDOWN_MS}. CAS emit nulls the hold so a
139
+ * host-dropped inject can redeliver immediately (unlike gating on
140
+ * pending_followup_at, which CAS refreshes and would extend the block).
141
+ *
142
+ * When holdMs > cooldown, `at` is in the future so
143
+ * {@link pendingRedeliverAllowed} stays false until ~holdMs elapses — do not
144
+ * clamp hold to cooldown (that would unblock mid-sleep for long debounce).
145
+ */
146
+ private armRecoverClaimRedeliverHold;
147
+ /**
148
+ * Last-resort when tryClaimErrorRecoverWindow's exclusiveWrite failed.
149
+ * Retries ambient soft-reset+pending up to 3×; then column-only disarm +
150
+ * emitRecover (never unlocked neutralize/soft-reset, never full-neutralize
151
+ * after transient lock failures — that wiped mid-confirm confirm_left).
152
+ * Skip wipe/emit when recover pending already exists.
153
+ */
154
+ private compensateFailedErrorRecoverClaim;
155
+ /** After a successful compensate write, drop recover if session paused mid-flight. */
156
+ private recoverActionIfStillRunnable;
157
+ private sessionStillErrorRecoverable;
158
+ /**
159
+ * Compensating emit after claim failure: never overwrite a peer recover pending.
160
+ * Ambient: soft-reset under the same lock before stamp (resume mid-fix /
161
+ * preserve mid-confirm). Never unlocked soft-reset on the legacy fallback.
162
+ * If exclusiveWrite is unavailable, fall back to legacy {@link emit} only when
163
+ * no recover pending is visible and a recover row was stamped.
164
+ */
165
+ private emitRecoverAfterFailedClaim;
166
+ /**
167
+ * Ambient error recover write: soft-reset + recover pending under one
168
+ * exclusiveWrite. "exists" = peer already claimed recover (do not overwrite).
169
+ */
170
+ private tryCommitAmbientErrorRecover;
171
+ /**
172
+ * Ambient/planning error recover: drop confirm/pending arming so recover
173
+ * (armChain=false) cannot leave chain_pending=1 → phantom E3.
174
+ *
175
+ * Call only under exclusiveWrite (with savePendingFollowup). Compensate must
176
+ * not call this unlocked: clearing undelivered confirm/fix pending while
177
+ * confirm_left is already post-decrement desyncs the next E4 lens.
178
+ *
179
+ * Preserve mid-confirm / E5-ready counters so the completed stop after
180
+ * recover continues E4/E5. Ready-for-E3 (fix done, chain_pending only)
181
+ * advances into confirm via confirm_left=confirmRounds (E4 emits 1/N) —
182
+ * do not regress to another fix. Ready-for-E3 requires empty pending (not
183
+ * merely !fixPending). Force code_edited only for an active fix
184
+ * (code_edited / undelivered fix pending / chain_pending with pending still
185
+ * set). Bare leftover fix_round is ignored (ambient phantom residue).
186
+ */
187
+ private applySoftResetAmbientChainForErrorRecover;
188
+ /** Shared with inferPendingKind — locale templates must keep these prefixes. */
189
+ private isFixFollowupMessage;
190
+ /** Mid-confirm or E5-ready — must not phantom-arm code_edited over E4/E5. */
191
+ private isMidConfirmOrE5;
192
+ /** True when a stop may still advance the review chain (re-check under write lock). */
193
+ private sessionRunnable;
194
+ /** Genuine error stop may inject recover (planning, project ambient, or armed executing). */
195
+ private sessionErrorRecoverable;
196
+ private recoverKindForPhase;
197
+ /** completed stop → reset error_count */
198
+ noteCompletedOk(session: SessionRow): void;
199
+ private maybeResetErrorCountOnItemChange;
200
+ /**
201
+ * E0': checklist executing, not in fix/confirm — skip lenses when there is no
202
+ * product code edit. Soft/verified success advances in one IMMEDIATE txn with
203
+ * evidence re-check (never arm at-E5 first). Only required-verify *fail*
204
+ * arms at-E5 to reuse E5c verify_fix / stuck.
205
+ */
206
+ private e0NoCodeContinue;
207
+ /**
208
+ * E0 direct advance/done: re-check soft or verified evidence under one
209
+ * IMMEDIATE write — never enters the confirm/E5 state machine.
210
+ */
211
+ private e0DirectAdvance;
212
+ /** Arm confirm_left=0 + ICC=1 only when still idle on the no-code path. */
213
+ private armAtE5ForNoCode;
214
+ /** Undo a failed arm so the next stop cannot skip soft evidence via E5. */
215
+ private disarmE5NoCode;
216
+ /** Session-monotonic round counter (fix + confirm share fix_round; no hard cap). */
217
+ private nextSessionRound;
218
+ private e2Fix;
219
+ private e3ArmConfirm;
220
+ private e4Confirm;
221
+ private e5Gate;
222
+ private e5bAdvance;
223
+ private bumpProgress;
224
+ /**
225
+ * Best-effort session bookkeeping after a followup was already committed
226
+ * (pending_followup in exclusiveWrite). Must not throw into handleStop's
227
+ * soft-fail catch — that would drop the committed action from the hook reply.
228
+ */
229
+ private afterFollowupCommitted;
230
+ private incrementIdle;
231
+ /** After a no-progress stop that didn't inject, check stuck threshold. */
232
+ checkStuck(session: SessionRow): FollowupAction | null;
233
+ }
234
+ /** Apply OFF trigger side effects (v0.1). */
235
+ export declare function applyOff(store: StateStore, conversationId: string): SessionRow | null;
236
+ /** Apply ON trigger side effects (v0.1). */
237
+ export declare function applyOn(store: StateStore, conversationId: string, projectRoot: string, opts?: {
238
+ initialBrief?: string;
239
+ slug?: string;
240
+ }): {
241
+ ok: true;
242
+ session: SessionRow;
243
+ } | {
244
+ ok: false;
245
+ userMessage: string;
246
+ };
247
+ export type ApplyResumeResult = {
248
+ ok: true;
249
+ session: SessionRow | null;
250
+ } | {
251
+ ok: false;
252
+ userMessage: string;
253
+ };
254
+ /**
255
+ * Apply RESUME: unpause local session, or claim another conversation's track
256
+ * onto this conversation_id (preserving review_chains).
257
+ */
258
+ export declare function applyResume(store: StateStore, conversationId: string, opts?: {
259
+ slug?: string;
260
+ }): ApplyResumeResult;
261
+ /** resume_review: only chain_pending=1 */
262
+ export declare function applyResumeReview(store: StateStore, conversationId: string): void;
263
+ //# sourceMappingURL=review-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-engine.d.ts","sourceRoot":"","sources":["../src/review-engine.ts"],"names":[],"mappings":"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"}