@tenphi/akno-core 0.2.0 → 0.4.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 (80) hide show
  1. package/README.md +4 -2
  2. package/config/default.jsonc +38 -15
  3. package/dist/config/load.d.ts +5 -2
  4. package/dist/config/load.d.ts.map +1 -1
  5. package/dist/config/load.js +43 -12
  6. package/dist/config/load.js.map +1 -1
  7. package/dist/config/schema.d.ts +27 -3
  8. package/dist/config/schema.d.ts.map +1 -1
  9. package/dist/config/schema.js +39 -4
  10. package/dist/config/schema.js.map +1 -1
  11. package/dist/config/write-setup.d.ts +2 -0
  12. package/dist/config/write-setup.d.ts.map +1 -1
  13. package/dist/config/write-setup.js +7 -3
  14. package/dist/config/write-setup.js.map +1 -1
  15. package/dist/doctor.d.ts +15 -5
  16. package/dist/doctor.d.ts.map +1 -1
  17. package/dist/doctor.js +18 -0
  18. package/dist/doctor.js.map +1 -1
  19. package/dist/index/indexer.d.ts +12 -6
  20. package/dist/index/indexer.d.ts.map +1 -1
  21. package/dist/index/indexer.js +41 -24
  22. package/dist/index/indexer.js.map +1 -1
  23. package/dist/ingest/extract.d.ts +14 -4
  24. package/dist/ingest/extract.d.ts.map +1 -1
  25. package/dist/ingest/extract.js +142 -26
  26. package/dist/ingest/extract.js.map +1 -1
  27. package/dist/ingest/extractor-contract.d.ts +63 -0
  28. package/dist/ingest/extractor-contract.d.ts.map +1 -0
  29. package/dist/ingest/extractor-contract.js +26 -0
  30. package/dist/ingest/extractor-contract.js.map +1 -0
  31. package/dist/ingest/fetch.d.ts +16 -13
  32. package/dist/ingest/fetch.d.ts.map +1 -1
  33. package/dist/ingest/fetch.js +176 -52
  34. package/dist/ingest/fetch.js.map +1 -1
  35. package/dist/ingest/linux-extractor.d.ts +32 -0
  36. package/dist/ingest/linux-extractor.d.ts.map +1 -0
  37. package/dist/ingest/linux-extractor.js +344 -0
  38. package/dist/ingest/linux-extractor.js.map +1 -0
  39. package/dist/kb/frontmatter.d.ts +15 -0
  40. package/dist/kb/frontmatter.d.ts.map +1 -1
  41. package/dist/kb/frontmatter.js +105 -9
  42. package/dist/kb/frontmatter.js.map +1 -1
  43. package/dist/maintenance/adopt.d.ts.map +1 -1
  44. package/dist/maintenance/adopt.js +2 -1
  45. package/dist/maintenance/adopt.js.map +1 -1
  46. package/dist/maintenance/curate.js +3 -3
  47. package/dist/maintenance/curate.js.map +1 -1
  48. package/dist/maintenance/dream.d.ts.map +1 -1
  49. package/dist/maintenance/dream.js +27 -17
  50. package/dist/maintenance/dream.js.map +1 -1
  51. package/dist/open.d.ts +1 -1
  52. package/dist/open.d.ts.map +1 -1
  53. package/dist/ops/ingest.d.ts.map +1 -1
  54. package/dist/ops/ingest.js +11 -5
  55. package/dist/ops/ingest.js.map +1 -1
  56. package/dist/ops/remember.d.ts.map +1 -1
  57. package/dist/ops/remember.js +2 -1
  58. package/dist/ops/remember.js.map +1 -1
  59. package/dist/ops/retain.js +2 -2
  60. package/dist/ops/retain.js.map +1 -1
  61. package/dist/ops/undo.d.ts +1 -1
  62. package/dist/ops/undo.js +1 -1
  63. package/dist/ops/write.d.ts.map +1 -1
  64. package/dist/ops/write.js +11 -7
  65. package/dist/ops/write.js.map +1 -1
  66. package/dist/store/db.d.ts.map +1 -1
  67. package/dist/store/db.js +4 -1
  68. package/dist/store/db.js.map +1 -1
  69. package/dist/store/migrations.d.ts +7 -6
  70. package/dist/store/migrations.d.ts.map +1 -1
  71. package/dist/store/migrations.js +16 -8
  72. package/dist/store/migrations.js.map +1 -1
  73. package/dist/watch/watcher.d.ts +3 -3
  74. package/dist/watch/watcher.js +5 -5
  75. package/dist/watch/watcher.js.map +1 -1
  76. package/dist/write/journal.d.ts +4 -8
  77. package/dist/write/journal.d.ts.map +1 -1
  78. package/dist/write/journal.js +215 -55
  79. package/dist/write/journal.js.map +1 -1
  80. package/package.json +4 -3
@@ -1,9 +1,9 @@
1
1
  /**
2
- * One SQLite file. Deleting it costs one re-index and no data — that
3
- * property is the design, and it is why nothing here is a source of truth.
4
- * The journal, live maintenance plans, replayable managed-item source quotes, and content-safe run receipts are
5
- * the durable exceptions. The journal keeps prior bytes for undo; a sealed plan keeps exact proposed bytes so a
6
- * decision survives a restart and never has to regenerate a possibly different rewrite; one bounded exact
2
+ * One SQLite file holds both reproducible projections and deliberately durable workflow state.
3
+ * `akno index --rebuild` refreshes the former in place; deleting this file loses the journal,
4
+ * live maintenance plans, replayable managed-item source quotes, retain receipts and recovery state.
5
+ * The journal keeps prior bytes for undo; a sealed plan keeps exact proposed bytes so a decision
6
+ * survives a restart and never has to regenerate a possibly different rewrite; one bounded exact
7
7
  * quote lets a generated sentence be checked later; the receipt explains the lifecycle around them.
8
8
  *
9
9
  * The first entry is the canonical 0.1.0 schema, compacted from historical versions
@@ -12,7 +12,7 @@
12
12
  * Upgrade code capability-checks durable tables and columns so databases created before
13
13
  * or after the compaction converge on the same schema.
14
14
  */
15
- export const SCHEMA_VERSION = 33;
15
+ export const SCHEMA_VERSION = 34;
16
16
  export const MAINTENANCE_PLANS_MIGRATION_INDEX = 1;
17
17
  export const MAINTENANCE_EVIDENCE_MIGRATION_INDEX = 2;
18
18
  export const CONFLICT_VERDICTS_MIGRATION_INDEX = 3;
@@ -39,6 +39,7 @@ export const MAINTENANCE_REVISION_ACTOR_MIGRATION_INDEX = 23;
39
39
  export const MAINTENANCE_ACTION_RECEIPTS_MIGRATION_INDEX = 24;
40
40
  export const MAINTENANCE_RECOVERY_STATE_MIGRATION_INDEX = 25;
41
41
  export const RETAIN_RECEIPTS_MIGRATION_INDEX = 26;
42
+ export const CHANGE_FILE_HASHES_MIGRATION_INDEX = 27;
42
43
  export const MIGRATIONS = [
43
44
  // ── 1. The schema as of 0.1.0 ─────────────────────────────────────────────
44
45
  `
@@ -271,8 +272,8 @@ export const MIGRATIONS = [
271
272
  CREATE INDEX changes_at ON changes(at DESC);
272
273
 
273
274
  -- One row per file the change touched, in application order. 'before' holds the
274
- -- previous bytes rather than a pointer to them, which is why undo survives a
275
- -- full rebuild of every other table: only the journal is irreplaceable.
275
+ -- previous bytes rather than a pointer to them, which is why undo survives an
276
+ -- in-place rebuild of reproducible projections.
276
277
  CREATE TABLE change_files (
277
278
  change_id TEXT NOT NULL REFERENCES changes(id) ON DELETE CASCADE,
278
279
  ord INTEGER NOT NULL,
@@ -940,6 +941,13 @@ export const MIGRATIONS = [
940
941
  CREATE INDEX retain_supports_memory
941
942
  ON retain_supports(memory_id, receipt_fingerprint);
942
943
  `,
944
+ // Undo is a compare-and-swap over the knowledge base. Text rows can derive these hashes from
945
+ // their journaled bytes, while binary deletes and renames need the exact post-change digest
946
+ // recorded here so a later edit is never mistaken for the file Akno originally changed.
947
+ `
948
+ ALTER TABLE change_files ADD COLUMN before_hash TEXT;
949
+ ALTER TABLE change_files ADD COLUMN after_hash TEXT;
950
+ `,
943
951
  ];
944
952
  /**
945
953
  * The vector table is created separately: its dimension is fixed at creation
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/store/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,4CAA4C,GAAG,EAAE,CAAC;AAC/D,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAC;AACnD,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAC/C,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAC7C,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,CAAC;AACpD,MAAM,CAAC,MAAM,kDAAkD,GAAG,EAAE,CAAC;AACrE,MAAM,CAAC,MAAM,gDAAgD,GAAG,EAAE,CAAC;AACnE,MAAM,CAAC,MAAM,uCAAuC,GAAG,EAAE,CAAC;AAC1D,MAAM,CAAC,MAAM,yCAAyC,GAAG,EAAE,CAAC;AAC5D,MAAM,CAAC,MAAM,+CAA+C,GAAG,EAAE,CAAC;AAClE,MAAM,CAAC,MAAM,oCAAoC,GAAG,EAAE,CAAC;AACvD,MAAM,CAAC,MAAM,6CAA6C,GAAG,EAAE,CAAC;AAChE,MAAM,CAAC,MAAM,0CAA0C,GAAG,EAAE,CAAC;AAC7D,MAAM,CAAC,MAAM,0CAA0C,GAAG,EAAE,CAAC;AAC7D,MAAM,CAAC,MAAM,2CAA2C,GAAG,EAAE,CAAC;AAC9D,MAAM,CAAC,MAAM,0CAA0C,GAAG,EAAE,CAAC;AAC7D,MAAM,CAAC,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAElD,MAAM,CAAC,MAAM,UAAU,GAAa;IAClC,6EAA6E;IAC7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6QC;IACD,6EAA6E;IAC7E,4FAA4F;IAC5F,8FAA8F;IAC9F,6CAA6C;IAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCC;IACD,4EAA4E;IAC5E,wFAAwF;IACxF,wFAAwF;IACxF;;GAEC;IACD,6EAA6E;IAC7E,+FAA+F;IAC/F,qEAAqE;IACrE;;;;;;;;;;;GAWC;IACD,6EAA6E;IAC7E,8FAA8F;IAC9F,+FAA+F;IAC/F;;GAEC;IACD,4EAA4E;IAC5E,4FAA4F;IAC5F,8FAA8F;IAC9F;;;;;;;;;;GAUC;IACD,4EAA4E;IAC5E,iGAAiG;IACjG,gGAAgG;IAChG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCC;IACD,4EAA4E;IAC5E,8EAA8E;IAC9E,6EAA6E;IAC7E,+EAA+E;IAC/E;;;;GAIC;IACD,4EAA4E;IAC5E,2EAA2E;IAC3E,2EAA2E;IAC3E,kEAAkE;IAClE;;;;;;;;;GASC;IACD,2EAA2E;IAC3E,2FAA2F;IAC3F,4EAA4E;IAC5E;;;;;;;GAOC;IACD,2EAA2E;IAC3E,uGAAuG;IACvG;;GAEC;IACD,2EAA2E;IAC3E,uFAAuF;IACvF,uFAAuF;IACvF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCC;IACD,yEAAyE;IACzE,yFAAyF;IACzF,0FAA0F;IAC1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CC;IACD,0EAA0E;IAC1E,0FAA0F;IAC1F,2FAA2F;IAC3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCC;IACD,yEAAyE;IACzE,2FAA2F;IAC3F,sEAAsE;IACtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkGC;IACD,4EAA4E;IAC5E,sFAAsF;IACtF,wFAAwF;IACxF;;GAEC;IACD,6FAA6F;IAC7F,iFAAiF;IACjF;;;;;;;;;GASC;IACD,uFAAuF;IACvF,yFAAyF;IACzF,6FAA6F;IAC7F;;;;;;;;;;;;;;;;;GAiBC;IACD,uFAAuF;IACvF,8FAA8F;IAC9F,iEAAiE;IACjE;;;;;;;;;;;;;;GAcC;IACD,wFAAwF;IACxF,6FAA6F;IAC7F,6EAA6E;IAC7E;;;;;;;;;;;;;GAaC;IACD,2FAA2F;IAC3F,+FAA+F;IAC/F,+FAA+F;IAC/F;;;;;;;;;;;;;;;;;;;;;;;;GAwBC;IACD,8FAA8F;IAC9F,mGAAmG;IACnG;;;;;;;;;;;;;;;;;;;;GAoBC;IACD,wFAAwF;IACxF,4FAA4F;IAC5F,0FAA0F;IAC1F;;;;;;;;;;;;;;;;;;;GAmBC;IACD,0FAA0F;IAC1F,gGAAgG;IAChG;;;GAGC;IACD,gGAAgG;IAChG,gGAAgG;IAChG,kGAAkG;IAClG,8BAA8B;IAC9B;;;;;;;;;;;;;;GAcC;IACD,2FAA2F;IAC3F,2FAA2F;IAC3F,iCAAiC;IACjC;;;;;;;;;;;;;;;;;;;GAmBC;IACD,gGAAgG;IAChG,8FAA8F;IAC9F,6DAA6D;IAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCC;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,OAAO;;sBAEa,UAAU;IAC5B,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;CAMlC,CAAC"}
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/store/migrations.ts"],"names":[],"mappings":"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"}
@@ -9,10 +9,10 @@ export interface WatcherEvents {
9
9
  onError?: (error: Error) => void;
10
10
  }
11
11
  /**
12
- * **FSEvents, not polling.** Node's recursive `fs.watch` uses FSEvents on
13
- * macOS: native, cheap, and it reports renames as renames.
12
+ * **Native events, not polling.** Node's recursive `fs.watch` uses the host
13
+ * watcher: native, cheap, and able to report renames.
14
14
  *
15
- * But FSEvents coalesces under load and can drop events after a sleep/wake or a
15
+ * But filesystem events coalesce under load and can drop events after a sleep/wake or a
16
16
  * large sync, so a **periodic hash sweep is the backstop.** Watching alone is not
17
17
  * a correctness guarantee; hashing is. At ~10ms for a typical knowledge base the
18
18
  * sweep can run every few minutes and cost nothing.
@@ -1,10 +1,10 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  /**
4
- * **FSEvents, not polling.** Node's recursive `fs.watch` uses FSEvents on
5
- * macOS: native, cheap, and it reports renames as renames.
4
+ * **Native events, not polling.** Node's recursive `fs.watch` uses the host
5
+ * watcher: native, cheap, and able to report renames.
6
6
  *
7
- * But FSEvents coalesces under load and can drop events after a sleep/wake or a
7
+ * But filesystem events coalesce under load and can drop events after a sleep/wake or a
8
8
  * large sync, so a **periodic hash sweep is the backstop.** Watching alone is not
9
9
  * a correctness guarantee; hashing is. At ~10ms for a typical knowledge base the
10
10
  * sweep can run every few minutes and cost nothing.
@@ -32,7 +32,7 @@ export class Watcher {
32
32
  try {
33
33
  this.watcher = fs.watch(this.#config.aknoPath, { recursive: true, persistent: true }, (_type, filename) => {
34
34
  if (!filename) {
35
- // A null filename means FSEvents coalesced and cannot say what moved.
35
+ // A null filename means the watcher coalesced and cannot say what moved.
36
36
  // The only correct response is to treat the whole tree as suspect.
37
37
  this.dirty = true;
38
38
  this.schedule();
@@ -101,7 +101,7 @@ export class Watcher {
101
101
  schedule() {
102
102
  if (this.debounceTimer)
103
103
  clearTimeout(this.debounceTimer);
104
- // FSEvents coalesces, but an editor still produces a write storm on save.
104
+ // Native watchers coalesce, but an editor still produces a write storm on save.
105
105
  this.debounceTimer = setTimeout(() => void this.flush(), this.#config.watch.debounceMs);
106
106
  }
107
107
  async flush(options = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/watch/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAa7B;;;;;;;;GAQG;AACH,MAAM,OAAO,OAAO;IACV,OAAO,GAAwB,IAAI,CAAC;IACpC,UAAU,GAA0B,IAAI,CAAC;IACzC,WAAW,GAA0B,IAAI,CAAC;IAC1C,aAAa,GAA0B,IAAI,CAAC;IAC5C,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5B,OAAO,GAAG,KAAK,CAAC;IACxB,8EAA8E;IACtE,KAAK,GAAG,KAAK,CAAC;IAEb,OAAO,CAAa;IACpB,QAAQ,CAAU;IAClB,OAAO,CAAgB;IAEhC,YAAY,MAAkB,EAAE,OAAgB,EAAE,SAAwB,EAAE;QAC1E,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAEzB,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,CACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,EACrB,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EACrC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,sEAAsE;oBACtE,mEAAmE;oBACnE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;oBAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnD,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;oBAAE,OAAO;gBACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC,CACF,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAc,CAAC,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yEAAyE;YACzE,sCAAsC;YACtC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAc,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;gBACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;YAC5C,0EAA0E;YAC1E,sEAAsE;YACtE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;gBAClC,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACpC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,UAAU;YAAE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,WAAW;YAAE,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,aAAa;YAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IACjE,CAAC;IAEO,YAAY,CAAC,OAAe;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACrE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACnF,0EAA0E;QAC1E,8DAA8D;QAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,kDAAkD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,CAAC,aAAa;YAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,0EAA0E;QAC1E,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1F,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,UAAgC,EAAE;QACpD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,sEAAsE;YACtE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE/C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACrC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,iEAAiE;gBACjE,4DAA4D;gBAC5D,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;aACxC,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC1C,+EAA+E;YAC/E,sCAAsC;YACtC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS;gBAAE,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAc,CAAC,CAAC;QACzC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;gBAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3D,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/watch/watcher.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,9 @@
1
1
  import type { Store } from '../store/db.ts';
2
2
  import { type WriteResult } from './atomic.ts';
3
3
  /**
4
- * **The journal is the only irreplaceable table.** Everything else is
5
- * derived from the Markdown and rebuilt by `akno index`; this holds the previous
6
- * bytes, and there is nowhere else to get them.
7
- *
8
- * It records content, not pointers — so `undo` still works after
9
- * `rm akno.db && akno index` has thrown away every fact id the change might
10
- * otherwise have referenced — which is why a fact id is never stored here.
4
+ * The journal is durable state: it holds previous bytes, and there is nowhere else
5
+ * to get them. `akno index --rebuild` deliberately preserves it while refreshing
6
+ * reproducible projections, which is why a fact id is never stored here.
11
7
  *
12
8
  * The unit is a **change**, not a file. One `write` can touch a page, the event
13
9
  * ledger and an attachment; `undo` reverses all of them or none, because a page
@@ -59,7 +55,7 @@ export declare class Journal {
59
55
  files: ChangeFile[];
60
56
  }): string;
61
57
  /**
62
- * Reverses a change: every file back to its previous bytes, in reverse order.
58
+ * Reverses a change only when every file still has the exact post-change state.
63
59
  *
64
60
  * Reverse order matters for a move — the change created the destination and
65
61
  * deleted the source, so undoing destination-first leaves the source free to be
@@ -1 +1 @@
1
- {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/write/journal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;CAClD;AAED,qBAAa,OAAO;;gBAKN,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAM5D;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,EAAE,CAAA;KAAE,GAAG,MAAM;IA8B1F;;;;;;;OAOG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAkFjG,IAAI,CAAC,KAAK,SAAK,GAAG,aAAa,EAAE;IAyBjC;;;;OAIG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAalE;;;;OAIG;IACG,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAmB1D;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAOzD"}
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/write/journal.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;;;GAQG;AAEH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;CAClD;AAoCD,qBAAa,OAAO;;gBAKN,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAM5D;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,EAAE,CAAA;KAAE,GAAG,MAAM;IAgD1F;;;;;;;OAOG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA2KjG,IAAI,CAAC,KAAK,SAAK,GAAG,aAAa,EAAE;IAyBjC;;;;OAIG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAalE;;;;OAIG;IACG,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAmB1D;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAOzD"}
@@ -1,7 +1,8 @@
1
+ import fs from 'node:fs';
1
2
  import fsp from 'node:fs/promises';
2
3
  import path from 'node:path';
3
4
  import { AknoError } from '@tenphi/akno-protocol';
4
- import { newPrefixedId } from "../store/ids.js";
5
+ import { newPrefixedId, sha256 } from "../store/ids.js";
5
6
  import { restoreFile } from "./atomic.js";
6
7
  export class Journal {
7
8
  #store;
@@ -26,16 +27,30 @@ export class Journal {
26
27
  this.#store.db
27
28
  .prepare('INSERT INTO changes(id, at, actor, op, summary, status) VALUES(?, ?, ?, ?, ?, ?)')
28
29
  .run(changeId, now, input.actor, input.op, input.summary, 'applied');
29
- const insert = this.#store.db.prepare(`INSERT INTO change_files(change_id, ord, rel_path, action, before, after, snapshot, moved_to)
30
- VALUES(?, ?, ?, ?, ?, ?, ?, ?)`);
30
+ const insert = this.#store.db.prepare(`INSERT INTO change_files(
31
+ change_id, ord, rel_path, action, before, after, snapshot, moved_to,
32
+ before_hash, after_hash
33
+ ) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
31
34
  input.files.forEach((file, index) => {
32
- insert.run(changeId, index, file.relPath, file.action, file.before, file.after, file.snapshot ?? null, file.movedTo ?? null);
35
+ const beforeHash = file.before !== null
36
+ ? sha256(file.before)
37
+ : file.snapshot
38
+ ? hashFileIfPresent(path.join(this.#trashDir, file.snapshot))
39
+ : null;
40
+ const afterHash = file.after !== null
41
+ ? sha256(file.after)
42
+ : file.movedTo
43
+ ? hashFileIfPresent(path.join(this.#aknoPath, file.movedTo))
44
+ : file.action === 'created'
45
+ ? hashFileIfPresent(path.join(this.#aknoPath, file.relPath))
46
+ : null;
47
+ insert.run(changeId, index, file.relPath, file.action, file.before, file.after, file.snapshot ?? null, file.movedTo ?? null, beforeHash, afterHash);
33
48
  });
34
49
  });
35
50
  return changeId;
36
51
  }
37
52
  /**
38
- * Reverses a change: every file back to its previous bytes, in reverse order.
53
+ * Reverses a change only when every file still has the exact post-change state.
39
54
  *
40
55
  * Reverse order matters for a move — the change created the destination and
41
56
  * deleted the source, so undoing destination-first leaves the source free to be
@@ -52,68 +67,166 @@ export class Journal {
52
67
  const files = this.#store.db
53
68
  .prepare('SELECT * FROM change_files WHERE change_id = ? ORDER BY ord DESC')
54
69
  .all(changeId);
70
+ const conflicts = await this.#undoConflicts(files);
71
+ if (conflicts.length > 0) {
72
+ throw new AknoError('conflict', `cannot undo ${changeId}: ${conflicts.length} file${conflicts.length === 1 ? '' : 's'} no longer match the applied change`, {
73
+ reason: 'stale_undo',
74
+ conflicts,
75
+ recovery: 'Review the current files, restore the expected post-change state, then retry undo; no files were changed.',
76
+ });
77
+ }
55
78
  const restored = [];
56
79
  const removed = [];
57
80
  const reversedMoves = [];
58
- for (const file of files) {
59
- if (file.moved_to) {
60
- // The change was a rename, so its reversal is the rename back. Nothing was created
61
- // and nothing was destroyed, which is why this case cannot go through `restoreFile`.
62
- const from = path.join(this.#aknoPath, file.moved_to);
63
- const target = path.join(this.#aknoPath, file.rel_path);
64
- await fsp.mkdir(path.dirname(target), { recursive: true });
65
- let reversed = true;
66
- await fsp.rename(from, target).catch(async (err) => {
67
- // Already gone is not a reason to abandon the rest of the reversal — the file was
68
- // moved again, or removed, since. Everything else still goes back.
69
- if (err.code !== 'ENOENT')
70
- throw err;
71
- reversed = false;
72
- });
73
- if (reversed)
81
+ const applied = [];
82
+ try {
83
+ for (const file of files) {
84
+ const postBytes = await this.#rollbackBytes(file);
85
+ await this.#reverseFile(file);
86
+ applied.push({ file, postBytes });
87
+ if (file.moved_to)
74
88
  reversedMoves.push({ from: file.moved_to, to: file.rel_path });
75
- restored.push(file.rel_path);
76
- continue;
89
+ if (!file.moved_to && !file.snapshot && file.before === null)
90
+ removed.push(file.rel_path);
91
+ else
92
+ restored.push(file.rel_path);
77
93
  }
78
- if (file.snapshot) {
79
- // A binary: the bytes are in trash, not in the journal.
80
- const source = path.join(this.#trashDir, file.snapshot);
81
- const target = path.join(this.#aknoPath, file.rel_path);
82
- await fsp.mkdir(path.dirname(target), { recursive: true });
83
- await fsp.copyFile(source, target);
94
+ this.#store.transaction(() => {
95
+ // A document row carries retained extraction and provenance that a structural re-index cannot
96
+ // always reproduce without another model call. Follow successful attachment renames back before
97
+ // the scanner runs, just as the forward move follows them, rather than deleting and recreating
98
+ // the row from its content-derived id.
99
+ if (reversedMoves.length > 0) {
100
+ const moveDocument = this.#store.db.prepare('UPDATE OR IGNORE documents SET rel_path = ? WHERE rel_path = ?');
101
+ const moveRenders = this.#store.db.prepare('UPDATE documents SET renders = ? WHERE renders = ?');
102
+ const moveGroup = this.#store.db.prepare('UPDATE documents SET group_key = ? WHERE group_key = ?');
103
+ for (const move of reversedMoves)
104
+ moveDocument.run(move.to, move.from);
105
+ for (const move of reversedMoves) {
106
+ moveRenders.run(move.to, move.from);
107
+ moveGroup.run(move.to, move.from);
108
+ }
109
+ }
110
+ this.#store.db
111
+ .prepare("UPDATE changes SET status = 'undone', undone_at = ? WHERE id = ?")
112
+ .run(new Date().toISOString(), changeId);
113
+ });
114
+ }
115
+ catch (error) {
116
+ await this.#restorePostChangeState(applied);
117
+ throw error;
118
+ }
119
+ return { restored, removed, summary: change.summary };
120
+ }
121
+ async #undoConflicts(files) {
122
+ const conflicts = [];
123
+ for (const file of files) {
124
+ if (file.moved_to) {
125
+ const sourceState = await fileState(path.join(this.#aknoPath, file.rel_path));
126
+ if (sourceState.kind !== 'missing') {
127
+ conflicts.push({ path: file.rel_path, reason: 'move_source_occupied' });
128
+ }
129
+ const destinationState = await fileState(path.join(this.#aknoPath, file.moved_to));
130
+ if (destinationState.kind === 'missing') {
131
+ conflicts.push({ path: file.moved_to, reason: 'move_destination_missing' });
132
+ }
133
+ else if (destinationState.kind !== 'file') {
134
+ conflicts.push({ path: file.moved_to, reason: 'move_destination_not_file' });
135
+ }
136
+ else if (!file.after_hash) {
137
+ conflicts.push({ path: file.moved_to, reason: 'move_destination_unverifiable' });
138
+ }
139
+ else if (destinationState.hash !== file.after_hash) {
140
+ conflicts.push({ path: file.moved_to, reason: 'move_destination_modified' });
141
+ }
84
142
  }
85
143
  else {
86
- await restoreFile(this.#aknoPath, file.rel_path, file.before);
144
+ const current = await fileState(path.join(this.#aknoPath, file.rel_path));
145
+ const expectedHash = file.after_hash ?? (file.after === null ? null : sha256(file.after));
146
+ if (expectedHash === null && current.kind !== 'missing') {
147
+ conflicts.push({ path: file.rel_path, reason: 'expected_absent' });
148
+ }
149
+ else if (expectedHash !== null && current.kind === 'missing') {
150
+ conflicts.push({ path: file.rel_path, reason: 'expected_file_missing' });
151
+ }
152
+ else if (expectedHash !== null && current.kind !== 'file') {
153
+ conflicts.push({ path: file.rel_path, reason: 'expected_regular_file' });
154
+ }
155
+ else if (expectedHash !== null && current.kind === 'file' && current.hash !== expectedHash) {
156
+ conflicts.push({ path: file.rel_path, reason: 'file_modified' });
157
+ }
158
+ }
159
+ if (file.snapshot) {
160
+ const snapshot = await fileState(path.join(this.#trashDir, file.snapshot));
161
+ const expected = file.before_hash;
162
+ if (snapshot.kind !== 'file') {
163
+ conflicts.push({ path: file.rel_path, reason: 'recovery_snapshot_missing' });
164
+ }
165
+ else if (!expected) {
166
+ // Rows created before snapshot hashes existed cannot prove that the private copy
167
+ // still holds the bytes Akno removed. Restoring unknown bytes would make an old
168
+ // journal entry more authoritative than the user's current knowledge base.
169
+ conflicts.push({ path: file.rel_path, reason: 'recovery_snapshot_unverifiable' });
170
+ }
171
+ else if (snapshot.hash !== expected) {
172
+ conflicts.push({ path: file.rel_path, reason: 'recovery_snapshot_modified' });
173
+ }
87
174
  }
88
- // No prior content and no snapshot means the change created this file, so putting it
89
- // back is deleting it. Two opposite outcomes reported under one word is one of them
90
- // being reported wrongly.
91
- if (!file.snapshot && file.before === null)
92
- removed.push(file.rel_path);
93
- else
94
- restored.push(file.rel_path);
95
175
  }
96
- // A document row carries retained extraction and provenance that a structural re-index cannot
97
- // always reproduce without another model call. Follow successful attachment renames back before
98
- // the scanner runs, just as the forward move follows them, rather than deleting and recreating
99
- // the row from its content-derived id.
100
- if (reversedMoves.length > 0) {
101
- this.#store.transaction(() => {
102
- const moveDocument = this.#store.db.prepare('UPDATE OR IGNORE documents SET rel_path = ? WHERE rel_path = ?');
103
- const moveRenders = this.#store.db.prepare('UPDATE documents SET renders = ? WHERE renders = ?');
104
- const moveGroup = this.#store.db.prepare('UPDATE documents SET group_key = ? WHERE group_key = ?');
105
- for (const move of reversedMoves)
106
- moveDocument.run(move.to, move.from);
107
- for (const move of reversedMoves) {
108
- moveRenders.run(move.to, move.from);
109
- moveGroup.run(move.to, move.from);
176
+ return conflicts;
177
+ }
178
+ async #reverseFile(file) {
179
+ if (file.moved_to) {
180
+ const from = path.join(this.#aknoPath, file.moved_to);
181
+ const target = path.join(this.#aknoPath, file.rel_path);
182
+ await fsp.mkdir(path.dirname(target), { recursive: true });
183
+ await fsp.rename(from, target);
184
+ return;
185
+ }
186
+ if (file.snapshot) {
187
+ const source = path.join(this.#trashDir, file.snapshot);
188
+ const target = path.join(this.#aknoPath, file.rel_path);
189
+ await fsp.mkdir(path.dirname(target), { recursive: true });
190
+ await copyFileAtomic(source, target);
191
+ return;
192
+ }
193
+ await restoreFile(this.#aknoPath, file.rel_path, file.before);
194
+ }
195
+ async #rollbackBytes(file) {
196
+ if (file.moved_to || file.snapshot || file.after !== null || !file.after_hash)
197
+ return null;
198
+ return fsp.readFile(path.join(this.#aknoPath, file.rel_path));
199
+ }
200
+ /** Roll back a partially applied reversal to the state that passed preflight. */
201
+ async #restorePostChangeState(applied) {
202
+ let rollbackError = null;
203
+ for (const reversal of [...applied].reverse()) {
204
+ const { file, postBytes } = reversal;
205
+ try {
206
+ if (file.moved_to) {
207
+ const source = path.join(this.#aknoPath, file.rel_path);
208
+ const destination = path.join(this.#aknoPath, file.moved_to);
209
+ await fsp.mkdir(path.dirname(destination), { recursive: true });
210
+ await fsp.rename(source, destination);
211
+ }
212
+ else if (postBytes) {
213
+ const destination = path.join(this.#aknoPath, file.rel_path);
214
+ await fsp.mkdir(path.dirname(destination), { recursive: true });
215
+ await writeBytesAtomic(destination, postBytes);
216
+ }
217
+ else {
218
+ await restoreFile(this.#aknoPath, file.rel_path, file.after);
110
219
  }
220
+ }
221
+ catch (error) {
222
+ rollbackError ??= error;
223
+ }
224
+ }
225
+ if (rollbackError) {
226
+ throw new AknoError('internal', 'undo failed and its filesystem rollback was incomplete', {
227
+ reason: 'undo_rollback_failed',
111
228
  });
112
229
  }
113
- this.#store.db
114
- .prepare("UPDATE changes SET status = 'undone', undone_at = ? WHERE id = ?")
115
- .run(new Date().toISOString(), changeId);
116
- return { restored, removed, summary: change.summary };
117
230
  }
118
231
  list(limit = 20) {
119
232
  // By rowid, not by `at`: two changes in the same millisecond have identical
@@ -184,4 +297,51 @@ export function fileEntry(result) {
184
297
  after: result.after,
185
298
  };
186
299
  }
300
+ function hashFileIfPresent(absPath) {
301
+ try {
302
+ return sha256(fs.readFileSync(absPath));
303
+ }
304
+ catch (error) {
305
+ if (error.code === 'ENOENT')
306
+ return null;
307
+ throw error;
308
+ }
309
+ }
310
+ async function fileState(absPath) {
311
+ const stat = await fsp.lstat(absPath).catch((error) => {
312
+ if (error.code === 'ENOENT')
313
+ return null;
314
+ throw error;
315
+ });
316
+ if (!stat)
317
+ return { kind: 'missing' };
318
+ if (!stat.isFile())
319
+ return { kind: 'other' };
320
+ return { kind: 'file', hash: sha256(await fsp.readFile(absPath)) };
321
+ }
322
+ async function copyFileAtomic(source, destination) {
323
+ await replaceAtomically(destination, (temporary) => fsp.copyFile(source, temporary));
324
+ }
325
+ async function writeBytesAtomic(destination, bytes) {
326
+ await replaceAtomically(destination, (temporary) => fsp.writeFile(temporary, bytes));
327
+ }
328
+ /** Keep a failed binary restore out of the user-visible path, just like page writes. */
329
+ async function replaceAtomically(destination, populate) {
330
+ const temporary = `${destination}.akno.tmp`;
331
+ try {
332
+ await populate(temporary);
333
+ const handle = await fsp.open(temporary, 'r');
334
+ try {
335
+ await handle.sync();
336
+ }
337
+ finally {
338
+ await handle.close();
339
+ }
340
+ await fsp.rename(temporary, destination);
341
+ }
342
+ catch (error) {
343
+ await fsp.rm(temporary, { force: true }).catch(() => { });
344
+ throw error;
345
+ }
346
+ }
187
347
  //# sourceMappingURL=journal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/write/journal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/write/journal.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tenphi/akno-core",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Akno — the memory layer itself: index, ops, watcher, models",
5
5
  "license": "PolyForm-Noncommercial-1.0.0",
6
6
  "type": "module",
@@ -22,13 +22,14 @@
22
22
  "sqlite-vec": "^0.1.9",
23
23
  "yaml": "^2.9.0",
24
24
  "zod": "^4.4.3",
25
- "@tenphi/akno-protocol": "0.2.0"
25
+ "@tenphi/akno-protocol": "0.4.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/better-sqlite3": "^7.6.12"
29
29
  },
30
30
  "os": [
31
- "darwin"
31
+ "darwin",
32
+ "linux"
32
33
  ],
33
34
  "engines": {
34
35
  "node": ">=22.18"