@paths.design/caws-cli 11.1.7 → 11.1.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/dist/index.js +55 -58
- package/dist/init/hook-packs/manifest-claude-code.d.ts +1 -1
- package/dist/init/hook-packs/manifest-claude-code.d.ts.map +1 -1
- package/dist/init/hook-packs/manifest-claude-code.js +260 -2
- package/dist/init/hook-packs/manifest-claude-code.js.map +1 -1
- package/dist/shell/binding/resolve-binding.d.ts.map +1 -1
- package/dist/shell/binding/resolve-binding.js +105 -1
- package/dist/shell/binding/resolve-binding.js.map +1 -1
- package/dist/shell/binding/types.d.ts +47 -3
- package/dist/shell/binding/types.d.ts.map +1 -1
- package/dist/shell/command-metadata.d.ts +93 -0
- package/dist/shell/command-metadata.d.ts.map +1 -0
- package/dist/shell/command-metadata.js +687 -0
- package/dist/shell/command-metadata.js.map +1 -0
- package/dist/shell/commands/agents.d.ts +1 -2
- package/dist/shell/commands/agents.d.ts.map +1 -1
- package/dist/shell/commands/claim.d.ts +16 -0
- package/dist/shell/commands/claim.d.ts.map +1 -1
- package/dist/shell/commands/claim.js +85 -26
- package/dist/shell/commands/claim.js.map +1 -1
- package/dist/shell/commands/events.d.ts +106 -0
- package/dist/shell/commands/events.d.ts.map +1 -0
- package/dist/shell/commands/events.js +510 -0
- package/dist/shell/commands/events.js.map +1 -0
- package/dist/shell/commands/gates.d.ts +2 -2
- package/dist/shell/commands/gates.d.ts.map +1 -1
- package/dist/shell/commands/gates.js +106 -25
- package/dist/shell/commands/gates.js.map +1 -1
- package/dist/shell/commands/init.d.ts.map +1 -1
- package/dist/shell/commands/init.js +26 -0
- package/dist/shell/commands/init.js.map +1 -1
- package/dist/shell/commands/prepush.d.ts +26 -0
- package/dist/shell/commands/prepush.d.ts.map +1 -0
- package/dist/shell/commands/prepush.js +373 -0
- package/dist/shell/commands/prepush.js.map +1 -0
- package/dist/shell/commands/scope.d.ts.map +1 -1
- package/dist/shell/commands/scope.js +31 -1
- package/dist/shell/commands/scope.js.map +1 -1
- package/dist/shell/commands/specs.d.ts +44 -3
- package/dist/shell/commands/specs.d.ts.map +1 -1
- package/dist/shell/commands/specs.js +411 -15
- package/dist/shell/commands/specs.js.map +1 -1
- package/dist/shell/commands/worktree.d.ts.map +1 -1
- package/dist/shell/commands/worktree.js +51 -1
- package/dist/shell/commands/worktree.js.map +1 -1
- package/dist/shell/gates/disposition.d.ts.map +1 -1
- package/dist/shell/gates/disposition.js +43 -2
- package/dist/shell/gates/disposition.js.map +1 -1
- package/dist/shell/index.d.ts +10 -4
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +22 -2
- package/dist/shell/index.js.map +1 -1
- package/dist/shell/legacy-command-map.js +832 -0
- package/dist/shell/push-range/classify-range.d.ts +99 -0
- package/dist/shell/push-range/classify-range.d.ts.map +1 -0
- package/dist/shell/push-range/classify-range.js +155 -0
- package/dist/shell/push-range/classify-range.js.map +1 -0
- package/dist/shell/push-range/scope-match.d.ts +13 -0
- package/dist/shell/push-range/scope-match.d.ts.map +1 -0
- package/dist/shell/push-range/scope-match.js +53 -0
- package/dist/shell/push-range/scope-match.js.map +1 -0
- package/dist/shell/register.d.ts.map +1 -1
- package/dist/shell/register.js +263 -228
- package/dist/shell/register.js.map +1 -1
- package/dist/shell/registered-command-groups.js +48 -0
- package/dist/shell/rules.d.ts +19 -0
- package/dist/shell/rules.d.ts.map +1 -1
- package/dist/shell/rules.js +27 -0
- package/dist/shell/rules.js.map +1 -1
- package/dist/shell/session/resolve-session.d.ts +29 -1
- package/dist/shell/session/resolve-session.d.ts.map +1 -1
- package/dist/shell/session/resolve-session.js +817 -11
- package/dist/shell/session/resolve-session.js.map +1 -1
- package/dist/shell/session/types.d.ts +127 -1
- package/dist/shell/session/types.d.ts.map +1 -1
- package/dist/shell/session/types.js +10 -4
- package/dist/shell/session/types.js.map +1 -1
- package/dist/store/doctor-snapshot.d.ts.map +1 -1
- package/dist/store/doctor-snapshot.js +26 -0
- package/dist/store/doctor-snapshot.js.map +1 -1
- package/dist/store/events-migration.d.ts +207 -0
- package/dist/store/events-migration.d.ts.map +1 -0
- package/dist/store/events-migration.js +358 -0
- package/dist/store/events-migration.js.map +1 -0
- package/dist/store/events-store.d.ts +47 -1
- package/dist/store/events-store.d.ts.map +1 -1
- package/dist/store/events-store.js +278 -0
- package/dist/store/events-store.js.map +1 -1
- package/dist/store/git-autocommit.d.ts +46 -0
- package/dist/store/git-autocommit.d.ts.map +1 -0
- package/dist/store/git-autocommit.js +198 -0
- package/dist/store/git-autocommit.js.map +1 -0
- package/dist/store/index.d.ts +4 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +7 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/leases-store.d.ts.map +1 -1
- package/dist/store/leases-store.js +58 -0
- package/dist/store/leases-store.js.map +1 -1
- package/dist/store/rules.d.ts +53 -0
- package/dist/store/rules.d.ts.map +1 -1
- package/dist/store/rules.js +54 -0
- package/dist/store/rules.js.map +1 -1
- package/dist/store/specs-migration.d.ts +128 -0
- package/dist/store/specs-migration.d.ts.map +1 -0
- package/dist/store/specs-migration.js +481 -0
- package/dist/store/specs-migration.js.map +1 -0
- package/dist/store/specs-store.d.ts.map +1 -1
- package/dist/store/specs-store.js +14 -2
- package/dist/store/specs-store.js.map +1 -1
- package/dist/store/specs-writer.d.ts +130 -3
- package/dist/store/specs-writer.d.ts.map +1 -1
- package/dist/store/specs-writer.js +941 -102
- package/dist/store/specs-writer.js.map +1 -1
- package/dist/store/types.d.ts +6 -0
- package/dist/store/types.d.ts.map +1 -1
- package/dist/store/waivers-store.d.ts.map +1 -1
- package/dist/store/waivers-store.js +8 -1
- package/dist/store/waivers-store.js.map +1 -1
- package/dist/store/worktrees-writer.d.ts +28 -0
- package/dist/store/worktrees-writer.d.ts.map +1 -1
- package/dist/store/worktrees-writer.js +110 -12
- package/dist/store/worktrees-writer.js.map +1 -1
- package/package.json +5 -2
- package/templates/hook-packs/claude-code/CLAUDE.md +7 -1
- package/templates/hook-packs/claude-code/agent-heartbeat.sh +1 -1
- package/templates/hook-packs/claude-code/agent-register.sh +1 -1
- package/templates/hook-packs/claude-code/agent-stop.sh +1 -1
- package/templates/hook-packs/claude-code/audit.sh +1 -1
- package/templates/hook-packs/claude-code/block-dangerous.sh +1 -1
- package/templates/hook-packs/claude-code/classify_command.py +1 -1
- package/templates/hook-packs/claude-code/cwd-guard.sh +30 -0
- package/templates/hook-packs/claude-code/dispatch/post_tool_use.sh +15 -4
- package/templates/hook-packs/claude-code/dispatch/pre_tool_use.sh +10 -2
- package/templates/hook-packs/claude-code/dispatch/session_start.sh +1 -1
- package/templates/hook-packs/claude-code/dispatch/stop.sh +2 -2
- package/templates/hook-packs/claude-code/duplicate-export-check.sh +156 -0
- package/templates/hook-packs/claude-code/god-object-check.sh +102 -0
- package/templates/hook-packs/claude-code/guard-strikes.sh +1 -1
- package/templates/hook-packs/claude-code/lib/parse-input.sh +115 -1
- package/templates/hook-packs/claude-code/lib/run-handlers.sh +1 -1
- package/templates/hook-packs/claude-code/loc-delta-check.sh +91 -0
- package/templates/hook-packs/claude-code/naming-check.sh +128 -0
- package/templates/hook-packs/claude-code/plan-transcript-finalize.sh +59 -0
- package/templates/hook-packs/claude-code/plan-transcript-snapshot.sh +86 -0
- package/templates/hook-packs/claude-code/protected-paths.sh +59 -0
- package/templates/hook-packs/claude-code/quiet-merge.sh +68 -0
- package/templates/hook-packs/claude-code/reset-danger-latch.sh +1 -1
- package/templates/hook-packs/claude-code/reset-strikes.sh +1 -1
- package/templates/hook-packs/claude-code/runtime-paths.sh +1 -1
- package/templates/hook-packs/claude-code/scan-secrets.sh +98 -0
- package/templates/hook-packs/claude-code/scope-guard.sh +47 -65
- package/templates/hook-packs/claude-code/session-caws-status.sh +1 -1
- package/templates/hook-packs/claude-code/session-log.sh +1 -1
- package/templates/hook-packs/claude-code/session_log_renderer.py +956 -0
- package/templates/hook-packs/claude-code/shortcut-language-check.sh +147 -0
- package/templates/hook-packs/claude-code/worktree-guard.sh +1 -1
- package/templates/hook-packs/claude-code/worktree-write-guard.sh +1 -1
|
@@ -54,6 +54,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
54
54
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
55
|
exports.loadEvents = loadEvents;
|
|
56
56
|
exports.appendEvent = appendEvent;
|
|
57
|
+
exports.rotateEvents = rotateEvents;
|
|
58
|
+
const crypto = __importStar(require("crypto"));
|
|
57
59
|
const fs = __importStar(require("fs"));
|
|
58
60
|
const path = __importStar(require("path"));
|
|
59
61
|
const caws_kernel_1 = require("@paths.design/caws-kernel");
|
|
@@ -223,6 +225,282 @@ function appendEvent(cawsDir, body) {
|
|
|
223
225
|
releaseLock(lockFd.value, lockPath);
|
|
224
226
|
}
|
|
225
227
|
}
|
|
228
|
+
// ----------------------------------------------------------------------------
|
|
229
|
+
// rotateEvents — sanctioned second writer for chain maintenance
|
|
230
|
+
// ----------------------------------------------------------------------------
|
|
231
|
+
//
|
|
232
|
+
// Per doctrine invariant 14 (docs/architecture/caws-vnext-command-surface.md
|
|
233
|
+
// §6), rotateEvents is the only writer of events.jsonl besides appendEvent.
|
|
234
|
+
// Both functions live in this module, both hold the same lock. Shell commands
|
|
235
|
+
// and migration tooling NEVER write events.jsonl directly; they invoke this
|
|
236
|
+
// function through the exported store surface. The lock primitives below
|
|
237
|
+
// (acquireLock/releaseLock/tryRecoverStaleLock) stay private — exporting them
|
|
238
|
+
// would create a third writer surface by exposing lock acquisition to callers
|
|
239
|
+
// that bypass the canonical functions.
|
|
240
|
+
//
|
|
241
|
+
// Atomicity:
|
|
242
|
+
// The operation is a same-lock single critical section that performs a
|
|
243
|
+
// two-step filesystem transition: rename old file → write new genesis file.
|
|
244
|
+
// On a single filesystem, fs.renameSync is atomic. The genesis write is
|
|
245
|
+
// fsynced before the lock is released. A crash BETWEEN the rename and the
|
|
246
|
+
// genesis write leaves the archive on disk but no new events.jsonl; the
|
|
247
|
+
// next caws command sees "no events.jsonl, create on first append" (per
|
|
248
|
+
// invariant 5: events.jsonl is never required at rest), and the archive
|
|
249
|
+
// is still verifiable by hash if the operator preserved the digest
|
|
250
|
+
// out-of-band. A crash DURING the rename is a no-op (rename is atomic).
|
|
251
|
+
//
|
|
252
|
+
// Validation chain (doctrine nuance — see invariant 1 amendment):
|
|
253
|
+
// The chain_rotated body is constructed in-memory by this function, then
|
|
254
|
+
// passed to prepareAppend(null, body). prepareAppend invokes
|
|
255
|
+
// validateEventBody, which runs the chain_rotated payload schema and
|
|
256
|
+
// rejects malformed payloads BEFORE any file write. This function does NOT
|
|
257
|
+
// hand-build a ChainedEvent — sequence numbers and hash linkage remain
|
|
258
|
+
// kernel authority.
|
|
259
|
+
const ARCHIVE_PREFIX = 'events.jsonl.archive-';
|
|
260
|
+
/**
|
|
261
|
+
* Rotate the events.jsonl chain: archive the existing file under a
|
|
262
|
+
* timestamped name and write a fresh chain whose genesis event is
|
|
263
|
+
* chain_rotated, cryptographically tying the archive to the new chain
|
|
264
|
+
* via prior_file_digest.
|
|
265
|
+
*
|
|
266
|
+
* Refusals (typed Diagnostic, no file mutations on any refusal path):
|
|
267
|
+
* - EVENTS_ROTATE_NOTHING_TO_ROTATE: file missing or zero-length.
|
|
268
|
+
* - EVENTS_ROTATE_CLEAN_CHAIN_REQUIRES_ALLOW_CLEAN: all entries are
|
|
269
|
+
* structured (v11) actors and allowClean !== true.
|
|
270
|
+
* - EVENTS_PREPARE_APPEND_REJECTED: the constructed chain_rotated body
|
|
271
|
+
* failed kernel validation (programmer error in this function or a
|
|
272
|
+
* schema change drift). Carries kernel diagnostics in data.source_rule.
|
|
273
|
+
* - WRITE_IO_FAILED: rename or genesis-write failed at the FS layer.
|
|
274
|
+
*
|
|
275
|
+
* On success returns the new ChainedEvent (the chain_rotated genesis event
|
|
276
|
+
* that is now the entirety of the new events.jsonl).
|
|
277
|
+
*/
|
|
278
|
+
function rotateEvents(cawsDir, opts) {
|
|
279
|
+
const eventsPath = path.join(cawsDir, 'events.jsonl');
|
|
280
|
+
const lockPath = `${eventsPath}.lock`;
|
|
281
|
+
if (!fs.existsSync(cawsDir)) {
|
|
282
|
+
throw new Error(`rotateEvents: cawsDir does not exist: ${cawsDir}`);
|
|
283
|
+
}
|
|
284
|
+
const lockFd = acquireLock(lockPath);
|
|
285
|
+
if (!(0, caws_kernel_1.isOk)(lockFd))
|
|
286
|
+
return (0, caws_kernel_1.err)(lockFd.errors);
|
|
287
|
+
try {
|
|
288
|
+
// ── 1. Refuse if there is nothing to rotate. ──────────────────────────
|
|
289
|
+
let stat;
|
|
290
|
+
try {
|
|
291
|
+
stat = fs.statSync(eventsPath);
|
|
292
|
+
}
|
|
293
|
+
catch (e) {
|
|
294
|
+
const cause = e;
|
|
295
|
+
if (cause.code === 'ENOENT') {
|
|
296
|
+
return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.EVENTS_ROTATE_NOTHING_TO_ROTATE, 'rotateEvents refuses: events.jsonl does not exist.', { subject: eventsPath, data: { code: 'ENOENT' } }));
|
|
297
|
+
}
|
|
298
|
+
throw e;
|
|
299
|
+
}
|
|
300
|
+
if (stat.size === 0) {
|
|
301
|
+
return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.EVENTS_ROTATE_NOTHING_TO_ROTATE, 'rotateEvents refuses: events.jsonl is empty.', { subject: eventsPath, data: { size: 0 } }));
|
|
302
|
+
}
|
|
303
|
+
// ── 2. Read the file once for sha256 + tolerant scan. ────────────────
|
|
304
|
+
// Streaming is overkill for the sizes events.jsonl reaches in practice
|
|
305
|
+
// (sterling's worst case is 1500 lines ≈ a few hundred KB); a single
|
|
306
|
+
// readFileSync is simpler and the lock is held throughout anyway.
|
|
307
|
+
const rawBytes = fs.readFileSync(eventsPath);
|
|
308
|
+
const priorFileDigest = `sha256:${crypto
|
|
309
|
+
.createHash('sha256')
|
|
310
|
+
.update(rawBytes)
|
|
311
|
+
.digest('hex')}`;
|
|
312
|
+
const scanResult = tolerantScanEventsFile(rawBytes.toString('utf8'));
|
|
313
|
+
// ── 3a. Partial-corruption refusal. ───────────────────────────────────
|
|
314
|
+
// A log that has SOME unparseable lines alongside parseable ones
|
|
315
|
+
// cannot be honestly labeled by the prior_chain_status enum:
|
|
316
|
+
// 'parseable_unverified' implies every line parsed, and
|
|
317
|
+
// 'unparseable' implies every line did not. Refuse rather than ship
|
|
318
|
+
// a dishonest label. The fully-unparseable case is still admissible
|
|
319
|
+
// (status: 'unparseable' is the honest label) for operators who
|
|
320
|
+
// explicitly want to archive a fully-corrupt log; the trap is only
|
|
321
|
+
// mixed parseable + unparseable.
|
|
322
|
+
//
|
|
323
|
+
// A future opt-in path (e.g. opts.allowCorruptArchive + a new
|
|
324
|
+
// 'partially_unparseable' enum value on chain_rotated) may be added
|
|
325
|
+
// in a later slice if recovery from partial corruption becomes a
|
|
326
|
+
// first-class operator concern. Not in v11.2 scope.
|
|
327
|
+
const hasPartialCorruption = scanResult.stats.unparseable > 0 &&
|
|
328
|
+
scanResult.stats.unparseable < scanResult.lineCount;
|
|
329
|
+
if (hasPartialCorruption) {
|
|
330
|
+
return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.EVENTS_ROTATE_PARTIAL_CORRUPTION, `rotateEvents refuses: events.jsonl has ${scanResult.stats.unparseable} unparseable line(s) alongside ${scanResult.stats.v10_string_actor + scanResult.stats.v11_object_actor} parseable line(s). Mixed parseable + unparseable cannot be honestly labeled by the chain_rotated payload (no enum value covers the case). Inspect the file and recover manually, or remove the corrupt lines before retrying.`, {
|
|
331
|
+
subject: eventsPath,
|
|
332
|
+
data: { actor_shape_stats: scanResult.stats, lineCount: scanResult.lineCount },
|
|
333
|
+
}));
|
|
334
|
+
}
|
|
335
|
+
// ── 3b. Clean-chain refusal (friction flag). ─────────────────────────
|
|
336
|
+
// A clean v11 chain has only structured actors. Refuse unless the
|
|
337
|
+
// operator explicitly opted in via allowClean: true. The intent is to
|
|
338
|
+
// make general log rotation explicit-and-auditable, not to forbid it.
|
|
339
|
+
const isCleanV11 = scanResult.stats.v10_string_actor === 0 &&
|
|
340
|
+
scanResult.stats.unparseable === 0 &&
|
|
341
|
+
scanResult.stats.v11_object_actor > 0;
|
|
342
|
+
if (isCleanV11 && opts.allowClean !== true) {
|
|
343
|
+
return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.EVENTS_ROTATE_CLEAN_CHAIN_REQUIRES_ALLOW_CLEAN, 'rotateEvents refuses: prior chain is a clean v11 chain (all structured actors); pass allowClean: true (CLI: --allow-clean) to rotate it anyway.', {
|
|
344
|
+
subject: eventsPath,
|
|
345
|
+
data: { actor_shape_stats: scanResult.stats },
|
|
346
|
+
}));
|
|
347
|
+
}
|
|
348
|
+
// ── 4. Build the chain_rotated body. ────────────────────────────────
|
|
349
|
+
const nowDate = opts.now ?? new Date();
|
|
350
|
+
const archiveName = `${ARCHIVE_PREFIX}${windowsSafeIso(nowDate)}`;
|
|
351
|
+
const archivePath = path.join(cawsDir, archiveName);
|
|
352
|
+
const priorChainStatus = scanResult.stats.unparseable > 0 &&
|
|
353
|
+
scanResult.stats.v10_string_actor === 0 &&
|
|
354
|
+
scanResult.stats.v11_object_actor === 0
|
|
355
|
+
? 'unparseable'
|
|
356
|
+
: 'parseable_unverified';
|
|
357
|
+
const data = {
|
|
358
|
+
prior_tail_hash: scanResult.tailHash,
|
|
359
|
+
prior_file_path: archiveName,
|
|
360
|
+
prior_file_digest: priorFileDigest,
|
|
361
|
+
prior_line_count: scanResult.lineCount,
|
|
362
|
+
prior_chain_status: priorChainStatus,
|
|
363
|
+
actor_shape_stats: scanResult.stats,
|
|
364
|
+
migration_reason: opts.reason,
|
|
365
|
+
};
|
|
366
|
+
if (scanResult.tailSeq !== null) {
|
|
367
|
+
data.prior_seq = scanResult.tailSeq;
|
|
368
|
+
}
|
|
369
|
+
const body = {
|
|
370
|
+
event: 'chain_rotated',
|
|
371
|
+
ts: nowDate.toISOString(),
|
|
372
|
+
actor: opts.actor,
|
|
373
|
+
data,
|
|
374
|
+
};
|
|
375
|
+
// ── 5. Kernel validation BEFORE any file mutation. ──────────────────
|
|
376
|
+
// prepareAppend invokes validateEventBody, which runs the chain_rotated
|
|
377
|
+
// payload schema. A malformed body fails here, no file is touched. This
|
|
378
|
+
// is the doctrine-compliant validation chain (invariant 1 amendment).
|
|
379
|
+
const prepared = (0, caws_kernel_1.prepareAppend)(null, body);
|
|
380
|
+
if (!(0, caws_kernel_1.isOk)(prepared)) {
|
|
381
|
+
const wrapped = prepared.errors.map((d) => ({
|
|
382
|
+
...d,
|
|
383
|
+
rule: rules_1.STORE_RULES.EVENTS_PREPARE_APPEND_REJECTED,
|
|
384
|
+
data: { ...(d.data ?? {}), source_rule: d.rule },
|
|
385
|
+
}));
|
|
386
|
+
return (0, caws_kernel_1.err)(wrapped);
|
|
387
|
+
}
|
|
388
|
+
const genesisEvent = prepared.value;
|
|
389
|
+
const genesisLine = JSON.stringify(genesisEvent) + '\n';
|
|
390
|
+
// ── 6. Two-step filesystem transition: rename then write+fsync. ────
|
|
391
|
+
// Both steps are inside the same lock critical section. Same-filesystem
|
|
392
|
+
// rename is atomic; the new genesis write is fsynced before lock
|
|
393
|
+
// release. A crash between rename and genesis-write leaves the archive
|
|
394
|
+
// intact and no events.jsonl, recoverable per invariant 5.
|
|
395
|
+
try {
|
|
396
|
+
fs.renameSync(eventsPath, archivePath);
|
|
397
|
+
}
|
|
398
|
+
catch (e) {
|
|
399
|
+
const cause = e;
|
|
400
|
+
return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.WRITE_IO_FAILED, `Failed to rename events.jsonl to archive: ${cause.message ?? 'unknown error'}.`, {
|
|
401
|
+
subject: eventsPath,
|
|
402
|
+
data: { code: cause.code, archivePath },
|
|
403
|
+
}));
|
|
404
|
+
}
|
|
405
|
+
let fd;
|
|
406
|
+
try {
|
|
407
|
+
fd = fs.openSync(eventsPath, 'w');
|
|
408
|
+
fs.writeFileSync(fd, genesisLine);
|
|
409
|
+
fs.fsyncSync(fd);
|
|
410
|
+
}
|
|
411
|
+
catch (e) {
|
|
412
|
+
const cause = e;
|
|
413
|
+
return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.WRITE_IO_FAILED, `Failed to write chain_rotated genesis event after archive rename: ${cause.message ?? 'unknown error'}. The archive at ${archivePath} is intact; the next caws command will see no events.jsonl and create one on first append (per doctrine invariant 5).`, {
|
|
414
|
+
subject: eventsPath,
|
|
415
|
+
data: { code: cause.code, archivePath },
|
|
416
|
+
}));
|
|
417
|
+
}
|
|
418
|
+
finally {
|
|
419
|
+
if (fd !== undefined) {
|
|
420
|
+
try {
|
|
421
|
+
fs.closeSync(fd);
|
|
422
|
+
}
|
|
423
|
+
catch {
|
|
424
|
+
/* ignore */
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
return (0, caws_kernel_1.ok)(genesisEvent);
|
|
429
|
+
}
|
|
430
|
+
finally {
|
|
431
|
+
releaseLock(lockFd.value, lockPath);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
function tolerantScanEventsFile(raw) {
|
|
435
|
+
const trailingNewline = raw.endsWith('\n');
|
|
436
|
+
const parts = raw.split('\n');
|
|
437
|
+
const lines = trailingNewline ? parts.slice(0, -1) : parts;
|
|
438
|
+
const nonEmpty = lines.filter((l) => l.length > 0);
|
|
439
|
+
let v10 = 0;
|
|
440
|
+
let v11 = 0;
|
|
441
|
+
let bad = 0;
|
|
442
|
+
let tailHash = null;
|
|
443
|
+
let tailSeq = null;
|
|
444
|
+
for (let i = 0; i < nonEmpty.length; i++) {
|
|
445
|
+
const line = nonEmpty[i];
|
|
446
|
+
let parsed;
|
|
447
|
+
try {
|
|
448
|
+
parsed = JSON.parse(line);
|
|
449
|
+
}
|
|
450
|
+
catch {
|
|
451
|
+
bad += 1;
|
|
452
|
+
continue;
|
|
453
|
+
}
|
|
454
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
455
|
+
bad += 1;
|
|
456
|
+
continue;
|
|
457
|
+
}
|
|
458
|
+
const obj = parsed;
|
|
459
|
+
const actor = obj['actor'];
|
|
460
|
+
if (typeof actor === 'string') {
|
|
461
|
+
v10 += 1;
|
|
462
|
+
}
|
|
463
|
+
else if (actor !== null &&
|
|
464
|
+
typeof actor === 'object' &&
|
|
465
|
+
!Array.isArray(actor) &&
|
|
466
|
+
typeof actor['kind'] === 'string') {
|
|
467
|
+
v11 += 1;
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
bad += 1;
|
|
471
|
+
}
|
|
472
|
+
// Tail extraction: only the last non-empty line contributes; only
|
|
473
|
+
// accept event_hash/seq if their shapes look right (no full validation).
|
|
474
|
+
if (i === nonEmpty.length - 1) {
|
|
475
|
+
const eh = obj['event_hash'];
|
|
476
|
+
if (typeof eh === 'string' && /^sha256:[0-9a-f]{64}$/.test(eh)) {
|
|
477
|
+
tailHash = eh;
|
|
478
|
+
}
|
|
479
|
+
const sq = obj['seq'];
|
|
480
|
+
if (typeof sq === 'number' && Number.isInteger(sq) && sq >= 1) {
|
|
481
|
+
tailSeq = sq;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
return {
|
|
486
|
+
stats: {
|
|
487
|
+
v10_string_actor: v10,
|
|
488
|
+
v11_object_actor: v11,
|
|
489
|
+
unparseable: bad,
|
|
490
|
+
},
|
|
491
|
+
lineCount: nonEmpty.length,
|
|
492
|
+
tailHash,
|
|
493
|
+
tailSeq,
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Windows-safe ISO timestamp for archive filenames. Replaces ':' with '-'
|
|
498
|
+
* (colons are forbidden in Windows filesystem names) while keeping the
|
|
499
|
+
* sortable yyyy-mm-ddThh-mm-ss-sssZ shape.
|
|
500
|
+
*/
|
|
501
|
+
function windowsSafeIso(d) {
|
|
502
|
+
return d.toISOString().replace(/:/g, '-').replace(/\./g, '-');
|
|
503
|
+
}
|
|
226
504
|
function acquireLock(lockPath) {
|
|
227
505
|
for (let attempt = 0; attempt < LOCK_MAX_ATTEMPTS; attempt++) {
|
|
228
506
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-store.js","sourceRoot":"","sources":["../../src/store/events-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"events-store.js","sourceRoot":"","sources":["../../src/store/events-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type AutoCommitKind = 'committed' | 'refused_dirty' | 'skipped_no_git';
|
|
2
|
+
export interface AutoCommitOutcome {
|
|
3
|
+
readonly kind: AutoCommitKind;
|
|
4
|
+
/** Present only when kind === 'committed'. The short sha of the
|
|
5
|
+
* resulting commit. */
|
|
6
|
+
readonly sha?: string;
|
|
7
|
+
/** Present when kind === 'refused_dirty'. A human-readable reason
|
|
8
|
+
* the caller should surface to the user. */
|
|
9
|
+
readonly reason?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface AutoCommitInput {
|
|
12
|
+
/** Absolute path to the repo root. Used as cwd for git operations. */
|
|
13
|
+
readonly repoRoot: string;
|
|
14
|
+
/** Paths to stage and commit, repo-root-relative. Must be the exact
|
|
15
|
+
* set the writer wrote. Other dirty files will NOT be staged. */
|
|
16
|
+
readonly paths: readonly string[];
|
|
17
|
+
/** Conventional commit message. Should start with `chore(caws): `. */
|
|
18
|
+
readonly message: string;
|
|
19
|
+
/** Whether ANY of the target paths were dirty before the writer's
|
|
20
|
+
* own write. The caller knows this; the utility cannot rederive it
|
|
21
|
+
* after the write has landed. */
|
|
22
|
+
readonly wasDirtyBeforeWrite: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Stage and commit CAWS-authored writes as the final step of a
|
|
26
|
+
* lifecycle transaction.
|
|
27
|
+
*
|
|
28
|
+
* Returns an outcome describing what happened; never throws. Callers
|
|
29
|
+
* should treat all three outcome kinds as non-fatal: a refused or
|
|
30
|
+
* skipped commit does NOT mean the writer's transaction failed, only
|
|
31
|
+
* that the audit-trail commit could not be authored automatically.
|
|
32
|
+
*/
|
|
33
|
+
export declare function autoCommit(input: AutoCommitInput): AutoCommitOutcome;
|
|
34
|
+
/**
|
|
35
|
+
* Helper: detect whether a path is dirty in the working tree. Callers
|
|
36
|
+
* that need to populate `wasDirtyBeforeWrite` can use this BEFORE
|
|
37
|
+
* calling fs.writeFileSync.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isPathDirty(repoRoot: string, relPath: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Helper: convert an absolute path to a repo-root-relative path. The
|
|
42
|
+
* autocommit utility wants relative paths so git diff/add output is
|
|
43
|
+
* stable across cwds.
|
|
44
|
+
*/
|
|
45
|
+
export declare function relativeToRepoRoot(repoRoot: string, abs: string): string;
|
|
46
|
+
//# sourceMappingURL=git-autocommit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-autocommit.d.ts","sourceRoot":"","sources":["../../src/store/git-autocommit.ts"],"names":[],"mappings":"AA+CA,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B;4BACwB;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;iDAC6C;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;sEACkE;IAClE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;sCAEkC;IAClC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;CACvC;AAiCD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,iBAAiB,CA0EpE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAItE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAExE"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Shared utility for committing CAWS-authored writes to canonical state.
|
|
3
|
+
//
|
|
4
|
+
// CAWS-FIRST-CONTACT-UX-001 Fix 5/6.
|
|
5
|
+
//
|
|
6
|
+
// Problem: every caws subcommand that mutates .caws/worktrees.json (or
|
|
7
|
+
// other governance files) writes the file but does NOT commit it. The
|
|
8
|
+
// next agent walks in, sees a dirty registry, and either commits it
|
|
9
|
+
// blindly, leaves it, or stashes — each path produces different
|
|
10
|
+
// downstream confusion. Without a CLI-authored commit, no agent ever
|
|
11
|
+
// has a clean baseline to work from.
|
|
12
|
+
//
|
|
13
|
+
// Solution: this module exposes one function, `autoCommit`, that the
|
|
14
|
+
// worktrees-writer (and similar writers) call as the final step of a
|
|
15
|
+
// successful lifecycle transaction. The function is total over three
|
|
16
|
+
// observable states:
|
|
17
|
+
//
|
|
18
|
+
// 1. cwd is NOT inside a git working tree -> skip with kind:'skipped_no_git'
|
|
19
|
+
// (defense-in-depth; caws worktree commands cannot reach this
|
|
20
|
+
// branch in production because resolveRepoRoot requires git)
|
|
21
|
+
//
|
|
22
|
+
// 2. target file was dirty BEFORE the writer's own write (i.e. there
|
|
23
|
+
// were unrelated uncommitted changes to the file already) -> refuse
|
|
24
|
+
// commit with kind:'refused_dirty'. The writer's change still lands
|
|
25
|
+
// in the working tree; the user resolves manually.
|
|
26
|
+
//
|
|
27
|
+
// 3. target file was clean BEFORE the writer's own write -> commit
|
|
28
|
+
// succeeds with kind:'committed' and the resulting sha.
|
|
29
|
+
//
|
|
30
|
+
// The utility intentionally does NOT use --no-verify, --no-gpg-sign,
|
|
31
|
+
// or any hook-bypass flag. It interacts with whatever pre-commit /
|
|
32
|
+
// commit-msg hooks the consumer project has installed. Upstream caws
|
|
33
|
+
// ships no .git/hooks/pre-commit, so a vanilla caws-init'd project has
|
|
34
|
+
// nothing to interact with; downstream consumers (like Sterling) that
|
|
35
|
+
// install their own hooks remain responsible for admitting
|
|
36
|
+
// `chore(caws):` commits if they want CAWS auto-commits to land
|
|
37
|
+
// without manual hook configuration.
|
|
38
|
+
//
|
|
39
|
+
// The dirty-detection contract is "dirty before the writer's own
|
|
40
|
+
// write." The caller passes in `wasDirtyBeforeWrite: boolean` because
|
|
41
|
+
// only the caller knows what state the file was in before it called
|
|
42
|
+
// fs.writeFileSync. The utility does not try to re-derive that by
|
|
43
|
+
// reading git twice (race-prone and ambiguous: a dirty file with the
|
|
44
|
+
// writer's change applied looks identical to a dirty file without).
|
|
45
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
46
|
+
if (k2 === undefined) k2 = k;
|
|
47
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
48
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
49
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
50
|
+
}
|
|
51
|
+
Object.defineProperty(o, k2, desc);
|
|
52
|
+
}) : (function(o, m, k, k2) {
|
|
53
|
+
if (k2 === undefined) k2 = k;
|
|
54
|
+
o[k2] = m[k];
|
|
55
|
+
}));
|
|
56
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
57
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
58
|
+
}) : function(o, v) {
|
|
59
|
+
o["default"] = v;
|
|
60
|
+
});
|
|
61
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
62
|
+
var ownKeys = function(o) {
|
|
63
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
64
|
+
var ar = [];
|
|
65
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
66
|
+
return ar;
|
|
67
|
+
};
|
|
68
|
+
return ownKeys(o);
|
|
69
|
+
};
|
|
70
|
+
return function (mod) {
|
|
71
|
+
if (mod && mod.__esModule) return mod;
|
|
72
|
+
var result = {};
|
|
73
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
74
|
+
__setModuleDefault(result, mod);
|
|
75
|
+
return result;
|
|
76
|
+
};
|
|
77
|
+
})();
|
|
78
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
79
|
+
exports.autoCommit = autoCommit;
|
|
80
|
+
exports.isPathDirty = isPathDirty;
|
|
81
|
+
exports.relativeToRepoRoot = relativeToRepoRoot;
|
|
82
|
+
const child_process_1 = require("child_process");
|
|
83
|
+
const path = __importStar(require("path"));
|
|
84
|
+
function runGit(args, cwd) {
|
|
85
|
+
try {
|
|
86
|
+
const stdout = (0, child_process_1.execFileSync)('git', [...args], {
|
|
87
|
+
cwd,
|
|
88
|
+
encoding: 'utf8',
|
|
89
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
90
|
+
});
|
|
91
|
+
return { ok: true, stdout: stdout.toString() };
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
const cause = e;
|
|
95
|
+
const stderr = cause.stderr instanceof Buffer
|
|
96
|
+
? cause.stderr.toString()
|
|
97
|
+
: typeof cause.stderr === 'string'
|
|
98
|
+
? cause.stderr
|
|
99
|
+
: '';
|
|
100
|
+
const message = typeof cause.message === 'string' ? cause.message : '';
|
|
101
|
+
return { ok: false, reason: stderr || message || 'unknown git error' };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function isInsideGitWorkingTree(cwd) {
|
|
105
|
+
const r = runGit(['rev-parse', '--is-inside-work-tree'], cwd);
|
|
106
|
+
if (!r.ok)
|
|
107
|
+
return false;
|
|
108
|
+
return r.stdout.trim() === 'true';
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Stage and commit CAWS-authored writes as the final step of a
|
|
112
|
+
* lifecycle transaction.
|
|
113
|
+
*
|
|
114
|
+
* Returns an outcome describing what happened; never throws. Callers
|
|
115
|
+
* should treat all three outcome kinds as non-fatal: a refused or
|
|
116
|
+
* skipped commit does NOT mean the writer's transaction failed, only
|
|
117
|
+
* that the audit-trail commit could not be authored automatically.
|
|
118
|
+
*/
|
|
119
|
+
function autoCommit(input) {
|
|
120
|
+
if (!isInsideGitWorkingTree(input.repoRoot)) {
|
|
121
|
+
return { kind: 'skipped_no_git' };
|
|
122
|
+
}
|
|
123
|
+
if (input.wasDirtyBeforeWrite) {
|
|
124
|
+
return {
|
|
125
|
+
kind: 'refused_dirty',
|
|
126
|
+
reason: `${input.paths.join(', ')} was dirty before the caws write. ` +
|
|
127
|
+
'The caws write has been applied to the working tree but not committed. ' +
|
|
128
|
+
'Resolve the prior change manually (git add + git commit, or git checkout -- <path> to discard), ' +
|
|
129
|
+
'then re-run the caws command if you want a clean audit commit.',
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
// Stage exactly the writer's paths. Do NOT use `git add -A` —
|
|
133
|
+
// that would silently stage unrelated dirty files.
|
|
134
|
+
const addResult = runGit(['add', '--', ...input.paths], input.repoRoot);
|
|
135
|
+
if (!addResult.ok) {
|
|
136
|
+
return {
|
|
137
|
+
kind: 'refused_dirty',
|
|
138
|
+
reason: `git add failed: ${addResult.reason.trim()}`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// Check whether `git add` actually staged anything. If the writer's
|
|
142
|
+
// write was a no-op (file already matched), there's nothing to
|
|
143
|
+
// commit and we should NOT create an empty commit.
|
|
144
|
+
const diffCached = runGit(['diff', '--cached', '--name-only', '--', ...input.paths], input.repoRoot);
|
|
145
|
+
if (!diffCached.ok) {
|
|
146
|
+
return {
|
|
147
|
+
kind: 'refused_dirty',
|
|
148
|
+
reason: `git diff --cached failed: ${diffCached.reason.trim()}`,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
if (diffCached.stdout.trim().length === 0) {
|
|
152
|
+
// Nothing to commit. Treat as 'committed' with no sha — the
|
|
153
|
+
// writer's intended state IS already in HEAD.
|
|
154
|
+
return { kind: 'committed', sha: '' };
|
|
155
|
+
}
|
|
156
|
+
// Commit ONLY the writer's own paths via an explicit pathspec.
|
|
157
|
+
// A bare `git commit -m <msg>` commits the ENTIRE index, which under
|
|
158
|
+
// a shared cross-worktree index (a concurrent sibling session may have
|
|
159
|
+
// pre-staged unrelated files) would sweep those foreign files into a
|
|
160
|
+
// CAWS lifecycle commit — the exact cross-session attribution failure
|
|
161
|
+
// CAWS exists to prevent. Path-scoping the commit makes it total over
|
|
162
|
+
// ambient index state: only `input.paths` are committed, whatever else
|
|
163
|
+
// is staged. (CAWS-AUTOCOMMIT-INTEGRITY-001)
|
|
164
|
+
const commitResult = runGit(['commit', '-m', input.message, '--', ...input.paths], input.repoRoot);
|
|
165
|
+
if (!commitResult.ok) {
|
|
166
|
+
// Commit failed. Most likely a pre-commit hook refused (downstream
|
|
167
|
+
// consumer hooks, not anything CAWS ships). Surface the hook's
|
|
168
|
+
// reason verbatim; do NOT retry with --no-verify.
|
|
169
|
+
return {
|
|
170
|
+
kind: 'refused_dirty',
|
|
171
|
+
reason: `git commit failed: ${commitResult.reason.trim()}`,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
// Capture the resulting sha for evidence/audit.
|
|
175
|
+
const shaResult = runGit(['rev-parse', '--short', 'HEAD'], input.repoRoot);
|
|
176
|
+
const sha = shaResult.ok ? shaResult.stdout.trim() : '';
|
|
177
|
+
return { kind: 'committed', sha };
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Helper: detect whether a path is dirty in the working tree. Callers
|
|
181
|
+
* that need to populate `wasDirtyBeforeWrite` can use this BEFORE
|
|
182
|
+
* calling fs.writeFileSync.
|
|
183
|
+
*/
|
|
184
|
+
function isPathDirty(repoRoot, relPath) {
|
|
185
|
+
const r = runGit(['status', '--porcelain', '--', relPath], repoRoot);
|
|
186
|
+
if (!r.ok)
|
|
187
|
+
return false;
|
|
188
|
+
return r.stdout.trim().length > 0;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Helper: convert an absolute path to a repo-root-relative path. The
|
|
192
|
+
* autocommit utility wants relative paths so git diff/add output is
|
|
193
|
+
* stable across cwds.
|
|
194
|
+
*/
|
|
195
|
+
function relativeToRepoRoot(repoRoot, abs) {
|
|
196
|
+
return path.relative(repoRoot, abs);
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=git-autocommit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-autocommit.js","sourceRoot":"","sources":["../../src/store/git-autocommit.ts"],"names":[],"mappings":"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"}
|
package/dist/store/index.d.ts
CHANGED
|
@@ -7,10 +7,13 @@ export { fsyncDir, writeFileAtomic } from './atomic-write';
|
|
|
7
7
|
export { readJsonFile } from './json-store';
|
|
8
8
|
export { readYamlFile, readYamlSource } from './yaml-store';
|
|
9
9
|
export { loadSpecs } from './specs-store';
|
|
10
|
+
export { runSpecsMigrateScan, runSpecsMigrateApply, MIGRATION_REPORT_SCHEMA_VERSION, } from './specs-migration';
|
|
11
|
+
export type { ScanEntry, ScanReport, ReportEntry, ReportVerdict, MigrationReport, ApplyResult as SpecsMigrateApplyResult, ScanOptions as SpecsMigrateScanOptions, ApplyOptions as SpecsMigrateApplyOptions, NonYamlObservation, } from './specs-migration';
|
|
10
12
|
export { loadPolicy } from './policy-store';
|
|
11
13
|
export { loadWorktrees } from './worktrees-store';
|
|
12
14
|
export { loadAgents } from './agents-store';
|
|
13
|
-
export { appendEvent, loadEvents } from './events-store';
|
|
15
|
+
export { appendEvent, loadEvents, rotateEvents } from './events-store';
|
|
16
|
+
export type { RotateEventsOptions } from './events-store';
|
|
14
17
|
export { applyRegistryPatch } from './apply-patch';
|
|
15
18
|
export { safeLeaseFilename, loadLeases, applyLeasePatch, applyLeasePatches, pruneLeasesByStatus, } from './leases-store';
|
|
16
19
|
export type { LoadLeasesResult, PruneOptions, PruneResult, } from './leases-store';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC3D,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC3D,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,EACb,eAAe,EACf,WAAW,IAAI,uBAAuB,EACtC,WAAW,IAAI,uBAAuB,EACtC,YAAY,IAAI,wBAAwB,EACxC,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAKnD,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,GACf,MAAM,mBAAmB,CAAC"}
|