@superbee/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/dist/backend.d.ts +77 -0
  2. package/dist/backend.d.ts.map +1 -0
  3. package/dist/backend.js +380 -0
  4. package/dist/backend.js.map +1 -0
  5. package/dist/bundle.d.ts +38 -0
  6. package/dist/bundle.d.ts.map +1 -0
  7. package/dist/bundle.js +107 -0
  8. package/dist/bundle.js.map +1 -0
  9. package/dist/content-type.d.ts +72 -0
  10. package/dist/content-type.d.ts.map +1 -0
  11. package/dist/content-type.js +149 -0
  12. package/dist/content-type.js.map +1 -0
  13. package/dist/document-mutation.d.ts +83 -0
  14. package/dist/document-mutation.d.ts.map +1 -0
  15. package/dist/document-mutation.js +319 -0
  16. package/dist/document-mutation.js.map +1 -0
  17. package/dist/document-precondition.d.ts +62 -0
  18. package/dist/document-precondition.d.ts.map +1 -0
  19. package/dist/document-precondition.js +134 -0
  20. package/dist/document-precondition.js.map +1 -0
  21. package/dist/document-write-policy.d.ts +42 -0
  22. package/dist/document-write-policy.d.ts.map +1 -0
  23. package/dist/document-write-policy.js +134 -0
  24. package/dist/document-write-policy.js.map +1 -0
  25. package/dist/engine.d.ts +48 -0
  26. package/dist/engine.d.ts.map +1 -0
  27. package/dist/engine.js +209 -0
  28. package/dist/engine.js.map +1 -0
  29. package/dist/errors.d.ts +36 -0
  30. package/dist/errors.d.ts.map +1 -0
  31. package/dist/errors.js +50 -0
  32. package/dist/errors.js.map +1 -0
  33. package/dist/filesystem-identity.d.ts +208 -0
  34. package/dist/filesystem-identity.d.ts.map +1 -0
  35. package/dist/filesystem-identity.js +675 -0
  36. package/dist/filesystem-identity.js.map +1 -0
  37. package/dist/filesystem-lock.d.ts +65 -0
  38. package/dist/filesystem-lock.d.ts.map +1 -0
  39. package/dist/filesystem-lock.js +460 -0
  40. package/dist/filesystem-lock.js.map +1 -0
  41. package/dist/freshness.d.ts +31 -0
  42. package/dist/freshness.d.ts.map +1 -0
  43. package/dist/freshness.js +98 -0
  44. package/dist/freshness.js.map +1 -0
  45. package/dist/frontmatter-contract.d.ts +17 -0
  46. package/dist/frontmatter-contract.d.ts.map +1 -0
  47. package/dist/frontmatter-contract.js +29 -0
  48. package/dist/frontmatter-contract.js.map +1 -0
  49. package/dist/frontmatter.d.ts +30 -0
  50. package/dist/frontmatter.d.ts.map +1 -0
  51. package/dist/frontmatter.js +115 -0
  52. package/dist/frontmatter.js.map +1 -0
  53. package/dist/index-marker.d.ts +3 -0
  54. package/dist/index-marker.d.ts.map +1 -0
  55. package/dist/index-marker.js +3 -0
  56. package/dist/index-marker.js.map +1 -0
  57. package/dist/index-projection.d.ts +79 -0
  58. package/dist/index-projection.d.ts.map +1 -0
  59. package/dist/index-projection.js +245 -0
  60. package/dist/index-projection.js.map +1 -0
  61. package/dist/index.d.ts +68 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +110 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/kinds-load.d.ts +13 -0
  66. package/dist/kinds-load.d.ts.map +1 -0
  67. package/dist/kinds-load.js +34 -0
  68. package/dist/kinds-load.js.map +1 -0
  69. package/dist/kinds.d.ts +241 -0
  70. package/dist/kinds.d.ts.map +1 -0
  71. package/dist/kinds.js +1001 -0
  72. package/dist/kinds.js.map +1 -0
  73. package/dist/links.d.ts +62 -0
  74. package/dist/links.d.ts.map +1 -0
  75. package/dist/links.js +203 -0
  76. package/dist/links.js.map +1 -0
  77. package/dist/meaningful-change-time.d.ts +11 -0
  78. package/dist/meaningful-change-time.d.ts.map +1 -0
  79. package/dist/meaningful-change-time.js +16 -0
  80. package/dist/meaningful-change-time.js.map +1 -0
  81. package/dist/memory-backend.d.ts +55 -0
  82. package/dist/memory-backend.d.ts.map +1 -0
  83. package/dist/memory-backend.js +214 -0
  84. package/dist/memory-backend.js.map +1 -0
  85. package/dist/mutation-attribution.d.ts +19 -0
  86. package/dist/mutation-attribution.d.ts.map +1 -0
  87. package/dist/mutation-attribution.js +34 -0
  88. package/dist/mutation-attribution.js.map +1 -0
  89. package/dist/mutation.d.ts +89 -0
  90. package/dist/mutation.d.ts.map +1 -0
  91. package/dist/mutation.js +94 -0
  92. package/dist/mutation.js.map +1 -0
  93. package/dist/page.d.ts +87 -0
  94. package/dist/page.d.ts.map +1 -0
  95. package/dist/page.js +151 -0
  96. package/dist/page.js.map +1 -0
  97. package/dist/paths.d.ts +78 -0
  98. package/dist/paths.d.ts.map +1 -0
  99. package/dist/paths.js +148 -0
  100. package/dist/paths.js.map +1 -0
  101. package/dist/portable-frontmatter.d.ts +8 -0
  102. package/dist/portable-frontmatter.d.ts.map +1 -0
  103. package/dist/portable-frontmatter.js +35 -0
  104. package/dist/portable-frontmatter.js.map +1 -0
  105. package/dist/publication-filesystem.d.ts +6 -0
  106. package/dist/publication-filesystem.d.ts.map +1 -0
  107. package/dist/publication-filesystem.js +6 -0
  108. package/dist/publication-filesystem.js.map +1 -0
  109. package/dist/query-filter.d.ts +12 -0
  110. package/dist/query-filter.d.ts.map +1 -0
  111. package/dist/query-filter.js +29 -0
  112. package/dist/query-filter.js.map +1 -0
  113. package/dist/query-selection.d.ts +25 -0
  114. package/dist/query-selection.d.ts.map +1 -0
  115. package/dist/query-selection.js +48 -0
  116. package/dist/query-selection.js.map +1 -0
  117. package/dist/remote-backend.d.ts +152 -0
  118. package/dist/remote-backend.d.ts.map +1 -0
  119. package/dist/remote-backend.js +505 -0
  120. package/dist/remote-backend.js.map +1 -0
  121. package/dist/remote.d.ts +4 -0
  122. package/dist/remote.d.ts.map +1 -0
  123. package/dist/remote.js +3 -0
  124. package/dist/remote.js.map +1 -0
  125. package/dist/storage.d.ts +7 -0
  126. package/dist/storage.d.ts.map +1 -0
  127. package/dist/storage.js +6 -0
  128. package/dist/storage.js.map +1 -0
  129. package/dist/types.d.ts +438 -0
  130. package/dist/types.d.ts.map +1 -0
  131. package/dist/types.js +12 -0
  132. package/dist/types.js.map +1 -0
  133. package/dist/validation.d.ts +22 -0
  134. package/dist/validation.d.ts.map +1 -0
  135. package/dist/validation.js +12 -0
  136. package/dist/validation.js.map +1 -0
  137. package/dist/version-transport.d.ts +13 -0
  138. package/dist/version-transport.d.ts.map +1 -0
  139. package/dist/version-transport.js +26 -0
  140. package/dist/version-transport.js.map +1 -0
  141. package/dist/versioning.d.ts +48 -0
  142. package/dist/versioning.d.ts.map +1 -0
  143. package/dist/versioning.js +62 -0
  144. package/dist/versioning.js.map +1 -0
  145. package/package.json +84 -0
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Portable `index.md` projection policy.
3
+ *
4
+ * Concept heads are authoritative. Index files are deterministic, replaceable views over
5
+ * one observed head set. Planning is pure; preparation reads and classifies EVERY target
6
+ * before a write; application uses those exact versions with single-shot CAS. A conflict
7
+ * stops the batch instead of silently re-deciding one file outside the global preflight.
8
+ */
9
+ import { backendFor } from "./bundle.js";
10
+ import { InvalidInputError } from "./errors.js";
11
+ import { parseMarkdown, stringifyWithData } from "./frontmatter.js";
12
+ import { GENERATED_INDEX_MARKER } from "./index-marker.js";
13
+ import { assertSafeConceptId, toPosix } from "./paths.js";
14
+ export { GENERATED_INDEX_MARKER } from "./index-marker.js";
15
+ /** A terminal per-file failure after zero or more earlier targets completed. */
16
+ export class IndexProjectionWriteError extends Error {
17
+ name = "IndexProjectionWriteError";
18
+ failed;
19
+ completed;
20
+ pending;
21
+ constructor(failed, completed, pending, cause) {
22
+ super(`index projection write failed at '${displayDir(failed)}'`, { cause });
23
+ this.failed = failed;
24
+ this.completed = completed;
25
+ this.pending = pending;
26
+ }
27
+ }
28
+ function displayDir(dir) {
29
+ return dir === "" ? "index.md" : `${dir}/index.md`;
30
+ }
31
+ /** Collapse frontmatter display text to one Markdown line. */
32
+ function inlineText(value) {
33
+ if (typeof value !== "string")
34
+ return undefined;
35
+ const collapsed = value.replace(/\s+/g, " ").trim();
36
+ return collapsed === "" ? undefined : collapsed;
37
+ }
38
+ function escapeLabel(value) {
39
+ return value.replace(/\\/g, "\\\\").replace(/\[/g, "\\[").replace(/\]/g, "\\]");
40
+ }
41
+ /** URL-encode each path segment while preserving hierarchy and the `.md` suffix. */
42
+ function hrefSegment(value) {
43
+ return encodeURIComponent(value).replace(/[!'()*]/g, (char) => `%${char.charCodeAt(0).toString(16).toUpperCase()}`);
44
+ }
45
+ function ensureDirectory(map, dir) {
46
+ const existing = map.get(dir);
47
+ if (existing)
48
+ return existing;
49
+ const created = { direct: [], children: new Set() };
50
+ map.set(dir, created);
51
+ return created;
52
+ }
53
+ function depth(dir) {
54
+ return dir === "" ? 0 : dir.split("/").length;
55
+ }
56
+ /** Locale-independent code-unit ordering keeps projection bytes portable across hosts. */
57
+ function compareText(a, b) {
58
+ return a < b ? -1 : a > b ? 1 : 0;
59
+ }
60
+ /**
61
+ * Plan root + every ancestor directory from ONE complete `queryHeads`-shaped set.
62
+ * The caller supplies the root display name; core never derives it from a local path or URL.
63
+ */
64
+ export function planIndexProjection(displayName, heads) {
65
+ const directories = new Map();
66
+ ensureDirectory(directories, "");
67
+ for (const head of heads) {
68
+ assertSafeConceptId(head.id);
69
+ const normalized = toPosix(head.id).replace(/^\.\//, "");
70
+ const segments = normalized.split("/");
71
+ const conceptName = segments.pop();
72
+ let parent = "";
73
+ for (const child of segments) {
74
+ const next = parent === "" ? child : `${parent}/${child}`;
75
+ ensureDirectory(directories, parent).children.add(child);
76
+ ensureDirectory(directories, next);
77
+ parent = next;
78
+ }
79
+ ensureDirectory(directories, parent).direct.push({ ...head, id: parent === "" ? conceptName : `${parent}/${conceptName}` });
80
+ }
81
+ const rootTitle = inlineText(displayName) ?? "bundle";
82
+ const targets = [...directories.entries()]
83
+ .sort(([a], [b]) => compareText(a, b))
84
+ .map(([dir, projection]) => {
85
+ const groups = new Map();
86
+ const prefix = dir === "" ? "" : `${dir}/`;
87
+ for (const head of projection.direct) {
88
+ const fileName = head.id.slice(prefix.length);
89
+ const type = inlineText(head.frontmatter.type) ?? "Concept";
90
+ const title = inlineText(head.frontmatter.title) ?? fileName;
91
+ const description = inlineText(head.frontmatter.description);
92
+ const href = `${hrefSegment(fileName)}.md`;
93
+ const bullet = `* [${escapeLabel(title)}](${href})${description ? ` - ${description}` : ""}`;
94
+ const group = groups.get(type) ?? [];
95
+ group.push(bullet);
96
+ groups.set(type, group);
97
+ }
98
+ const sections = [];
99
+ for (const type of [...groups.keys()].sort()) {
100
+ sections.push(`# ${type}\n\n${groups.get(type).sort().join("\n")}\n`);
101
+ }
102
+ if (projection.children.size > 0) {
103
+ const bullets = [...projection.children]
104
+ .sort()
105
+ .map((child) => `* [${escapeLabel(child)}](${hrefSegment(child)}/index.md)`);
106
+ sections.push(`# Subdirectories\n\n${bullets.join("\n")}\n`);
107
+ }
108
+ const title = dir === "" ? rootTitle : inlineText(dir.split("/").pop()) ?? "directory";
109
+ const body = `${GENERATED_INDEX_MARKER}\n# ${title}\n\n${sections.join("\n")}`.trimEnd() + "\n";
110
+ return { dir, body };
111
+ });
112
+ return { targets };
113
+ }
114
+ function markerOwnership(body) {
115
+ const lines = body.split("\n");
116
+ const exact = lines.filter((line) => line === GENERATED_INDEX_MARKER).length;
117
+ const markerLike = lines.filter((line) => /^\s*<!--\s*agentstate-lite:generated-index(?::[^>]*)?\s*-->\s*$/.test(line)).length;
118
+ if (exact > 1)
119
+ return { owned: false, reason: "duplicate-marker" };
120
+ if (exact === 1 && markerLike === 1 && lines[0] === GENERATED_INDEX_MARKER)
121
+ return { owned: true };
122
+ if (markerLike > 0)
123
+ return { owned: false, reason: "malformed-marker" };
124
+ return { owned: false, reason: "unmarked" };
125
+ }
126
+ function inspectExisting(dir, content) {
127
+ if (dir === "") {
128
+ try {
129
+ const { frontmatter, body } = parseMarkdown(content, "index.md");
130
+ const keys = Object.keys(frontmatter);
131
+ if (keys.length !== 1 || keys[0] !== "okf_version" || typeof frontmatter.okf_version !== "string") {
132
+ return { owned: false, body, reason: "malformed-root" };
133
+ }
134
+ return {
135
+ ...markerOwnership(body),
136
+ body,
137
+ okfVersion: frontmatter.okf_version,
138
+ };
139
+ }
140
+ catch {
141
+ return { owned: false, body: content, reason: "malformed-root" };
142
+ }
143
+ }
144
+ try {
145
+ const { frontmatter, body } = parseMarkdown(content, `${dir}/index.md`);
146
+ if (Object.keys(frontmatter).length > 0) {
147
+ return { owned: false, body, reason: "nested-frontmatter" };
148
+ }
149
+ return { ...markerOwnership(body), body };
150
+ }
151
+ catch {
152
+ return { owned: false, body: content, reason: "nested-frontmatter" };
153
+ }
154
+ }
155
+ function desiredContent(dir, body, okfVersion) {
156
+ return dir === "" ? stringifyWithData({ okf_version: okfVersion ?? "0.1" }, body) : body;
157
+ }
158
+ /**
159
+ * Read and classify every planned target before any write. A single refusal blocks the
160
+ * whole preparation; `force` makes each unmarked/malformed target an explicit adoption.
161
+ */
162
+ export async function prepareIndexProjection(bundle, plan, options = {}) {
163
+ const backend = backendFor(bundle);
164
+ const targets = [];
165
+ for (const planned of plan.targets) {
166
+ const current = await backend.readReserved(planned.dir, "index.md");
167
+ if (current === null) {
168
+ targets.push({
169
+ dir: planned.dir,
170
+ content: desiredContent(planned.dir, planned.body),
171
+ expectedVersion: null,
172
+ disposition: "missing",
173
+ });
174
+ continue;
175
+ }
176
+ const ownership = inspectExisting(planned.dir, current.content);
177
+ const content = desiredContent(planned.dir, planned.body, ownership.okfVersion);
178
+ if (ownership.owned) {
179
+ targets.push({
180
+ dir: planned.dir,
181
+ content,
182
+ expectedVersion: current.version,
183
+ disposition: current.content === content ? "unchanged" : "generated",
184
+ });
185
+ }
186
+ else if (options.force) {
187
+ targets.push({
188
+ dir: planned.dir,
189
+ content,
190
+ expectedVersion: current.version,
191
+ disposition: "adopted",
192
+ ...(ownership.reason ? { reason: ownership.reason } : {}),
193
+ });
194
+ }
195
+ else {
196
+ targets.push({
197
+ dir: planned.dir,
198
+ content,
199
+ expectedVersion: current.version,
200
+ disposition: "refused",
201
+ ...(ownership.reason ? { reason: ownership.reason } : {}),
202
+ });
203
+ }
204
+ }
205
+ const refused = targets.filter((target) => target.disposition === "refused");
206
+ return refused.length > 0
207
+ ? { ready: false, targets, refused }
208
+ : { ready: true, targets, refused: [] };
209
+ }
210
+ function writableDisposition(disposition) {
211
+ return disposition === "missing" || disposition === "generated" || disposition === "adopted";
212
+ }
213
+ /**
214
+ * Apply a ready preparation deepest-first and root-last. Each target gets ONE CAS attempt
215
+ * against the version captured during global preparation; a conflict is terminal and reports
216
+ * completed/pending paths so a full re-prepare can resume idempotently.
217
+ */
218
+ export async function applyIndexProjection(bundle, prepared, options = {}) {
219
+ if (!prepared.ready) {
220
+ throw new InvalidInputError("Cannot apply a refused index projection; re-prepare with explicit force to adopt it.");
221
+ }
222
+ const backend = backendFor(bundle);
223
+ const unchanged = prepared.targets
224
+ .filter((target) => target.disposition === "unchanged")
225
+ .map((target) => target.dir);
226
+ const writable = prepared.targets
227
+ .filter((target) => writableDisposition(target.disposition))
228
+ .sort((a, b) => depth(b.dir) - depth(a.dir) || compareText(a.dir, b.dir));
229
+ const completed = [];
230
+ for (let index = 0; index < writable.length; index++) {
231
+ const target = writable[index];
232
+ try {
233
+ const version = await backend.writeReserved(target.dir, "index.md", target.content, {
234
+ expectedVersion: target.expectedVersion,
235
+ ...(options.actor !== undefined ? { actor: options.actor } : {}),
236
+ });
237
+ completed.push({ dir: target.dir, disposition: target.disposition, version });
238
+ }
239
+ catch (cause) {
240
+ throw new IndexProjectionWriteError(target.dir, completed, writable.slice(index + 1).map((pending) => pending.dir), cause);
241
+ }
242
+ }
243
+ return { completed, unchanged, pending: [] };
244
+ }
245
+ //# sourceMappingURL=index-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-projection.js","sourceRoot":"","sources":["../src/index-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAmD3D,gFAAgF;AAChF,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAChC,IAAI,GAAG,2BAA2B,CAAC;IAC5C,MAAM,CAAS;IACf,SAAS,CAAuB;IAChC,OAAO,CAAW;IAE3B,YACE,MAAc,EACd,SAA+B,EAC/B,OAAiB,EACjB,KAAc;QAEd,KAAK,CAAC,qCAAqC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAOD,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC;AACrD,CAAC;AAED,8DAA8D;AAC9D,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,OAAO,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClF,CAAC;AAED,oFAAoF;AACpF,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAC5D,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CACpD,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAqC,EAAE,GAAW;IACzE,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAU,EAAE,CAAC;IAC5D,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,KAAK,CAAC,GAAW;IACxB,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAChD,CAAC;AAED,0FAA0F;AAC1F,SAAS,WAAW,CAAC,CAAS,EAAE,CAAS;IACvC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,KAA4B;IACnF,MAAM,WAAW,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC3D,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,EAAG,CAAC;QACpC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC;YAC1D,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACzD,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACnC,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;QACD,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,WAAW,EAAE,EAAE,CAAC,CAAC;IAC9H,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC;IACtD,MAAM,OAAO,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;SACvC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,EAAgB,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC3C,MAAM,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;YAC5D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC;YAC7D,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAC7D,MAAM,IAAI,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7F,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC;iBACrC,IAAI,EAAE;iBACN,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC/E,QAAQ,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC;QACvF,MAAM,IAAI,GAAG,GAAG,sBAAsB,OAAO,KAAK,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QAChG,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEL,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AASD,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,sBAAsB,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACvC,iEAAiE,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7E,CAAC,MAAM,CAAC;IACT,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IACnE,IAAI,KAAK,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,sBAAsB;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACnG,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IACxE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,eAAe,CAAC,GAAW,EAAE,OAAe;IACnD,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,IAAI,OAAO,WAAW,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBAClG,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;YAC1D,CAAC;YACD,OAAO;gBACL,GAAG,eAAe,CAAC,IAAI,CAAC;gBACxB,IAAI;gBACJ,UAAU,EAAE,WAAW,CAAC,WAAW;aACpC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACnE,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,CAAC,CAAC;QACxE,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;QAC9D,CAAC;QACD,OAAO,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,IAAY,EAAE,UAAmB;IACpE,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,UAAU,IAAI,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3F,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAc,EACd,IAAyB,EACzB,UAA+B,EAAE;IAEjC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACpE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC;gBAClD,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,SAAS;aACvB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;QAChF,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO;gBACP,eAAe,EAAE,OAAO,CAAC,OAAO;gBAChC,WAAW,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;aACrE,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO;gBACP,eAAe,EAAE,OAAO,CAAC,OAAO;gBAChC,WAAW,EAAE,SAAS;gBACtB,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO;gBACP,eAAe,EAAE,OAAO,CAAC,OAAO;gBAChC,WAAW,EAAE,SAAS;gBACtB,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC;IAC7E,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC;QACvB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;QACpC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,mBAAmB,CAC1B,WAAuC;IAEvC,OAAO,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,SAAS,CAAC;AAC/F,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAc,EACd,QAA8B,EAC9B,UAA8B,EAAE;IAEhC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,IAAI,iBAAiB,CAAC,sFAAsF,CAAC,CAAC;IACtH,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO;SAC/B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,WAAW,CAAC;SACtD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO;SAC9B,MAAM,CAAC,CAAC,MAAM,EAAsF,EAAE,CACrG,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CACxC;SACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAyB,EAAE,CAAC;IAE3C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE;gBAClF,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjE,CAAC,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,yBAAyB,CACjC,MAAM,CAAC,GAAG,EACV,SAAS,EACT,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EACvD,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * `@superbee/core` — the OKF store engine.
3
+ *
4
+ * An **Open Knowledge Format (OKF v0.1 or v0.2)** *Knowledge Bundle* is a
5
+ * directory tree of UTF-8 markdown files, each carrying a YAML frontmatter block
6
+ * (delimited by `---` lines) plus a markdown body. Every non-reserved `.md` file
7
+ * is a *Concept*; its *Concept ID* is the file path minus `.md`
8
+ * (e.g. `tables/users.md` -> `tables/users`).
9
+ *
10
+ * The FILESYSTEM is the source of truth by default, but storage is routed through
11
+ * a pluggable {@link StorageBackend} (default: {@link FilesystemBackend}). This
12
+ * module implements bundle I/O, standard-markdown cross-links (never wikilinks),
13
+ * derived backlinks, freshness derived from the edition's meaningful-change clock, and reserved-file
14
+ * (`index.md`/`log.md`) handling. Human-facing bundle Pages consume this engine through the
15
+ * reference server's narrow browser bridge (read-only v0 plus shell-confirmed local proposals).
16
+ *
17
+ * The public function signatures below are contract-stable; everything past the
18
+ * "extensions" line is additive (pure helpers, reserved-file accessors, and the
19
+ * ported content_type utilities).
20
+ *
21
+ * @see OKF spec — GoogleCloudPlatform/knowledge-catalog, `okf/SPEC.md`
22
+ * @packageDocumentation
23
+ */
24
+ export type { ConceptId, Frontmatter, OkfDocument, Bundle, InitBundleOptions, QueryFilter, Link, EdgeFilter, FreshnessVerdict, FreshnessOptions, FreshnessResult, ReservedFilename, StorageBackend, StorageCapabilities, Version, ReadResult, ReservedReadResult, VersionInfo, WriteOptions, DeleteOptions, } from "./types.js";
25
+ export { initBundle, readBundleOkfVersion, resolveOkfAuthoringVersion, DEFAULT_OKF_AUTHORING_VERSION, SUPPORTED_OKF_AUTHORING_VERSIONS, writeDoc, readDoc, existsDoc, query, parseLinks, backlinks, queryEdges, } from "./bundle.js";
26
+ export { writeDocVersioned, readDocVersioned, docVersions } from "./bundle.js";
27
+ export type { WriteResult } from "./bundle.js";
28
+ export { deleteDoc, deleteBlob } from "./bundle.js";
29
+ export { readBlob, writeBlob, existsBlob, listBlobs } from "./bundle.js";
30
+ export type { BlobKey, ReadBlobResult } from "./types.js";
31
+ export { freshness } from "./freshness.js";
32
+ export { FilesystemBackend } from "./backend.js";
33
+ export { MemoryBackend } from "./memory-backend.js";
34
+ export { withFilesystemMutationLock, FilesystemMutationLockError, filesystemMutationLockPath, } from "./filesystem-lock.js";
35
+ export type { FilesystemMutationLockOptions, FilesystemMutationLockOwner, } from "./filesystem-lock.js";
36
+ export { RemoteBackend, RemoteError } from "./remote-backend.js";
37
+ export type { FetchLike, RemoteBackendOptions } from "./remote-backend.js";
38
+ export { contentVersion, versionOfBytes, blobVersion, defaultActor, VersionConflict, stripETagWrapper, } from "./versioning.js";
39
+ export { versionedMutation } from "./mutation.js";
40
+ export type { MutationDecision, VersionedMutationOptions, VersionedMutationOutcome } from "./mutation.js";
41
+ export { mutateDocument, DocumentNotFoundError, KindConformanceError, } from "./document-mutation.js";
42
+ export type { DocumentMutationCandidate, DocumentMutationContext, DocumentMutationMode, DocumentMutationResult, MutateDocumentOptions, } from "./document-mutation.js";
43
+ export { PreconditionFailed, assertFieldPreconditions } from "./document-precondition.js";
44
+ export type { FieldExpectation, FieldPrecondition } from "./document-precondition.js";
45
+ export { list } from "./bundle.js";
46
+ export type { QueryOptions, SkippedDoc } from "./bundle.js";
47
+ export { queryHeads } from "./bundle.js";
48
+ export { matchesFilter } from "./query-filter.js";
49
+ export { applyQuerySelectionFilters } from "./query-selection.js";
50
+ export type { QuerySelectionParams } from "./query-selection.js";
51
+ export type { HeadResult } from "./types.js";
52
+ export { GENERATED_INDEX_MARKER, IndexProjectionWriteError, planIndexProjection, prepareIndexProjection, applyIndexProjection, } from "./index-projection.js";
53
+ export type { PlannedIndex, IndexProjectionPlan, IndexProjectionDisposition, PreparedIndexTarget, ReadyIndexProjection, RefusedIndexProjection, IndexProjectionPreparation, AppliedIndexTarget, IndexProjectionApplyResult, } from "./index-projection.js";
54
+ export { RESERVED_FILENAMES, isReservedFile, conceptIdFromPath, pathFromConceptId, assertSafeConceptId, assertSafeReservedDir, assertSafeBlobKey, toPosix, } from "./paths.js";
55
+ export { extractMarkdownLinks, resolveConceptId, relativeHref, parseLinksFromDoc, isExternalHref, } from "./links.js";
56
+ export type { RawLink } from "./links.js";
57
+ export { parseTimestamp } from "./freshness.js";
58
+ export { SUPERBEE_UPDATED_BY_FIELD, mutationActorFromFrontmatter, persistMutationActor, } from "./mutation-attribution.js";
59
+ export type { PersistMutationActorOptions } from "./mutation-attribution.js";
60
+ export { parseMarkdown, stringifyDoc, stringifyWithData, normalizeDocumentBodyForStorage, isUsableTimestamp, MalformedDocumentError, } from "./frontmatter.js";
61
+ export { InvalidInputError, FilesystemIdentityAliasError, ConcurrentReplacementError } from "./errors.js";
62
+ export { applyV02MutationMetadata } from "./document-write-policy.js";
63
+ export { CONVENTIONS_PREFIX, CONVENTION_TYPE, PROGRESS_STATUS_FIELD, SUPERBEE_PROGRESS_STATUS_FIELD, RESERVED_KIND_FIELD_NAMES, progressStatusStorageField, progressStatusCoordinate, resolveKindFieldCoordinate, claimCoordinates, kindInputFieldNames, readKindField, projectLogicalKindFields, projectKindForAuthoring, projectKindValidationWarnings, validateAgainstKind, isPresent, defaultTimestampAndValidateAgainstRegistry, freshnessHorizonMs, kindConventionDoc, parseConventionDoc, buildKindRegistry, splitSections, isTerminal, } from "./kinds.js";
64
+ export { loadKinds } from "./kinds-load.js";
65
+ export type { KindClaimCoordinates, KindClaimPolicy, KindConvention, KindFieldCoordinate, KindFields, KindRegistry, RegistryValidationResult, } from "./kinds.js";
66
+ export { EXTENSION_CONTENT_TYPES, extensionOfDocKey, inferContentTypeFromDocKey, inferContentTypeForNewBlob, resolveContentType, DEFAULT_BLOB_CONTENT_TYPE, } from "./content-type.js";
67
+ export type { ContentTypeInference, ValidationWarning } from "./content-type.js";
68
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,110 @@
1
+ /**
2
+ * `@superbee/core` — the OKF store engine.
3
+ *
4
+ * An **Open Knowledge Format (OKF v0.1 or v0.2)** *Knowledge Bundle* is a
5
+ * directory tree of UTF-8 markdown files, each carrying a YAML frontmatter block
6
+ * (delimited by `---` lines) plus a markdown body. Every non-reserved `.md` file
7
+ * is a *Concept*; its *Concept ID* is the file path minus `.md`
8
+ * (e.g. `tables/users.md` -> `tables/users`).
9
+ *
10
+ * The FILESYSTEM is the source of truth by default, but storage is routed through
11
+ * a pluggable {@link StorageBackend} (default: {@link FilesystemBackend}). This
12
+ * module implements bundle I/O, standard-markdown cross-links (never wikilinks),
13
+ * derived backlinks, freshness derived from the edition's meaningful-change clock, and reserved-file
14
+ * (`index.md`/`log.md`) handling. Human-facing bundle Pages consume this engine through the
15
+ * reference server's narrow browser bridge (read-only v0 plus shell-confirmed local proposals).
16
+ *
17
+ * The public function signatures below are contract-stable; everything past the
18
+ * "extensions" line is additive (pure helpers, reserved-file accessors, and the
19
+ * ported content_type utilities).
20
+ *
21
+ * @see OKF spec — GoogleCloudPlatform/knowledge-catalog, `okf/SPEC.md`
22
+ * @packageDocumentation
23
+ */
24
+ // ── Contract functions ────────────────────────────────────────────────────────
25
+ export { initBundle, readBundleOkfVersion, resolveOkfAuthoringVersion, DEFAULT_OKF_AUTHORING_VERSION, SUPPORTED_OKF_AUTHORING_VERSIONS, writeDoc, readDoc, existsDoc, query, parseLinks, backlinks, queryEdges, } from "./bundle.js";
26
+ // Version-surfacing engine API (additive; the seam's hard-case capabilities threaded
27
+ // through the engine): `writeDocVersioned` returns the write's version token; `readDocVersioned`
28
+ // returns a document with its version; `docVersions` exposes attributed history. The plain
29
+ // `writeDoc`/`readDoc` above keep their historical `OkfDocument` returns unchanged.
30
+ export { writeDocVersioned, readDocVersioned, docVersions } from "./bundle.js";
31
+ // Delete (additive; the DELETE-operation pass): hard-delete, non-cascading, reserved files
32
+ // stay non-deletable (guarded at the SAME engine layer writeDocVersioned's reserved-file
33
+ // check lives at), idempotent (absent -> false, never an error). `deleteDoc` carries the
34
+ // engine's id-safety/reserved-file guard; `deleteBlob` is a pure pass-through, mirroring
35
+ // the blob wrappers above.
36
+ export { deleteDoc, deleteBlob } from "./bundle.js";
37
+ // Blob storage engine wrappers: opaque bytes + a
38
+ // content-type, addressed by a bundle-relative key DISJOINT from the concept-document
39
+ // namespace, versioned by a raw-byte content hash, CAS-able, actor-attributed — reusing
40
+ // the doc seam's version/CAS/actor machinery. Future consumers (the CLI's `promote`/
41
+ // `pull`) route through ONLY these, never a backend directly.
42
+ export { readBlob, writeBlob, existsBlob, listBlobs } from "./bundle.js";
43
+ export { freshness } from "./freshness.js";
44
+ // Pluggable storage: the seam is `StorageBackend` (types.ts). `FilesystemBackend` is
45
+ // the DEGENERATE default adapter (the engine falls back to it for a `{ root }` bundle);
46
+ // `MemoryBackend` implements the SAME contract for the hard case (real version chain,
47
+ // enforced compare-and-swap, per-write actor) and proves the engine is backend-neutral.
48
+ export { FilesystemBackend } from "./backend.js";
49
+ export { MemoryBackend } from "./memory-backend.js";
50
+ // Internal-workspace filesystem arbitration authority. CLI create-only policy reuses this
51
+ // external same-user lock rather than defining a second lock protocol or writing claims into a
52
+ // portable bundle tree.
53
+ export { withFilesystemMutationLock, FilesystemMutationLockError, filesystemMutationLockPath, } from "./filesystem-lock.js";
54
+ // `RemoteBackend` is the CLIENT half of the wire-protocol v0 seam-over-HTTP contract
55
+ // (docs/WIRE-PROTOCOL.md) — a FUTURE plug-in adapter, proven here against the
56
+ // in-repo reference server (`@superbee/server`) by the tri-backend contract
57
+ // tests. No CF/D1/production deployment is implied by its presence.
58
+ export { RemoteBackend, RemoteError } from "./remote-backend.js";
59
+ // Versioning / attribution primitives shared by every adapter: the content-addressed
60
+ // version token, a default actor, and the typed compare-and-swap conflict error.
61
+ // `blobVersion` is the raw-bytes sibling of `contentVersion`/`versionOfBytes` (blobs
62
+ // are hashed directly, never routed through a string/UTF-8 step).
63
+ export { contentVersion, versionOfBytes, blobVersion, defaultActor, VersionConflict, stripETagWrapper, } from "./versioning.js";
64
+ // The ONE versioned-mutation boundary: a shared read-decide-CAS-retry
65
+ // primitive consumed by document, link, and index mutation policies instead of
66
+ // independently hand-rolled loops.
67
+ export { versionedMutation } from "./mutation.js";
68
+ // Shared document mutation policy below any transport or presentation boundary. CLI and
69
+ // future trusted consumers reuse create/overwrite/patch semantics without importing CLI code.
70
+ export { mutateDocument, DocumentNotFoundError, KindConformanceError, } from "./document-mutation.js";
71
+ // Field preconditions: the domain-invariant guard `mutateDocument` evaluates against each
72
+ // attempt's fresh read, inside the same decision the CAS write is paired with. `PreconditionFailed`
73
+ // is terminal — consumers branch on the type and map it to their own conflict shape.
74
+ export { PreconditionFailed, assertFieldPreconditions } from "./document-precondition.js";
75
+ // ── Extensions (additive; do not break the contract) ──────────────────────────
76
+ // `list` is an alias of `query` (the `list/query` API surface).
77
+ export { list } from "./bundle.js";
78
+ // Head-projection scan + its canonical filter predicate — contracts documented at the
79
+ // definition sites (bundle.ts/types.ts). The delete-tolerant batch read they share
80
+ // (`readManyExisting`) is internal: its one-time export for the reference router was
81
+ // withdrawn when the router switched to consuming `queryHeads` wholesale.
82
+ export { queryHeads } from "./bundle.js";
83
+ export { matchesFilter } from "./query-filter.js";
84
+ export { applyQuerySelectionFilters } from "./query-selection.js";
85
+ // Portable, ownership-governed `index.md` projection. Raw reserved-file interop stays on the backend seam.
86
+ export { GENERATED_INDEX_MARKER, IndexProjectionWriteError, planIndexProjection, prepareIndexProjection, applyIndexProjection, } from "./index-projection.js";
87
+ // Pure, unit-testable path / link / note / freshness helpers.
88
+ export { RESERVED_FILENAMES, isReservedFile, conceptIdFromPath, pathFromConceptId, assertSafeConceptId, assertSafeReservedDir, assertSafeBlobKey, toPosix, } from "./paths.js";
89
+ export { extractMarkdownLinks, resolveConceptId, relativeHref, parseLinksFromDoc, isExternalHref, } from "./links.js";
90
+ export { parseTimestamp } from "./freshness.js";
91
+ export { SUPERBEE_UPDATED_BY_FIELD, mutationActorFromFrontmatter, persistMutationActor, } from "./mutation-attribution.js";
92
+ export { parseMarkdown, stringifyDoc, stringifyWithData, normalizeDocumentBodyForStorage, isUsableTimestamp, MalformedDocumentError, } from "./frontmatter.js";
93
+ // Typed input-validation rejection — consumer boundaries branch on the TYPE (CLI: USAGE/exit 2),
94
+ // never on message prose. `FilesystemIdentityAliasError` is the alias verdict of the filesystem
95
+ // adapter (a subclass, so it maps through the same branch); `ConcurrentReplacementError` is its
96
+ // bounded-retry runtime condition.
97
+ export { InvalidInputError, FilesystemIdentityAliasError, ConcurrentReplacementError } from "./errors.js";
98
+ export { applyV02MutationMetadata } from "./document-write-policy.js";
99
+ // Kind conventions: a bundle-declared, opt-in document-kind
100
+ // registry — validation + per-kind freshness horizons, read from `Convention` docs under
101
+ // `conventions/`. THE mechanism is core (one implementation, consumed by CLI/server/future
102
+ // MCP); usage is opt-in per bundle. A conventions-free bundle is byte-for-byte unaffected.
103
+ export { CONVENTIONS_PREFIX, CONVENTION_TYPE, PROGRESS_STATUS_FIELD, SUPERBEE_PROGRESS_STATUS_FIELD, RESERVED_KIND_FIELD_NAMES, progressStatusStorageField, progressStatusCoordinate, resolveKindFieldCoordinate, claimCoordinates, kindInputFieldNames, readKindField, projectLogicalKindFields, projectKindForAuthoring, projectKindValidationWarnings, validateAgainstKind, isPresent, defaultTimestampAndValidateAgainstRegistry, freshnessHorizonMs, kindConventionDoc, parseConventionDoc, buildKindRegistry, splitSections, isTerminal, } from "./kinds.js";
104
+ export { loadKinds } from "./kinds-load.js";
105
+ // Ported MIME utilities (holaxis-agentstate `packages/schemas/src/content-type.ts`).
106
+ // `resolveContentType` is the ONE place a blob's content-type is resolved (explicit
107
+ // override > inferred from key extension > `DEFAULT_BLOB_CONTENT_TYPE`) — every
108
+ // backend's blob methods route through it.
109
+ export { EXTENSION_CONTENT_TYPES, extensionOfDocKey, inferContentTypeFromDocKey, inferContentTypeForNewBlob, resolveContentType, DEFAULT_BLOB_CONTENT_TYPE, } from "./content-type.js";
110
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { KindRegistry } from "./kinds.js";
2
+ import type { Bundle } from "./types.js";
3
+ /**
4
+ * Build the {@link KindRegistry} for `bundle`: every `Convention` doc under
5
+ * {@link CONVENTIONS_PREFIX}, keyed by the `type` it governs. A Convention doc OUTSIDE
6
+ * the prefix is NOT discovered — that is the documented contract (CONTRIBUTING.md, "Kind conventions"),
7
+ * not a bug. Malformed docs are skipped with a collected warning (never thrown); a
8
+ * duplicate `governs` keeps the first-by-id declaration (query's results are
9
+ * id-sorted) and warns about the shadowed one. Callers build this ONCE per invocation
10
+ * and pass it down — no engine path calls this on its own.
11
+ */
12
+ export declare function loadKinds(bundle: Bundle): Promise<KindRegistry>;
13
+ //# sourceMappingURL=kinds-load.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kinds-load.d.ts","sourceRoot":"","sources":["../src/kinds-load.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAiBrE"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * The backend-touching half of the kind-convention registry: {@link loadKinds}
3
+ * queries a bundle's `conventions/` prefix and builds the registry out of `kinds.ts`'s pure
4
+ * parsing/derivation. Split from `kinds.ts` ONLY by dependency weight — `kinds.ts` is the
5
+ * browser-safe `@superbee/core/kinds` subpath (zero value imports), while this module may
6
+ * pull the engine (`query` -> backends -> node built-ins). One registry, two entry weights.
7
+ */
8
+ import { query } from "./bundle.js";
9
+ import { CONVENTIONS_PREFIX, CONVENTION_TYPE, buildKindRegistry, } from "./kinds.js";
10
+ /**
11
+ * Build the {@link KindRegistry} for `bundle`: every `Convention` doc under
12
+ * {@link CONVENTIONS_PREFIX}, keyed by the `type` it governs. A Convention doc OUTSIDE
13
+ * the prefix is NOT discovered — that is the documented contract (CONTRIBUTING.md, "Kind conventions"),
14
+ * not a bug. Malformed docs are skipped with a collected warning (never thrown); a
15
+ * duplicate `governs` keeps the first-by-id declaration (query's results are
16
+ * id-sorted) and warns about the shadowed one. Callers build this ONCE per invocation
17
+ * and pass it down — no engine path calls this on its own.
18
+ */
19
+ export async function loadKinds(bundle) {
20
+ const warnings = [];
21
+ // A convention doc whose YAML frontmatter is itself corrupt must not crash the WHOLE registry
22
+ // load (which every `kinds`/`status`/`new`/`doc write` invocation runs) — it is reported as a
23
+ // registry warning, exactly like a semantically-malformed convention, and the rest still load.
24
+ const docs = await query(bundle, { prefix: CONVENTIONS_PREFIX, type: CONVENTION_TYPE }, {
25
+ onSkip: ({ id, reason }) => warnings.push({
26
+ code: "KIND_CONVENTION_MALFORMED",
27
+ message: `skipped kind convention '${id}' with unparseable frontmatter: ${reason}`,
28
+ field: id,
29
+ severity: "warning",
30
+ }),
31
+ });
32
+ return buildKindRegistry(docs, warnings);
33
+ }
34
+ //# sourceMappingURL=kinds-load.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kinds-load.js","sourceRoot":"","sources":["../src/kinds-load.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAKpB;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc;IAC5C,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,8FAA8F;IAC9F,8FAA8F;IAC9F,+FAA+F;IAC/F,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE;QACtF,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CACzB,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,2BAA2B;YACjC,OAAO,EAAE,4BAA4B,EAAE,mCAAmC,MAAM,EAAE;YAClF,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,SAAS;SACpB,CAAC;KACL,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC"}