@cleocode/core 2026.11.1-canary.3 → 2026.11.1-canary.5
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/.source-stamp.json +1 -1
- package/dist/build-provenance.json +2 -2
- package/dist/docs/docs-fts.d.ts +102 -0
- package/dist/docs/docs-fts.d.ts.map +1 -0
- package/dist/docs/docs-fts.js +276 -0
- package/dist/docs/docs-fts.js.map +1 -0
- package/dist/docs/docs-ops.d.ts +13 -0
- package/dist/docs/docs-ops.d.ts.map +1 -1
- package/dist/docs/docs-ops.js +20 -3
- package/dist/docs/docs-ops.js.map +1 -1
- package/dist/docs/doctor.d.ts.map +1 -1
- package/dist/docs/doctor.js +2 -4
- package/dist/docs/doctor.js.map +1 -1
- package/dist/docs/lineage.d.ts +16 -1
- package/dist/docs/lineage.d.ts.map +1 -1
- package/dist/docs/lineage.js +73 -0
- package/dist/docs/lineage.js.map +1 -1
- package/dist/docs/modernize/apply.d.ts.map +1 -1
- package/dist/docs/modernize/apply.js +50 -5
- package/dist/docs/modernize/apply.js.map +1 -1
- package/dist/docs/modernize/guard.d.ts +3 -1
- package/dist/docs/modernize/guard.d.ts.map +1 -1
- package/dist/docs/modernize/guard.js +68 -10
- package/dist/docs/modernize/guard.js.map +1 -1
- package/dist/docs/modernize/plan.d.ts.map +1 -1
- package/dist/docs/modernize/plan.js +106 -10
- package/dist/docs/modernize/plan.js.map +1 -1
- package/dist/docs/modernize/rules.d.ts +10 -0
- package/dist/docs/modernize/rules.d.ts.map +1 -1
- package/dist/docs/modernize/rules.js +29 -0
- package/dist/docs/modernize/rules.js.map +1 -1
- package/dist/gateway-client/generated/index.d.ts +2 -2
- package/dist/gateway-client/generated/index.d.ts.map +1 -1
- package/dist/gateway-client/generated/index.js +1 -1
- package/dist/gateway-client/generated/index.js.map +1 -1
- package/dist/gateway-client/generated/namespaces.gen.d.ts +1 -0
- package/dist/gateway-client/generated/namespaces.gen.d.ts.map +1 -1
- package/dist/gateway-client/generated/namespaces.gen.js +2 -1
- package/dist/gateway-client/generated/namespaces.gen.js.map +1 -1
- package/dist/gateway-client/generated/sdk.gen.d.ts +5 -1
- package/dist/gateway-client/generated/sdk.gen.d.ts.map +1 -1
- package/dist/gateway-client/generated/sdk.gen.js +11 -0
- package/dist/gateway-client/generated/sdk.gen.js.map +1 -1
- package/dist/gateway-client/generated/types.gen.d.ts +42 -0
- package/dist/gateway-client/generated/types.gen.d.ts.map +1 -1
- package/dist/gc/runner.d.ts +2 -2
- package/dist/gc/runner.js +2 -2
- package/dist/gc/transcript.d.ts +1 -1
- package/dist/gc/transcript.js +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +13 -5
- package/dist/init.js.map +1 -1
- package/dist/memory/brain-search.d.ts +18 -0
- package/dist/memory/brain-search.d.ts.map +1 -1
- package/dist/memory/brain-search.js +119 -12
- package/dist/memory/brain-search.js.map +1 -1
- package/dist/memory/brain-stdp.d.ts +2 -2
- package/dist/memory/brain-stdp.js +2 -2
- package/dist/memory/dream-cycle.d.ts +2 -2
- package/dist/memory/dream-cycle.js +2 -2
- package/dist/memory/engine-compat.d.ts.map +1 -1
- package/dist/memory/engine-compat.js +44 -12
- package/dist/memory/engine-compat.js.map +1 -1
- package/dist/memory/llm-backend-resolver.d.ts +1 -1
- package/dist/memory/llm-backend-resolver.js +1 -1
- package/dist/memory/retrieval/log-retrieval.d.ts +9 -1
- package/dist/memory/retrieval/log-retrieval.d.ts.map +1 -1
- package/dist/memory/retrieval/log-retrieval.js +26 -8
- package/dist/memory/retrieval/log-retrieval.js.map +1 -1
- package/dist/orchestration/spawn-prompt.d.ts +17 -0
- package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
- package/dist/orchestration/spawn-prompt.js +41 -3
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/orchestration/spawn.d.ts.map +1 -1
- package/dist/orchestration/spawn.js +12 -0
- package/dist/orchestration/spawn.js.map +1 -1
- package/dist/release/cut.d.ts +13 -0
- package/dist/release/cut.d.ts.map +1 -1
- package/dist/release/cut.js +26 -4
- package/dist/release/cut.js.map +1 -1
- package/dist/selfimprove/scenario.d.ts +1 -1
- package/dist/selfimprove/scenario.js +1 -1
- package/dist/session/engine-ops.d.ts.map +1 -1
- package/dist/session/engine-ops.js +3 -0
- package/dist/session/engine-ops.js.map +1 -1
- package/dist/store/ac-binding-prune.d.ts +3 -2
- package/dist/store/ac-binding-prune.d.ts.map +1 -1
- package/dist/store/ac-binding-prune.js +4 -3
- package/dist/store/ac-binding-prune.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +61 -6
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/memory-sqlite.d.ts +16 -0
- package/dist/store/memory-sqlite.d.ts.map +1 -1
- package/dist/store/memory-sqlite.js +53 -13
- package/dist/store/memory-sqlite.js.map +1 -1
- package/dist/store/migration-manager.d.ts +32 -0
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +54 -5
- package/dist/store/migration-manager.js.map +1 -1
- package/dist/store/migration-runner.d.ts +21 -0
- package/dist/store/migration-runner.d.ts.map +1 -1
- package/dist/store/migration-runner.js +43 -1
- package/dist/store/migration-runner.js.map +1 -1
- package/dist/store/ports/domain-binding.d.ts +11 -1
- package/dist/store/ports/domain-binding.d.ts.map +1 -1
- package/dist/store/ports/domain-binding.js +32 -8
- package/dist/store/ports/domain-binding.js.map +1 -1
- package/dist/store/row-identity.d.ts +10 -0
- package/dist/store/row-identity.d.ts.map +1 -1
- package/dist/store/row-identity.js +16 -6
- package/dist/store/row-identity.js.map +1 -1
- package/dist/store/schema/memory-schema.d.ts +3 -3
- package/dist/store/schema/memory-schema.js +3 -3
- package/dist/store/schema/tasks.d.ts +1 -1
- package/dist/store/schema/tasks.d.ts.map +1 -1
- package/dist/store/schema/tasks.js +2 -0
- package/dist/store/schema/tasks.js.map +1 -1
- package/dist/store/sqlite-data-accessor.js +26 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite.d.ts +19 -0
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +64 -13
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/sync/capture.d.ts +10 -0
- package/dist/store/sync/capture.d.ts.map +1 -1
- package/dist/store/sync/capture.js +12 -0
- package/dist/store/sync/capture.js.map +1 -1
- package/dist/store/table-classification.d.ts.map +1 -1
- package/dist/store/table-classification.js +8 -0
- package/dist/store/table-classification.js.map +1 -1
- package/dist/store/twin-collapse.d.ts +12 -0
- package/dist/store/twin-collapse.d.ts.map +1 -1
- package/dist/store/twin-collapse.js +25 -0
- package/dist/store/twin-collapse.js.map +1 -1
- package/dist/task-work/index.d.ts.map +1 -1
- package/dist/task-work/index.js +3 -1
- package/dist/task-work/index.js.map +1 -1
- package/dist/tasks/ac-immutability.d.ts +21 -2
- package/dist/tasks/ac-immutability.d.ts.map +1 -1
- package/dist/tasks/ac-immutability.js +25 -0
- package/dist/tasks/ac-immutability.js.map +1 -1
- package/dist/tasks/ac-table.d.ts +15 -1
- package/dist/tasks/ac-table.d.ts.map +1 -1
- package/dist/tasks/ac-table.js +21 -0
- package/dist/tasks/ac-table.js.map +1 -1
- package/dist/tasks/add.d.ts +8 -0
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +12 -3
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/change-set.d.ts.map +1 -1
- package/dist/tasks/change-set.js +53 -7
- package/dist/tasks/change-set.js.map +1 -1
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +23 -14
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/criterion-receipt.d.ts +63 -0
- package/dist/tasks/criterion-receipt.d.ts.map +1 -0
- package/dist/tasks/criterion-receipt.js +145 -0
- package/dist/tasks/criterion-receipt.js.map +1 -0
- package/dist/tasks/done-plan.d.ts.map +1 -1
- package/dist/tasks/done-plan.js +61 -7
- package/dist/tasks/done-plan.js.map +1 -1
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +13 -5
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/req.d.ts +49 -0
- package/dist/tasks/req.d.ts.map +1 -1
- package/dist/tasks/req.js +156 -2
- package/dist/tasks/req.js.map +1 -1
- package/dist/tasks/review-verdict.d.ts +5 -4
- package/dist/tasks/review-verdict.d.ts.map +1 -1
- package/dist/tasks/review-verdict.js +23 -6
- package/dist/tasks/review-verdict.js.map +1 -1
- package/dist/tasks/verification-policy.d.ts +22 -0
- package/dist/tasks/verification-policy.d.ts.map +1 -1
- package/dist/tasks/verification-policy.js +64 -5
- package/dist/tasks/verification-policy.js.map +1 -1
- package/dist/validation/engine-ops.d.ts.map +1 -1
- package/dist/validation/engine-ops.js +9 -4
- package/dist/validation/engine-ops.js.map +1 -1
- package/package.json +12 -12
- package/templates/CLEO-INJECTION.md +1 -1
- package/templates/CLEO-REFERENCE.md +6 -2
package/dist/.source-stamp.json
CHANGED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Full-text index over the docs store (T14197).
|
|
3
|
+
*
|
|
4
|
+
* `memory find --docs` ranked every doc body per query with n-gram
|
|
5
|
+
* similarity (`searchAllProjectDocs`): about 3.5 s on a 3,312-doc store, so
|
|
6
|
+
* docs stayed an opt-in source. This index lives in the project `cleo.db`:
|
|
7
|
+
* one row per slugged text doc (the slug's current body, superseded docs
|
|
8
|
+
* included, so a match on one can surface its current doc), ranked by BM25.
|
|
9
|
+
*
|
|
10
|
+
* Two tables, rowid for rowid: `docs_fts`, a contentless FTS5 table (title
|
|
11
|
+
* and body are tokenized, not stored a second time), and `docs_fts_rows`,
|
|
12
|
+
* which names the slug and sha256 each rowid holds. FTS5's
|
|
13
|
+
* `contentless_unindexed` would keep those in one table, but dropping such a
|
|
14
|
+
* table leaves its `_content` shadow behind (SQLite 3.51 to 3.54), which can
|
|
15
|
+
* neither be dropped nor let the table be created again: a lost index could
|
|
16
|
+
* never be rebuilt.
|
|
17
|
+
*
|
|
18
|
+
* The index is derived: it holds nothing the store cannot rebuild, and both
|
|
19
|
+
* tables are classified `derived` (Gate A, never synced). {@link syncDocsFts} keeps it in
|
|
20
|
+
* step by diffing the slug → sha256 map of `attachments` against the index
|
|
21
|
+
* and re-reading only the bodies that changed. The docs mutations (add,
|
|
22
|
+
* update, supersede, remove, merge, import) call it after they succeed, and
|
|
23
|
+
* every search calls it first, so rows another writer or device added are
|
|
24
|
+
* picked up too. A missing table is created and filled from the store by the
|
|
25
|
+
* same diff.
|
|
26
|
+
*
|
|
27
|
+
* @task T14197
|
|
28
|
+
* @epic T14106
|
|
29
|
+
*/
|
|
30
|
+
/** The FTS5 table (project `cleo.db`, class `derived`). */
|
|
31
|
+
export declare const DOCS_FTS_TABLE = "docs_fts";
|
|
32
|
+
/** The slug and sha256 each `docs_fts` rowid holds (class `derived`). */
|
|
33
|
+
export declare const DOCS_FTS_ROWS_TABLE = "docs_fts_rows";
|
|
34
|
+
/** Bytes of a doc body indexed (the n-gram search read the same window). */
|
|
35
|
+
export declare const DOCS_FTS_MAX_BYTES: number;
|
|
36
|
+
/**
|
|
37
|
+
* How long a search waits for the write lock before it gives up syncing and
|
|
38
|
+
* reads the index as it is: a read never blocks behind another writer.
|
|
39
|
+
*/
|
|
40
|
+
export declare const DOCS_FTS_READ_BUSY_TIMEOUT_MS = 250;
|
|
41
|
+
/** What one {@link syncDocsFts} did. */
|
|
42
|
+
export interface DocsFtsSync {
|
|
43
|
+
/** False when this SQLite build has no FTS5 (the caller falls back). */
|
|
44
|
+
readonly available: boolean;
|
|
45
|
+
/** Docs (re)indexed. */
|
|
46
|
+
readonly indexed: number;
|
|
47
|
+
/** Index rows removed (doc gone, renamed or re-versioned). */
|
|
48
|
+
readonly removed: number;
|
|
49
|
+
/** Docs in the index afterwards. */
|
|
50
|
+
readonly total: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Bring the docs index in step with the store: index every slugged text doc
|
|
54
|
+
* whose body the index lacks or holds at another sha256, and drop rows whose
|
|
55
|
+
* slug is gone. Creates (and so rebuilds) the table when it is missing. A
|
|
56
|
+
* doc whose bytes cannot be read stays out until a later sync can read them.
|
|
57
|
+
* Throws when the store cannot be written (another writer past
|
|
58
|
+
* `busyTimeoutMs`, a read-only store); the index is then left as it was.
|
|
59
|
+
*
|
|
60
|
+
* @param projectRoot - Project root.
|
|
61
|
+
* @param opts - `busyTimeoutMs`: how long to wait for the write lock (default:
|
|
62
|
+
* the connection's own busy timeout).
|
|
63
|
+
* @returns What changed.
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const { indexed, total } = await syncDocsFts(projectRoot);
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function syncDocsFts(projectRoot: string, opts?: {
|
|
70
|
+
busyTimeoutMs?: number;
|
|
71
|
+
}): Promise<DocsFtsSync>;
|
|
72
|
+
/**
|
|
73
|
+
* An FTS5 MATCH expression for free text: each word quoted (so FTS5 syntax in
|
|
74
|
+
* the query is inert), OR-joined so BM25 ranks docs matching more words higher.
|
|
75
|
+
*
|
|
76
|
+
* @param query - The search text.
|
|
77
|
+
* @returns The expression, or null when the text has no searchable word.
|
|
78
|
+
*/
|
|
79
|
+
export declare function docsFtsMatch(query: string): string | null;
|
|
80
|
+
/**
|
|
81
|
+
* Slugs of the docs matching `query`, best BM25 rank first. Superseded docs
|
|
82
|
+
* are included: the caller resolves each to its current doc.
|
|
83
|
+
*
|
|
84
|
+
* A read never fails or blocks on the index write: the search first tries a
|
|
85
|
+
* {@link syncDocsFts} that waits at most {@link DOCS_FTS_READ_BUSY_TIMEOUT_MS}
|
|
86
|
+
* for the write lock. When that sync cannot write (another writer, a
|
|
87
|
+
* read-only store), the index is searched as it stands; when there is no
|
|
88
|
+
* index to search, or anything else fails, the result is null and the caller
|
|
89
|
+
* falls back. Never throws.
|
|
90
|
+
*
|
|
91
|
+
* @param projectRoot - Project root.
|
|
92
|
+
* @param query - The search text.
|
|
93
|
+
* @param limit - Maximum slugs.
|
|
94
|
+
* @returns The slugs, or null when there is no usable index (no FTS5, not
|
|
95
|
+
* yet built and not buildable now, or unreadable).
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* const slugs = await searchDocsFts(projectRoot, 'backup retention', 10);
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export declare function searchDocsFts(projectRoot: string, query: string, limit: number): Promise<string[] | null>;
|
|
102
|
+
//# sourceMappingURL=docs-fts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-fts.d.ts","sourceRoot":"","sources":["../../src/docs/docs-fts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAOH,2DAA2D;AAC3D,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AAEnD,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,QAAY,CAAC;AAK5C;;;GAGG;AACH,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAEjD,wCAAwC;AACxC,MAAM,WAAW,WAAW;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,wBAAwB;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AA4ED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC,OAAO,CAAC,WAAW,CAAC,CAWtB;AAmFD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUzD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAsB1B"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Full-text index over the docs store (T14197).
|
|
3
|
+
*
|
|
4
|
+
* `memory find --docs` ranked every doc body per query with n-gram
|
|
5
|
+
* similarity (`searchAllProjectDocs`): about 3.5 s on a 3,312-doc store, so
|
|
6
|
+
* docs stayed an opt-in source. This index lives in the project `cleo.db`:
|
|
7
|
+
* one row per slugged text doc (the slug's current body, superseded docs
|
|
8
|
+
* included, so a match on one can surface its current doc), ranked by BM25.
|
|
9
|
+
*
|
|
10
|
+
* Two tables, rowid for rowid: `docs_fts`, a contentless FTS5 table (title
|
|
11
|
+
* and body are tokenized, not stored a second time), and `docs_fts_rows`,
|
|
12
|
+
* which names the slug and sha256 each rowid holds. FTS5's
|
|
13
|
+
* `contentless_unindexed` would keep those in one table, but dropping such a
|
|
14
|
+
* table leaves its `_content` shadow behind (SQLite 3.51 to 3.54), which can
|
|
15
|
+
* neither be dropped nor let the table be created again: a lost index could
|
|
16
|
+
* never be rebuilt.
|
|
17
|
+
*
|
|
18
|
+
* The index is derived: it holds nothing the store cannot rebuild, and both
|
|
19
|
+
* tables are classified `derived` (Gate A, never synced). {@link syncDocsFts} keeps it in
|
|
20
|
+
* step by diffing the slug → sha256 map of `attachments` against the index
|
|
21
|
+
* and re-reading only the bodies that changed. The docs mutations (add,
|
|
22
|
+
* update, supersede, remove, merge, import) call it after they succeed, and
|
|
23
|
+
* every search calls it first, so rows another writer or device added are
|
|
24
|
+
* picked up too. A missing table is created and filled from the store by the
|
|
25
|
+
* same diff.
|
|
26
|
+
*
|
|
27
|
+
* @task T14197
|
|
28
|
+
* @epic T14106
|
|
29
|
+
*/
|
|
30
|
+
import { isNotNull } from 'drizzle-orm';
|
|
31
|
+
import { bindTasksDomain } from '../store/sqlite.js';
|
|
32
|
+
import { attachments } from '../store/tasks-schema.js';
|
|
33
|
+
/** The FTS5 table (project `cleo.db`, class `derived`). */
|
|
34
|
+
export const DOCS_FTS_TABLE = 'docs_fts';
|
|
35
|
+
/** The slug and sha256 each `docs_fts` rowid holds (class `derived`). */
|
|
36
|
+
export const DOCS_FTS_ROWS_TABLE = 'docs_fts_rows';
|
|
37
|
+
/** Bytes of a doc body indexed (the n-gram search read the same window). */
|
|
38
|
+
export const DOCS_FTS_MAX_BYTES = 64 * 1024;
|
|
39
|
+
/** BM25 column weights: the title outweighs the body. */
|
|
40
|
+
const BM25_WEIGHTS = '4.0, 1.0';
|
|
41
|
+
/**
|
|
42
|
+
* How long a search waits for the write lock before it gives up syncing and
|
|
43
|
+
* reads the index as it is: a read never blocks behind another writer.
|
|
44
|
+
*/
|
|
45
|
+
export const DOCS_FTS_READ_BUSY_TIMEOUT_MS = 250;
|
|
46
|
+
/** Whether an attachment's JSON describes text the index should read. */
|
|
47
|
+
function isTextAttachment(attachmentJson) {
|
|
48
|
+
let parsed;
|
|
49
|
+
try {
|
|
50
|
+
parsed = JSON.parse(attachmentJson);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
const mime = parsed.kind === 'blob'
|
|
56
|
+
? parsed.mime
|
|
57
|
+
: parsed.kind === 'local-file'
|
|
58
|
+
? (parsed.mime ?? 'text/plain')
|
|
59
|
+
: null;
|
|
60
|
+
if (typeof mime !== 'string')
|
|
61
|
+
return false;
|
|
62
|
+
return (mime.startsWith('text/') ||
|
|
63
|
+
mime === 'application/json' ||
|
|
64
|
+
mime === 'application/xml' ||
|
|
65
|
+
mime === 'application/yaml' ||
|
|
66
|
+
mime === 'application/x-yaml');
|
|
67
|
+
}
|
|
68
|
+
/** Whether a table exists. */
|
|
69
|
+
function tableExists(native, name) {
|
|
70
|
+
return (native
|
|
71
|
+
.prepare("SELECT 1 AS found FROM sqlite_master WHERE type = 'table' AND name = ?")
|
|
72
|
+
.get(name) !== undefined);
|
|
73
|
+
}
|
|
74
|
+
/** Whether both index tables exist. */
|
|
75
|
+
function indexExists(native) {
|
|
76
|
+
return tableExists(native, DOCS_FTS_TABLE) && tableExists(native, DOCS_FTS_ROWS_TABLE);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create the index when either table is missing, dropping the other so the
|
|
80
|
+
* pair always starts empty together; false when FTS5 is not compiled in or
|
|
81
|
+
* the store cannot be written now.
|
|
82
|
+
*/
|
|
83
|
+
function ensureIndex(native) {
|
|
84
|
+
if (indexExists(native))
|
|
85
|
+
return true;
|
|
86
|
+
native.exec('SAVEPOINT docs_fts_create');
|
|
87
|
+
try {
|
|
88
|
+
native.exec(`DROP TABLE IF EXISTS ${DOCS_FTS_TABLE}`);
|
|
89
|
+
native.exec(`DROP TABLE IF EXISTS ${DOCS_FTS_ROWS_TABLE}`);
|
|
90
|
+
// Literal names: Gate A pins this runtime DDL (table-classification-gate.test.ts).
|
|
91
|
+
native.exec("CREATE VIRTUAL TABLE IF NOT EXISTS docs_fts USING fts5(title, body, content='', " +
|
|
92
|
+
"contentless_delete=1, tokenize='porter unicode61')");
|
|
93
|
+
native.exec('CREATE TABLE IF NOT EXISTS docs_fts_rows (' +
|
|
94
|
+
'rowid INTEGER PRIMARY KEY, slug TEXT NOT NULL, sha256 TEXT NOT NULL)');
|
|
95
|
+
native.exec('RELEASE docs_fts_create');
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
native.exec('ROLLBACK TO docs_fts_create');
|
|
100
|
+
native.exec('RELEASE docs_fts_create');
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Bring the docs index in step with the store: index every slugged text doc
|
|
106
|
+
* whose body the index lacks or holds at another sha256, and drop rows whose
|
|
107
|
+
* slug is gone. Creates (and so rebuilds) the table when it is missing. A
|
|
108
|
+
* doc whose bytes cannot be read stays out until a later sync can read them.
|
|
109
|
+
* Throws when the store cannot be written (another writer past
|
|
110
|
+
* `busyTimeoutMs`, a read-only store); the index is then left as it was.
|
|
111
|
+
*
|
|
112
|
+
* @param projectRoot - Project root.
|
|
113
|
+
* @param opts - `busyTimeoutMs`: how long to wait for the write lock (default:
|
|
114
|
+
* the connection's own busy timeout).
|
|
115
|
+
* @returns What changed.
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* const { indexed, total } = await syncDocsFts(projectRoot);
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
export async function syncDocsFts(projectRoot, opts = {}) {
|
|
122
|
+
const { native } = await bindTasksDomain(projectRoot);
|
|
123
|
+
if (opts.busyTimeoutMs === undefined)
|
|
124
|
+
return syncWith(projectRoot, native);
|
|
125
|
+
const prior = native.prepare('PRAGMA busy_timeout').get()
|
|
126
|
+
?.timeout;
|
|
127
|
+
native.exec(`PRAGMA busy_timeout = ${Math.max(0, Math.floor(opts.busyTimeoutMs))}`);
|
|
128
|
+
try {
|
|
129
|
+
return await syncWith(projectRoot, native);
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
if (typeof prior === 'number')
|
|
133
|
+
native.exec(`PRAGMA busy_timeout = ${prior}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** {@link syncDocsFts} on a bound connection. */
|
|
137
|
+
async function syncWith(projectRoot, native) {
|
|
138
|
+
const { db } = await bindTasksDomain(projectRoot);
|
|
139
|
+
if (!ensureIndex(native))
|
|
140
|
+
return { available: false, indexed: 0, removed: 0, total: 0 };
|
|
141
|
+
const rows = await db
|
|
142
|
+
.select({
|
|
143
|
+
slug: attachments.slug,
|
|
144
|
+
sha256: attachments.sha256,
|
|
145
|
+
summary: attachments.summary,
|
|
146
|
+
attachmentJson: attachments.attachmentJson,
|
|
147
|
+
})
|
|
148
|
+
.from(attachments)
|
|
149
|
+
.where(isNotNull(attachments.slug))
|
|
150
|
+
.all();
|
|
151
|
+
const store = new Map();
|
|
152
|
+
for (const row of rows) {
|
|
153
|
+
if (!row.slug || !isTextAttachment(row.attachmentJson))
|
|
154
|
+
continue;
|
|
155
|
+
store.set(row.slug, {
|
|
156
|
+
slug: row.slug,
|
|
157
|
+
sha256: row.sha256,
|
|
158
|
+
title: [row.summary ?? '', row.slug.replace(/[-_]+/g, ' ')].join(' ').trim(),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
const indexedRows = native
|
|
162
|
+
.prepare(`SELECT rowid, slug, sha256 FROM ${DOCS_FTS_ROWS_TABLE}`)
|
|
163
|
+
.all();
|
|
164
|
+
const current = new Set();
|
|
165
|
+
const stale = [];
|
|
166
|
+
for (const row of indexedRows) {
|
|
167
|
+
if (store.get(row.slug)?.sha256 === row.sha256 && !current.has(row.slug))
|
|
168
|
+
current.add(row.slug);
|
|
169
|
+
else
|
|
170
|
+
stale.push(row.rowid);
|
|
171
|
+
}
|
|
172
|
+
const missing = [...store.values()].filter((doc) => !current.has(doc.slug));
|
|
173
|
+
if (stale.length === 0 && missing.length === 0)
|
|
174
|
+
return { available: true, indexed: 0, removed: 0, total: current.size };
|
|
175
|
+
const bodies = [];
|
|
176
|
+
if (missing.length > 0) {
|
|
177
|
+
const { createAttachmentStore } = await import('../store/attachment-store.js');
|
|
178
|
+
const attachmentStore = createAttachmentStore();
|
|
179
|
+
for (const doc of missing) {
|
|
180
|
+
const fetched = await attachmentStore.get(doc.sha256, projectRoot).catch(() => null);
|
|
181
|
+
if (!fetched)
|
|
182
|
+
continue;
|
|
183
|
+
bodies.push({ doc, body: fetched.bytes.toString('utf8').slice(0, DOCS_FTS_MAX_BYTES) });
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
native.exec('SAVEPOINT docs_fts_sync');
|
|
187
|
+
try {
|
|
188
|
+
const removeText = native.prepare(`DELETE FROM ${DOCS_FTS_TABLE} WHERE rowid = ?`);
|
|
189
|
+
const removeRow = native.prepare(`DELETE FROM ${DOCS_FTS_ROWS_TABLE} WHERE rowid = ?`);
|
|
190
|
+
for (const rowid of stale) {
|
|
191
|
+
removeText.run(rowid);
|
|
192
|
+
removeRow.run(rowid);
|
|
193
|
+
}
|
|
194
|
+
const insertRow = native.prepare(`INSERT INTO ${DOCS_FTS_ROWS_TABLE}(slug, sha256) VALUES (?, ?)`);
|
|
195
|
+
const insertText = native.prepare(`INSERT INTO ${DOCS_FTS_TABLE}(rowid, title, body) VALUES (?, ?, ?)`);
|
|
196
|
+
for (const { doc, body } of bodies) {
|
|
197
|
+
const { lastInsertRowid } = insertRow.run(doc.slug, doc.sha256);
|
|
198
|
+
insertText.run(lastInsertRowid, doc.title, body);
|
|
199
|
+
}
|
|
200
|
+
native.exec('RELEASE docs_fts_sync');
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
native.exec('ROLLBACK TO docs_fts_sync');
|
|
204
|
+
native.exec('RELEASE docs_fts_sync');
|
|
205
|
+
throw err;
|
|
206
|
+
}
|
|
207
|
+
return {
|
|
208
|
+
available: true,
|
|
209
|
+
indexed: bodies.length,
|
|
210
|
+
removed: stale.length,
|
|
211
|
+
total: current.size + bodies.length,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* An FTS5 MATCH expression for free text: each word quoted (so FTS5 syntax in
|
|
216
|
+
* the query is inert), OR-joined so BM25 ranks docs matching more words higher.
|
|
217
|
+
*
|
|
218
|
+
* @param query - The search text.
|
|
219
|
+
* @returns The expression, or null when the text has no searchable word.
|
|
220
|
+
*/
|
|
221
|
+
export function docsFtsMatch(query) {
|
|
222
|
+
const words = [
|
|
223
|
+
...new Set(query
|
|
224
|
+
.toLowerCase()
|
|
225
|
+
.split(/[^\p{L}\p{N}]+/u)
|
|
226
|
+
.filter((w) => w.length >= 2)),
|
|
227
|
+
];
|
|
228
|
+
return words.length === 0 ? null : words.map((w) => `"${w}"`).join(' OR ');
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Slugs of the docs matching `query`, best BM25 rank first. Superseded docs
|
|
232
|
+
* are included: the caller resolves each to its current doc.
|
|
233
|
+
*
|
|
234
|
+
* A read never fails or blocks on the index write: the search first tries a
|
|
235
|
+
* {@link syncDocsFts} that waits at most {@link DOCS_FTS_READ_BUSY_TIMEOUT_MS}
|
|
236
|
+
* for the write lock. When that sync cannot write (another writer, a
|
|
237
|
+
* read-only store), the index is searched as it stands; when there is no
|
|
238
|
+
* index to search, or anything else fails, the result is null and the caller
|
|
239
|
+
* falls back. Never throws.
|
|
240
|
+
*
|
|
241
|
+
* @param projectRoot - Project root.
|
|
242
|
+
* @param query - The search text.
|
|
243
|
+
* @param limit - Maximum slugs.
|
|
244
|
+
* @returns The slugs, or null when there is no usable index (no FTS5, not
|
|
245
|
+
* yet built and not buildable now, or unreadable).
|
|
246
|
+
* @example
|
|
247
|
+
* ```ts
|
|
248
|
+
* const slugs = await searchDocsFts(projectRoot, 'backup retention', 10);
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
export async function searchDocsFts(projectRoot, query, limit) {
|
|
252
|
+
try {
|
|
253
|
+
const sync = await syncDocsFts(projectRoot, {
|
|
254
|
+
busyTimeoutMs: DOCS_FTS_READ_BUSY_TIMEOUT_MS,
|
|
255
|
+
}).catch(() => null);
|
|
256
|
+
if (sync !== null && !sync.available)
|
|
257
|
+
return null;
|
|
258
|
+
const { native } = await bindTasksDomain(projectRoot);
|
|
259
|
+
// The sync could not write: search the index as it stands, if there is one.
|
|
260
|
+
if (!indexExists(native))
|
|
261
|
+
return null;
|
|
262
|
+
const match = docsFtsMatch(query);
|
|
263
|
+
if (match === null || limit <= 0)
|
|
264
|
+
return [];
|
|
265
|
+
const rows = native
|
|
266
|
+
.prepare(`SELECT r.slug FROM ${DOCS_FTS_TABLE} JOIN ${DOCS_FTS_ROWS_TABLE} r ` +
|
|
267
|
+
`ON r.rowid = ${DOCS_FTS_TABLE}.rowid WHERE ${DOCS_FTS_TABLE} MATCH ? ` +
|
|
268
|
+
`ORDER BY bm25(${DOCS_FTS_TABLE}, ${BM25_WEIGHTS}) LIMIT ?`)
|
|
269
|
+
.all(match, limit);
|
|
270
|
+
return rows.map((row) => row.slug);
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=docs-fts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-fts.js","sourceRoot":"","sources":["../../src/docs/docs-fts.ts"],"names":[],"mappings":"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"}
|
package/dist/docs/docs-ops.d.ts
CHANGED
|
@@ -736,4 +736,17 @@ export declare function statusDocs(opts?: {
|
|
|
736
736
|
projectRoot?: string;
|
|
737
737
|
checkoutRoot?: string;
|
|
738
738
|
}): Promise<DocsStatusResult>;
|
|
739
|
+
/**
|
|
740
|
+
* Resolve a `docs_publications` path to the file it names (T14195). An
|
|
741
|
+
* absolute path is taken as-is; a relative path that leaves the project root
|
|
742
|
+
* (a legacy row such as `../../Library/…/worktrees/<hash>/<id>/docs/x.md`) was
|
|
743
|
+
* recorded against the project root, so it resolves there; any other relative
|
|
744
|
+
* path resolves in the invoking checkout, whose mirrors are read (T14188).
|
|
745
|
+
*
|
|
746
|
+
* @param projectRoot - Project root the ledger rows were recorded against.
|
|
747
|
+
* @param checkoutRoot - Checkout whose mirrors are read (a worktree or the root).
|
|
748
|
+
* @param publishedPath - The row's `publishedPath`.
|
|
749
|
+
* @returns Absolute path of the mirror file.
|
|
750
|
+
*/
|
|
751
|
+
export declare function resolvePublishedMirror(projectRoot: string, checkoutRoot: string, publishedPath: string): string;
|
|
739
752
|
//# sourceMappingURL=docs-ops.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-ops.d.ts","sourceRoot":"","sources":["../../src/docs/docs-ops.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"docs-ops.d.ts","sourceRoot":"","sources":["../../src/docs/docs-ops.ts"],"names":[],"mappings":"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"}
|
package/dist/docs/docs-ops.js
CHANGED
|
@@ -1199,9 +1199,7 @@ export async function statusDocs(opts) {
|
|
|
1199
1199
|
}
|
|
1200
1200
|
const items = [];
|
|
1201
1201
|
for (const row of ledger) {
|
|
1202
|
-
const filePath =
|
|
1203
|
-
? row.publishedPath
|
|
1204
|
-
: resolvePath(checkout, row.publishedPath);
|
|
1202
|
+
const filePath = resolvePublishedMirror(root, checkout, row.publishedPath);
|
|
1205
1203
|
const blobSha = await getBlobSha(row.ownerId, row.blobName, row.lastBlobSha);
|
|
1206
1204
|
let fileSha = null;
|
|
1207
1205
|
let exists = false;
|
|
@@ -1259,6 +1257,25 @@ export async function statusDocs(opts) {
|
|
|
1259
1257
|
allInSync: items.every((i) => i.drift === 'in-sync' || i.drift === 'pending-merge'),
|
|
1260
1258
|
};
|
|
1261
1259
|
}
|
|
1260
|
+
/**
|
|
1261
|
+
* Resolve a `docs_publications` path to the file it names (T14195). An
|
|
1262
|
+
* absolute path is taken as-is; a relative path that leaves the project root
|
|
1263
|
+
* (a legacy row such as `../../Library/…/worktrees/<hash>/<id>/docs/x.md`) was
|
|
1264
|
+
* recorded against the project root, so it resolves there; any other relative
|
|
1265
|
+
* path resolves in the invoking checkout, whose mirrors are read (T14188).
|
|
1266
|
+
*
|
|
1267
|
+
* @param projectRoot - Project root the ledger rows were recorded against.
|
|
1268
|
+
* @param checkoutRoot - Checkout whose mirrors are read (a worktree or the root).
|
|
1269
|
+
* @param publishedPath - The row's `publishedPath`.
|
|
1270
|
+
* @returns Absolute path of the mirror file.
|
|
1271
|
+
*/
|
|
1272
|
+
export function resolvePublishedMirror(projectRoot, checkoutRoot, publishedPath) {
|
|
1273
|
+
if (isAbsolute(publishedPath))
|
|
1274
|
+
return publishedPath;
|
|
1275
|
+
const rel = relative(projectRoot, resolvePath(projectRoot, publishedPath));
|
|
1276
|
+
const leavesRoot = rel.startsWith('..') || isAbsolute(rel);
|
|
1277
|
+
return resolvePath(leavesRoot ? projectRoot : checkoutRoot, publishedPath);
|
|
1278
|
+
}
|
|
1262
1279
|
/**
|
|
1263
1280
|
* Find a mirror that is missing from this checkout only because the checkout
|
|
1264
1281
|
* has not pulled it (T14135): tracked on the default branch (its bytes
|