@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,277 @@
1
+ import { getLatestSchemaVersion } from "./migrate.js";
2
+ import { type SqlDatabase } from "./sqlite.js";
3
+ export type Phase = "idle" | "planning" | "executing" | "done";
4
+ export type PausedReason = "stuck" | "repeated_errors" | "human_gate";
5
+ export interface SessionRow {
6
+ conversation_id: string;
7
+ platform: string;
8
+ session_title: string | null;
9
+ session_title_source: string | null;
10
+ title_updated_at: string | null;
11
+ track_id: string;
12
+ track_title: string | null;
13
+ checklist_path: string;
14
+ phase: Phase;
15
+ armed: number;
16
+ paused: number;
17
+ paused_reason: string | null;
18
+ pending_action: string | null;
19
+ track_candidates_json: string | null;
20
+ project_root: string;
21
+ code_root: string;
22
+ worktree_path: string | null;
23
+ worktree_branch: string | null;
24
+ error_count: number;
25
+ last_error: string | null;
26
+ idle_stop_count: number;
27
+ cli_bound_at: string | null;
28
+ last_active_at: string;
29
+ updated_at: string;
30
+ }
31
+ export interface ReviewChainRow {
32
+ conversation_id: string;
33
+ fix_round: number;
34
+ confirm_left: number | null;
35
+ chain_pending: number;
36
+ code_edited: number;
37
+ item_confirm_complete: number;
38
+ /** Sticky checklist item id under review (set on first product edit). */
39
+ reviewing_item_id: string | null;
40
+ pending_followup: string | null;
41
+ pending_followup_at: string | null;
42
+ pending_redeliver_at: string | null;
43
+ updated_at: string;
44
+ }
45
+ /** Stable short id for CLI tables (first 8 chars of dehyphenated conversation_id). */
46
+ export declare function shortConversationId(conversationId: string): string;
47
+ /** Max length for user/platform session titles (characters). */
48
+ export declare const SESSION_TITLE_MAX_LENGTH = 200;
49
+ /** Normalize and validate a session title; throws on empty/too long/controls. */
50
+ export declare function normalizeSessionTitle(title: string): string;
51
+ /** Collapse controls for single-line CLI table cells (platform titles may be dirty). */
52
+ export declare function sanitizeSessionDisplayText(text: string): string;
53
+ export declare class StateStore {
54
+ readonly db: SqlDatabase;
55
+ readonly projectRoot: string;
56
+ private writeDepth;
57
+ constructor(projectRoot: string, dbPath?: string);
58
+ close(): void;
59
+ getSchemaVersion(): number;
60
+ ensureReviewChain(conversationId: string): ReviewChainRow;
61
+ /** Reject blank, padded, or control-bearing conversation ids (align resolveSessionId). */
62
+ private isInvalidConversationId;
63
+ /** Public gate for hooks / stop handlers (fail-soft before any mutation). */
64
+ isConversationIdOk(conversationId: unknown): boolean;
65
+ private insertReviewChainIfSession;
66
+ getReviewChain(conversationId: string): ReviewChainRow | null;
67
+ getSession(conversationId: string): SessionRow | null;
68
+ listSessions(): SessionRow[];
69
+ /**
70
+ * Resolve a full conversation_id or a unique prefix / short id (first 8 hex-ish chars).
71
+ */
72
+ resolveSessionId(query: string): {
73
+ ok: true;
74
+ id: string;
75
+ } | {
76
+ ok: false;
77
+ error: string;
78
+ };
79
+ renameSession(conversationId: string, title: string): SessionRow | null;
80
+ /** Delete session row and its review_chains row (atomic). */
81
+ purgeSession(conversationId: string,
82
+ /**
83
+ * Optional guard evaluated inside the write transaction (re-check after races).
84
+ * Return false to skip delete without error.
85
+ */
86
+ ifRow?: (row: SessionRow) => boolean): boolean;
87
+ /**
88
+ * Reset review chain fields (same as REPLAN / fresh applyRun review reset).
89
+ * Clears pending_followup* so a later stop cannot redeliver a stale prompt and
90
+ * resurrect chain_pending after the caller believed the chain was wiped.
91
+ * Session row kept. Atomic: refuses orphan review_chains if session was purged.
92
+ */
93
+ resetReviewChain(conversationId: string): boolean;
94
+ /**
95
+ * Pin untrusted session roots to this store's projectRoot.
96
+ * Otherwise a caller could write project_root=/evil and later containment
97
+ * checks that trust session.project_root would pass for outside files.
98
+ * code_root may be a descendant (future worktree); project_root must match.
99
+ * Relative paths resolve against the store root (not process.cwd()).
100
+ */
101
+ private sanitizeSessionRoot;
102
+ /**
103
+ * Refuse checklist_path that escapes the store project (absolute outside or
104
+ * relative that resolves outside). Missing paths kept only if lexically inside.
105
+ * Relative inputs stay relative when allowed (callers/tests rely on that form).
106
+ */
107
+ private sanitizeChecklistPath;
108
+ upsertSession(partial: Partial<SessionRow> & {
109
+ conversation_id: string;
110
+ project_root: string;
111
+ code_root: string;
112
+ }): SessionRow;
113
+ updateReviewChain(conversationId: string, patch: Partial<ReviewChainRow>): ReviewChainRow;
114
+ /**
115
+ * E1: product edit → code_edited=1.
116
+ * Sticky `reviewing_item_id`: set only when empty so a premature checklist `[x]`
117
+ * cannot retarget the item under review mid-chain.
118
+ *
119
+ * When `reviewingItemId` is a function, it runs **inside** the write lock against
120
+ * the live chain row so concurrent advance/neutralize cannot TOCTOU a stale
121
+ * pending/firstUnchecked snapshot from outside the lock.
122
+ */
123
+ markCodeEdited(conversationId: string, reviewingItemId?: string | null | ((chain: ReviewChainRow) => string | null | undefined)): void;
124
+ /**
125
+ * Drop sticky code_edited without touching pending/confirm (Stop/abort path).
126
+ * Column-only like clearChainPending — no ensure/merge; missing chain → no-op.
127
+ */
128
+ clearCodeEdited(conversationId: string): void;
129
+ /**
130
+ * E8: user ordinary chat clears the in-chain flag only.
131
+ * Do NOT wipe pending_followup* — undelivered automation must still redeliver;
132
+ * clearing pending here would let the next stop advance confirm_left (skip a lens).
133
+ * Column-only UPDATE (no ensure/merge): missing chain → no-op; concurrent stop
134
+ * cannot lose confirm_left/pending via stale read-merge-write.
135
+ */
136
+ clearChainPending(conversationId: string): void;
137
+ /**
138
+ * Column-only redeliver hold (recover claim sleep). Also clears chain_pending so
139
+ * armChain=false recover cannot leave a phantom E3 arm. Avoids updateReviewChain
140
+ * read-merge-write clobbering confirm_left / pending under concurrency.
141
+ */
142
+ setPendingRedeliverHold(conversationId: string, at: string): void;
143
+ /**
144
+ * Column-only: drop claim redeliver hold without touching pending / confirm.
145
+ * Used when finish skips CAS (e.g. another followup in flight) but sleep was
146
+ * no-op — leaving the hold would block host-drop redelivery for debounceMs.
147
+ */
148
+ clearPendingRedeliverHold(conversationId: string): void;
149
+ /**
150
+ * Drop redeliver hold only while `pending_followup_at` still equals this stop's
151
+ * claim stamp (and pending is recover). Prevents wiping a peer redeliver's
152
+ * newly armed hold after the debounce window.
153
+ */
154
+ clearPendingRedeliverHoldIfStamp(conversationId: string, expectedAt: string): boolean;
155
+ setChainPending(conversationId: string): void;
156
+ savePendingFollowup(conversationId: string, message: string, opts?: {
157
+ armChain?: boolean;
158
+ }): void;
159
+ /**
160
+ * SQL: pending looks like a recover automation prompt.
161
+ * Keep in sync with `isRecoverFollowupMessage` prefixes.
162
+ */
163
+ private static readonly SQL_PENDING_IS_RECOVER;
164
+ /**
165
+ * SQL: pending kinds that must stay chain_pending=0 on redeliver.
166
+ * Matches recover/stuck (armChain=false), terminal done/review_complete, and
167
+ * E5/E0 Advance (intentionally disarmed — next product edit arms via
168
+ * afterFileEdit → code_edited). Re-arming Advance on host-drop redelivery
169
+ * would force phantom E3 after the tip is answered. Keep prefixes in sync
170
+ * with emit/updateReviewChain sites and kindFromPendingMessage.
171
+ */
172
+ private static readonly SQL_PENDING_REDELIVER_KEEP_DISARMED;
173
+ /**
174
+ * SQL predicate: pending is absent or not a recover automation prompt.
175
+ * Keep in sync with `isRecoverFollowupMessage` prefixes.
176
+ */
177
+ private static readonly SQL_PENDING_NOT_RECOVER;
178
+ /**
179
+ * Atomic emit-ownership bump: succeeds only when `pending_followup_at` still
180
+ * equals `expectedAt` and pending is a recover prompt. Returns the new stamp,
181
+ * or null if the race was lost / row missing. Advances by ≥1ms when `nowIso()`
182
+ * collides with `expectedAt`.
183
+ */
184
+ casBumpPendingFollowupAt(conversationId: string, expectedAt: string): string | null;
185
+ clearPendingFollowup(conversationId: string): void;
186
+ /**
187
+ * Atomically clear pending only when the live row still matches `pred`.
188
+ * Avoids read-then-clear TOCTOU: a concurrent stop may replace recover with
189
+ * fix/confirm between getReviewChain and clearPendingFollowup.
190
+ * Safe inside an open exclusiveWrite (runs inline; no nest).
191
+ */
192
+ clearPendingFollowupIf(conversationId: string, pred: (message: string) => boolean): boolean;
193
+ /**
194
+ * Column-only: neutralize fix/confirm/pending re-entry without ensure/session.
195
+ * Used when pause-threshold upsert failed but the session is still armed — a
196
+ * later completed stop must not resume the review loop via code_edited/pending
197
+ * or loopCount>0→E3 (fix_round cleared so bare loopCount cannot re-arm).
198
+ */
199
+ neutralizeReviewChain(conversationId: string): void;
200
+ /**
201
+ * Like {@link neutralizeReviewChain}, but refuse to wipe an in-flight recover
202
+ * pending (error-storm claimer). Returns true when a row was updated.
203
+ */
204
+ neutralizeReviewChainUnlessRecover(conversationId: string): boolean;
205
+ /**
206
+ * Ambient error-recover soft-reset columns + clear pending, but refuse when
207
+ * pending is already recover (unlocked compensate TOCTOU defense).
208
+ * Preserves `reviewing_item_id` so a premature checklist `[x]` cannot retarget
209
+ * after recover (unlike neutralize/reset, which intentionally clear sticky).
210
+ * Returns true when a row was updated.
211
+ */
212
+ softResetAmbientChainUnlessRecover(conversationId: string, fields: {
213
+ confirm_left: number | null;
214
+ item_confirm_complete: number;
215
+ chain_pending: number;
216
+ code_edited: number;
217
+ }): boolean;
218
+ /**
219
+ * Column-only pause/disarm when the full upsertSession pause write failed.
220
+ * Without this, loopCount>0 completed stops can still hit E3 while armed.
221
+ */
222
+ pauseSessionForRepeatedErrors(conversationId: string, errorCount: number, lastError: string | null): void;
223
+ /**
224
+ * Fallback halt when richer pause UPDATE threw/no-op'd.
225
+ * Always drops armed; ensures paused=1. Preserves an existing paused_reason
226
+ * (e.g. concurrent stuck/human_gate, or richer pause already wrote) via
227
+ * COALESCE — only fills repeated_errors when reason was null.
228
+ * Leaves error_count/last_error to the richer pause path.
229
+ */
230
+ disarmSession(conversationId: string): void;
231
+ touchPendingRedeliver(conversationId: string): void;
232
+ /**
233
+ * Run fn only when session exists. Uses exclusiveWrite when not already in one
234
+ * (serialize vs purge); if already nested in a write txn, runs inline — nesting
235
+ * exclusiveWrite would throw.
236
+ */
237
+ private withSessionChainWrite;
238
+ findExecutingSession(excludeConversationId: string): SessionRow | null;
239
+ /**
240
+ * Move session + review_chain rows from `fromId` → `toId` (PK rebind).
241
+ * Replaces disposable destinations (idle — incl. stale track_id — or done).
242
+ * Refuses planning or executing destinations (paused or armed).
243
+ */
244
+ rebindConversation(fromId: string, toId: string): {
245
+ ok: true;
246
+ session: SessionRow;
247
+ } | {
248
+ ok: false;
249
+ reason: "missing_source" | "dest_busy" | "invalid_id";
250
+ };
251
+ private isDisposableResumeDest;
252
+ private rebindConversationInTxn;
253
+ /**
254
+ * Atomically pick a foreign session (by slug or unique executing) and rebind
255
+ * it onto `toId`. No-op (ok + current dest) when nothing to claim.
256
+ */
257
+ claimSessionInto(toId: string, opts?: {
258
+ slug?: string;
259
+ }): {
260
+ ok: true;
261
+ session: SessionRow | null;
262
+ } | {
263
+ ok: false;
264
+ userMessage: string;
265
+ };
266
+ /**
267
+ * Serialize writers with BEGIN IMMEDIATE so check-then-act (e.g. one_executor)
268
+ * and multi-statement enters stay atomic. Callback chooses commit vs rollback.
269
+ */
270
+ exclusiveWrite<T>(fn: () => {
271
+ commit: boolean;
272
+ value: T;
273
+ }): T;
274
+ static openMemory(projectRoot: string): StateStore;
275
+ }
276
+ export { getLatestSchemaVersion };
277
+ //# sourceMappingURL=state-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-store.d.ts","sourceRoot":"","sources":["../src/state-store.ts"],"names":[],"mappings":"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"}