@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/docs/index.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export type { AdrAllocateErr, AdrAllocateOk, AdrAllocateResult, AllocateAdrOptio
|
|
|
18
18
|
export { allocateAdrSlug, assembleAdrSlug, findHighestAdrNumber, MAX_ADR_ALLOCATION_ATTEMPTS, } from './adr-allocator.js';
|
|
19
19
|
export type { BuildDocProvenanceGraphOptions } from './build-provenance-graph.js';
|
|
20
20
|
export { buildDocProvenanceGraph, DocProvenanceRootNotFoundError, renderProvenanceGraphAsDot, } from './build-provenance-graph.js';
|
|
21
|
+
export type { SetDisplayAliasParams, SetDisplayAliasResult } from './display-alias.js';
|
|
22
|
+
export { SET_ALIAS_INVALID_CODE, SET_ALIAS_NOT_FOUND_CODE, SET_ALIAS_TAKEN_CODE, setDisplayAlias, } from './display-alias.js';
|
|
21
23
|
export type { GenerateDocsOptions, GenerateDocsResult } from './docs-generator.js';
|
|
22
24
|
export { generateDocsLlmsTxt } from './docs-generator.js';
|
|
23
25
|
export type { DocsDriftItem, DocsFindSimilarHit, DocsFindSimilarResult, DocsGraphEdge, DocsGraphNode, DocsGraphResult, DocsMergeResult, DocsProjectSearchHit, DocsProjectSearchResult, DocsPublicationRecord, DocsPublishResult, DocsRankHit, DocsRankResult, DocsSearchHit, DocsSearchResult, DocsStatusResult, DocsSyncFromGitResult, DocsVersionEntry, DocsVersionsResult, } from './docs-ops.js';
|
|
@@ -52,6 +54,10 @@ export type { ListProjectDocsOpts, ResolvedDoc } from './docs-read-model.js';
|
|
|
52
54
|
export { createDocsReadModel, DocsReadModel } from './docs-read-model.js';
|
|
53
55
|
export type { ProvisionResult, PublishPrError, PublishPrOptions, PublishPrResult, PublishPrRunners, PublishPrSuccess, } from './publish-pr.js';
|
|
54
56
|
export { branchForSlug, buildPublishFrontmatter, defaultPublishPrBody, defaultRun, execMsg, KNOWN_DOC_TYPES, knownDocTypesForProject, parseGhPrUrl, pickRunner, provisionPublishPrWorktree, publishDirForType, publishDocsAsPr, publishPrError, stripExistingFrontmatter, teardownPublishPrWorktree, tempWorktreeDirForSlug, validatePublishSlug, } from './publish-pr.js';
|
|
57
|
+
export type { ReadDocOptions } from './read-doc.js';
|
|
58
|
+
export { DocNotFoundError, readDoc } from './read-doc.js';
|
|
55
59
|
export type { VersionAuditResult } from './version-ssot.js';
|
|
56
60
|
export { auditVersionFields, compareCleoVersions, getCanonicalCleoVersion, resolveVersion, VERSION_SSOT_MIGRATION_SQL, versionInRange, } from './version-ssot.js';
|
|
61
|
+
export type { RebuildDocsWikilinksOptions, RebuildDocsWikilinksResult, WikilinkEdge, } from './wikilinks.js';
|
|
62
|
+
export { deriveWikilinkEdges, getDocsWikilinks, rebuildDocsWikilinks } from './wikilinks.js';
|
|
57
63
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/docs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/docs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,YAAY,EACV,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/docs/index.ts"],"names":[],"mappings":"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"}
|
package/dist/docs/index.js
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
export { allocateAdrSlug, assembleAdrSlug, findHighestAdrNumber, MAX_ADR_ALLOCATION_ATTEMPTS, } from './adr-allocator.js';
|
|
18
18
|
export { buildDocProvenanceGraph, DocProvenanceRootNotFoundError, renderProvenanceGraphAsDot, } from './build-provenance-graph.js';
|
|
19
|
+
export { SET_ALIAS_INVALID_CODE, SET_ALIAS_NOT_FOUND_CODE, SET_ALIAS_TAKEN_CODE, setDisplayAlias, } from './display-alias.js';
|
|
19
20
|
export { generateDocsLlmsTxt } from './docs-generator.js';
|
|
20
21
|
export { buildDocsGraph, DEFAULT_FIND_SIMILAR_LIMIT, DEFAULT_FIND_SIMILAR_THRESHOLD, findSimilarDocs, listDocVersions, listPublications, mergeDocs, publishDocs, rankDocs, recordPublication, searchAllProjectDocs, searchDocs, statusDocs, syncFromGit, } from './docs-ops.js';
|
|
21
22
|
export { exportDocument } from './export-document.js';
|
|
@@ -38,5 +39,7 @@ export { countAuditEntriesForSlug, DOCS_AUDIT_FILE, readAuditLog, verifyAuditTra
|
|
|
38
39
|
export { checkBlobFilesystem, checkDocsConsistency, } from './docs-inconsistency-detector.js';
|
|
39
40
|
export { createDocsReadModel, DocsReadModel } from './docs-read-model.js';
|
|
40
41
|
export { branchForSlug, buildPublishFrontmatter, defaultPublishPrBody, defaultRun, execMsg, KNOWN_DOC_TYPES, knownDocTypesForProject, parseGhPrUrl, pickRunner, provisionPublishPrWorktree, publishDirForType, publishDocsAsPr, publishPrError, stripExistingFrontmatter, teardownPublishPrWorktree, tempWorktreeDirForSlug, validatePublishSlug, } from './publish-pr.js';
|
|
42
|
+
export { DocNotFoundError, readDoc } from './read-doc.js';
|
|
41
43
|
export { auditVersionFields, compareCleoVersions, getCanonicalCleoVersion, resolveVersion, VERSION_SSOT_MIGRATION_SQL, versionInRange, } from './version-ssot.js';
|
|
44
|
+
export { deriveWikilinkEdges, getDocsWikilinks, rebuildDocsWikilinks } from './wikilinks.js';
|
|
42
45
|
//# sourceMappingURL=index.js.map
|
package/dist/docs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/docs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AASH,OAAO,EACL,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/docs/index.ts"],"names":[],"mappings":"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"}
|
package/dist/docs/numbering.d.ts
CHANGED
|
@@ -109,6 +109,35 @@ export declare function parseSlugSequence(slug: string): {
|
|
|
109
109
|
sequence: number;
|
|
110
110
|
remainder: string;
|
|
111
111
|
} | null;
|
|
112
|
+
/**
|
|
113
|
+
* Resolve the DISPLAY number to render for a doc, preferring the explicitly
|
|
114
|
+
* stored {@link import('../store/schema/attachments.js').attachments.displayAlias}
|
|
115
|
+
* over the number derived from the slug string.
|
|
116
|
+
*
|
|
117
|
+
* ## Why this exists (T11875 · ADR reconcile T11676)
|
|
118
|
+
*
|
|
119
|
+
* Under the slug-primary model the kebab slug is the canonical handle and the
|
|
120
|
+
* rendered number (e.g. ADR "051") is a DISPLAY ALIAS only. Historically that
|
|
121
|
+
* number was DERIVED from the slug via {@link parseSlugSequence} — so three
|
|
122
|
+
* DISTINCT ADRs slugged `adr-051-*` all rendered "051" with no way to
|
|
123
|
+
* disambiguate. T11875 added a real `display_alias` column; this resolver makes
|
|
124
|
+
* the stored alias authoritative while preserving byte-for-byte legacy
|
|
125
|
+
* behaviour for docs that never had one assigned.
|
|
126
|
+
*
|
|
127
|
+
* Precedence:
|
|
128
|
+
* 1. `storedAlias` — when a non-null positive integer is supplied, it wins
|
|
129
|
+
* unconditionally (the alias is the decoupled SSoT).
|
|
130
|
+
* 2. Slug-derived — otherwise parse the numeric portion out of `slug` via the
|
|
131
|
+
* canonical numbering patterns ({@link parseSlugSequence}).
|
|
132
|
+
* 3. `null` — when neither yields a number (non-numbered kind / no alias).
|
|
133
|
+
*
|
|
134
|
+
* @param slug - The doc's canonical slug (e.g. `adr-051-override-patterns`), or
|
|
135
|
+
* `null` for slug-less docs.
|
|
136
|
+
* @param storedAlias - The value of `attachments.display_alias` for this doc, or
|
|
137
|
+
* `null` when unset.
|
|
138
|
+
* @returns The display number to render, or `null` when none can be resolved.
|
|
139
|
+
*/
|
|
140
|
+
export declare function resolveDisplayNumber(slug: string | null | undefined, storedAlias: number | null | undefined): number | null;
|
|
112
141
|
/** Reset in-process state — test-only escape hatch. */
|
|
113
142
|
export declare function _resetNumberingCache_TESTING_ONLY(): void;
|
|
114
143
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numbering.d.ts","sourceRoot":"","sources":["../../src/docs/numbering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AAQH;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,0DAA0D;IAC1D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAmDD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,SAAS,CAAC;AAuDjC;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAY9D;AAkDD,uDAAuD;AACvD,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AA8ED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,0BAA0B,CAAC,CAOrC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5F;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAID;;;;GAIG;AACH,MAAM,WAAW,iCAAiC;IAChD,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iCAAiC;IAChD,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iCAAiC,GACxC,OAAO,CAAC,iCAAiC,CAAC,CAK5C"}
|
|
1
|
+
{"version":3,"file":"numbering.d.ts","sourceRoot":"","sources":["../../src/docs/numbering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AAQH;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,0DAA0D;IAC1D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAmDD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,SAAS,CAAC;AAuDjC;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAY9D;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACrC,MAAM,GAAG,IAAI,CAUf;AAkDD,uDAAuD;AACvD,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AA8ED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,0BAA0B,CAAC,CAOrC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5F;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAID;;;;GAIG;AACH,MAAM,WAAW,iCAAiC;IAChD,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iCAAiC;IAChD,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iCAAiC,GACxC,OAAO,CAAC,iCAAiC,CAAC,CAK5C"}
|
package/dist/docs/numbering.js
CHANGED
|
@@ -180,6 +180,47 @@ export function parseSlugSequence(slug) {
|
|
|
180
180
|
}
|
|
181
181
|
return null;
|
|
182
182
|
}
|
|
183
|
+
// ─── Display-number resolution (T11875) ───────────────────────────────────────
|
|
184
|
+
/**
|
|
185
|
+
* Resolve the DISPLAY number to render for a doc, preferring the explicitly
|
|
186
|
+
* stored {@link import('../store/schema/attachments.js').attachments.displayAlias}
|
|
187
|
+
* over the number derived from the slug string.
|
|
188
|
+
*
|
|
189
|
+
* ## Why this exists (T11875 · ADR reconcile T11676)
|
|
190
|
+
*
|
|
191
|
+
* Under the slug-primary model the kebab slug is the canonical handle and the
|
|
192
|
+
* rendered number (e.g. ADR "051") is a DISPLAY ALIAS only. Historically that
|
|
193
|
+
* number was DERIVED from the slug via {@link parseSlugSequence} — so three
|
|
194
|
+
* DISTINCT ADRs slugged `adr-051-*` all rendered "051" with no way to
|
|
195
|
+
* disambiguate. T11875 added a real `display_alias` column; this resolver makes
|
|
196
|
+
* the stored alias authoritative while preserving byte-for-byte legacy
|
|
197
|
+
* behaviour for docs that never had one assigned.
|
|
198
|
+
*
|
|
199
|
+
* Precedence:
|
|
200
|
+
* 1. `storedAlias` — when a non-null positive integer is supplied, it wins
|
|
201
|
+
* unconditionally (the alias is the decoupled SSoT).
|
|
202
|
+
* 2. Slug-derived — otherwise parse the numeric portion out of `slug` via the
|
|
203
|
+
* canonical numbering patterns ({@link parseSlugSequence}).
|
|
204
|
+
* 3. `null` — when neither yields a number (non-numbered kind / no alias).
|
|
205
|
+
*
|
|
206
|
+
* @param slug - The doc's canonical slug (e.g. `adr-051-override-patterns`), or
|
|
207
|
+
* `null` for slug-less docs.
|
|
208
|
+
* @param storedAlias - The value of `attachments.display_alias` for this doc, or
|
|
209
|
+
* `null` when unset.
|
|
210
|
+
* @returns The display number to render, or `null` when none can be resolved.
|
|
211
|
+
*/
|
|
212
|
+
export function resolveDisplayNumber(slug, storedAlias) {
|
|
213
|
+
// (1) Stored alias is the decoupled SSoT — it wins over the slug-derived
|
|
214
|
+
// number whenever it is a usable positive integer.
|
|
215
|
+
if (typeof storedAlias === 'number' && Number.isInteger(storedAlias) && storedAlias >= 1) {
|
|
216
|
+
return storedAlias;
|
|
217
|
+
}
|
|
218
|
+
// (2) Fall back to the slug-derived number — unchanged legacy behaviour.
|
|
219
|
+
if (typeof slug !== 'string' || slug.length === 0)
|
|
220
|
+
return null;
|
|
221
|
+
const parsed = parseSlugSequence(slug);
|
|
222
|
+
return parsed ? parsed.sequence : null;
|
|
223
|
+
}
|
|
183
224
|
// ─── DB inspection (atomic) ───────────────────────────────────────────────────
|
|
184
225
|
/**
|
|
185
226
|
* Module-level promise chain used as an in-process async Mutex around
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numbering.js","sourceRoot":"","sources":["../../src/docs/numbering.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"numbering.js","sourceRoot":"","sources":["../../src/docs/numbering.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `docs.read` core-SDK implementation — render a single CLEO doc (body + full
|
|
3
|
+
* provenance frontmatter) directly from `cleo.db`, the SOLE doc authority
|
|
4
|
+
* (saga T11778).
|
|
5
|
+
*
|
|
6
|
+
* This is the live read API the Obsidian plugin (T11827) and `cleo docs view`
|
|
7
|
+
* call. It is NOT a static export: every call reads the current DB state. The
|
|
8
|
+
* body is surfaced as UTF-8 text when decodable, else base64 (T11825 AC2), so
|
|
9
|
+
* binary blobs (images/PDFs) render without a second round-trip.
|
|
10
|
+
*
|
|
11
|
+
* Frontmatter is read straight from the `attachments` provenance columns
|
|
12
|
+
* (`slug`, `doc_version`, `owner_version`, `supersedes`, `superseded_by`,
|
|
13
|
+
* `topics`, `related_tasks`) — the same columns `docs_wikilinks` derives from —
|
|
14
|
+
* so the response is self-describing for an external consumer.
|
|
15
|
+
*
|
|
16
|
+
* @task T11825 (Epic T11781 / Saga T11778)
|
|
17
|
+
* @adr ADR-078 — Docs SSoT as provenance graph
|
|
18
|
+
* @see DocReadResponse — packages/contracts/src/docs/read.ts
|
|
19
|
+
* @see createDocsReadModel — body fetch + base64 plumbing reuse
|
|
20
|
+
*/
|
|
21
|
+
import type { DocReadResponse } from '@cleocode/contracts';
|
|
22
|
+
/**
|
|
23
|
+
* Options for {@link readDoc}.
|
|
24
|
+
*
|
|
25
|
+
* @task T11825
|
|
26
|
+
*/
|
|
27
|
+
export interface ReadDocOptions {
|
|
28
|
+
/** Project root for DB resolution. Defaults to {@link getProjectRoot}(). */
|
|
29
|
+
readonly projectRoot?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Error raised when {@link readDoc}'s slug cannot be resolved to a doc.
|
|
33
|
+
*
|
|
34
|
+
* @task T11825
|
|
35
|
+
*/
|
|
36
|
+
export declare class DocNotFoundError extends Error {
|
|
37
|
+
constructor(slug: string);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Read a single doc by slug, returning its body + full provenance frontmatter.
|
|
41
|
+
*
|
|
42
|
+
* Resolves the supersedes / superseded-by FK targets to their slugs (the
|
|
43
|
+
* external-consumer-friendly addressing) and decodes the body to UTF-8 when
|
|
44
|
+
* possible, falling back to base64 for binary content.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* const doc = await readDoc('adr-078-docs-provenance');
|
|
49
|
+
* console.log(doc.frontmatter.docVersion, doc.frontmatter.topics);
|
|
50
|
+
* if (doc.body.encoding === 'utf-8') console.log(doc.body.text);
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @param slug - The exact doc slug (case-sensitive).
|
|
54
|
+
* @param opts - Optional project-root override.
|
|
55
|
+
* @returns The typed {@link DocReadResponse}.
|
|
56
|
+
* @throws {DocNotFoundError} when no attachment carries the slug.
|
|
57
|
+
* @task T11825
|
|
58
|
+
*/
|
|
59
|
+
export declare function readDoc(slug: string, opts?: ReadDocOptions): Promise<DocReadResponse>;
|
|
60
|
+
//# sourceMappingURL=read-doc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-doc.d.ts","sourceRoot":"","sources":["../../src/docs/read-doc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAA2B,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAOpF;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,IAAI,EAAE,MAAM;CAIzB;AAmBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAwD/F"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `docs.read` core-SDK implementation — render a single CLEO doc (body + full
|
|
3
|
+
* provenance frontmatter) directly from `cleo.db`, the SOLE doc authority
|
|
4
|
+
* (saga T11778).
|
|
5
|
+
*
|
|
6
|
+
* This is the live read API the Obsidian plugin (T11827) and `cleo docs view`
|
|
7
|
+
* call. It is NOT a static export: every call reads the current DB state. The
|
|
8
|
+
* body is surfaced as UTF-8 text when decodable, else base64 (T11825 AC2), so
|
|
9
|
+
* binary blobs (images/PDFs) render without a second round-trip.
|
|
10
|
+
*
|
|
11
|
+
* Frontmatter is read straight from the `attachments` provenance columns
|
|
12
|
+
* (`slug`, `doc_version`, `owner_version`, `supersedes`, `superseded_by`,
|
|
13
|
+
* `topics`, `related_tasks`) — the same columns `docs_wikilinks` derives from —
|
|
14
|
+
* so the response is self-describing for an external consumer.
|
|
15
|
+
*
|
|
16
|
+
* @task T11825 (Epic T11781 / Saga T11778)
|
|
17
|
+
* @adr ADR-078 — Docs SSoT as provenance graph
|
|
18
|
+
* @see DocReadResponse — packages/contracts/src/docs/read.ts
|
|
19
|
+
* @see createDocsReadModel — body fetch + base64 plumbing reuse
|
|
20
|
+
*/
|
|
21
|
+
import { Buffer } from 'node:buffer';
|
|
22
|
+
import { eq } from 'drizzle-orm';
|
|
23
|
+
import { getProjectRoot } from '../paths.js';
|
|
24
|
+
import { createAttachmentStore } from '../store/attachment-store.js';
|
|
25
|
+
import { getDb } from '../store/sqlite.js';
|
|
26
|
+
import { attachments } from '../store/tasks-schema.js';
|
|
27
|
+
/**
|
|
28
|
+
* Error raised when {@link readDoc}'s slug cannot be resolved to a doc.
|
|
29
|
+
*
|
|
30
|
+
* @task T11825
|
|
31
|
+
*/
|
|
32
|
+
export class DocNotFoundError extends Error {
|
|
33
|
+
constructor(slug) {
|
|
34
|
+
super(`Doc not found: no attachment carries slug '${slug}'`);
|
|
35
|
+
this.name = 'DocNotFoundError';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Read a single doc by slug, returning its body + full provenance frontmatter.
|
|
40
|
+
*
|
|
41
|
+
* Resolves the supersedes / superseded-by FK targets to their slugs (the
|
|
42
|
+
* external-consumer-friendly addressing) and decodes the body to UTF-8 when
|
|
43
|
+
* possible, falling back to base64 for binary content.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* const doc = await readDoc('adr-078-docs-provenance');
|
|
48
|
+
* console.log(doc.frontmatter.docVersion, doc.frontmatter.topics);
|
|
49
|
+
* if (doc.body.encoding === 'utf-8') console.log(doc.body.text);
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @param slug - The exact doc slug (case-sensitive).
|
|
53
|
+
* @param opts - Optional project-root override.
|
|
54
|
+
* @returns The typed {@link DocReadResponse}.
|
|
55
|
+
* @throws {DocNotFoundError} when no attachment carries the slug.
|
|
56
|
+
* @task T11825
|
|
57
|
+
*/
|
|
58
|
+
export async function readDoc(slug, opts = {}) {
|
|
59
|
+
const projectRoot = opts.projectRoot ?? getProjectRoot();
|
|
60
|
+
const db = await getDb(projectRoot);
|
|
61
|
+
const row = await db
|
|
62
|
+
.select({
|
|
63
|
+
id: attachments.id,
|
|
64
|
+
sha256: attachments.sha256,
|
|
65
|
+
slug: attachments.slug,
|
|
66
|
+
type: attachments.type,
|
|
67
|
+
summary: attachments.summary,
|
|
68
|
+
lifecycleStatus: attachments.lifecycleStatus,
|
|
69
|
+
supersedes: attachments.supersedes,
|
|
70
|
+
supersededBy: attachments.supersededBy,
|
|
71
|
+
topics: attachments.topics,
|
|
72
|
+
relatedTasks: attachments.relatedTasks,
|
|
73
|
+
ownerVersion: attachments.ownerVersion,
|
|
74
|
+
docVersion: attachments.docVersion,
|
|
75
|
+
createdAt: attachments.createdAt,
|
|
76
|
+
})
|
|
77
|
+
.from(attachments)
|
|
78
|
+
.where(eq(attachments.slug, slug))
|
|
79
|
+
.get();
|
|
80
|
+
if (!row)
|
|
81
|
+
throw new DocNotFoundError(slug);
|
|
82
|
+
const frontmatterRow = row;
|
|
83
|
+
// Resolve supersession FK ids → slugs for external addressing.
|
|
84
|
+
const [supersedesSlug, supersededBySlug] = await Promise.all([
|
|
85
|
+
resolveSlugById(db, frontmatterRow.supersedes),
|
|
86
|
+
resolveSlugById(db, frontmatterRow.supersededBy),
|
|
87
|
+
]);
|
|
88
|
+
// Fetch the RAW body bytes (not a decoded string) so binary blobs survive the
|
|
89
|
+
// base64 path with full fidelity — `TextDecoder` would lossily replace
|
|
90
|
+
// invalid sequences with U+FFFD.
|
|
91
|
+
const { bytes, mimeType } = await fetchRawBody(frontmatterRow.sha256, projectRoot);
|
|
92
|
+
const frontmatter = {
|
|
93
|
+
slug: frontmatterRow.slug ?? slug,
|
|
94
|
+
kind: frontmatterRow.type,
|
|
95
|
+
title: frontmatterRow.slug ?? slug,
|
|
96
|
+
summary: frontmatterRow.summary,
|
|
97
|
+
lifecycleStatus: frontmatterRow.lifecycleStatus,
|
|
98
|
+
docVersion: frontmatterRow.docVersion,
|
|
99
|
+
ownerVersion: frontmatterRow.ownerVersion,
|
|
100
|
+
supersedes: supersedesSlug,
|
|
101
|
+
supersededBy: supersededBySlug,
|
|
102
|
+
topics: parseStringArray(frontmatterRow.topics),
|
|
103
|
+
relatedTasks: parseStringArray(frontmatterRow.relatedTasks),
|
|
104
|
+
sha256: frontmatterRow.sha256,
|
|
105
|
+
createdAt: frontmatterRow.createdAt,
|
|
106
|
+
};
|
|
107
|
+
const body = encodeBody(bytes, mimeType);
|
|
108
|
+
return { frontmatter, body };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Read the raw body bytes for a doc by content hash via the content-addressed
|
|
112
|
+
* attachment store. Returns an empty buffer when the metadata row exists but
|
|
113
|
+
* the blob was purged from disk.
|
|
114
|
+
*
|
|
115
|
+
* @internal
|
|
116
|
+
*/
|
|
117
|
+
async function fetchRawBody(sha256, projectRoot) {
|
|
118
|
+
const store = createAttachmentStore();
|
|
119
|
+
try {
|
|
120
|
+
const result = await store.get(sha256, projectRoot);
|
|
121
|
+
if (result) {
|
|
122
|
+
const mime = result.metadata.attachment.mime;
|
|
123
|
+
return { bytes: result.bytes, mimeType: typeof mime === 'string' ? mime : null };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// Attachment store unavailable or blob purged — fall through to empty body.
|
|
128
|
+
}
|
|
129
|
+
return { bytes: Buffer.alloc(0), mimeType: null };
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Resolve an attachment id to its slug, or null when the id is absent /
|
|
133
|
+
* unresolved / slug-less.
|
|
134
|
+
*
|
|
135
|
+
* @internal
|
|
136
|
+
*/
|
|
137
|
+
async function resolveSlugById(db, id) {
|
|
138
|
+
if (!id)
|
|
139
|
+
return null;
|
|
140
|
+
const row = await db
|
|
141
|
+
.select({ slug: attachments.slug })
|
|
142
|
+
.from(attachments)
|
|
143
|
+
.where(eq(attachments.id, id))
|
|
144
|
+
.get();
|
|
145
|
+
return row?.slug ?? null;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Encode a doc body from its raw bytes. UTF-8-decodable content (the common
|
|
149
|
+
* markdown case) is surfaced as `text`; binary content (images/PDFs/files) is
|
|
150
|
+
* surfaced as `base64` so an external consumer can render it (T11825 AC2).
|
|
151
|
+
*
|
|
152
|
+
* UTF-8 validity is detected by a lossless decode→re-encode round-trip: invalid
|
|
153
|
+
* sequences decode to U+FFFD and fail to re-encode to the original bytes.
|
|
154
|
+
*
|
|
155
|
+
* @internal
|
|
156
|
+
*/
|
|
157
|
+
function encodeBody(bytes, mimeType) {
|
|
158
|
+
const text = bytes.toString('utf-8');
|
|
159
|
+
const isUtf8 = Buffer.from(text, 'utf-8').equals(bytes);
|
|
160
|
+
if (isUtf8) {
|
|
161
|
+
return { encoding: 'utf-8', text, sizeBytes: bytes.length, mimeType };
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
encoding: 'base64',
|
|
165
|
+
base64: bytes.toString('base64'),
|
|
166
|
+
sizeBytes: bytes.length,
|
|
167
|
+
mimeType,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Parse a JSON-array-of-strings column, tolerating null / malformed values.
|
|
172
|
+
*
|
|
173
|
+
* @internal
|
|
174
|
+
*/
|
|
175
|
+
function parseStringArray(raw) {
|
|
176
|
+
if (!raw)
|
|
177
|
+
return [];
|
|
178
|
+
try {
|
|
179
|
+
const parsed = JSON.parse(raw);
|
|
180
|
+
if (!Array.isArray(parsed))
|
|
181
|
+
return [];
|
|
182
|
+
return parsed.filter((v) => typeof v === 'string' && v.length > 0);
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=read-doc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-doc.js","sourceRoot":"","sources":["../../src/docs/read-doc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `docs_wikilinks` — derive + query the slug-addressed docs edge table.
|
|
3
|
+
*
|
|
4
|
+
* Per the ratified Docs-SSoT model (saga T11778) `cleo.db` is the SOLE doc
|
|
5
|
+
* authority and `docs_wikilinks` is a **DERIVED, non-authoritative** edge table
|
|
6
|
+
* reconstructed from three provenance columns already on `attachments`:
|
|
7
|
+
*
|
|
8
|
+
* - `supersedes` / `superseded_by` → doc→doc supersession edges
|
|
9
|
+
* - `related_tasks` → doc→T#### task edges (JSON array)
|
|
10
|
+
* - `topics` → doc↔doc shared-topic edges (JSON array)
|
|
11
|
+
*
|
|
12
|
+
* No markdown body `[[link]]` parsing is performed (T11826 AC4) — the edges
|
|
13
|
+
* derive purely from structured columns. The derivation is **idempotent**: it
|
|
14
|
+
* truncates and rebuilds the whole table, so callers may re-run it after any
|
|
15
|
+
* `docs add` / `supersede` / `docs update` write to keep the graph fresh.
|
|
16
|
+
*
|
|
17
|
+
* This module is the runtime twin of the SQL backfill in
|
|
18
|
+
* `migrations/drizzle-tasks/20260605000001_t11826-docs-wikilinks/migration.sql`
|
|
19
|
+
* — the migration seeds the table on schema upgrade, this function rebuilds it
|
|
20
|
+
* on demand.
|
|
21
|
+
*
|
|
22
|
+
* @task T11826 (Epic T11781 / Saga T11778)
|
|
23
|
+
* @adr ADR-078 — Docs SSoT as provenance graph
|
|
24
|
+
* @see build-provenance-graph.ts — the on-the-fly BFS this table makes O(edges)
|
|
25
|
+
*/
|
|
26
|
+
import { type DocsWikilinkRelation } from '../store/schema/attachments.js';
|
|
27
|
+
/**
|
|
28
|
+
* A single slug-addressed wikilink edge.
|
|
29
|
+
*
|
|
30
|
+
* @task T11826
|
|
31
|
+
*/
|
|
32
|
+
export interface WikilinkEdge {
|
|
33
|
+
/** Source doc slug (always a doc). */
|
|
34
|
+
readonly fromSlug: string;
|
|
35
|
+
/** Target slug — a doc slug, or a `T####` task id when {@link toIsTask}. */
|
|
36
|
+
readonly toSlug: string;
|
|
37
|
+
/** Which provenance column produced this edge. */
|
|
38
|
+
readonly relation: DocsWikilinkRelation;
|
|
39
|
+
/** True when {@link toSlug} is a task id (`related-task` edges). */
|
|
40
|
+
readonly toIsTask: boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Options shared by {@link rebuildDocsWikilinks}.
|
|
44
|
+
*
|
|
45
|
+
* @task T11826
|
|
46
|
+
*/
|
|
47
|
+
export interface RebuildDocsWikilinksOptions {
|
|
48
|
+
/** Project root for DB resolution. Defaults to {@link getProjectRoot}(). */
|
|
49
|
+
readonly projectRoot?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Outcome of a {@link rebuildDocsWikilinks} call.
|
|
53
|
+
*
|
|
54
|
+
* @task T11826
|
|
55
|
+
*/
|
|
56
|
+
export interface RebuildDocsWikilinksResult {
|
|
57
|
+
/** Number of edges in the table after the rebuild. */
|
|
58
|
+
readonly edgeCount: number;
|
|
59
|
+
/** Per-relation edge counts. */
|
|
60
|
+
readonly byRelation: Readonly<Record<DocsWikilinkRelation, number>>;
|
|
61
|
+
}
|
|
62
|
+
/** Narrow row shape read from `attachments` during derivation. */
|
|
63
|
+
interface DerivationRow {
|
|
64
|
+
readonly slug: string;
|
|
65
|
+
readonly supersedesSlug: string | null;
|
|
66
|
+
readonly supersededBySlug: string | null;
|
|
67
|
+
readonly relatedTasks: string | null;
|
|
68
|
+
readonly topics: string | null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Idempotently rebuild the `docs_wikilinks` edge table from the provenance
|
|
72
|
+
* columns on `attachments`.
|
|
73
|
+
*
|
|
74
|
+
* The whole table is truncated and re-derived inside a single transaction, so
|
|
75
|
+
* the function is safe to call after any doc write and always converges to the
|
|
76
|
+
* same edge set for a given `attachments` state.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```ts
|
|
80
|
+
* const { edgeCount, byRelation } = await rebuildDocsWikilinks();
|
|
81
|
+
* console.log(`derived ${edgeCount} edges (${byRelation['topic']} topic links)`);
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* @param opts - Optional project-root override.
|
|
85
|
+
* @returns Edge totals after the rebuild.
|
|
86
|
+
* @task T11826
|
|
87
|
+
*/
|
|
88
|
+
export declare function rebuildDocsWikilinks(opts?: RebuildDocsWikilinksOptions): Promise<RebuildDocsWikilinksResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Pure derivation: turn slugged `attachments` rows into the full edge set.
|
|
91
|
+
*
|
|
92
|
+
* Exposed for unit testing the derivation rules without a database. The output
|
|
93
|
+
* is deduplicated on the (`fromSlug`, `toSlug`, `relation`) composite key.
|
|
94
|
+
*
|
|
95
|
+
* @param rows - Slugged attachment rows with their provenance columns.
|
|
96
|
+
* @returns The derived wikilink edges.
|
|
97
|
+
* @task T11826
|
|
98
|
+
*/
|
|
99
|
+
export declare function deriveWikilinkEdges(rows: readonly DerivationRow[]): WikilinkEdge[];
|
|
100
|
+
/**
|
|
101
|
+
* Read all wikilink edges incident to a doc slug — **bidirectional** by default.
|
|
102
|
+
*
|
|
103
|
+
* Returns both outbound edges (`from_slug = slug`) and inbound backlinks
|
|
104
|
+
* (`to_slug = slug`). This is the query the Obsidian plugin (T11827) renders to
|
|
105
|
+
* show a doc's neighborhood, and what `cleo docs graph` hydrates for persisted
|
|
106
|
+
* backlinks.
|
|
107
|
+
*
|
|
108
|
+
* @param slug - The doc slug to fetch edges for.
|
|
109
|
+
* @param opts.direction - `'both'` (default), `'out'`, or `'in'`.
|
|
110
|
+
* @param opts.projectRoot - Project root override.
|
|
111
|
+
* @returns The incident edges.
|
|
112
|
+
* @task T11826
|
|
113
|
+
*/
|
|
114
|
+
export declare function getDocsWikilinks(slug: string, opts?: {
|
|
115
|
+
direction?: 'both' | 'out' | 'in';
|
|
116
|
+
projectRoot?: string;
|
|
117
|
+
}): Promise<WikilinkEdge[]>;
|
|
118
|
+
export {};
|
|
119
|
+
//# sourceMappingURL=wikilinks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wikilinks.d.ts","sourceRoot":"","sources":["../../src/docs/wikilinks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,EAAE,KAAK,oBAAoB,EAAiB,MAAM,gCAAgC,CAAC;AAI1F;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC;CACrE;AAED,kEAAkE;AAClE,UAAU,aAAa;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,2BAAgC,GACrC,OAAO,CAAC,0BAA0B,CAAC,CAoErC;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,GAAG,YAAY,EAAE,CAoDlF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,OAAO,CAAC,YAAY,EAAE,CAAC,CAmBzB"}
|