openplanr 1.2.7 → 1.2.8
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.
- package/README.md +34 -1
- package/dist/ai/prompts/prompt-builder.d.ts +48 -0
- package/dist/ai/prompts/prompt-builder.d.ts.map +1 -1
- package/dist/ai/prompts/prompt-builder.js +57 -1
- package/dist/ai/prompts/prompt-builder.js.map +1 -1
- package/dist/ai/prompts/system-prompts.d.ts +23 -0
- package/dist/ai/prompts/system-prompts.d.ts.map +1 -1
- package/dist/ai/prompts/system-prompts.js +98 -0
- package/dist/ai/prompts/system-prompts.js.map +1 -1
- package/dist/ai/schemas/ai-response-schemas.d.ts +68 -0
- package/dist/ai/schemas/ai-response-schemas.d.ts.map +1 -1
- package/dist/ai/schemas/ai-response-schemas.js +81 -0
- package/dist/ai/schemas/ai-response-schemas.js.map +1 -1
- package/dist/ai/types.d.ts +2 -0
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/ai/types.js +2 -0
- package/dist/ai/types.js.map +1 -1
- package/dist/cli/commands/revise.d.ts +23 -0
- package/dist/cli/commands/revise.d.ts.map +1 -0
- package/dist/cli/commands/revise.js +502 -0
- package/dist/cli/commands/revise.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/models/types.d.ts +120 -0
- package/dist/models/types.d.ts.map +1 -1
- package/dist/services/atomic-write-service.d.ts +41 -0
- package/dist/services/atomic-write-service.d.ts.map +1 -0
- package/dist/services/atomic-write-service.js +87 -0
- package/dist/services/atomic-write-service.js.map +1 -0
- package/dist/services/audit-log-service.d.ts +50 -0
- package/dist/services/audit-log-service.d.ts.map +1 -0
- package/dist/services/audit-log-service.js +213 -0
- package/dist/services/audit-log-service.js.map +1 -0
- package/dist/services/cascade-service.d.ts +62 -0
- package/dist/services/cascade-service.d.ts.map +1 -0
- package/dist/services/cascade-service.js +189 -0
- package/dist/services/cascade-service.js.map +1 -0
- package/dist/services/diff-service.d.ts +18 -0
- package/dist/services/diff-service.d.ts.map +1 -0
- package/dist/services/diff-service.js +35 -0
- package/dist/services/diff-service.js.map +1 -0
- package/dist/services/evidence-verifier.d.ts +71 -0
- package/dist/services/evidence-verifier.d.ts.map +1 -0
- package/dist/services/evidence-verifier.js +171 -0
- package/dist/services/evidence-verifier.js.map +1 -0
- package/dist/services/git-service.d.ts +60 -0
- package/dist/services/git-service.d.ts.map +1 -0
- package/dist/services/git-service.js +137 -0
- package/dist/services/git-service.js.map +1 -0
- package/dist/services/graph-integrity.d.ts +36 -0
- package/dist/services/graph-integrity.d.ts.map +1 -0
- package/dist/services/graph-integrity.js +54 -0
- package/dist/services/graph-integrity.js.map +1 -0
- package/dist/services/prompt-service.d.ts +18 -0
- package/dist/services/prompt-service.d.ts.map +1 -1
- package/dist/services/prompt-service.js +47 -0
- package/dist/services/prompt-service.js.map +1 -1
- package/dist/services/revise-cache-service.d.ts +46 -0
- package/dist/services/revise-cache-service.d.ts.map +1 -0
- package/dist/services/revise-cache-service.js +88 -0
- package/dist/services/revise-cache-service.js.map +1 -0
- package/dist/services/revise-service.d.ts +108 -0
- package/dist/services/revise-service.d.ts.map +1 -0
- package/dist/services/revise-service.js +249 -0
- package/dist/services/revise-service.js.map +1 -0
- package/dist/services/template-sections.d.ts +28 -0
- package/dist/services/template-sections.d.ts.map +1 -0
- package/dist/services/template-sections.js +55 -0
- package/dist/services/template-sections.js.map +1 -0
- package/dist/utils/diff.d.ts +26 -0
- package/dist/utils/diff.d.ts.map +1 -0
- package/dist/utils/diff.js +143 -0
- package/dist/utils/diff.js.map +1 -0
- package/package.json +1 -1
package/dist/models/types.d.ts
CHANGED
|
@@ -276,4 +276,124 @@ export interface VoiceStandupSession {
|
|
|
276
276
|
transcript: string;
|
|
277
277
|
errorMessage?: string;
|
|
278
278
|
}
|
|
279
|
+
export type ReviseAction = 'revise' | 'skip' | 'flag';
|
|
280
|
+
/**
|
|
281
|
+
* Typed evidence kinds the agent must use when citing why a revision or
|
|
282
|
+
* flag is justified. Every kind is verifiable by the post-flight guard:
|
|
283
|
+
* - `file_exists` / `file_absent` — fs.stat check against `ref`
|
|
284
|
+
* - `grep_match` — substring match in the provided codebase context
|
|
285
|
+
* - `sibling_artifact` — quote from another artifact within the same scope
|
|
286
|
+
* - `source_quote` — quote from a declared source (PRD, design, ADR, rule file)
|
|
287
|
+
* - `pattern_rule` — an architectural pattern rule detected by existing pattern-rules
|
|
288
|
+
*/
|
|
289
|
+
export type ReviseEvidenceType = 'file_exists' | 'file_absent' | 'grep_match' | 'sibling_artifact' | 'source_quote' | 'pattern_rule';
|
|
290
|
+
export interface ReviseEvidence {
|
|
291
|
+
type: ReviseEvidenceType;
|
|
292
|
+
/** What the evidence points at — a file path, artifact id, or rule id. */
|
|
293
|
+
ref: string;
|
|
294
|
+
/** Verbatim snippet supporting the evidence (when applicable to the type). */
|
|
295
|
+
quote?: string;
|
|
296
|
+
}
|
|
297
|
+
export interface ReviseAmbiguity {
|
|
298
|
+
/** Section of the target artifact the ambiguity touches. */
|
|
299
|
+
section: string;
|
|
300
|
+
/** Why the agent could not resolve this without a human decision. */
|
|
301
|
+
reason: string;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* One agent decision for one artifact. Produced by the revise agent,
|
|
305
|
+
* validated by `aiReviseDecisionSchema`, verified by the post-flight guard.
|
|
306
|
+
*
|
|
307
|
+
* Invariants (enforced by the zod schema, not the TS type):
|
|
308
|
+
* - `action === 'revise'` requires non-empty `revisedMarkdown` and at least one `evidence` entry
|
|
309
|
+
* - `action === 'flag'` requires at least one `ambiguous` entry
|
|
310
|
+
* - `action === 'skip'` has no `revisedMarkdown` and no `ambiguous` entries
|
|
311
|
+
*/
|
|
312
|
+
export interface ReviseDecision {
|
|
313
|
+
artifactId: string;
|
|
314
|
+
action: ReviseAction;
|
|
315
|
+
/** Proposed full artifact markdown; required when action === 'revise'. */
|
|
316
|
+
revisedMarkdown?: string;
|
|
317
|
+
rationale: string;
|
|
318
|
+
/** Typed evidence citations — post-flight verifies these. Always present, empty when none. */
|
|
319
|
+
evidence: ReviseEvidence[];
|
|
320
|
+
/** Ambiguities requiring human decision — populated when action === 'flag', empty otherwise. */
|
|
321
|
+
ambiguous: ReviseAmbiguity[];
|
|
322
|
+
}
|
|
323
|
+
/** Audit log output format. */
|
|
324
|
+
export type ReviseAuditFormat = 'md' | 'json';
|
|
325
|
+
/**
|
|
326
|
+
* Terminal state recorded in the audit log for a single artifact in a
|
|
327
|
+
* revise run. Superset of the agent's `ReviseAction` so we can also record
|
|
328
|
+
* human overrides (skipped / quit) and system outcomes (failed / demoted).
|
|
329
|
+
*/
|
|
330
|
+
export type ReviseAuditOutcome = 'applied' | 'would-apply' | 'skipped-by-agent' | 'skipped-by-user' | 'flagged' | 'failed' | 'demoted';
|
|
331
|
+
/**
|
|
332
|
+
* One row in the revise audit log. Flushed to disk as soon as it is
|
|
333
|
+
* produced (FEAT-012 §4.1) so an interrupted run still leaves an accurate
|
|
334
|
+
* on-disk record of what was written.
|
|
335
|
+
*/
|
|
336
|
+
export interface ReviseAuditEntry {
|
|
337
|
+
artifactId: string;
|
|
338
|
+
artifactPath?: string;
|
|
339
|
+
outcome: ReviseAuditOutcome;
|
|
340
|
+
rationale: string;
|
|
341
|
+
evidence: ReviseEvidence[];
|
|
342
|
+
ambiguous: ReviseAmbiguity[];
|
|
343
|
+
/** Cascade level the entry was produced at; omitted for single-artifact runs. */
|
|
344
|
+
cascadeLevel?: 'epic' | 'features' | 'stories' | 'tasks';
|
|
345
|
+
/** Unified diff against the pre-revise artifact body; present when outcome wrote content. */
|
|
346
|
+
diff?: string;
|
|
347
|
+
/** Present when outcome === 'failed'. */
|
|
348
|
+
error?: string;
|
|
349
|
+
timestamp: string;
|
|
350
|
+
}
|
|
351
|
+
/** Aggregate audit record covering a single revise run. */
|
|
352
|
+
export interface ReviseAudit {
|
|
353
|
+
scope: string;
|
|
354
|
+
cascade: boolean;
|
|
355
|
+
dryRun: boolean;
|
|
356
|
+
startedAt: string;
|
|
357
|
+
completedAt?: string;
|
|
358
|
+
entries: ReviseAuditEntry[];
|
|
359
|
+
/** Populated when the run stopped before normal completion. */
|
|
360
|
+
interrupted?: {
|
|
361
|
+
reason: 'q' | 'sigint' | 'agent_error' | 'graph_rollback';
|
|
362
|
+
atArtifactId?: string;
|
|
363
|
+
};
|
|
364
|
+
tokenUsage?: {
|
|
365
|
+
inputTokens: number;
|
|
366
|
+
outputTokens: number;
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* One level in a top-down cascade. Tracks which artifact type the level
|
|
371
|
+
* covers and the ordered artifact ids processed at that level.
|
|
372
|
+
*/
|
|
373
|
+
export interface CascadeLevel {
|
|
374
|
+
type: ArtifactType;
|
|
375
|
+
label: 'epic' | 'features' | 'stories' | 'tasks';
|
|
376
|
+
artifactIds: string[];
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Plan for a cascade run. Built by `buildCascadeOrder` and consumed by the
|
|
380
|
+
* cascade executor; immutable after construction.
|
|
381
|
+
*/
|
|
382
|
+
export interface CascadePlan {
|
|
383
|
+
/** Root artifact that started the cascade (epic / feature / story / task). */
|
|
384
|
+
rootId: string;
|
|
385
|
+
rootType: ArtifactType;
|
|
386
|
+
levels: CascadeLevel[];
|
|
387
|
+
/** Convenience: flat list of all artifact ids in cascade order. */
|
|
388
|
+
orderedIds: string[];
|
|
389
|
+
}
|
|
390
|
+
/** Live progress snapshot emitted during cascade execution. */
|
|
391
|
+
export interface CascadeProgress {
|
|
392
|
+
completed: number;
|
|
393
|
+
total: number;
|
|
394
|
+
currentArtifactId: string;
|
|
395
|
+
currentLevelLabel: CascadeLevel['label'];
|
|
396
|
+
/** Rolling estimate of remaining time in seconds; null until enough samples collected. */
|
|
397
|
+
etaSeconds: number | null;
|
|
398
|
+
}
|
|
279
399
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,SAAS,GACT,OAAO,GACP,MAAM,GACN,OAAO,GACP,SAAS,GACT,QAAQ,GACR,KAAK,GACL,WAAW,CAAC;AAChB,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AACtD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC/D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5D,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,yCAAyC;IACzC,YAAY,CAAC,EAAE;QACb,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,8FAA8F;QAC9F,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,qFAAqF;QACrF,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;KACrC,CAAC;IACF,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,IAAK,SAAQ,YAAY;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,OAAQ,SAAQ,YAAY;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,QAAS,SAAQ,YAAY;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACrE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AAC3D,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,MAAO,SAAQ,YAAY;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,uDAAuD;AACvD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,SAAS,GACT,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,YAAY,EAAE,wBAAwB,EAAE,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;CACxD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,yEAAyE;AACzE,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,qBAAqB,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE;QACT,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAC5B,QAAQ,EAAE,kBAAkB,EAAE,CAAC;QAC/B,OAAO,EAAE,kBAAkB,EAAE,CAAC;QAC9B,KAAK,EAAE,kBAAkB,EAAE,CAAC;KAC7B,CAAC;IACF,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,sDAAsD;IACtD,YAAY,EAAE;QACZ,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;QAClB,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,+DAA+D;IAC/D,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,cAAc,GAAG,UAAU,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC,YAAY,EAAE,eAAe,EAAE,CAAC;CACjC;AAMD,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,uBAAuB,CAAC;IAChC,gEAAgE;IAChE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAMD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAExF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic artifact writes with sidecar backup (EPIC-003, FEAT-011 §3.0).
|
|
3
|
+
*
|
|
4
|
+
* Atomicity = temp file → fsync → rename. If any step fails mid-write, the
|
|
5
|
+
* original file was never modified and the temp file is removed. There is
|
|
6
|
+
* nothing to "roll back" at the file level — atomicity is the guarantee.
|
|
7
|
+
* The word "rollback" is reserved for FEAT-013's post-flight git mechanism.
|
|
8
|
+
*
|
|
9
|
+
* The sidecar backup copy is for *manual* recovery (e.g., if a user wants
|
|
10
|
+
* to diff an already-written artifact against what was there before). It is
|
|
11
|
+
* not consulted by any automated rollback path.
|
|
12
|
+
*/
|
|
13
|
+
export interface AtomicWriteOptions {
|
|
14
|
+
/**
|
|
15
|
+
* If provided, the original file is copied here before the write. A
|
|
16
|
+
* typical value is `.planr/reports/revise-<scope>-<date>/backup/<name>.bak`.
|
|
17
|
+
* Missing originals (first write) silently skip the backup step — there
|
|
18
|
+
* is nothing to back up.
|
|
19
|
+
*/
|
|
20
|
+
backupPath?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface AtomicWriteResult {
|
|
23
|
+
/** Absolute path of the file that now holds the new content. */
|
|
24
|
+
targetPath: string;
|
|
25
|
+
/** Absolute path of the sidecar backup, if one was created. */
|
|
26
|
+
backupPath?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Replace `targetPath` atomically with `content`. Creates the target's
|
|
30
|
+
* parent directory if needed. When `options.backupPath` is set, the
|
|
31
|
+
* existing file (if any) is copied there before the new content is written.
|
|
32
|
+
*/
|
|
33
|
+
export declare function atomicWriteFile(targetPath: string, content: string, options?: AtomicWriteOptions): Promise<AtomicWriteResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Copy `targetPath` to `backupPath` when the original exists. Returns the
|
|
36
|
+
* backup path on success, or `undefined` when there was nothing to back up
|
|
37
|
+
* (original absent). Throws on unexpected I/O errors so callers do not
|
|
38
|
+
* silently proceed with a missing safety copy.
|
|
39
|
+
*/
|
|
40
|
+
export declare function backupIfPresent(targetPath: string, backupPath: string): Promise<string | undefined>;
|
|
41
|
+
//# sourceMappingURL=atomic-write-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-write-service.d.ts","sourceRoot":"","sources":["../../src/services/atomic-write-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAeH,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CA+B5B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmB7B"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic artifact writes with sidecar backup (EPIC-003, FEAT-011 §3.0).
|
|
3
|
+
*
|
|
4
|
+
* Atomicity = temp file → fsync → rename. If any step fails mid-write, the
|
|
5
|
+
* original file was never modified and the temp file is removed. There is
|
|
6
|
+
* nothing to "roll back" at the file level — atomicity is the guarantee.
|
|
7
|
+
* The word "rollback" is reserved for FEAT-013's post-flight git mechanism.
|
|
8
|
+
*
|
|
9
|
+
* The sidecar backup copy is for *manual* recovery (e.g., if a user wants
|
|
10
|
+
* to diff an already-written artifact against what was there before). It is
|
|
11
|
+
* not consulted by any automated rollback path.
|
|
12
|
+
*/
|
|
13
|
+
import { close, constants, copyFile, fsync, open, rename, unlink, writeFile } from 'node:fs';
|
|
14
|
+
import path from 'node:path';
|
|
15
|
+
import { promisify } from 'node:util';
|
|
16
|
+
import { ensureDir } from '../utils/fs.js';
|
|
17
|
+
const copyFileAsync = promisify(copyFile);
|
|
18
|
+
const fsyncAsync = promisify(fsync);
|
|
19
|
+
const renameAsync = promisify(rename);
|
|
20
|
+
const unlinkAsync = promisify(unlink);
|
|
21
|
+
const writeFileAsync = promisify(writeFile);
|
|
22
|
+
const openAsync = promisify(open);
|
|
23
|
+
const closeAsync = promisify(close);
|
|
24
|
+
/**
|
|
25
|
+
* Replace `targetPath` atomically with `content`. Creates the target's
|
|
26
|
+
* parent directory if needed. When `options.backupPath` is set, the
|
|
27
|
+
* existing file (if any) is copied there before the new content is written.
|
|
28
|
+
*/
|
|
29
|
+
export async function atomicWriteFile(targetPath, content, options = {}) {
|
|
30
|
+
await ensureDir(path.dirname(targetPath));
|
|
31
|
+
let backupCreated;
|
|
32
|
+
if (options.backupPath) {
|
|
33
|
+
backupCreated = await backupIfPresent(targetPath, options.backupPath);
|
|
34
|
+
}
|
|
35
|
+
// Temp file in the same directory as the target — required for rename to
|
|
36
|
+
// be atomic (cross-device renames fall back to copy + delete on some fs).
|
|
37
|
+
const tmpName = `.${path.basename(targetPath)}.${process.pid}.${Date.now()}.tmp`;
|
|
38
|
+
const tmpPath = path.join(path.dirname(targetPath), tmpName);
|
|
39
|
+
try {
|
|
40
|
+
await writeFileAsync(tmpPath, content, 'utf-8');
|
|
41
|
+
// fsync the temp file so the new content is durable before the rename.
|
|
42
|
+
const fd = await openAsync(tmpPath, constants.O_RDONLY);
|
|
43
|
+
try {
|
|
44
|
+
await fsyncAsync(fd);
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
await closeAsync(fd);
|
|
48
|
+
}
|
|
49
|
+
await renameAsync(tmpPath, targetPath);
|
|
50
|
+
return { targetPath, backupPath: backupCreated };
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
// Best-effort cleanup of the temp file; the original is already safe.
|
|
54
|
+
await unlinkAsync(tmpPath).catch(() => {
|
|
55
|
+
// ignore — temp file may not exist if write never started
|
|
56
|
+
});
|
|
57
|
+
throw err;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Copy `targetPath` to `backupPath` when the original exists. Returns the
|
|
62
|
+
* backup path on success, or `undefined` when there was nothing to back up
|
|
63
|
+
* (original absent). Throws on unexpected I/O errors so callers do not
|
|
64
|
+
* silently proceed with a missing safety copy.
|
|
65
|
+
*/
|
|
66
|
+
export async function backupIfPresent(targetPath, backupPath) {
|
|
67
|
+
await ensureDir(path.dirname(backupPath));
|
|
68
|
+
try {
|
|
69
|
+
await copyFileAsync(targetPath, backupPath, constants.COPYFILE_EXCL);
|
|
70
|
+
return backupPath;
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const code = err.code;
|
|
74
|
+
if (code === 'ENOENT') {
|
|
75
|
+
// Original file doesn't exist — not a real error, nothing to back up.
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
if (code === 'EEXIST') {
|
|
79
|
+
// Backup slot already taken (possible on re-run against same scope/date).
|
|
80
|
+
// Fall back to non-exclusive copy so re-runs remain idempotent.
|
|
81
|
+
await copyFileAsync(targetPath, backupPath);
|
|
82
|
+
return backupPath;
|
|
83
|
+
}
|
|
84
|
+
throw err;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=atomic-write-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-write-service.js","sourceRoot":"","sources":["../../src/services/atomic-write-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACpC,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACtC,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAC5C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAClC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AAmBpC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,OAAe,EACf,UAA8B,EAAE;IAEhC,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAE1C,IAAI,aAAiC,CAAC;IACtC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,aAAa,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACxE,CAAC;IAED,yEAAyE;IACzE,0EAA0E;IAC1E,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IACjF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;IAE7D,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,uEAAuE;QACvE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;gBAAS,CAAC;YACT,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sEAAsE;QACtE,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACpC,0DAA0D;QAC5D,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,UAAkB;IAElB,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;QACrE,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,sEAAsE;YACtE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,0EAA0E;YAC1E,gEAAgE;YAChE,MAAM,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit log writer for `planr revise` (EPIC-003, FEAT-011 §6.0).
|
|
3
|
+
*
|
|
4
|
+
* Every revise run — dry-run included — produces an audit log capturing
|
|
5
|
+
* applied / skipped / flagged / failed artifacts with rationale, evidence,
|
|
6
|
+
* ambiguities, and unified diffs. Entries are *flushed immediately* to
|
|
7
|
+
* disk as they are produced (see `appendEntry`), not batched at cascade
|
|
8
|
+
* end, so an interrupted run still leaves an accurate record of exactly
|
|
9
|
+
* what was written.
|
|
10
|
+
*
|
|
11
|
+
* Two output formats: Markdown (human-readable, default) and JSON (for CI /
|
|
12
|
+
* tooling / the `planr revise feedback` telemetry workflow planned in
|
|
13
|
+
* Phase 5).
|
|
14
|
+
*
|
|
15
|
+
* FEAT-014 §4.5 extends this writer with token-usage and cache-hit/miss
|
|
16
|
+
* stats; core structure lives here so those extensions are additive.
|
|
17
|
+
*/
|
|
18
|
+
import type { ReviseAudit, ReviseAuditEntry, ReviseAuditFormat } from '../models/types.js';
|
|
19
|
+
export interface AuditLogWriterOptions {
|
|
20
|
+
projectDir: string;
|
|
21
|
+
scope: string;
|
|
22
|
+
cascade: boolean;
|
|
23
|
+
dryRun: boolean;
|
|
24
|
+
format: ReviseAuditFormat;
|
|
25
|
+
/** Override the default path (.planr/reports/revise-<scope>-<date>.<ext>). */
|
|
26
|
+
overridePath?: string;
|
|
27
|
+
/** ISO date used in the default filename. Defaults to today in local time. */
|
|
28
|
+
dateStamp?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface AuditLogWriter {
|
|
31
|
+
/** Absolute path of the audit file being written. */
|
|
32
|
+
path: string;
|
|
33
|
+
/** Append one artifact entry and flush to disk immediately. */
|
|
34
|
+
appendEntry(entry: ReviseAuditEntry): void;
|
|
35
|
+
/**
|
|
36
|
+
* Close the audit — records `completedAt`, final summary, and (for JSON
|
|
37
|
+
* format) rewrites the file with the accumulated entries wrapped in a
|
|
38
|
+
* ReviseAudit envelope. Markdown output is append-only and closes with a
|
|
39
|
+
* trailing summary section.
|
|
40
|
+
*/
|
|
41
|
+
close(summary?: Partial<Pick<ReviseAudit, 'interrupted' | 'tokenUsage'>>): void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a writer. For Markdown output, writes the header immediately so
|
|
45
|
+
* users can `tail -f` the log during long cascades. For JSON output, the
|
|
46
|
+
* accumulated entries are materialized on close (JSON is not line-oriented).
|
|
47
|
+
*/
|
|
48
|
+
export declare function createAuditLogWriter(options: AuditLogWriterOptions): AuditLogWriter;
|
|
49
|
+
export declare function readAuditJson(logPath: string): ReviseAudit;
|
|
50
|
+
//# sourceMappingURL=audit-log-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log-service.d.ts","sourceRoot":"","sources":["../../src/services/audit-log-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE3F,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC3C;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC;CACjF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CA0CnF;AA4JD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAM1D"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit log writer for `planr revise` (EPIC-003, FEAT-011 §6.0).
|
|
3
|
+
*
|
|
4
|
+
* Every revise run — dry-run included — produces an audit log capturing
|
|
5
|
+
* applied / skipped / flagged / failed artifacts with rationale, evidence,
|
|
6
|
+
* ambiguities, and unified diffs. Entries are *flushed immediately* to
|
|
7
|
+
* disk as they are produced (see `appendEntry`), not batched at cascade
|
|
8
|
+
* end, so an interrupted run still leaves an accurate record of exactly
|
|
9
|
+
* what was written.
|
|
10
|
+
*
|
|
11
|
+
* Two output formats: Markdown (human-readable, default) and JSON (for CI /
|
|
12
|
+
* tooling / the `planr revise feedback` telemetry workflow planned in
|
|
13
|
+
* Phase 5).
|
|
14
|
+
*
|
|
15
|
+
* FEAT-014 §4.5 extends this writer with token-usage and cache-hit/miss
|
|
16
|
+
* stats; core structure lives here so those extensions are additive.
|
|
17
|
+
*/
|
|
18
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
19
|
+
import path from 'node:path';
|
|
20
|
+
/**
|
|
21
|
+
* Create a writer. For Markdown output, writes the header immediately so
|
|
22
|
+
* users can `tail -f` the log during long cascades. For JSON output, the
|
|
23
|
+
* accumulated entries are materialized on close (JSON is not line-oriented).
|
|
24
|
+
*/
|
|
25
|
+
export function createAuditLogWriter(options) {
|
|
26
|
+
const audit = {
|
|
27
|
+
scope: options.scope,
|
|
28
|
+
cascade: options.cascade,
|
|
29
|
+
dryRun: options.dryRun,
|
|
30
|
+
startedAt: new Date().toISOString(),
|
|
31
|
+
entries: [],
|
|
32
|
+
};
|
|
33
|
+
const logPath = options.overridePath ?? defaultAuditPath(options);
|
|
34
|
+
mkdirSync(path.dirname(logPath), { recursive: true });
|
|
35
|
+
if (options.format === 'md') {
|
|
36
|
+
writeFileSync(logPath, renderHeader(audit), 'utf-8');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
writeFileSync(logPath, JSON.stringify(audit, null, 2), 'utf-8');
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
path: logPath,
|
|
43
|
+
appendEntry(entry) {
|
|
44
|
+
audit.entries.push(entry);
|
|
45
|
+
if (options.format === 'md') {
|
|
46
|
+
appendFileSync(logPath, renderEntry(entry), 'utf-8');
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// JSON: rewrite the envelope each append. O(n²) over the run, but
|
|
50
|
+
// for a typical cascade (<100 artifacts) this is well under 10ms.
|
|
51
|
+
// The guarantee we need is durability, not write efficiency.
|
|
52
|
+
writeFileSync(logPath, JSON.stringify(audit, null, 2), 'utf-8');
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
close(summary) {
|
|
56
|
+
audit.completedAt = new Date().toISOString();
|
|
57
|
+
if (summary?.interrupted)
|
|
58
|
+
audit.interrupted = summary.interrupted;
|
|
59
|
+
if (summary?.tokenUsage)
|
|
60
|
+
audit.tokenUsage = summary.tokenUsage;
|
|
61
|
+
if (options.format === 'md') {
|
|
62
|
+
appendFileSync(logPath, renderFooter(audit), 'utf-8');
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
writeFileSync(logPath, JSON.stringify(audit, null, 2), 'utf-8');
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function defaultAuditPath(options) {
|
|
71
|
+
const date = options.dateStamp ?? toIsoDate(new Date());
|
|
72
|
+
const ext = options.format === 'json' ? 'json' : 'md';
|
|
73
|
+
const file = `revise-${options.scope}-${date}.${ext}`;
|
|
74
|
+
return path.join(options.projectDir, '.planr', 'reports', file);
|
|
75
|
+
}
|
|
76
|
+
function toIsoDate(d) {
|
|
77
|
+
const y = d.getFullYear();
|
|
78
|
+
const m = String(d.getMonth() + 1).padStart(2, '0');
|
|
79
|
+
const day = String(d.getDate()).padStart(2, '0');
|
|
80
|
+
return `${y}-${m}-${day}`;
|
|
81
|
+
}
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// Markdown rendering
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
function renderHeader(audit) {
|
|
86
|
+
const mode = audit.dryRun ? 'dry-run' : 'apply';
|
|
87
|
+
const cascade = audit.cascade ? 'on' : 'off';
|
|
88
|
+
return [
|
|
89
|
+
`# Revise audit — ${audit.scope} (${toIsoDate(new Date(audit.startedAt))})`,
|
|
90
|
+
`> mode=${mode} · cascade=${cascade} · started=${audit.startedAt}`,
|
|
91
|
+
'',
|
|
92
|
+
'## Entries',
|
|
93
|
+
'',
|
|
94
|
+
'',
|
|
95
|
+
].join('\n');
|
|
96
|
+
}
|
|
97
|
+
function renderEntry(entry) {
|
|
98
|
+
const out = [];
|
|
99
|
+
out.push(`### [${entry.outcome}] ${entry.artifactId}`);
|
|
100
|
+
if (entry.artifactPath)
|
|
101
|
+
out.push(`> ${entry.artifactPath}`);
|
|
102
|
+
out.push(`> timestamp=${entry.timestamp}`);
|
|
103
|
+
out.push('');
|
|
104
|
+
out.push(`**Rationale:** ${entry.rationale}`);
|
|
105
|
+
if (entry.evidence.length > 0) {
|
|
106
|
+
out.push('');
|
|
107
|
+
out.push('**Evidence:**');
|
|
108
|
+
for (const ev of entry.evidence) {
|
|
109
|
+
const quote = ev.quote ? ` — "${truncate(ev.quote, 120)}"` : '';
|
|
110
|
+
out.push(`- [${ev.type}] \`${ev.ref}\`${quote}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (entry.ambiguous.length > 0) {
|
|
114
|
+
out.push('');
|
|
115
|
+
out.push('**Ambiguous (human decision required):**');
|
|
116
|
+
for (const a of entry.ambiguous) {
|
|
117
|
+
out.push(`- §${a.section}: ${a.reason}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (entry.error) {
|
|
121
|
+
out.push('');
|
|
122
|
+
out.push(`**Error:** \`${entry.error}\``);
|
|
123
|
+
}
|
|
124
|
+
if (entry.diff && entry.diff.length > 0) {
|
|
125
|
+
out.push('');
|
|
126
|
+
out.push('**Diff:**');
|
|
127
|
+
out.push('```diff');
|
|
128
|
+
out.push(entry.diff);
|
|
129
|
+
out.push('```');
|
|
130
|
+
}
|
|
131
|
+
out.push('');
|
|
132
|
+
return `${out.join('\n')}\n`;
|
|
133
|
+
}
|
|
134
|
+
function renderFooter(audit) {
|
|
135
|
+
const counts = audit.entries.reduce((acc, e) => {
|
|
136
|
+
acc[e.outcome] = (acc[e.outcome] ?? 0) + 1;
|
|
137
|
+
return acc;
|
|
138
|
+
}, {});
|
|
139
|
+
const summaryRows = Object.entries(counts)
|
|
140
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
141
|
+
.map(([outcome, n]) => `- ${outcome}: ${n}`);
|
|
142
|
+
const out = [];
|
|
143
|
+
out.push('');
|
|
144
|
+
out.push('## Summary');
|
|
145
|
+
out.push(`> completed=${audit.completedAt ?? 'n/a'} · entries=${audit.entries.length}`);
|
|
146
|
+
out.push('');
|
|
147
|
+
if (summaryRows.length > 0) {
|
|
148
|
+
out.push(...summaryRows);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
out.push('- (no entries recorded)');
|
|
152
|
+
}
|
|
153
|
+
// Cascade-level grouping — only emitted when at least one entry carries
|
|
154
|
+
// a level tag. Includes empty groups (with a count of 0) so readers can
|
|
155
|
+
// see which levels had nothing to process.
|
|
156
|
+
if (audit.cascade) {
|
|
157
|
+
const levels = [
|
|
158
|
+
'epic',
|
|
159
|
+
'features',
|
|
160
|
+
'stories',
|
|
161
|
+
'tasks',
|
|
162
|
+
];
|
|
163
|
+
const byLevel = audit.entries.reduce((acc, e) => {
|
|
164
|
+
const key = e.cascadeLevel ?? 'unlabeled';
|
|
165
|
+
if (!acc[key])
|
|
166
|
+
acc[key] = [];
|
|
167
|
+
acc[key].push({ outcome: e.outcome, artifactId: e.artifactId });
|
|
168
|
+
return acc;
|
|
169
|
+
}, {});
|
|
170
|
+
out.push('');
|
|
171
|
+
out.push('### By cascade level');
|
|
172
|
+
for (const level of levels) {
|
|
173
|
+
const rows = byLevel[level] ?? [];
|
|
174
|
+
out.push('');
|
|
175
|
+
out.push(`**${level}** (${rows.length}):`);
|
|
176
|
+
if (rows.length === 0) {
|
|
177
|
+
out.push('- (no artifacts at this level)');
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
for (const row of rows) {
|
|
181
|
+
out.push(`- [${row.outcome}] ${row.artifactId}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (audit.interrupted) {
|
|
186
|
+
out.push('');
|
|
187
|
+
out.push(`**Interrupted:** reason=${audit.interrupted.reason}${audit.interrupted.atArtifactId ? ` (at ${audit.interrupted.atArtifactId})` : ''}`);
|
|
188
|
+
}
|
|
189
|
+
if (audit.tokenUsage) {
|
|
190
|
+
out.push('');
|
|
191
|
+
out.push(`**Tokens:** ${audit.tokenUsage.inputTokens.toLocaleString()} in → ${audit.tokenUsage.outputTokens.toLocaleString()} out`);
|
|
192
|
+
}
|
|
193
|
+
out.push('');
|
|
194
|
+
return `${out.join('\n')}\n`;
|
|
195
|
+
}
|
|
196
|
+
function truncate(s, n) {
|
|
197
|
+
if (s.length <= n)
|
|
198
|
+
return s;
|
|
199
|
+
return `${s.slice(0, n)}…`;
|
|
200
|
+
}
|
|
201
|
+
// ---------------------------------------------------------------------------
|
|
202
|
+
// Convenience: load an audit log back into a ReviseAudit (for tooling).
|
|
203
|
+
// Not used by the revise command itself but required by future `planr
|
|
204
|
+
// revise feedback <finding-id>` in Phase 5.
|
|
205
|
+
// ---------------------------------------------------------------------------
|
|
206
|
+
export function readAuditJson(logPath) {
|
|
207
|
+
if (!existsSync(logPath)) {
|
|
208
|
+
throw new Error(`Audit log not found at ${logPath}`);
|
|
209
|
+
}
|
|
210
|
+
const raw = readFileSync(logPath, 'utf-8');
|
|
211
|
+
return JSON.parse(raw);
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=audit-log-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log-service.js","sourceRoot":"","sources":["../../src/services/audit-log-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cascade execution for `planr revise` (EPIC-003, FEAT-012).
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
*
|
|
6
|
+
* 1. **Build cascade order** — top-down: epic → features → stories → tasks.
|
|
7
|
+
* The artifact hierarchy is a strict tree; no cycle detection is needed.
|
|
8
|
+
* 2. **Execute the cascade** — for each artifact in order, call the
|
|
9
|
+
* caller-provided `processOne` closure. The cascade stops on
|
|
10
|
+
* SIGINT, `[q]uit`, or an unrecoverable agent error, and always
|
|
11
|
+
* flushes audit entries immediately so an interrupted run leaves an
|
|
12
|
+
* accurate record.
|
|
13
|
+
* 3. **Progress tracking** — emits a `CascadeProgress` snapshot before
|
|
14
|
+
* each artifact, with a rolling ETA.
|
|
15
|
+
*
|
|
16
|
+
* This service owns NO rollback logic. Partial cascades that break the
|
|
17
|
+
* artifact graph are the concern of FEAT-013's post-flight rollback.
|
|
18
|
+
*/
|
|
19
|
+
import type { ArtifactType, CascadeLevel, CascadePlan, CascadeProgress, OpenPlanrConfig } from '../models/types.js';
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the cascade plan for a root artifact, walking its descendants in
|
|
22
|
+
* top-down order. For an epic root, the plan is:
|
|
23
|
+
* EPIC → [features under epic] → [stories under those features] → [tasks under those stories]
|
|
24
|
+
* For a feature root, the EPIC level is empty and features contain only the root, etc.
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildCascadeOrder(projectDir: string, config: OpenPlanrConfig, rootType: ArtifactType, rootId: string): Promise<CascadePlan>;
|
|
27
|
+
export interface CascadeProcessOutcome {
|
|
28
|
+
/** Set to `false` when the processor wants the cascade to stop cleanly
|
|
29
|
+
* (e.g., user pressed `q` at a diff prompt). `true` for normal continuation. */
|
|
30
|
+
continue: boolean;
|
|
31
|
+
/** When `continue === false`, the cascade records this reason in the interrupted state. */
|
|
32
|
+
stopReason?: 'q' | 'agent_error' | 'graph_rollback';
|
|
33
|
+
}
|
|
34
|
+
export type CascadeProcessor = (args: {
|
|
35
|
+
artifactId: string;
|
|
36
|
+
levelLabel: CascadeLevel['label'];
|
|
37
|
+
progress: CascadeProgress;
|
|
38
|
+
}) => Promise<CascadeProcessOutcome>;
|
|
39
|
+
export interface CascadeExecuteOptions {
|
|
40
|
+
plan: CascadePlan;
|
|
41
|
+
processor: CascadeProcessor;
|
|
42
|
+
/** Called with every progress snapshot; typically wires into a spinner. */
|
|
43
|
+
onProgress?: (p: CascadeProgress) => void;
|
|
44
|
+
/** Overrides the process-level SIGINT handler for tests; default uses `process`. */
|
|
45
|
+
signalTarget?: NodeJS.Process;
|
|
46
|
+
}
|
|
47
|
+
export interface CascadeResult {
|
|
48
|
+
completed: number;
|
|
49
|
+
total: number;
|
|
50
|
+
interrupted?: {
|
|
51
|
+
reason: 'q' | 'sigint' | 'agent_error';
|
|
52
|
+
atArtifactId: string;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Drive the cascade plan through the provided processor. Installs a SIGINT
|
|
57
|
+
* handler for the duration of the run; on Ctrl+C it waits for the current
|
|
58
|
+
* artifact to finish (so no half-written files) and then stops. The SIGINT
|
|
59
|
+
* handler is removed on completion whether or not it fired.
|
|
60
|
+
*/
|
|
61
|
+
export declare function executeCascade(options: CascadeExecuteOptions): Promise<CascadeResult>;
|
|
62
|
+
//# sourceMappingURL=cascade-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascade-service.d.ts","sourceRoot":"","sources":["../../src/services/cascade-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAQ5B;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,CAyEtB;AAMD,MAAM,WAAW,qBAAqB;IACpC;qFACiF;IACjF,QAAQ,EAAE,OAAO,CAAC;IAClB,2FAA2F;IAC3F,UAAU,CAAC,EAAE,GAAG,GAAG,aAAa,GAAG,gBAAgB,CAAC;CACrD;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,eAAe,CAAC;CAC3B,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAErC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1C,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,GAAG,GAAG,QAAQ,GAAG,aAAa,CAAC;QACvC,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAqE3F"}
|