@cleocode/core 2026.6.7 → 2026.6.9
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/db/index.d.ts +5 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +5 -1
- package/dist/db/index.js.map +1 -1
- package/dist/docs/build-provenance-graph.d.ts +12 -0
- package/dist/docs/build-provenance-graph.d.ts.map +1 -1
- package/dist/docs/build-provenance-graph.js +52 -0
- package/dist/docs/build-provenance-graph.js.map +1 -1
- package/dist/docs/display-alias.d.ts +97 -0
- package/dist/docs/display-alias.d.ts.map +1 -0
- package/dist/docs/display-alias.js +136 -0
- package/dist/docs/display-alias.js.map +1 -0
- package/dist/docs/docs-read-model.d.ts +47 -0
- package/dist/docs/docs-read-model.d.ts.map +1 -1
- package/dist/docs/docs-read-model.js +40 -2
- package/dist/docs/docs-read-model.js.map +1 -1
- package/dist/docs/export-document.js +929 -732
- package/dist/docs/export-document.js.map +3 -3
- package/dist/docs/index.d.ts +6 -0
- package/dist/docs/index.d.ts.map +1 -1
- package/dist/docs/index.js +3 -0
- package/dist/docs/index.js.map +1 -1
- package/dist/docs/numbering.d.ts +29 -0
- package/dist/docs/numbering.d.ts.map +1 -1
- package/dist/docs/numbering.js +41 -0
- package/dist/docs/numbering.js.map +1 -1
- package/dist/docs/read-doc.d.ts +60 -0
- package/dist/docs/read-doc.d.ts.map +1 -0
- package/dist/docs/read-doc.js +188 -0
- package/dist/docs/read-doc.js.map +1 -0
- package/dist/docs/wikilinks.d.ts +119 -0
- package/dist/docs/wikilinks.d.ts.map +1 -0
- package/dist/docs/wikilinks.js +217 -0
- package/dist/docs/wikilinks.js.map +1 -0
- package/dist/internal.d.ts +3 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -1
- package/dist/internal.js.map +1 -1
- package/dist/llm/plugin-facade.js +973 -778
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/store/attachment-store.d.ts +5 -0
- package/dist/store/attachment-store.d.ts.map +1 -1
- package/dist/store/attachment-store.js +7 -1
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts +83 -0
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +135 -6
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/abort-events.d.ts +116 -0
- package/dist/store/exodus/abort-events.d.ts.map +1 -0
- package/dist/store/exodus/abort-events.js +130 -0
- package/dist/store/exodus/abort-events.js.map +1 -0
- package/dist/store/exodus/index.d.ts +1 -0
- package/dist/store/exodus/index.d.ts.map +1 -1
- package/dist/store/exodus/index.js +1 -0
- package/dist/store/exodus/index.js.map +1 -1
- package/dist/store/repair-malformed-dbs.d.ts +87 -0
- package/dist/store/repair-malformed-dbs.d.ts.map +1 -0
- package/dist/store/repair-malformed-dbs.js +188 -0
- package/dist/store/repair-malformed-dbs.js.map +1 -0
- package/dist/store/schema/attachments.d.ts +149 -0
- package/dist/store/schema/attachments.d.ts.map +1 -1
- package/dist/store/schema/attachments.js +93 -0
- package/dist/store/schema/attachments.js.map +1 -1
- package/migrations/drizzle-tasks/20260605000001_t11826-docs-wikilinks/migration.sql +110 -0
- package/migrations/drizzle-tasks/20260606000001_t11875-attachments-display-alias/migration.sql +46 -0
- package/package.json +12 -12
package/dist/db/index.d.ts
CHANGED
|
@@ -16,6 +16,9 @@
|
|
|
16
16
|
* - {@link resolveDualScopeDbPath} — resolve the absolute DB file path.
|
|
17
17
|
* - {@link insertIdempotent} — retry-safe insert (ON CONFLICT DO NOTHING).
|
|
18
18
|
* - {@link upsertIdempotent} — retry-safe upsert (ON CONFLICT DO UPDATE).
|
|
19
|
+
* - {@link assertWriteDurable} — guard a mutation path against an aborted
|
|
20
|
+
* exodus-on-open (T11828 · DHQ-059).
|
|
21
|
+
* - {@link ExodusAbortWriteUnsafeError} — thrown by `assertWriteDurable`.
|
|
19
22
|
* - {@link _resetDualScopeDbCache} — test helper: clear singleton cache.
|
|
20
23
|
*
|
|
21
24
|
* ## Usage
|
|
@@ -32,5 +35,6 @@
|
|
|
32
35
|
* @epic T11247 (E4)
|
|
33
36
|
* @saga T11242 (SG-DB-SUBSTRATE-V2)
|
|
34
37
|
*/
|
|
35
|
-
export { _resetDualScopeDbCache, type CleoGlobalDb, type CleoProjectDb, type DualScope, type DualScopeDbHandle, insertIdempotent, openDualScopeDb, resolveDualScopeDbPath, upsertIdempotent, } from '../store/dual-scope-db.js';
|
|
38
|
+
export { _resetDualScopeDbCache, assertWriteDurable, type CleoGlobalDb, type CleoProjectDb, type DualScope, type DualScopeDbHandle, ExodusAbortWriteUnsafeError, insertIdempotent, openDualScopeDb, resolveDualScopeDbPath, upsertIdempotent, } from '../store/dual-scope-db.js';
|
|
39
|
+
export { type ExodusAbortDetail, exodusAbortEvents } from '../store/exodus/abort-events.js';
|
|
36
40
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/db/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,2BAA2B,EAC3B,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC"}
|
package/dist/db/index.js
CHANGED
|
@@ -16,6 +16,9 @@
|
|
|
16
16
|
* - {@link resolveDualScopeDbPath} — resolve the absolute DB file path.
|
|
17
17
|
* - {@link insertIdempotent} — retry-safe insert (ON CONFLICT DO NOTHING).
|
|
18
18
|
* - {@link upsertIdempotent} — retry-safe upsert (ON CONFLICT DO UPDATE).
|
|
19
|
+
* - {@link assertWriteDurable} — guard a mutation path against an aborted
|
|
20
|
+
* exodus-on-open (T11828 · DHQ-059).
|
|
21
|
+
* - {@link ExodusAbortWriteUnsafeError} — thrown by `assertWriteDurable`.
|
|
19
22
|
* - {@link _resetDualScopeDbCache} — test helper: clear singleton cache.
|
|
20
23
|
*
|
|
21
24
|
* ## Usage
|
|
@@ -32,5 +35,6 @@
|
|
|
32
35
|
* @epic T11247 (E4)
|
|
33
36
|
* @saga T11242 (SG-DB-SUBSTRATE-V2)
|
|
34
37
|
*/
|
|
35
|
-
export { _resetDualScopeDbCache, insertIdempotent, openDualScopeDb, resolveDualScopeDbPath, upsertIdempotent, } from '../store/dual-scope-db.js';
|
|
38
|
+
export { _resetDualScopeDbCache, assertWriteDurable, ExodusAbortWriteUnsafeError, insertIdempotent, openDualScopeDb, resolveDualScopeDbPath, upsertIdempotent, } from '../store/dual-scope-db.js';
|
|
39
|
+
export { exodusAbortEvents } from '../store/exodus/abort-events.js';
|
|
36
40
|
//# sourceMappingURL=index.js.map
|
package/dist/db/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAKlB,2BAA2B,EAC3B,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAA0B,iBAAiB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -45,6 +45,18 @@ export interface BuildDocProvenanceGraphOptions {
|
|
|
45
45
|
* Project root for DB resolution. Defaults to {@link getProjectRoot}().
|
|
46
46
|
*/
|
|
47
47
|
readonly projectRoot?: string;
|
|
48
|
+
/**
|
|
49
|
+
* When `true`, hydrate the BFS result with the persisted `docs_wikilinks`
|
|
50
|
+
* backlink edges (T11826) incident to the visited doc nodes — adding
|
|
51
|
+
* `shares-topic` doc↔doc edges (which the on-the-fly BFS does not compute)
|
|
52
|
+
* plus any persisted supersedes / related-task backlinks not already present.
|
|
53
|
+
* The persisted edge table is the Obsidian-grade graph; this folds it into
|
|
54
|
+
* the same envelope without a second query path.
|
|
55
|
+
*
|
|
56
|
+
* @default false
|
|
57
|
+
* @task T11826
|
|
58
|
+
*/
|
|
59
|
+
readonly hydrateWikilinks?: boolean;
|
|
48
60
|
}
|
|
49
61
|
/**
|
|
50
62
|
* Error raised when {@link buildDocProvenanceGraph}'s root identifier cannot
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-provenance-graph.d.ts","sourceRoot":"","sources":["../../src/docs/build-provenance-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAEV,qBAAqB,EAOtB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"build-provenance-graph.d.ts","sourceRoot":"","sources":["../../src/docs/build-provenance-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAEV,qBAAqB,EAOtB,MAAM,qBAAqB,CAAC;AAO7B;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;;;;GAKG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;gBAC3C,IAAI,EAAE,MAAM;CAMzB;AAmBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,qBAAqB,CAAC,CA8IhC;AA8DD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAa/E"}
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import { and, eq, inArray, or, sql } from 'drizzle-orm';
|
|
26
26
|
import { getProjectRoot } from '../paths.js';
|
|
27
|
+
import { docsWikilinks } from '../store/schema/attachments.js';
|
|
27
28
|
import { getDb } from '../store/sqlite.js';
|
|
28
29
|
import { attachmentRefs, attachments } from '../store/tasks-schema.js';
|
|
29
30
|
/**
|
|
@@ -174,6 +175,9 @@ export async function buildDocProvenanceGraph(options) {
|
|
|
174
175
|
}
|
|
175
176
|
frontier = nextFrontier;
|
|
176
177
|
}
|
|
178
|
+
if (options.hydrateWikilinks) {
|
|
179
|
+
await hydrateFromWikilinks(db, nodes, edges);
|
|
180
|
+
}
|
|
177
181
|
return {
|
|
178
182
|
nodes,
|
|
179
183
|
edges,
|
|
@@ -181,6 +185,54 @@ export async function buildDocProvenanceGraph(options) {
|
|
|
181
185
|
totalEdges: edges.length,
|
|
182
186
|
};
|
|
183
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Fold the persisted `docs_wikilinks` backlink edges (T11826) into an
|
|
190
|
+
* already-built provenance graph.
|
|
191
|
+
*
|
|
192
|
+
* For every doc node currently in the graph, pull its incident wikilink edges
|
|
193
|
+
* (both directions) and append any that connect to another doc node already in
|
|
194
|
+
* the graph and are not already present. This surfaces `shares-topic` doc↔doc
|
|
195
|
+
* edges — which the on-the-fly BFS does not compute — without re-deriving the
|
|
196
|
+
* graph. Edges to nodes outside the visited set are skipped so the BFS depth
|
|
197
|
+
* bound is respected.
|
|
198
|
+
*
|
|
199
|
+
* @internal
|
|
200
|
+
* @task T11826
|
|
201
|
+
*/
|
|
202
|
+
async function hydrateFromWikilinks(db, nodes, edges) {
|
|
203
|
+
const docSlugs = new Set(nodes.filter((n) => n.kind === 'doc').map((n) => n.id));
|
|
204
|
+
if (docSlugs.size === 0)
|
|
205
|
+
return;
|
|
206
|
+
const rows = await db
|
|
207
|
+
.select()
|
|
208
|
+
.from(docsWikilinks)
|
|
209
|
+
.where(or(inArray(docsWikilinks.fromSlug, [...docSlugs]), inArray(docsWikilinks.toSlug, [...docSlugs])))
|
|
210
|
+
.all();
|
|
211
|
+
// Dedupe against existing edges by (relation, from, to).
|
|
212
|
+
const existing = new Set(edges.map((e) => `${e.relation}|${e.from}|${e.to}`));
|
|
213
|
+
for (const row of rows) {
|
|
214
|
+
// Only fold edges whose endpoints are both already visited doc nodes —
|
|
215
|
+
// related-task edges are already emitted by the BFS, and topic links to
|
|
216
|
+
// unvisited docs would breach the depth bound.
|
|
217
|
+
if (row.relation === 'related-task')
|
|
218
|
+
continue;
|
|
219
|
+
if (!docSlugs.has(row.fromSlug) || !docSlugs.has(row.toSlug))
|
|
220
|
+
continue;
|
|
221
|
+
const relation = row.relation === 'topic' ? 'shares-topic' : row.relation;
|
|
222
|
+
const key = `${relation}|${row.fromSlug}|${row.toSlug}`;
|
|
223
|
+
if (existing.has(key))
|
|
224
|
+
continue;
|
|
225
|
+
existing.add(key);
|
|
226
|
+
edges.push({
|
|
227
|
+
relation,
|
|
228
|
+
from: row.fromSlug,
|
|
229
|
+
fromKind: 'doc',
|
|
230
|
+
to: row.toSlug,
|
|
231
|
+
toKind: 'doc',
|
|
232
|
+
addedAt: row.derivedAt,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
184
236
|
/**
|
|
185
237
|
* Render a {@link DocProvenanceResponse} as a Graphviz DOT graph.
|
|
186
238
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-provenance-graph.js","sourceRoot":"","sources":["../../src/docs/build-provenance-graph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"build-provenance-graph.js","sourceRoot":"","sources":["../../src/docs/build-provenance-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set / clear a doc's explicit DISPLAY ALIAS number — decoupled from the slug.
|
|
3
|
+
*
|
|
4
|
+
* ## Why this module exists
|
|
5
|
+
*
|
|
6
|
+
* Under the ratified slug-primary model (saga T11778, ADR reconcile T11676) the
|
|
7
|
+
* kebab `slug` is the canonical handle and the rendered number (e.g. ADR "051")
|
|
8
|
+
* is a DISPLAY ALIAS only. Until T11875 that number was DERIVED by parsing the
|
|
9
|
+
* digits out of the slug string (`adr-051-*` → 051) — so three DISTINCT ADRs
|
|
10
|
+
* that all slug as `adr-051-*` rendered the same "051" with no way to
|
|
11
|
+
* disambiguate. The collision is unresolvable in a slug-primary world because
|
|
12
|
+
* renumbering a slug would break the canonical handle.
|
|
13
|
+
*
|
|
14
|
+
* T11875 adds a real `attachments.display_alias` INTEGER column. This module is
|
|
15
|
+
* the SDK chokepoint that sets it (and validates uniqueness among `type='adr'`
|
|
16
|
+
* docs). {@link import('./numbering.js').resolveDisplayNumber} prefers the
|
|
17
|
+
* stored alias when present and falls back to the slug-derived number when null.
|
|
18
|
+
*
|
|
19
|
+
* The transaction lives in CORE (not the CLI / dispatch layer) because:
|
|
20
|
+
* 1. The CLI boundary gate forbids business logic > 30 LOC in CLI commands.
|
|
21
|
+
* 2. The DB-open chokepoint (`openCleoDb` / `getNativeTasksDb`) is core-owned
|
|
22
|
+
* per ADR-068; raw `DatabaseSync` opens outside `store/` are rejected.
|
|
23
|
+
* 3. Future callers (HTTP dispatch, MCP, BRAIN bridges) re-use the same
|
|
24
|
+
* entry point without re-implementing the all-or-nothing uniqueness check.
|
|
25
|
+
*
|
|
26
|
+
* @task T11875 (Epic T11781 / Saga T11778)
|
|
27
|
+
* @adr ADR-078 — Docs Provenance Graph (display-alias half of T11676 reconcile)
|
|
28
|
+
*/
|
|
29
|
+
/** Stable error code surfaced when the target slug does not resolve to a row. */
|
|
30
|
+
export declare const SET_ALIAS_NOT_FOUND_CODE = "E_NOT_FOUND";
|
|
31
|
+
/** Stable error code surfaced when the requested number is already taken. */
|
|
32
|
+
export declare const SET_ALIAS_TAKEN_CODE = "E_ALIAS_TAKEN";
|
|
33
|
+
/** Stable error code surfaced when the requested number is not a positive int. */
|
|
34
|
+
export declare const SET_ALIAS_INVALID_CODE = "E_VALIDATION";
|
|
35
|
+
/**
|
|
36
|
+
* Input to {@link setDisplayAlias} (ADR-057 uniform params shape).
|
|
37
|
+
*/
|
|
38
|
+
export interface SetDisplayAliasParams {
|
|
39
|
+
/** Slug of the doc to alias (must resolve to an existing `attachments` row). */
|
|
40
|
+
slug: string;
|
|
41
|
+
/**
|
|
42
|
+
* The display-alias number to assign. Must be a positive integer. Pass
|
|
43
|
+
* `null` to CLEAR an existing alias (revert to slug-derived rendering).
|
|
44
|
+
*/
|
|
45
|
+
displayAlias: number | null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Result returned by {@link setDisplayAlias}.
|
|
49
|
+
*/
|
|
50
|
+
export interface SetDisplayAliasResult {
|
|
51
|
+
/** Echoed slug of the doc that was aliased. */
|
|
52
|
+
slug: string;
|
|
53
|
+
/** Resolved `attachments.id` of the aliased doc. */
|
|
54
|
+
attachmentId: string;
|
|
55
|
+
/** Doc kind (`type` column) of the aliased doc, echoed for the envelope. */
|
|
56
|
+
type: string | null;
|
|
57
|
+
/** The previous alias value (or `null` if none was set). */
|
|
58
|
+
previousAlias: number | null;
|
|
59
|
+
/** The newly-assigned alias value (or `null` when cleared). */
|
|
60
|
+
displayAlias: number | null;
|
|
61
|
+
/** ISO-8601 timestamp the transaction committed. */
|
|
62
|
+
updatedAt: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Assign (or clear) the explicit display-alias number for the doc identified by
|
|
66
|
+
* `slug`, decoupled from the slug string.
|
|
67
|
+
*
|
|
68
|
+
* Effects (inside a single SQLite `BEGIN IMMEDIATE` transaction — all-or-none):
|
|
69
|
+
*
|
|
70
|
+
* 1. Resolve the row whose `slug` matches `params.slug`. `E_NOT_FOUND` when
|
|
71
|
+
* no such row exists.
|
|
72
|
+
* 2. When assigning (non-null) AND the target doc is `type='adr'`, scan every
|
|
73
|
+
* OTHER `type='adr'` row for the same `display_alias`. Any conflict throws
|
|
74
|
+
* `E_ALIAS_TAKEN` and the transaction rolls back — numbers are unique among
|
|
75
|
+
* ADRs. Non-adr kinds skip the uniqueness check (they may reuse numbers).
|
|
76
|
+
* 3. `UPDATE attachments SET display_alias = ? WHERE id = ?`.
|
|
77
|
+
*
|
|
78
|
+
* Uniqueness is enforced HERE (dispatch/SDK layer) rather than via a SQL UNIQUE
|
|
79
|
+
* constraint because the constraint is scoped to a single `type` value — the
|
|
80
|
+
* same discipline already used for `lifecycle_status` validation — so future
|
|
81
|
+
* taxonomy changes never require a schema migration.
|
|
82
|
+
*
|
|
83
|
+
* Signature follows ADR-057 — `(projectRoot, params)` is the canonical shape for
|
|
84
|
+
* core operations consumed by typed dispatch handlers and thin CLI verbs.
|
|
85
|
+
*
|
|
86
|
+
* @param projectRoot - Absolute project-root path. Production callers resolve it
|
|
87
|
+
* via `getProjectRoot()`; tests pass a temp dir.
|
|
88
|
+
* @param params - {@link SetDisplayAliasParams}.
|
|
89
|
+
* @returns {@link SetDisplayAliasResult} describing the before/after alias state.
|
|
90
|
+
*
|
|
91
|
+
* @throws {CleoError} `E_VALIDATION` when `displayAlias` is a non-positive /
|
|
92
|
+
* non-integer number.
|
|
93
|
+
* @throws {CleoError} `E_NOT_FOUND` when `slug` resolves to no row.
|
|
94
|
+
* @throws {CleoError} `E_ALIAS_TAKEN` when an ADR already owns the number.
|
|
95
|
+
*/
|
|
96
|
+
export declare function setDisplayAlias(projectRoot: string, params: SetDisplayAliasParams): Promise<SetDisplayAliasResult>;
|
|
97
|
+
//# sourceMappingURL=display-alias.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display-alias.d.ts","sourceRoot":"","sources":["../../src/docs/display-alias.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAkBH,iFAAiF;AACjF,eAAO,MAAM,wBAAwB,gBAAgB,CAAC;AACtD,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AACpD,kFAAkF;AAClF,eAAO,MAAM,sBAAsB,iBAAiB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,+DAA+D;IAC/D,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC,CAsFhC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set / clear a doc's explicit DISPLAY ALIAS number — decoupled from the slug.
|
|
3
|
+
*
|
|
4
|
+
* ## Why this module exists
|
|
5
|
+
*
|
|
6
|
+
* Under the ratified slug-primary model (saga T11778, ADR reconcile T11676) the
|
|
7
|
+
* kebab `slug` is the canonical handle and the rendered number (e.g. ADR "051")
|
|
8
|
+
* is a DISPLAY ALIAS only. Until T11875 that number was DERIVED by parsing the
|
|
9
|
+
* digits out of the slug string (`adr-051-*` → 051) — so three DISTINCT ADRs
|
|
10
|
+
* that all slug as `adr-051-*` rendered the same "051" with no way to
|
|
11
|
+
* disambiguate. The collision is unresolvable in a slug-primary world because
|
|
12
|
+
* renumbering a slug would break the canonical handle.
|
|
13
|
+
*
|
|
14
|
+
* T11875 adds a real `attachments.display_alias` INTEGER column. This module is
|
|
15
|
+
* the SDK chokepoint that sets it (and validates uniqueness among `type='adr'`
|
|
16
|
+
* docs). {@link import('./numbering.js').resolveDisplayNumber} prefers the
|
|
17
|
+
* stored alias when present and falls back to the slug-derived number when null.
|
|
18
|
+
*
|
|
19
|
+
* The transaction lives in CORE (not the CLI / dispatch layer) because:
|
|
20
|
+
* 1. The CLI boundary gate forbids business logic > 30 LOC in CLI commands.
|
|
21
|
+
* 2. The DB-open chokepoint (`openCleoDb` / `getNativeTasksDb`) is core-owned
|
|
22
|
+
* per ADR-068; raw `DatabaseSync` opens outside `store/` are rejected.
|
|
23
|
+
* 3. Future callers (HTTP dispatch, MCP, BRAIN bridges) re-use the same
|
|
24
|
+
* entry point without re-implementing the all-or-nothing uniqueness check.
|
|
25
|
+
*
|
|
26
|
+
* @task T11875 (Epic T11781 / Saga T11778)
|
|
27
|
+
* @adr ADR-078 — Docs Provenance Graph (display-alias half of T11676 reconcile)
|
|
28
|
+
*/
|
|
29
|
+
import { ExitCode } from '@cleocode/contracts';
|
|
30
|
+
import { CleoError } from '../errors.js';
|
|
31
|
+
/** Stable error code surfaced when the target slug does not resolve to a row. */
|
|
32
|
+
export const SET_ALIAS_NOT_FOUND_CODE = 'E_NOT_FOUND';
|
|
33
|
+
/** Stable error code surfaced when the requested number is already taken. */
|
|
34
|
+
export const SET_ALIAS_TAKEN_CODE = 'E_ALIAS_TAKEN';
|
|
35
|
+
/** Stable error code surfaced when the requested number is not a positive int. */
|
|
36
|
+
export const SET_ALIAS_INVALID_CODE = 'E_VALIDATION';
|
|
37
|
+
/**
|
|
38
|
+
* Assign (or clear) the explicit display-alias number for the doc identified by
|
|
39
|
+
* `slug`, decoupled from the slug string.
|
|
40
|
+
*
|
|
41
|
+
* Effects (inside a single SQLite `BEGIN IMMEDIATE` transaction — all-or-none):
|
|
42
|
+
*
|
|
43
|
+
* 1. Resolve the row whose `slug` matches `params.slug`. `E_NOT_FOUND` when
|
|
44
|
+
* no such row exists.
|
|
45
|
+
* 2. When assigning (non-null) AND the target doc is `type='adr'`, scan every
|
|
46
|
+
* OTHER `type='adr'` row for the same `display_alias`. Any conflict throws
|
|
47
|
+
* `E_ALIAS_TAKEN` and the transaction rolls back — numbers are unique among
|
|
48
|
+
* ADRs. Non-adr kinds skip the uniqueness check (they may reuse numbers).
|
|
49
|
+
* 3. `UPDATE attachments SET display_alias = ? WHERE id = ?`.
|
|
50
|
+
*
|
|
51
|
+
* Uniqueness is enforced HERE (dispatch/SDK layer) rather than via a SQL UNIQUE
|
|
52
|
+
* constraint because the constraint is scoped to a single `type` value — the
|
|
53
|
+
* same discipline already used for `lifecycle_status` validation — so future
|
|
54
|
+
* taxonomy changes never require a schema migration.
|
|
55
|
+
*
|
|
56
|
+
* Signature follows ADR-057 — `(projectRoot, params)` is the canonical shape for
|
|
57
|
+
* core operations consumed by typed dispatch handlers and thin CLI verbs.
|
|
58
|
+
*
|
|
59
|
+
* @param projectRoot - Absolute project-root path. Production callers resolve it
|
|
60
|
+
* via `getProjectRoot()`; tests pass a temp dir.
|
|
61
|
+
* @param params - {@link SetDisplayAliasParams}.
|
|
62
|
+
* @returns {@link SetDisplayAliasResult} describing the before/after alias state.
|
|
63
|
+
*
|
|
64
|
+
* @throws {CleoError} `E_VALIDATION` when `displayAlias` is a non-positive /
|
|
65
|
+
* non-integer number.
|
|
66
|
+
* @throws {CleoError} `E_NOT_FOUND` when `slug` resolves to no row.
|
|
67
|
+
* @throws {CleoError} `E_ALIAS_TAKEN` when an ADR already owns the number.
|
|
68
|
+
*/
|
|
69
|
+
export async function setDisplayAlias(projectRoot, params) {
|
|
70
|
+
const { slug, displayAlias } = params;
|
|
71
|
+
if (displayAlias !== null && (!Number.isInteger(displayAlias) || displayAlias < 1)) {
|
|
72
|
+
throw new CleoError(ExitCode.VALIDATION_ERROR, `display alias must be a positive integer — got '${String(displayAlias)}'`);
|
|
73
|
+
}
|
|
74
|
+
// E6-L6 (T11526): `attachments` is part of the legacy drizzle-tasks family,
|
|
75
|
+
// created inside the project `cleo.db` by getDb()'s migrations. Route through
|
|
76
|
+
// getDb()/getNativeTasksDb() (rather than openCleoDb('project'), which only
|
|
77
|
+
// runs the consolidated schema) so the table is guaranteed present. The native
|
|
78
|
+
// handle is a shared singleton — do NOT close it here.
|
|
79
|
+
const { getDb, getNativeTasksDb } = await import('../store/sqlite.js');
|
|
80
|
+
await getDb(projectRoot);
|
|
81
|
+
const db = getNativeTasksDb();
|
|
82
|
+
if (!db) {
|
|
83
|
+
throw new CleoError(ExitCode.GENERAL_ERROR, 'docs set-alias: project cleo.db could not be opened (no native handle)');
|
|
84
|
+
}
|
|
85
|
+
const now = new Date().toISOString();
|
|
86
|
+
// BEGIN IMMEDIATE — acquire the write lock up front so two concurrent
|
|
87
|
+
// set-alias calls contend at lock-acquisition time rather than after the
|
|
88
|
+
// uniqueness scan (which would let both writers pass the check and collide).
|
|
89
|
+
db.exec('BEGIN IMMEDIATE');
|
|
90
|
+
let row;
|
|
91
|
+
try {
|
|
92
|
+
row = db
|
|
93
|
+
.prepare('SELECT id, slug, type, display_alias FROM attachments WHERE slug = ?')
|
|
94
|
+
.get(slug);
|
|
95
|
+
if (!row) {
|
|
96
|
+
throw new CleoError(ExitCode.NOT_FOUND, `slug '${slug}' does not match any attachment row`);
|
|
97
|
+
}
|
|
98
|
+
// Uniqueness scan — only for ADRs, only when assigning a non-null number.
|
|
99
|
+
if (displayAlias !== null && row.type === 'adr') {
|
|
100
|
+
const conflict = db
|
|
101
|
+
.prepare("SELECT slug FROM attachments WHERE type = 'adr' AND display_alias = ? AND id <> ?")
|
|
102
|
+
.get(displayAlias, row.id);
|
|
103
|
+
if (conflict) {
|
|
104
|
+
throw new CleoError(ExitCode.VALIDATION_ERROR, `display alias ${displayAlias} is already assigned to ADR '${conflict.slug ?? '(unknown)'}' — ` +
|
|
105
|
+
'pick a different number (aliases are unique among type=adr docs)', {
|
|
106
|
+
details: {
|
|
107
|
+
field: 'displayAlias',
|
|
108
|
+
code: SET_ALIAS_TAKEN_CODE,
|
|
109
|
+
actual: displayAlias,
|
|
110
|
+
conflictingSlug: conflict.slug,
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
db.prepare('UPDATE attachments SET display_alias = ? WHERE id = ?').run(displayAlias, row.id);
|
|
116
|
+
db.exec('COMMIT');
|
|
117
|
+
}
|
|
118
|
+
catch (txErr) {
|
|
119
|
+
try {
|
|
120
|
+
db.exec('ROLLBACK');
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Rollback is best-effort — propagating the original error matters more.
|
|
124
|
+
}
|
|
125
|
+
throw txErr;
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
slug,
|
|
129
|
+
attachmentId: row.id,
|
|
130
|
+
type: row.type,
|
|
131
|
+
previousAlias: row.display_alias,
|
|
132
|
+
displayAlias,
|
|
133
|
+
updatedAt: now,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=display-alias.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display-alias.js","sourceRoot":"","sources":["../../src/docs/display-alias.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,13 @@ export interface ResolvedDoc {
|
|
|
18
18
|
readonly title: string | null;
|
|
19
19
|
/** Stable human-readable slug from attachments.slug. Null for slug-less blobs. */
|
|
20
20
|
readonly slug: string | null;
|
|
21
|
+
/**
|
|
22
|
+
* The DISPLAY number to render for this doc (e.g. ADR "051"), decoupled from
|
|
23
|
+
* the slug (T11875). Resolved via {@link resolveDisplayNumber}: the stored
|
|
24
|
+
* `attachments.display_alias` wins when set, else the slug-derived number, else
|
|
25
|
+
* `null` for non-numbered / slug-less docs.
|
|
26
|
+
*/
|
|
27
|
+
readonly displayNumber: number | null;
|
|
21
28
|
/** Owner entity ID (task/session/observation ID). */
|
|
22
29
|
readonly ownerId: string;
|
|
23
30
|
/** Owner entity type. */
|
|
@@ -52,6 +59,25 @@ export interface ResolvedDoc {
|
|
|
52
59
|
/** Which backing store this doc was resolved from. */
|
|
53
60
|
readonly source: 'tasks-db' | 'manifest-db' | 'merged';
|
|
54
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Discriminated result of {@link DocsReadModel.fetchDecoded}.
|
|
64
|
+
*
|
|
65
|
+
* The success arm carries both the resolved doc record and its decoded
|
|
66
|
+
* UTF-8 body; the failure arms distinguish a missing reference from a
|
|
67
|
+
* resolvable doc whose blob could not be read.
|
|
68
|
+
*/
|
|
69
|
+
export type DecodedDocResult = {
|
|
70
|
+
readonly ok: true;
|
|
71
|
+
readonly doc: ResolvedDoc;
|
|
72
|
+
readonly content: string;
|
|
73
|
+
} | {
|
|
74
|
+
readonly ok: false;
|
|
75
|
+
readonly reason: 'not-found';
|
|
76
|
+
} | {
|
|
77
|
+
readonly ok: false;
|
|
78
|
+
readonly reason: 'no-content';
|
|
79
|
+
readonly doc: ResolvedDoc;
|
|
80
|
+
};
|
|
55
81
|
/**
|
|
56
82
|
* Filters for {@link DocsReadModel.listProjectDocs}.
|
|
57
83
|
*/
|
|
@@ -185,6 +211,27 @@ export declare class DocsReadModel {
|
|
|
185
211
|
* cannot be read.
|
|
186
212
|
*/
|
|
187
213
|
fetchContent(doc: ResolvedDoc): Promise<string | null>;
|
|
214
|
+
/**
|
|
215
|
+
* Resolve a reference (slug, attachment ID, or SHA-256) and return its
|
|
216
|
+
* decoded UTF-8 body in a single call.
|
|
217
|
+
*
|
|
218
|
+
* Convenience wrapper around the resolve → {@link fetchContent} two-step
|
|
219
|
+
* used by agent-facing surfaces (e.g. `cleo docs fetch --content`) that
|
|
220
|
+
* want the raw document text without first hand-decoding the base64
|
|
221
|
+
* `bytesBase64` field from the LAFS fetch envelope (T10970).
|
|
222
|
+
*
|
|
223
|
+
* Resolution order mirrors the canonical fetch path: slug first (the
|
|
224
|
+
* common agent ergonomic), then attachment ID / SHA-256 content address.
|
|
225
|
+
*
|
|
226
|
+
* @param ref - Slug, attachment UUID, or 64-char hex SHA-256.
|
|
227
|
+
* @returns A discriminated result:
|
|
228
|
+
* - `{ ok: true, doc, content }` when the ref resolved AND content was
|
|
229
|
+
* retrievable.
|
|
230
|
+
* - `{ ok: false, reason: 'not-found' }` when no doc carries the ref.
|
|
231
|
+
* - `{ ok: false, reason: 'no-content', doc }` when the doc metadata
|
|
232
|
+
* exists but its blob could not be read (e.g. purged or unpublished).
|
|
233
|
+
*/
|
|
234
|
+
fetchDecoded(ref: string): Promise<DecodedDocResult>;
|
|
188
235
|
/**
|
|
189
236
|
* Fetch content for multiple docs in parallel.
|
|
190
237
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-read-model.d.ts","sourceRoot":"","sources":["../../src/docs/docs-read-model.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAsB,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"docs-read-model.d.ts","sourceRoot":"","sources":["../../src/docs/docs-read-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,7 @@ import { createHash } from 'node:crypto';
|
|
|
29
29
|
import { getProjectRoot } from '../paths.js';
|
|
30
30
|
import { createAttachmentStore } from '../store/attachment-store.js';
|
|
31
31
|
import { blobList, blobRead } from '../store/blob-ops.js';
|
|
32
|
+
import { resolveDisplayNumber } from './numbering.js';
|
|
32
33
|
// ---------------------------------------------------------------------------
|
|
33
34
|
// DocsReadModel implementation
|
|
34
35
|
// ---------------------------------------------------------------------------
|
|
@@ -86,6 +87,7 @@ export class DocsReadModel {
|
|
|
86
87
|
type: row.type,
|
|
87
88
|
summary: row.summary,
|
|
88
89
|
lifecycleStatus: row.lifecycleStatus,
|
|
90
|
+
displayAlias: row.displayAlias,
|
|
89
91
|
});
|
|
90
92
|
}
|
|
91
93
|
/**
|
|
@@ -135,13 +137,14 @@ export class DocsReadModel {
|
|
|
135
137
|
const store = createAttachmentStore();
|
|
136
138
|
const meta = await store.getMetadata(id, this.projectRoot);
|
|
137
139
|
if (meta) {
|
|
138
|
-
// Fetch extras (slug, type) from the row
|
|
140
|
+
// Fetch extras (slug, type, displayAlias) from the row
|
|
139
141
|
const extras = await store.getExtras(id, this.projectRoot);
|
|
140
142
|
return this.enrichFromTasksDb(meta, {
|
|
141
143
|
slug: extras?.slug ?? null,
|
|
142
144
|
type: extras?.type ?? null,
|
|
143
145
|
summary: null,
|
|
144
146
|
lifecycleStatus: 'active',
|
|
147
|
+
displayAlias: extras?.displayAlias ?? null,
|
|
145
148
|
});
|
|
146
149
|
}
|
|
147
150
|
// Fall back to blob-store lookup by SHA-256
|
|
@@ -271,6 +274,35 @@ export class DocsReadModel {
|
|
|
271
274
|
}
|
|
272
275
|
return null;
|
|
273
276
|
}
|
|
277
|
+
/**
|
|
278
|
+
* Resolve a reference (slug, attachment ID, or SHA-256) and return its
|
|
279
|
+
* decoded UTF-8 body in a single call.
|
|
280
|
+
*
|
|
281
|
+
* Convenience wrapper around the resolve → {@link fetchContent} two-step
|
|
282
|
+
* used by agent-facing surfaces (e.g. `cleo docs fetch --content`) that
|
|
283
|
+
* want the raw document text without first hand-decoding the base64
|
|
284
|
+
* `bytesBase64` field from the LAFS fetch envelope (T10970).
|
|
285
|
+
*
|
|
286
|
+
* Resolution order mirrors the canonical fetch path: slug first (the
|
|
287
|
+
* common agent ergonomic), then attachment ID / SHA-256 content address.
|
|
288
|
+
*
|
|
289
|
+
* @param ref - Slug, attachment UUID, or 64-char hex SHA-256.
|
|
290
|
+
* @returns A discriminated result:
|
|
291
|
+
* - `{ ok: true, doc, content }` when the ref resolved AND content was
|
|
292
|
+
* retrievable.
|
|
293
|
+
* - `{ ok: false, reason: 'not-found' }` when no doc carries the ref.
|
|
294
|
+
* - `{ ok: false, reason: 'no-content', doc }` when the doc metadata
|
|
295
|
+
* exists but its blob could not be read (e.g. purged or unpublished).
|
|
296
|
+
*/
|
|
297
|
+
async fetchDecoded(ref) {
|
|
298
|
+
const doc = (await this.resolveBySlug(ref)) ?? (await this.resolveByAttachmentId(ref));
|
|
299
|
+
if (!doc)
|
|
300
|
+
return { ok: false, reason: 'not-found' };
|
|
301
|
+
const content = await this.fetchContent(doc);
|
|
302
|
+
if (content === null)
|
|
303
|
+
return { ok: false, reason: 'no-content', doc };
|
|
304
|
+
return { ok: true, doc, content };
|
|
305
|
+
}
|
|
274
306
|
/**
|
|
275
307
|
* Fetch content for multiple docs in parallel.
|
|
276
308
|
*
|
|
@@ -393,6 +425,7 @@ export class DocsReadModel {
|
|
|
393
425
|
type: extras?.type ?? null,
|
|
394
426
|
summary: null,
|
|
395
427
|
lifecycleStatus: 'active',
|
|
428
|
+
displayAlias: extras?.displayAlias ?? null,
|
|
396
429
|
});
|
|
397
430
|
results.push(doc);
|
|
398
431
|
}
|
|
@@ -414,6 +447,7 @@ export class DocsReadModel {
|
|
|
414
447
|
kind: row.type ?? null,
|
|
415
448
|
title: row.slug ?? name ?? null,
|
|
416
449
|
slug: row.slug,
|
|
450
|
+
displayNumber: resolveDisplayNumber(row.slug, row.displayAlias),
|
|
417
451
|
ownerId: row.ownerId,
|
|
418
452
|
ownerType: row.ownerType,
|
|
419
453
|
blobName: name ?? row.slug ?? row.metadata.id,
|
|
@@ -491,12 +525,15 @@ export class DocsReadModel {
|
|
|
491
525
|
buildResolvedDocFromBlob(ownerId, entry) {
|
|
492
526
|
// Derive kind from known taxonomy types
|
|
493
527
|
const kind = inferDocKind(entry.name);
|
|
528
|
+
const blobSlug = kind ? entry.name.replace(/\.md$/, '') : null;
|
|
494
529
|
return {
|
|
495
530
|
id: entry.sha256,
|
|
496
531
|
sha256: entry.sha256,
|
|
497
532
|
kind,
|
|
498
533
|
title: entry.name,
|
|
499
|
-
slug:
|
|
534
|
+
slug: blobSlug,
|
|
535
|
+
// manifest.db blobs carry no display_alias column — derive from slug only.
|
|
536
|
+
displayNumber: resolveDisplayNumber(blobSlug, null),
|
|
500
537
|
ownerId,
|
|
501
538
|
ownerType: detectOwnerType(ownerId),
|
|
502
539
|
blobName: entry.name,
|
|
@@ -542,6 +579,7 @@ export class DocsReadModel {
|
|
|
542
579
|
kind: extras.type ?? null,
|
|
543
580
|
title: extras.slug ?? blobName ?? null,
|
|
544
581
|
slug: extras.slug,
|
|
582
|
+
displayNumber: resolveDisplayNumber(extras.slug, extras.displayAlias),
|
|
545
583
|
ownerId,
|
|
546
584
|
ownerType: detectOwnerType(ownerId),
|
|
547
585
|
blobName: blobName ?? extras.slug ?? meta.id,
|