@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.
- package/README.md +4 -2
- package/config/default.jsonc +38 -15
- package/dist/config/load.d.ts +5 -2
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +43 -12
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +27 -3
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +39 -4
- package/dist/config/schema.js.map +1 -1
- package/dist/config/write-setup.d.ts +2 -0
- package/dist/config/write-setup.d.ts.map +1 -1
- package/dist/config/write-setup.js +7 -3
- package/dist/config/write-setup.js.map +1 -1
- package/dist/doctor.d.ts +15 -5
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +18 -0
- package/dist/doctor.js.map +1 -1
- package/dist/index/indexer.d.ts +12 -6
- package/dist/index/indexer.d.ts.map +1 -1
- package/dist/index/indexer.js +41 -24
- package/dist/index/indexer.js.map +1 -1
- package/dist/ingest/extract.d.ts +14 -4
- package/dist/ingest/extract.d.ts.map +1 -1
- package/dist/ingest/extract.js +142 -26
- package/dist/ingest/extract.js.map +1 -1
- package/dist/ingest/extractor-contract.d.ts +63 -0
- package/dist/ingest/extractor-contract.d.ts.map +1 -0
- package/dist/ingest/extractor-contract.js +26 -0
- package/dist/ingest/extractor-contract.js.map +1 -0
- package/dist/ingest/fetch.d.ts +16 -13
- package/dist/ingest/fetch.d.ts.map +1 -1
- package/dist/ingest/fetch.js +176 -52
- package/dist/ingest/fetch.js.map +1 -1
- package/dist/ingest/linux-extractor.d.ts +32 -0
- package/dist/ingest/linux-extractor.d.ts.map +1 -0
- package/dist/ingest/linux-extractor.js +344 -0
- package/dist/ingest/linux-extractor.js.map +1 -0
- package/dist/kb/frontmatter.d.ts +15 -0
- package/dist/kb/frontmatter.d.ts.map +1 -1
- package/dist/kb/frontmatter.js +105 -9
- package/dist/kb/frontmatter.js.map +1 -1
- package/dist/maintenance/adopt.d.ts.map +1 -1
- package/dist/maintenance/adopt.js +2 -1
- package/dist/maintenance/adopt.js.map +1 -1
- package/dist/maintenance/curate.js +3 -3
- package/dist/maintenance/curate.js.map +1 -1
- package/dist/maintenance/dream.d.ts.map +1 -1
- package/dist/maintenance/dream.js +27 -17
- package/dist/maintenance/dream.js.map +1 -1
- package/dist/open.d.ts +1 -1
- package/dist/open.d.ts.map +1 -1
- package/dist/ops/ingest.d.ts.map +1 -1
- package/dist/ops/ingest.js +11 -5
- package/dist/ops/ingest.js.map +1 -1
- package/dist/ops/remember.d.ts.map +1 -1
- package/dist/ops/remember.js +2 -1
- package/dist/ops/remember.js.map +1 -1
- package/dist/ops/retain.js +2 -2
- package/dist/ops/retain.js.map +1 -1
- package/dist/ops/undo.d.ts +1 -1
- package/dist/ops/undo.js +1 -1
- package/dist/ops/write.d.ts.map +1 -1
- package/dist/ops/write.js +11 -7
- package/dist/ops/write.js.map +1 -1
- package/dist/store/db.d.ts.map +1 -1
- package/dist/store/db.js +4 -1
- package/dist/store/db.js.map +1 -1
- package/dist/store/migrations.d.ts +7 -6
- package/dist/store/migrations.d.ts.map +1 -1
- package/dist/store/migrations.js +16 -8
- package/dist/store/migrations.js.map +1 -1
- package/dist/watch/watcher.d.ts +3 -3
- package/dist/watch/watcher.js +5 -5
- package/dist/watch/watcher.js.map +1 -1
- package/dist/write/journal.d.ts +4 -8
- package/dist/write/journal.d.ts.map +1 -1
- package/dist/write/journal.js +215 -55
- package/dist/write/journal.js.map +1 -1
- package/package.json +4 -3
package/dist/store/migrations.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* One SQLite file
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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 =
|
|
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
|
|
275
|
-
--
|
|
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;
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/store/migrations.ts"],"names":[],"mappings":"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"}
|
package/dist/watch/watcher.d.ts
CHANGED
|
@@ -9,10 +9,10 @@ export interface WatcherEvents {
|
|
|
9
9
|
onError?: (error: Error) => void;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* **
|
|
13
|
-
*
|
|
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
|
|
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.
|
package/dist/watch/watcher.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
/**
|
|
4
|
-
* **
|
|
5
|
-
*
|
|
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
|
|
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
|
|
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
|
-
//
|
|
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,
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/watch/watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/write/journal.d.ts
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import type { Store } from '../store/db.ts';
|
|
2
2
|
import { type WriteResult } from './atomic.ts';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
|
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":"
|
|
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"}
|
package/dist/write/journal.js
CHANGED
|
@@ -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(
|
|
30
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
76
|
-
|
|
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
|
-
|
|
79
|
-
// A
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
this.#
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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.
|
|
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.
|
|
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"
|