daftari 1.30.0 → 1.32.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 (310) hide show
  1. package/CHANGELOG.md +176 -0
  2. package/README.md +188 -4
  3. package/dist/access/rbac.d.ts +1 -0
  4. package/dist/access/rbac.d.ts.map +1 -1
  5. package/dist/access/rbac.js +7 -0
  6. package/dist/access/rbac.js.map +1 -1
  7. package/dist/audit/checks/broken_refs.d.ts +1 -1
  8. package/dist/audit/checks/broken_refs.d.ts.map +1 -1
  9. package/dist/audit/checks/broken_refs.js +77 -22
  10. package/dist/audit/checks/broken_refs.js.map +1 -1
  11. package/dist/audit/collect.d.ts +1 -0
  12. package/dist/audit/collect.d.ts.map +1 -1
  13. package/dist/audit/collect.js +22 -2
  14. package/dist/audit/collect.js.map +1 -1
  15. package/dist/audit/index.d.ts.map +1 -1
  16. package/dist/audit/index.js +9 -3
  17. package/dist/audit/index.js.map +1 -1
  18. package/dist/audit/links.d.ts.map +1 -1
  19. package/dist/audit/links.js +9 -3
  20. package/dist/audit/links.js.map +1 -1
  21. package/dist/audit/report.d.ts.map +1 -1
  22. package/dist/audit/report.js +2 -0
  23. package/dist/audit/report.js.map +1 -1
  24. package/dist/audit/types.d.ts +4 -1
  25. package/dist/audit/types.d.ts.map +1 -1
  26. package/dist/audit/types.js.map +1 -1
  27. package/dist/backfill/derive.d.ts.map +1 -1
  28. package/dist/backfill/derive.js +1 -0
  29. package/dist/backfill/derive.js.map +1 -1
  30. package/dist/cli.d.ts.map +1 -1
  31. package/dist/cli.js +24 -0
  32. package/dist/cli.js.map +1 -1
  33. package/dist/consolidate/index.d.ts.map +1 -1
  34. package/dist/consolidate/index.js +10 -12
  35. package/dist/consolidate/index.js.map +1 -1
  36. package/dist/court/precedent.d.ts.map +1 -1
  37. package/dist/court/precedent.js +6 -1
  38. package/dist/court/precedent.js.map +1 -1
  39. package/dist/curation/consumes.d.ts +24 -0
  40. package/dist/curation/consumes.d.ts.map +1 -0
  41. package/dist/curation/consumes.js +122 -0
  42. package/dist/curation/consumes.js.map +1 -0
  43. package/dist/curation/edge-staleness.d.ts +47 -0
  44. package/dist/curation/edge-staleness.d.ts.map +1 -0
  45. package/dist/curation/edge-staleness.js +258 -0
  46. package/dist/curation/edge-staleness.js.map +1 -0
  47. package/dist/curation/edges.d.ts.map +1 -1
  48. package/dist/curation/edges.js +190 -17
  49. package/dist/curation/edges.js.map +1 -1
  50. package/dist/curation/lint.d.ts +6 -1
  51. package/dist/curation/lint.d.ts.map +1 -1
  52. package/dist/curation/lint.js +87 -24
  53. package/dist/curation/lint.js.map +1 -1
  54. package/dist/curation/provenance.d.ts +2 -0
  55. package/dist/curation/provenance.d.ts.map +1 -1
  56. package/dist/curation/provenance.js +2 -0
  57. package/dist/curation/provenance.js.map +1 -1
  58. package/dist/curation/read-log.d.ts +19 -0
  59. package/dist/curation/read-log.d.ts.map +1 -0
  60. package/dist/curation/read-log.js +120 -0
  61. package/dist/curation/read-log.js.map +1 -0
  62. package/dist/curation/review-throughput.d.ts +24 -0
  63. package/dist/curation/review-throughput.d.ts.map +1 -0
  64. package/dist/curation/review-throughput.js +102 -0
  65. package/dist/curation/review-throughput.js.map +1 -0
  66. package/dist/curation/shadow.d.ts +1 -0
  67. package/dist/curation/shadow.d.ts.map +1 -1
  68. package/dist/curation/shadow.js +17 -11
  69. package/dist/curation/shadow.js.map +1 -1
  70. package/dist/curation/staged-actions.d.ts +12 -1
  71. package/dist/curation/staged-actions.d.ts.map +1 -1
  72. package/dist/curation/staged-actions.js +123 -48
  73. package/dist/curation/staged-actions.js.map +1 -1
  74. package/dist/curation/structural.d.ts +16 -0
  75. package/dist/curation/structural.d.ts.map +1 -0
  76. package/dist/curation/structural.js +64 -0
  77. package/dist/curation/structural.js.map +1 -0
  78. package/dist/curation/tension-blast.d.ts +4 -0
  79. package/dist/curation/tension-blast.d.ts.map +1 -1
  80. package/dist/curation/tension-blast.js +9 -0
  81. package/dist/curation/tension-blast.js.map +1 -1
  82. package/dist/curation/tension.d.ts +5 -2
  83. package/dist/curation/tension.d.ts.map +1 -1
  84. package/dist/curation/tension.js +68 -25
  85. package/dist/curation/tension.js.map +1 -1
  86. package/dist/curation/tier0.d.ts +27 -0
  87. package/dist/curation/tier0.d.ts.map +1 -0
  88. package/dist/curation/tier0.js +196 -0
  89. package/dist/curation/tier0.js.map +1 -0
  90. package/dist/curation/tier1.d.ts +30 -0
  91. package/dist/curation/tier1.d.ts.map +1 -0
  92. package/dist/curation/tier1.js +142 -0
  93. package/dist/curation/tier1.js.map +1 -0
  94. package/dist/curation/tier2.d.ts +43 -0
  95. package/dist/curation/tier2.d.ts.map +1 -0
  96. package/dist/curation/tier2.js +182 -0
  97. package/dist/curation/tier2.js.map +1 -0
  98. package/dist/curation/vault-docs.d.ts +5 -1
  99. package/dist/curation/vault-docs.d.ts.map +1 -1
  100. package/dist/curation/vault-docs.js +14 -0
  101. package/dist/curation/vault-docs.js.map +1 -1
  102. package/dist/eval/generate.d.ts.map +1 -1
  103. package/dist/eval/generate.js +38 -5
  104. package/dist/eval/generate.js.map +1 -1
  105. package/dist/eval/index.d.ts +1 -0
  106. package/dist/eval/index.d.ts.map +1 -1
  107. package/dist/eval/index.js +249 -50
  108. package/dist/eval/index.js.map +1 -1
  109. package/dist/eval/llm-openrouter.d.ts.map +1 -1
  110. package/dist/eval/llm-openrouter.js +158 -65
  111. package/dist/eval/llm-openrouter.js.map +1 -1
  112. package/dist/eval/llm.js +1 -1
  113. package/dist/eval/llm.js.map +1 -1
  114. package/dist/eval/prune.d.ts +24 -0
  115. package/dist/eval/prune.d.ts.map +1 -0
  116. package/dist/eval/prune.js +83 -0
  117. package/dist/eval/prune.js.map +1 -0
  118. package/dist/eval/storage.d.ts +3 -0
  119. package/dist/eval/storage.d.ts.map +1 -1
  120. package/dist/eval/storage.js +14 -0
  121. package/dist/eval/storage.js.map +1 -1
  122. package/dist/frontmatter/schema.d.ts.map +1 -1
  123. package/dist/frontmatter/schema.js +19 -1
  124. package/dist/frontmatter/schema.js.map +1 -1
  125. package/dist/frontmatter/types.d.ts +4 -1
  126. package/dist/frontmatter/types.d.ts.map +1 -1
  127. package/dist/frontmatter/types.js +8 -0
  128. package/dist/frontmatter/types.js.map +1 -1
  129. package/dist/import/index.d.ts.map +1 -1
  130. package/dist/import/index.js +44 -9
  131. package/dist/import/index.js.map +1 -1
  132. package/dist/import/langgraph-store.d.ts +53 -0
  133. package/dist/import/langgraph-store.d.ts.map +1 -0
  134. package/dist/import/langgraph-store.js +292 -0
  135. package/dist/import/langgraph-store.js.map +1 -0
  136. package/dist/index.d.ts +5 -0
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +56 -18
  139. package/dist/index.js.map +1 -1
  140. package/dist/interview/index.d.ts +7 -0
  141. package/dist/interview/index.d.ts.map +1 -0
  142. package/dist/interview/index.js +219 -0
  143. package/dist/interview/index.js.map +1 -0
  144. package/dist/interview/questions.d.ts +18 -0
  145. package/dist/interview/questions.d.ts.map +1 -0
  146. package/dist/interview/questions.js +169 -0
  147. package/dist/interview/questions.js.map +1 -0
  148. package/dist/interview/transcript.d.ts +23 -0
  149. package/dist/interview/transcript.d.ts.map +1 -0
  150. package/dist/interview/transcript.js +155 -0
  151. package/dist/interview/transcript.js.map +1 -0
  152. package/dist/lifecycle/lock.d.ts +9 -1
  153. package/dist/lifecycle/lock.d.ts.map +1 -1
  154. package/dist/lifecycle/lock.js +34 -9
  155. package/dist/lifecycle/lock.js.map +1 -1
  156. package/dist/okf/export.d.ts +12 -0
  157. package/dist/okf/export.d.ts.map +1 -0
  158. package/dist/okf/export.js +117 -0
  159. package/dist/okf/export.js.map +1 -0
  160. package/dist/okf/import.d.ts +24 -0
  161. package/dist/okf/import.d.ts.map +1 -0
  162. package/dist/okf/import.js +115 -0
  163. package/dist/okf/import.js.map +1 -0
  164. package/dist/okf/index.d.ts +2 -0
  165. package/dist/okf/index.d.ts.map +1 -0
  166. package/dist/okf/index.js +159 -0
  167. package/dist/okf/index.js.map +1 -0
  168. package/dist/okf/map.d.ts +27 -0
  169. package/dist/okf/map.d.ts.map +1 -0
  170. package/dist/okf/map.js +327 -0
  171. package/dist/okf/map.js.map +1 -0
  172. package/dist/okf/types.d.ts +13 -0
  173. package/dist/okf/types.d.ts.map +1 -0
  174. package/dist/okf/types.js +82 -0
  175. package/dist/okf/types.js.map +1 -0
  176. package/dist/search/coverage.d.ts.map +1 -1
  177. package/dist/search/coverage.js +1 -1
  178. package/dist/search/coverage.js.map +1 -1
  179. package/dist/search/hybrid.d.ts +19 -0
  180. package/dist/search/hybrid.d.ts.map +1 -1
  181. package/dist/search/hybrid.js +60 -15
  182. package/dist/search/hybrid.js.map +1 -1
  183. package/dist/search/reindex.d.ts +4 -0
  184. package/dist/search/reindex.d.ts.map +1 -1
  185. package/dist/search/reindex.js +64 -14
  186. package/dist/search/reindex.js.map +1 -1
  187. package/dist/search/watcher.d.ts +2 -0
  188. package/dist/search/watcher.d.ts.map +1 -1
  189. package/dist/search/watcher.js +29 -27
  190. package/dist/search/watcher.js.map +1 -1
  191. package/dist/serve/index.d.ts +36 -0
  192. package/dist/serve/index.d.ts.map +1 -0
  193. package/dist/serve/index.js +507 -0
  194. package/dist/serve/index.js.map +1 -0
  195. package/dist/server.d.ts +10 -1
  196. package/dist/server.d.ts.map +1 -1
  197. package/dist/server.js +89 -14
  198. package/dist/server.js.map +1 -1
  199. package/dist/sleep/index.d.ts +2 -0
  200. package/dist/sleep/index.d.ts.map +1 -1
  201. package/dist/sleep/index.js +212 -21
  202. package/dist/sleep/index.js.map +1 -1
  203. package/dist/sleep/report.d.ts +3 -0
  204. package/dist/sleep/report.d.ts.map +1 -1
  205. package/dist/sleep/report.js +52 -0
  206. package/dist/sleep/report.js.map +1 -1
  207. package/dist/sleep/tension-scan-state.d.ts +19 -0
  208. package/dist/sleep/tension-scan-state.d.ts.map +1 -0
  209. package/dist/sleep/tension-scan-state.js +0 -0
  210. package/dist/sleep/tension-scan-state.js.map +1 -0
  211. package/dist/sleep/tension-scan.d.ts +44 -0
  212. package/dist/sleep/tension-scan.d.ts.map +1 -0
  213. package/dist/sleep/tension-scan.js +0 -0
  214. package/dist/sleep/tension-scan.js.map +1 -0
  215. package/dist/storage/backend.d.ts +12 -0
  216. package/dist/storage/backend.d.ts.map +1 -0
  217. package/dist/storage/backend.js +231 -0
  218. package/dist/storage/backend.js.map +1 -0
  219. package/dist/storage/backends/fs.d.ts +4 -0
  220. package/dist/storage/backends/fs.d.ts.map +1 -0
  221. package/dist/storage/backends/fs.js +99 -0
  222. package/dist/storage/backends/fs.js.map +1 -0
  223. package/dist/storage/fs-walk.d.ts +5 -0
  224. package/dist/storage/fs-walk.d.ts.map +1 -0
  225. package/dist/storage/fs-walk.js +28 -0
  226. package/dist/storage/fs-walk.js.map +1 -0
  227. package/dist/storage/index-db.d.ts +16 -0
  228. package/dist/storage/index-db.d.ts.map +1 -1
  229. package/dist/storage/index-db.js +95 -5
  230. package/dist/storage/index-db.js.map +1 -1
  231. package/dist/storage/local.d.ts +1 -0
  232. package/dist/storage/local.d.ts.map +1 -1
  233. package/dist/storage/local.js +12 -0
  234. package/dist/storage/local.js.map +1 -1
  235. package/dist/storage/sync.d.ts +25 -0
  236. package/dist/storage/sync.d.ts.map +1 -0
  237. package/dist/storage/sync.js +308 -0
  238. package/dist/storage/sync.js.map +1 -0
  239. package/dist/sync/index.d.ts +2 -0
  240. package/dist/sync/index.d.ts.map +1 -0
  241. package/dist/sync/index.js +136 -0
  242. package/dist/sync/index.js.map +1 -0
  243. package/dist/themes/clustering.d.ts +6 -11
  244. package/dist/themes/clustering.d.ts.map +1 -1
  245. package/dist/themes/clustering.js +76 -84
  246. package/dist/themes/clustering.js.map +1 -1
  247. package/dist/tools/consumes.d.ts +14 -0
  248. package/dist/tools/consumes.d.ts.map +1 -0
  249. package/dist/tools/consumes.js +99 -0
  250. package/dist/tools/consumes.js.map +1 -0
  251. package/dist/tools/curation.d.ts +2 -0
  252. package/dist/tools/curation.d.ts.map +1 -1
  253. package/dist/tools/curation.js +53 -15
  254. package/dist/tools/curation.js.map +1 -1
  255. package/dist/tools/edge-staleness.d.ts +28 -0
  256. package/dist/tools/edge-staleness.d.ts.map +1 -0
  257. package/dist/tools/edge-staleness.js +205 -0
  258. package/dist/tools/edge-staleness.js.map +1 -0
  259. package/dist/tools/edges.d.ts.map +1 -1
  260. package/dist/tools/edges.js +27 -21
  261. package/dist/tools/edges.js.map +1 -1
  262. package/dist/tools/read.d.ts +15 -1
  263. package/dist/tools/read.d.ts.map +1 -1
  264. package/dist/tools/read.js +211 -76
  265. package/dist/tools/read.js.map +1 -1
  266. package/dist/tools/receipt.d.ts.map +1 -1
  267. package/dist/tools/receipt.js +16 -7
  268. package/dist/tools/receipt.js.map +1 -1
  269. package/dist/tools/search.d.ts +1 -0
  270. package/dist/tools/search.d.ts.map +1 -1
  271. package/dist/tools/search.js +147 -5
  272. package/dist/tools/search.js.map +1 -1
  273. package/dist/tools/staged-actions.d.ts +3 -0
  274. package/dist/tools/staged-actions.d.ts.map +1 -1
  275. package/dist/tools/staged-actions.js +225 -22
  276. package/dist/tools/staged-actions.js.map +1 -1
  277. package/dist/tools/themes.d.ts +8 -0
  278. package/dist/tools/themes.d.ts.map +1 -1
  279. package/dist/tools/themes.js +208 -122
  280. package/dist/tools/themes.js.map +1 -1
  281. package/dist/tools/tier1.d.ts +14 -0
  282. package/dist/tools/tier1.d.ts.map +1 -0
  283. package/dist/tools/tier1.js +169 -0
  284. package/dist/tools/tier1.js.map +1 -0
  285. package/dist/tools/tier2.d.ts +27 -0
  286. package/dist/tools/tier2.d.ts.map +1 -0
  287. package/dist/tools/tier2.js +344 -0
  288. package/dist/tools/tier2.js.map +1 -0
  289. package/dist/tools/write.d.ts +9 -1
  290. package/dist/tools/write.d.ts.map +1 -1
  291. package/dist/tools/write.js +596 -174
  292. package/dist/tools/write.js.map +1 -1
  293. package/dist/utils/config.d.ts +52 -0
  294. package/dist/utils/config.d.ts.map +1 -1
  295. package/dist/utils/config.js +394 -24
  296. package/dist/utils/config.js.map +1 -1
  297. package/dist/utils/dates.d.ts +1 -0
  298. package/dist/utils/dates.d.ts.map +1 -1
  299. package/dist/utils/dates.js +5 -0
  300. package/dist/utils/dates.js.map +1 -1
  301. package/dist/utils/run-id.d.ts +3 -0
  302. package/dist/utils/run-id.d.ts.map +1 -0
  303. package/dist/utils/run-id.js +19 -0
  304. package/dist/utils/run-id.js.map +1 -0
  305. package/dist/utils/vault-gitignore.d.ts +1 -1
  306. package/dist/utils/vault-gitignore.d.ts.map +1 -1
  307. package/dist/utils/vault-gitignore.js +4 -1
  308. package/dist/utils/vault-gitignore.js.map +1 -1
  309. package/package.json +21 -1
  310. package/templates/config.yaml +8 -0
@@ -0,0 +1,159 @@
1
+ // src/okf/index.ts
2
+ //
3
+ // `daftari okf <export|import> ...` — bridge a Daftari vault and Google Cloud's
4
+ // Open Knowledge Format (OKF) bundle. Export renders the vault as a portable OKF
5
+ // bundle any OKF consumer can read; import adopts an OKF bundle into a vault.
6
+ // The command owns arg parsing, existence checks, and human output; the actual
7
+ // translation lives in export.ts / import.ts.
8
+ import { resolve } from "node:path";
9
+ import { directoryExists } from "../storage/local.js";
10
+ import { exportBundle } from "./export.js";
11
+ import { importBundle } from "./import.js";
12
+ import { OKF_VERSION } from "./types.js";
13
+ const SUBCOMMANDS = ["export", "import"];
14
+ const HELP = `daftari okf — bridge a Daftari vault and the Open Knowledge Format (OKF v${OKF_VERSION}).
15
+
16
+ OKF is Google Cloud's vendor-neutral spec for the LLM-wiki pattern: a directory
17
+ of markdown files with YAML frontmatter that any producer can emit and any
18
+ consumer can read without translation. v0.2 adds opt-in trust signals —
19
+ provenance, verification, lifecycle, and freshness metadata.
20
+
21
+ Usage:
22
+ daftari okf export <vault> --out <dir> [--collection <name>]
23
+ daftari okf import <bundle> --into <vault> [--dry-run] [--agent <id>]
24
+
25
+ export — write the vault as an OKF bundle (never mutates the vault):
26
+ --out <dir> Output directory for the bundle (required).
27
+ --collection <name> Export only this collection (top-level folder).
28
+
29
+ Each doc becomes an OKF concept doc (core fields + a verbatim 'daftari'
30
+ sidecar for lossless round-trip) plus generated index.md and log.md.
31
+ Trust signals derive from native metadata: updated/updated_by become
32
+ 'generated', status maps to draft/stable/deprecated, ttl_days becomes an
33
+ absolute 'stale_after' date, and sources become structured entries.
34
+ 'verified' is never fabricated — Daftari records authorship, not
35
+ independent confirmations, so exported docs read as unverified.
36
+
37
+ import — adopt an OKF bundle into a vault (auto-commits + reindexes):
38
+ --into <vault> Target Daftari vault (required).
39
+ --dry-run Report the plan; write, commit, and index nothing.
40
+ --agent <id> Acting identity for authorship + commit (default agent:okf-import).
41
+
42
+ A bundle from 'daftari okf export' round-trips exactly; a foreign bundle is
43
+ mapped conservatively (docs land as drafts in the accumulation domain).
44
+ v0.2 trust signals inform the mapping: human-reviewed docs (a human:* entry
45
+ in 'verified') import with confidence high, 'status: deprecated' stays
46
+ deprecated, and 'stale_after' converts to ttl_days. An Attested Computation
47
+ is flagged in a warning but NOT auto-write-protected — a bundle's
48
+ self-declared type is not an authorization; review it and elevate with
49
+ vault_set_tier. Unmapped OKF fields are preserved under okf_* keys.
50
+
51
+ --help, -h Show this help.
52
+ `;
53
+ function readStringArg(argv, flag) {
54
+ const raw = argv.find((a) => a === flag || a.startsWith(`${flag}=`));
55
+ if (raw === undefined)
56
+ return undefined;
57
+ const idx = argv.indexOf(raw);
58
+ return raw.includes("=") ? raw.slice(raw.indexOf("=") + 1) : argv[idx + 1];
59
+ }
60
+ // First non-flag argument (the positional vault/bundle path), or a default.
61
+ function readPositional(argv, fallback) {
62
+ for (let i = 0; i < argv.length; i++) {
63
+ const a = argv[i];
64
+ if (a.startsWith("-")) {
65
+ // Skip the value of a value-taking flag so it is not mistaken for the
66
+ // positional. --dry-run takes no value; everything else here does.
67
+ if (!a.includes("=") && a !== "--dry-run")
68
+ i++;
69
+ continue;
70
+ }
71
+ return a;
72
+ }
73
+ return fallback;
74
+ }
75
+ async function runExport(argv) {
76
+ const vault = readPositional(argv, ".");
77
+ const out = readStringArg(argv, "--out");
78
+ const collection = readStringArg(argv, "--collection");
79
+ if (!out) {
80
+ process.stderr.write("daftari okf export: --out <dir> is required\n");
81
+ return 1;
82
+ }
83
+ const resolvedVault = resolve(vault);
84
+ if (!(await directoryExists(resolvedVault))) {
85
+ process.stderr.write(`daftari okf export: vault directory not found: ${vault}\n`);
86
+ return 1;
87
+ }
88
+ const result = await exportBundle(resolvedVault, resolve(out), { collection });
89
+ if (!result.ok) {
90
+ process.stderr.write(`daftari okf export: ${result.error.message}\n`);
91
+ return 1;
92
+ }
93
+ for (const w of result.value.warnings) {
94
+ process.stderr.write(`daftari okf export: warning: ${w}\n`);
95
+ }
96
+ process.stdout.write(`Exported ${result.value.documentCount} document(s) as an OKF v${OKF_VERSION} bundle to ${result.value.outDir}\n` +
97
+ (result.value.skipped > 0 ? ` skipped: ${result.value.skipped} unparseable file(s)\n` : ""));
98
+ return 0;
99
+ }
100
+ async function runImportCmd(argv) {
101
+ const bundle = readPositional(argv, ".");
102
+ const into = readStringArg(argv, "--into");
103
+ const agent = readStringArg(argv, "--agent");
104
+ const dryRun = argv.includes("--dry-run");
105
+ if (!into) {
106
+ process.stderr.write("daftari okf import: --into <vault> is required\n");
107
+ return 1;
108
+ }
109
+ const resolvedBundle = resolve(bundle);
110
+ if (!(await directoryExists(resolvedBundle))) {
111
+ process.stderr.write(`daftari okf import: bundle directory not found: ${bundle}\n`);
112
+ return 1;
113
+ }
114
+ const resolvedVault = resolve(into);
115
+ if (!(await directoryExists(resolvedVault))) {
116
+ process.stderr.write(`daftari okf import: target vault not found: ${into}\n`);
117
+ return 1;
118
+ }
119
+ const result = await importBundle(resolvedBundle, resolvedVault, { agent, dryRun });
120
+ if (!result.ok) {
121
+ process.stderr.write(`daftari okf import: ${result.error.message}\n`);
122
+ return 1;
123
+ }
124
+ for (const w of result.value.warnings) {
125
+ process.stderr.write(`daftari okf import: warning: ${w}\n`);
126
+ }
127
+ const r = result.value;
128
+ if (r.dryRun) {
129
+ process.stdout.write(`Dry run — would import ${r.imported} document(s) into ${r.vaultRoot}:\n`);
130
+ for (const item of r.plan) {
131
+ const tag = item.roundTrip ? " (round-trip)" : "";
132
+ process.stdout.write(` ${item.relPath} → collection '${item.collection}'${tag}\n`);
133
+ }
134
+ return 0;
135
+ }
136
+ process.stdout.write(`Imported ${r.imported} document(s) into ${r.vaultRoot}` +
137
+ (r.commit ? ` (commit ${r.commit})` : "") +
138
+ (r.reindexed ? ", reindexed" : "") +
139
+ "\n" +
140
+ (r.skipped > 0 ? ` skipped: ${r.skipped} file(s)\n` : ""));
141
+ return 0;
142
+ }
143
+ export async function runOkf(argv) {
144
+ if (argv.length === 0) {
145
+ process.stderr.write(HELP);
146
+ return 1;
147
+ }
148
+ if (argv.includes("--help") || argv.includes("-h")) {
149
+ process.stdout.write(HELP);
150
+ return 0;
151
+ }
152
+ const sub = argv[0];
153
+ if (!SUBCOMMANDS.includes(sub)) {
154
+ process.stderr.write(`daftari okf: unknown subcommand '${sub}' — expected: ${SUBCOMMANDS.join(", ")}\n`);
155
+ return 1;
156
+ }
157
+ return sub === "export" ? runExport(argv.slice(1)) : runImportCmd(argv.slice(1));
158
+ }
159
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/okf/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Frontmatter } from "../frontmatter/types.js";
2
+ import { type OkfStatus } from "./types.js";
3
+ export declare function isUri(s: string): boolean;
4
+ export declare function deriveDescription(fm: Frontmatter, body: string): string | undefined;
5
+ export declare function toIsoTimestamp(date: string): string | undefined;
6
+ export declare function statusToOkf(status: string): OkfStatus;
7
+ export declare function staleAfterFromTtl(updated: string, ttlDays: number | null): string | undefined;
8
+ export declare function toOkfSource(source: string): Record<string, unknown>;
9
+ export declare function daftariToOkf(raw: Record<string, unknown>, fm: Frontmatter, body: string): Record<string, unknown>;
10
+ export declare function titleFromPath(relPath: string): string;
11
+ export declare function collectionFromPath(relPath: string): string | null;
12
+ export declare function slugify(s: string): string | null;
13
+ export declare function dateFromTimestamp(value: unknown): string | undefined;
14
+ export declare function hasDaftariSidecar(okfRaw: Record<string, unknown>): boolean;
15
+ export declare function isAttestedComputation(type: unknown): boolean;
16
+ export declare function dateFromGenerated(okfRaw: Record<string, unknown>): string | undefined;
17
+ export type OkfTrustTier = "unverified" | "machine-confirmed" | "human-reviewed";
18
+ export declare function trustTier(verified: unknown): OkfTrustTier;
19
+ export declare function ttlFromStaleAfter(staleAfter: unknown, anchorDate: string): number | null;
20
+ export declare function sourcesFromOkf(okfRaw: Record<string, unknown>): string[];
21
+ export interface OkfImportContext {
22
+ relPath: string;
23
+ today: string;
24
+ updatedBy: string;
25
+ }
26
+ export declare function okfToDaftari(okfRaw: Record<string, unknown>, ctx: OkfImportContext): Record<string, unknown>;
27
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/okf/map.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAML,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AAKpB,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAExC;AAMD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYnF;AAKD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/D;AAMD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAIrD;AAOD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAO7F;AAOD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUnE;AAOD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyCzB;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrD;AAID,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAID,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhD;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQpE;AAkBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAG1E;AAMD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAK5D;AAID,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAGrF;AAKD,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;AAEjF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,YAAY,CAOzD;AAOD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxF;AAOD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAiBxE;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AA8CD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,gBAAgB,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkDzB"}
@@ -0,0 +1,327 @@
1
+ // Pure frontmatter mappers between Daftari and OKF. No filesystem, no I/O — the
2
+ // export/import modules own that. Keeping the field translation here makes it
3
+ // unit-testable in isolation and keeps the two directions symmetric.
4
+ import { normalizeIsoDate } from "../utils/dates.js";
5
+ import { DAFTARI_SIDECAR_KEY, DEFAULT_IMPORT_COLLECTION, DEFAULT_OKF_TYPE, OKF_ATTESTED_COMPUTATION_TYPE, OKF_PRESERVED_PREFIX, } from "./types.js";
6
+ // True when `s` looks like an absolute URI (has a scheme + "://"). Daftari
7
+ // `sources` are often bare ids ("aurora-product-page"); only URI-shaped ones map
8
+ // to OKF's `resource`, which is defined as a URI identifying the asset.
9
+ export function isUri(s) {
10
+ return /^[a-z][a-z0-9+.-]*:\/\//i.test(s);
11
+ }
12
+ // A single-sentence summary for OKF's `description`. Prefers the first
13
+ // non-heading, non-list paragraph of the body (cut at the first sentence
14
+ // boundary); falls back to the doc's first `questions_answered` entry. Returns
15
+ // undefined when there is nothing usable, so the field is simply omitted.
16
+ export function deriveDescription(fm, body) {
17
+ for (const rawLine of body.split("\n")) {
18
+ const line = rawLine.trim();
19
+ if (line === "")
20
+ continue;
21
+ if (line.startsWith("#"))
22
+ continue; // heading
23
+ if (/^([-*+]|\d+\.)\s/.test(line))
24
+ continue; // list item
25
+ const sentence = /^(.*?[.!?])(\s|$)/.exec(line);
26
+ const text = (sentence ? sentence[1] : line).trim();
27
+ return text.length > 280 ? `${text.slice(0, 277)}...` : text;
28
+ }
29
+ if (fm.questions_answered.length > 0)
30
+ return fm.questions_answered[0];
31
+ return undefined;
32
+ }
33
+ // Daftari `YYYY-MM-DD` → OKF ISO 8601 datetime. Returns undefined for anything
34
+ // that isn't a real calendar date so an invalid `updated` never emits a bogus
35
+ // timestamp.
36
+ export function toIsoTimestamp(date) {
37
+ const norm = normalizeIsoDate(date);
38
+ return norm === null ? undefined : `${norm}T00:00:00Z`;
39
+ }
40
+ // Daftari lifecycle → OKF v0.2 `status`. `canonical` is the vault's "current,
41
+ // trusted" state (OKF `stable`); everything retired — deprecated, superseded,
42
+ // archived — maps to `deprecated`, which OKF keeps for historical
43
+ // reproducibility without surfacing to new work.
44
+ export function statusToOkf(status) {
45
+ if (status === "draft")
46
+ return "draft";
47
+ if (status === "canonical")
48
+ return "stable";
49
+ return "deprecated";
50
+ }
51
+ // Daftari's relative `ttl_days` → OKF v0.2 absolute `stale_after` date
52
+ // (`updated` + TTL). OKF deliberately uses an absolute date so staleness checks
53
+ // are deterministic; anchoring at `updated` preserves the exact day the TTL
54
+ // would have expired. Undefined when there is no TTL (no freshness promise) or
55
+ // no valid `updated` to anchor it to.
56
+ export function staleAfterFromTtl(updated, ttlDays) {
57
+ if (ttlDays === null || !Number.isFinite(ttlDays))
58
+ return undefined;
59
+ const norm = normalizeIsoDate(updated);
60
+ if (norm === null)
61
+ return undefined;
62
+ const d = new Date(`${norm}T00:00:00Z`);
63
+ d.setUTCDate(d.getUTCDate() + Math.trunc(ttlDays));
64
+ return d.toISOString().slice(0, 10);
65
+ }
66
+ // One Daftari source string → an OKF v0.2 structured source entry. URI-shaped
67
+ // sources carry the URI in `resource` with an `id` slug derived from the last
68
+ // path segment (the citation handle); bare ids are already ids. Daftari has no
69
+ // per-source author/usage_count/last_modified to offer — OKF signals are
70
+ // opt-in, so those are simply absent.
71
+ export function toOkfSource(source) {
72
+ if (!isUri(source))
73
+ return { id: source };
74
+ const tail = source
75
+ .replace(/[?#].*$/, "")
76
+ .split("/")
77
+ .filter((p) => p !== "")
78
+ .pop() ?? source;
79
+ const id = slugify(tail.replace(/\.[a-z0-9]+$/i, "")) ?? slugify(source) ?? source;
80
+ return { id, resource: source };
81
+ }
82
+ // Daftari document → OKF concept-doc frontmatter. `raw` is the document's
83
+ // original frontmatter verbatim; it is stashed under the `daftari` key so an
84
+ // `okf import` of this bundle can reconstruct the source exactly rather than
85
+ // re-deriving it from the lossy OKF core fields. `body` is unchanged by export;
86
+ // it is passed only to derive the description.
87
+ export function daftariToOkf(raw, fm, body) {
88
+ const out = {};
89
+ // `type` is the only required OKF field. Daftari's `collection` is the closest
90
+ // notion of a document kind; fall back to a generic type when it is empty.
91
+ out.type = fm.collection.trim() || DEFAULT_OKF_TYPE;
92
+ if (fm.title.trim() !== "")
93
+ out.title = fm.title;
94
+ const description = deriveDescription(fm, body);
95
+ if (description !== undefined)
96
+ out.description = description;
97
+ const resource = fm.sources.find(isUri);
98
+ if (resource !== undefined)
99
+ out.resource = resource;
100
+ if (fm.tags.length > 0)
101
+ out.tags = fm.tags;
102
+ // v0.2 trust signals, derived from native Daftari metadata. `generated`
103
+ // replaces the v0.1 `timestamp` (the spec's deliberate rename): `updated_by`
104
+ // is who last produced the content, `updated` is when it last meaningfully
105
+ // changed. `verified` is deliberately NOT emitted — Daftari records
106
+ // authorship, not independent confirmations, and OKF's trust tiers make the
107
+ // absence meaningful (unverified) rather than fabricating a signal.
108
+ const generated = {};
109
+ if (fm.updated_by.trim() !== "")
110
+ generated.by = fm.updated_by;
111
+ const at = toIsoTimestamp(fm.updated);
112
+ if (at !== undefined)
113
+ generated.at = at;
114
+ if (Object.keys(generated).length > 0)
115
+ out.generated = generated;
116
+ out.status = statusToOkf(fm.status);
117
+ const staleAfter = staleAfterFromTtl(fm.updated, fm.ttl_days);
118
+ if (staleAfter !== undefined)
119
+ out.stale_after = staleAfter;
120
+ if (fm.sources.length > 0)
121
+ out.sources = fm.sources.map(toOkfSource);
122
+ // Lossless round-trip channel. Never overwritten by the derived fields above
123
+ // because it lives under its own key.
124
+ out[DAFTARI_SIDECAR_KEY] = raw;
125
+ return out;
126
+ }
127
+ // Basename without extension, humanized, as a fallback title for a foreign OKF
128
+ // doc that omitted `title` (OKF says title is derived from the filename then).
129
+ export function titleFromPath(relPath) {
130
+ const base = relPath.split("/").pop() ?? relPath;
131
+ return base.replace(/\.md$/i, "").replace(/[-_]+/g, " ").trim();
132
+ }
133
+ // Top-level bundle directory of a doc, used as the Daftari collection so a
134
+ // bundle's folder structure survives import. Null for a doc at the bundle root.
135
+ export function collectionFromPath(relPath) {
136
+ const parts = relPath.split("/").filter((p) => p !== "");
137
+ return parts.length > 1 ? parts[0] : null;
138
+ }
139
+ // Lowercase kebab slug of an arbitrary OKF `type` string, for use as a Daftari
140
+ // collection when the doc has no directory. Returns null if nothing survives.
141
+ export function slugify(s) {
142
+ const slug = s
143
+ .toLowerCase()
144
+ .replace(/[^a-z0-9]+/g, "-")
145
+ .replace(/^-+|-+$/g, "");
146
+ return slug === "" ? null : slug;
147
+ }
148
+ // OKF `timestamp` → Daftari `YYYY-MM-DD`. Accepts a js-yaml Date (unquoted ISO
149
+ // datetimes parse to Date), an ISO string, or a bare date; returns undefined
150
+ // when it cannot recover a real calendar date.
151
+ export function dateFromTimestamp(value) {
152
+ if (value instanceof Date && !Number.isNaN(value.getTime())) {
153
+ return value.toISOString().slice(0, 10);
154
+ }
155
+ if (typeof value === "string") {
156
+ return normalizeIsoDate(value.slice(0, 10)) ?? undefined;
157
+ }
158
+ return undefined;
159
+ }
160
+ function asStringArray(value) {
161
+ if (!Array.isArray(value))
162
+ return [];
163
+ return value.filter((v) => typeof v === "string");
164
+ }
165
+ function asRecord(value) {
166
+ return value !== null && typeof value === "object" && !Array.isArray(value)
167
+ ? value
168
+ : null;
169
+ }
170
+ // True when the doc carries a usable `daftari` sidecar — the exact test
171
+ // okfToDaftari uses to take the verbatim round-trip path. Key presence alone is
172
+ // not enough: a non-object sidecar value is ignored and the doc is synthesized
173
+ // as foreign, so callers gating on "is this a round-trip?" must share this
174
+ // check rather than re-deriving it.
175
+ export function hasDaftariSidecar(okfRaw) {
176
+ const sidecar = okfRaw[DAFTARI_SIDECAR_KEY];
177
+ return sidecar !== null && typeof sidecar === "object" && !Array.isArray(sidecar);
178
+ }
179
+ // True when an OKF `type` names the v0.2 Attested Computation concept. Used by
180
+ // import to flag these docs for deliberate operator review (vault_set_tier) —
181
+ // never to grant write protection automatically: a foreign bundle's
182
+ // self-declared type is not an authorization.
183
+ export function isAttestedComputation(type) {
184
+ return (typeof type === "string" &&
185
+ type.trim().toLowerCase() === OKF_ATTESTED_COMPUTATION_TYPE.toLowerCase());
186
+ }
187
+ // The document date of an OKF doc: v0.2 `generated.at`, falling back to the
188
+ // v0.1 `timestamp` it renamed (the spec-mandated consumer fallback).
189
+ export function dateFromGenerated(okfRaw) {
190
+ const generated = asRecord(okfRaw.generated);
191
+ return dateFromTimestamp(generated?.at) ?? dateFromTimestamp(okfRaw.timestamp);
192
+ }
193
+ export function trustTier(verified) {
194
+ if (!Array.isArray(verified) || verified.length === 0)
195
+ return "unverified";
196
+ const humanReviewed = verified.some((entry) => {
197
+ const by = asRecord(entry)?.by;
198
+ return typeof by === "string" && by.startsWith("human:");
199
+ });
200
+ return humanReviewed ? "human-reviewed" : "machine-confirmed";
201
+ }
202
+ // OKF v0.2 absolute `stale_after` → Daftari's relative `ttl_days`, anchored at
203
+ // the doc's derived date so the freshness promise expires on the same calendar
204
+ // day. A stale_after at or before the anchor clamps to 0 — computeStaleness
205
+ // reads a non-positive TTL as "stale the moment it ages", which is exactly what
206
+ // an already-passed absolute date means. Null when either date is unusable.
207
+ export function ttlFromStaleAfter(staleAfter, anchorDate) {
208
+ const target = dateFromTimestamp(staleAfter);
209
+ const anchor = normalizeIsoDate(anchorDate);
210
+ if (target === undefined || anchor === null)
211
+ return null;
212
+ const days = Math.round((Date.parse(`${target}T00:00:00Z`) - Date.parse(`${anchor}T00:00:00Z`)) / 86_400_000);
213
+ return Math.max(0, days);
214
+ }
215
+ // Flatten OKF provenance into Daftari's `sources: string[]`: the top-level
216
+ // `resource` URI first, then each v0.2 structured source (its `resource` URI
217
+ // when present, else its `id`). Per-source signals like author/usage_count
218
+ // don't fit a bare string — the raw entries are preserved under
219
+ // `okf_sources` by okfToDaftari so nothing is lost.
220
+ export function sourcesFromOkf(okfRaw) {
221
+ const out = [];
222
+ const push = (v) => {
223
+ if (typeof v === "string" && v.trim() !== "" && !out.includes(v))
224
+ out.push(v);
225
+ };
226
+ push(okfRaw.resource);
227
+ if (Array.isArray(okfRaw.sources)) {
228
+ for (const entry of okfRaw.sources) {
229
+ if (typeof entry === "string") {
230
+ push(entry);
231
+ continue;
232
+ }
233
+ const rec = asRecord(entry);
234
+ if (rec !== null)
235
+ push(typeof rec.resource === "string" ? rec.resource : rec.id);
236
+ }
237
+ }
238
+ return out;
239
+ }
240
+ // OKF fields the synthesis below consumes into a native Daftari slot (or, for
241
+ // description, re-derives from the body on a future export). Everything else —
242
+ // the lossy-mapped trust record (`generated`, `verified`, `sources`), the
243
+ // Attested Computation machinery (runtime/parameters/executor/receipt/attester),
244
+ // and any producer-defined field — is preserved under the `okf_` prefix so the
245
+ // import stays non-destructive.
246
+ const OKF_CONSUMED_FIELDS = new Set([
247
+ "type",
248
+ "title",
249
+ "description",
250
+ "resource",
251
+ "tags",
252
+ "timestamp",
253
+ "status",
254
+ "stale_after",
255
+ DAFTARI_SIDECAR_KEY,
256
+ ]);
257
+ // OKF concept-doc frontmatter → Daftari frontmatter (as a raw record ready for
258
+ // serializeDocument). When the doc carries a `daftari` sidecar (it came from
259
+ // `daftari okf export`), that verbatim frontmatter is used directly for an exact
260
+ // round-trip. Otherwise a Daftari frontmatter is synthesized from the OKF core
261
+ // fields, conservatively: imported knowledge lands as a `draft` in the
262
+ // `accumulation` domain, and the original OKF `type` is preserved in an
263
+ // `okf_type` field so nothing is silently lost.
264
+ //
265
+ // v0.2 trust signals feed the synthesis:
266
+ // - `generated.at` dates the doc (falling back to the v0.1 `timestamp`).
267
+ // - `verified` sets confidence by trust tier: human-reviewed lands `high`.
268
+ // Positive signals only ever raise confidence — absence keeps the default
269
+ // `medium`, because an unverified v0.2 doc is indistinguishable from a
270
+ // v0.1 doc that never had the chance to carry the field.
271
+ // - `status: deprecated` imports as `deprecated` (retired knowledge must not
272
+ // resurface as a fresh draft); `draft`/`stable`/absent stay `draft` — this
273
+ // vault has not canonized foreign content, however stable its producer
274
+ // considers it.
275
+ // - `stale_after` converts to `ttl_days` anchored at the doc date.
276
+ // - An `Attested Computation` is NOT auto-elevated to a write-protected
277
+ // tier: `tier: source` is an enforcement mechanism whose only sanctioned
278
+ // grant path is vault_set_tier (reason required, provenance-logged), and a
279
+ // foreign bundle's self-declared `type` must not buy enforcement without
280
+ // that gate. Import surfaces the doc in a warning instead so an operator
281
+ // can review and elevate deliberately; the attestation machinery survives
282
+ // under `okf_*` keys either way.
283
+ export function okfToDaftari(okfRaw, ctx) {
284
+ if (hasDaftariSidecar(okfRaw)) {
285
+ return { ...okfRaw[DAFTARI_SIDECAR_KEY] };
286
+ }
287
+ const title = typeof okfRaw.title === "string" && okfRaw.title.trim() !== ""
288
+ ? okfRaw.title
289
+ : titleFromPath(ctx.relPath);
290
+ const okfType = typeof okfRaw.type === "string" ? okfRaw.type : "";
291
+ const collection = collectionFromPath(ctx.relPath) ?? slugify(okfType) ?? DEFAULT_IMPORT_COLLECTION;
292
+ const date = dateFromGenerated(okfRaw) ?? ctx.today;
293
+ const okfStatus = typeof okfRaw.status === "string" ? okfRaw.status.trim().toLowerCase() : "";
294
+ const out = {
295
+ title,
296
+ domain: "accumulation",
297
+ collection,
298
+ status: okfStatus === "deprecated" ? "deprecated" : "draft",
299
+ confidence: trustTier(okfRaw.verified) === "human-reviewed" ? "high" : "medium",
300
+ created: date,
301
+ updated: date,
302
+ updated_by: ctx.updatedBy,
303
+ provenance: "direct",
304
+ sources: sourcesFromOkf(okfRaw),
305
+ superseded_by: null,
306
+ ttl_days: ttlFromStaleAfter(okfRaw.stale_after, date),
307
+ tags: asStringArray(okfRaw.tags),
308
+ describes: [],
309
+ questions_answered: [],
310
+ questions_raised: [],
311
+ };
312
+ // Preserve the OKF kind so the import is not lossy. serializeDocument writes
313
+ // unknown fields through untouched.
314
+ if (okfType.trim() !== "")
315
+ out.okf_type = okfType;
316
+ // Preserve everything the synthesis did not consume losslessly, prefixed so
317
+ // it can never collide with a Daftari built-in.
318
+ for (const [key, value] of Object.entries(okfRaw)) {
319
+ if (OKF_CONSUMED_FIELDS.has(key))
320
+ continue;
321
+ if (value === null || value === undefined)
322
+ continue;
323
+ out[`${OKF_PRESERVED_PREFIX}${key}`] = value;
324
+ }
325
+ return out;
326
+ }
327
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/okf/map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare const OKF_VERSION = "0.2";
2
+ export declare const OKF_INDEX_FILE = "index.md";
3
+ export declare const OKF_LOG_FILE = "log.md";
4
+ export declare const OKF_RESERVED_FILES: readonly ["index.md", "log.md"];
5
+ export declare const DAFTARI_SIDECAR_KEY = "daftari";
6
+ export declare const DEFAULT_OKF_TYPE = "note";
7
+ export declare const DEFAULT_IMPORT_COLLECTION = "imported";
8
+ export declare const OKF_CORE_FIELDS: readonly ["type", "title", "description", "resource", "tags", "generated", "verified", "status", "stale_after", "sources"];
9
+ export declare const OKF_STATUSES: readonly ["draft", "stable", "deprecated"];
10
+ export type OkfStatus = (typeof OKF_STATUSES)[number];
11
+ export declare const OKF_ATTESTED_COMPUTATION_TYPE = "Attested Computation";
12
+ export declare const OKF_PRESERVED_PREFIX = "okf_";
13
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/okf/types.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,WAAW,QAAQ,CAAC;AAIjC,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,kBAAkB,iCAA0C,CAAC;AAO1E,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAM7C,eAAO,MAAM,gBAAgB,SAAS,CAAC;AAIvC,eAAO,MAAM,yBAAyB,aAAa,CAAC;AAMpD,eAAO,MAAM,eAAe,4HAWlB,CAAC;AAGX,eAAO,MAAM,YAAY,4CAA6C,CAAC;AACvE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAOtD,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AAMpE,eAAO,MAAM,oBAAoB,SAAS,CAAC"}