oh-my-second-brain 0.1.8 → 0.2.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 (466) hide show
  1. package/CHANGELOG.md +89 -0
  2. package/README.ko.md +127 -0
  3. package/README.md +128 -0
  4. package/adapters/README.md +8 -8
  5. package/adapters/claude-code/.claude-plugin/plugin.json +3 -2
  6. package/adapters/claude-code/.mcp.json +8 -0
  7. package/adapters/claude-code/CLAUDE.md +5 -6
  8. package/adapters/claude-code/skills/compile/SKILL.md +10 -35
  9. package/adapters/claude-code/skills/distill/SKILL.md +6 -26
  10. package/adapters/claude-code/skills/link/SKILL.md +87 -0
  11. package/adapters/claude-code/skills/retrieve/SKILL.md +4 -7
  12. package/adapters/claude-code/skills/setup/SKILL.md +5 -6
  13. package/adapters/claude-code/skills/uninstall/SKILL.md +1 -1
  14. package/adapters/claude-code/skills/wiki/SKILL.md +49 -24
  15. package/adapters/claude-code/skills/write/SKILL.md +16 -0
  16. package/adapters/codex/.codex-plugin/plugin.json +1 -1
  17. package/adapters/codex/AGENTS.md +2 -2
  18. package/adapters/codex/rules/oms.md +1 -1
  19. package/adapters/codex/skills/oms-compile/SKILL.md +7 -9
  20. package/adapters/codex/skills/oms-distill/SKILL.md +4 -9
  21. package/adapters/codex/skills/oms-link/SKILL.md +35 -0
  22. package/adapters/codex/skills/oms-retrieve/SKILL.md +5 -6
  23. package/adapters/codex/skills/oms-wiki/SKILL.md +28 -8
  24. package/adapters/codex/skills/oms-write/SKILL.md +10 -0
  25. package/adapters/hermes/README.md +3 -1
  26. package/adapters/hermes/SOUL.md +2 -3
  27. package/adapters/hermes/manifest.json +1 -1
  28. package/adapters/hermes/skills/compile/SKILL.md +5 -7
  29. package/adapters/hermes/skills/distill/SKILL.md +1 -3
  30. package/adapters/hermes/skills/link/SKILL.md +18 -0
  31. package/adapters/hermes/skills/retrieve/SKILL.md +5 -6
  32. package/adapters/hermes/skills/setup/SKILL.md +5 -2
  33. package/adapters/hermes/skills/wiki/SKILL.md +4 -2
  34. package/adapters/hermes/skills/write/SKILL.md +10 -0
  35. package/core/AGENTS.md +4 -2
  36. package/core/agents/librarian.md +3 -2
  37. package/core/ontology/concepts/term.yaml +12 -0
  38. package/core/ontology/taxonomy.yaml +3 -0
  39. package/core/skills/compile/SKILL.md +19 -18
  40. package/core/skills/distill/SKILL.md +13 -24
  41. package/core/skills/link/SKILL.md +130 -0
  42. package/core/skills/retrieve/SKILL.md +0 -1
  43. package/core/skills/setup/SKILL.md +12 -14
  44. package/core/skills/vault-lint/SKILL.md +1 -1
  45. package/core/skills/wiki/SKILL.md +109 -30
  46. package/core/skills/write/SKILL.md +15 -0
  47. package/dist/capture/safe.d.ts +61 -1
  48. package/dist/capture/safe.js +489 -66
  49. package/dist/capture/safe.js.map +1 -1
  50. package/dist/cli/args.d.ts +29 -0
  51. package/dist/cli/args.js +156 -0
  52. package/dist/cli/args.js.map +1 -0
  53. package/dist/cli/audit.d.ts +6 -0
  54. package/dist/cli/audit.js +93 -0
  55. package/dist/cli/audit.js.map +1 -0
  56. package/dist/cli/claude-install-plan.d.ts +10 -0
  57. package/dist/cli/claude-install-plan.js +26 -0
  58. package/dist/cli/claude-install-plan.js.map +1 -0
  59. package/dist/cli/doctor-lint.d.ts +11 -0
  60. package/dist/cli/doctor-lint.js +86 -0
  61. package/dist/cli/doctor-lint.js.map +1 -0
  62. package/dist/cli/global-writeback.d.ts +31 -0
  63. package/dist/cli/global-writeback.js +73 -0
  64. package/dist/cli/global-writeback.js.map +1 -0
  65. package/dist/cli/host-commands.d.ts +30 -0
  66. package/dist/cli/host-commands.js +89 -0
  67. package/dist/cli/host-commands.js.map +1 -0
  68. package/dist/cli/link-command.d.ts +9 -0
  69. package/dist/cli/link-command.js +47 -0
  70. package/dist/cli/link-command.js.map +1 -0
  71. package/dist/cli/linkify.d.ts +23 -0
  72. package/dist/cli/linkify.js +118 -0
  73. package/dist/cli/linkify.js.map +1 -0
  74. package/dist/cli/oms.d.ts +8 -32
  75. package/dist/cli/oms.js +100 -703
  76. package/dist/cli/oms.js.map +1 -1
  77. package/dist/cli/semantic-args.d.ts +1 -2
  78. package/dist/cli/semantic-args.js +4 -7
  79. package/dist/cli/semantic-args.js.map +1 -1
  80. package/dist/cli/semantic-http.d.ts +0 -3
  81. package/dist/cli/semantic-http.js +40 -45
  82. package/dist/cli/semantic-http.js.map +1 -1
  83. package/dist/cli/semantic-usage.js +10 -9
  84. package/dist/cli/semantic-usage.js.map +1 -1
  85. package/dist/cli/semantic.js +99 -137
  86. package/dist/cli/semantic.js.map +1 -1
  87. package/dist/cli/setup-command.d.ts +11 -0
  88. package/dist/cli/setup-command.js +196 -0
  89. package/dist/cli/setup-command.js.map +1 -0
  90. package/dist/cli/setup-documents.d.ts +15 -0
  91. package/dist/cli/setup-documents.js +149 -0
  92. package/dist/cli/setup-documents.js.map +1 -0
  93. package/dist/cli/update-notice.d.ts +10 -0
  94. package/dist/cli/update-notice.js +42 -0
  95. package/dist/cli/update-notice.js.map +1 -0
  96. package/dist/cli/usage.d.ts +4 -0
  97. package/dist/cli/usage.js +102 -0
  98. package/dist/cli/usage.js.map +1 -0
  99. package/dist/conventions/lint.js +12 -33
  100. package/dist/conventions/lint.js.map +1 -1
  101. package/dist/conventions/report.d.ts +62 -0
  102. package/dist/conventions/report.js +217 -0
  103. package/dist/conventions/report.js.map +1 -0
  104. package/dist/conventions/validate.d.ts +1 -1
  105. package/dist/conventions/vault-walk.d.ts +38 -0
  106. package/dist/conventions/vault-walk.js +80 -0
  107. package/dist/conventions/vault-walk.js.map +1 -0
  108. package/dist/conventions/write-contract.d.ts +27 -0
  109. package/dist/conventions/write-contract.js +91 -0
  110. package/dist/conventions/write-contract.js.map +1 -0
  111. package/dist/conventions/write-protocol.d.ts +39 -0
  112. package/dist/conventions/write-protocol.js +44 -0
  113. package/dist/conventions/write-protocol.js.map +1 -0
  114. package/dist/core/ontology/loader.d.ts +2 -0
  115. package/dist/{ontology → core/ontology}/loader.js +11 -20
  116. package/dist/core/ontology/loader.js.map +1 -0
  117. package/dist/core/ontology/resolver.d.ts +2 -0
  118. package/dist/{ontology → core/ontology}/resolver.js +1 -15
  119. package/dist/core/ontology/resolver.js.map +1 -0
  120. package/dist/core/ontology/types.d.ts +47 -0
  121. package/dist/core/ontology/types.js +2 -0
  122. package/dist/core/ontology/types.js.map +1 -0
  123. package/dist/core/runtime/assets.d.ts +20 -0
  124. package/dist/core/runtime/assets.js +66 -0
  125. package/dist/core/runtime/assets.js.map +1 -0
  126. package/dist/engine/assemble.d.ts +28 -72
  127. package/dist/engine/assemble.js +77 -61
  128. package/dist/engine/assemble.js.map +1 -1
  129. package/dist/engine/conventions/vault-lint.d.ts +30 -2
  130. package/dist/engine/conventions/vault-lint.js +93 -97
  131. package/dist/engine/conventions/vault-lint.js.map +1 -1
  132. package/dist/engine/embed/deferred.d.ts +3 -4
  133. package/dist/engine/embed/deferred.js +10 -7
  134. package/dist/engine/embed/deferred.js.map +1 -1
  135. package/dist/engine/embed/identity.d.ts +11 -0
  136. package/dist/engine/embed/identity.js +15 -0
  137. package/dist/engine/embed/identity.js.map +1 -0
  138. package/dist/engine/embed/provider.d.ts +12 -13
  139. package/dist/engine/embed/provider.js +30 -27
  140. package/dist/engine/embed/provider.js.map +1 -1
  141. package/dist/engine/embed/store.d.ts +48 -27
  142. package/dist/engine/embed/store.js +281 -98
  143. package/dist/engine/embed/store.js.map +1 -1
  144. package/dist/engine/embed/sync.d.ts +17 -47
  145. package/dist/engine/embed/sync.js +233 -69
  146. package/dist/engine/embed/sync.js.map +1 -1
  147. package/dist/engine/graph/builder.d.ts +1 -1
  148. package/dist/engine/graph/builder.js +1 -1
  149. package/dist/engine/graph/explore.d.ts +2 -2
  150. package/dist/engine/graph/explore.js +0 -0
  151. package/dist/engine/graph/resolver.d.ts +17 -0
  152. package/dist/engine/graph/resolver.js +46 -11
  153. package/dist/engine/graph/resolver.js.map +1 -1
  154. package/dist/engine/linkify/apply.d.ts +56 -0
  155. package/dist/engine/linkify/apply.js +65 -0
  156. package/dist/engine/linkify/apply.js.map +1 -0
  157. package/dist/engine/linkify/josa.d.ts +58 -0
  158. package/dist/engine/linkify/josa.js +133 -0
  159. package/dist/engine/linkify/josa.js.map +1 -0
  160. package/dist/engine/linkify/mask.d.ts +29 -0
  161. package/dist/engine/linkify/mask.js +173 -0
  162. package/dist/engine/linkify/mask.js.map +1 -0
  163. package/dist/engine/linkify/suggest.d.ts +52 -0
  164. package/dist/engine/linkify/suggest.js +181 -0
  165. package/dist/engine/linkify/suggest.js.map +1 -0
  166. package/dist/engine/linkify/types.d.ts +68 -0
  167. package/dist/engine/linkify/types.js +12 -0
  168. package/dist/engine/linkify/types.js.map +1 -0
  169. package/dist/engine/mcp/facade.d.ts +12 -18
  170. package/dist/engine/mcp/facade.js +30 -80
  171. package/dist/engine/mcp/facade.js.map +1 -1
  172. package/dist/engine/mcp/op-mappers.d.ts +3 -9
  173. package/dist/engine/mcp/op-mappers.js +2 -30
  174. package/dist/engine/mcp/op-mappers.js.map +1 -1
  175. package/dist/engine/mcp/types.d.ts +5 -29
  176. package/dist/engine/tracer.js +6 -2
  177. package/dist/engine/tracer.js.map +1 -1
  178. package/dist/engine/types.d.ts +8 -3
  179. package/dist/graph/cache.d.ts +1 -11
  180. package/dist/graph/cache.js +1 -44
  181. package/dist/graph/cache.js.map +1 -1
  182. package/dist/graph/explore.js +88 -137
  183. package/dist/graph/explore.js.map +1 -1
  184. package/dist/harness/surface-registry.d.ts +56 -0
  185. package/dist/harness/surface-registry.js +397 -0
  186. package/dist/harness/surface-registry.js.map +1 -0
  187. package/dist/harness/validation.d.ts +9 -0
  188. package/dist/harness/validation.js +201 -0
  189. package/dist/harness/validation.js.map +1 -0
  190. package/dist/hook/post-tool-use.js +2 -2
  191. package/dist/hook/post-tool-use.js.map +1 -1
  192. package/dist/index.d.ts +7 -5
  193. package/dist/index.js +7 -5
  194. package/dist/index.js.map +1 -1
  195. package/dist/install/adapter-source.d.ts +14 -0
  196. package/dist/install/adapter-source.js +45 -0
  197. package/dist/install/adapter-source.js.map +1 -0
  198. package/dist/install/claude-hooks.d.ts +13 -0
  199. package/dist/install/claude-hooks.js +411 -0
  200. package/dist/install/claude-hooks.js.map +1 -0
  201. package/dist/install/claude-marketplace.d.ts +44 -0
  202. package/dist/install/claude-marketplace.js +89 -0
  203. package/dist/install/claude-marketplace.js.map +1 -0
  204. package/dist/install/claude.d.ts +4 -0
  205. package/dist/install/claude.js +216 -0
  206. package/dist/install/claude.js.map +1 -0
  207. package/dist/install/codex.d.ts +24 -0
  208. package/dist/install/codex.js +193 -0
  209. package/dist/install/codex.js.map +1 -0
  210. package/dist/install/common.d.ts +34 -0
  211. package/dist/install/common.js +122 -0
  212. package/dist/install/common.js.map +1 -0
  213. package/dist/install/hermes.d.ts +4 -0
  214. package/dist/install/hermes.js +78 -0
  215. package/dist/install/hermes.js.map +1 -0
  216. package/dist/install/hosts.d.ts +6 -56
  217. package/dist/install/hosts.js +65 -610
  218. package/dist/install/hosts.js.map +1 -1
  219. package/dist/install/types.d.ts +34 -0
  220. package/dist/install/types.js +2 -0
  221. package/dist/install/types.js.map +1 -0
  222. package/dist/link/convention-note.d.ts +10 -0
  223. package/dist/link/convention-note.js +59 -0
  224. package/dist/link/convention-note.js.map +1 -0
  225. package/dist/link/global-config.d.ts +22 -0
  226. package/dist/link/global-config.js +69 -0
  227. package/dist/link/global-config.js.map +1 -0
  228. package/dist/link/link.d.ts +101 -0
  229. package/dist/link/link.js +265 -0
  230. package/dist/link/link.js.map +1 -0
  231. package/dist/mcp/engine-morning-backend.d.ts +12 -17
  232. package/dist/mcp/engine-morning-backend.js +25 -131
  233. package/dist/mcp/engine-morning-backend.js.map +1 -1
  234. package/dist/mcp/link-tools.d.ts +81 -0
  235. package/dist/mcp/link-tools.js +157 -0
  236. package/dist/mcp/link-tools.js.map +1 -0
  237. package/dist/mcp/semantic-engine.d.ts +32 -0
  238. package/dist/mcp/semantic-engine.js +52 -0
  239. package/dist/mcp/semantic-engine.js.map +1 -0
  240. package/dist/mcp/semantic-retrieve-args.d.ts +1 -5
  241. package/dist/mcp/semantic-retrieve-args.js +1 -26
  242. package/dist/mcp/semantic-retrieve-args.js.map +1 -1
  243. package/dist/mcp/semantic-retrieve-schema.d.ts +0 -14
  244. package/dist/mcp/semantic-retrieve-schema.js +0 -5
  245. package/dist/mcp/semantic-retrieve-schema.js.map +1 -1
  246. package/dist/mcp/semantic-retrieve.d.ts +12 -18
  247. package/dist/mcp/semantic-retrieve.js +40 -71
  248. package/dist/mcp/semantic-retrieve.js.map +1 -1
  249. package/dist/mcp/semantic-tool-schemas.js +7 -24
  250. package/dist/mcp/semantic-tool-schemas.js.map +1 -1
  251. package/dist/mcp/server.d.ts +7 -0
  252. package/dist/mcp/server.js +224 -162
  253. package/dist/mcp/server.js.map +1 -1
  254. package/dist/mcp/update-notice.d.ts +51 -0
  255. package/dist/mcp/update-notice.js +196 -0
  256. package/dist/mcp/update-notice.js.map +1 -0
  257. package/dist/ontology/active.d.ts +7 -0
  258. package/dist/ontology/active.js +41 -0
  259. package/dist/ontology/active.js.map +1 -0
  260. package/dist/retrieve/morning.d.ts +10 -18
  261. package/dist/retrieve/morning.js +2 -26
  262. package/dist/retrieve/morning.js.map +1 -1
  263. package/dist/retrieve/semantic-contract.d.ts +10 -0
  264. package/dist/retrieve/semantic-contract.js +2 -0
  265. package/dist/retrieve/semantic-contract.js.map +1 -0
  266. package/dist/setup/axis.d.ts +22 -3
  267. package/dist/setup/axis.js +82 -35
  268. package/dist/setup/axis.js.map +1 -1
  269. package/dist/update/update.d.ts +12 -0
  270. package/dist/update/update.js +2 -2
  271. package/dist/update/update.js.map +1 -1
  272. package/docs/install.md +43 -7
  273. package/docs/release.md +109 -17
  274. package/package.json +11 -3
  275. package/scripts/install.sh +1 -1
  276. package/adapters/claude-code/skills/capture/SKILL.md +0 -50
  277. package/adapters/codex/skills/oms-capture/SKILL.md +0 -16
  278. package/adapters/hermes/skills/capture/SKILL.md +0 -16
  279. package/core/skills/capture/SKILL.md +0 -50
  280. package/dist/adapt/HostAdapter.d.ts +0 -21
  281. package/dist/adapt/HostAdapter.js +0 -10
  282. package/dist/adapt/HostAdapter.js.map +0 -1
  283. package/dist/adapt/claudeCode.d.ts +0 -9
  284. package/dist/adapt/claudeCode.js +0 -15
  285. package/dist/adapt/claudeCode.js.map +0 -1
  286. package/dist/adapt/codex.d.ts +0 -9
  287. package/dist/adapt/codex.js +0 -15
  288. package/dist/adapt/codex.js.map +0 -1
  289. package/dist/adapt/hermes.d.ts +0 -9
  290. package/dist/adapt/hermes.js +0 -15
  291. package/dist/adapt/hermes.js.map +0 -1
  292. package/dist/cli/semantic-metadata-commands.d.ts +0 -3
  293. package/dist/cli/semantic-metadata-commands.js +0 -115
  294. package/dist/cli/semantic-metadata-commands.js.map +0 -1
  295. package/dist/engine/compile/cascade.d.ts +0 -35
  296. package/dist/engine/compile/cascade.js +0 -59
  297. package/dist/engine/compile/cascade.js.map +0 -1
  298. package/dist/engine/compile/cot.d.ts +0 -30
  299. package/dist/engine/compile/cot.js +0 -153
  300. package/dist/engine/compile/cot.js.map +0 -1
  301. package/dist/engine/compile/phases.d.ts +0 -47
  302. package/dist/engine/compile/phases.js +0 -101
  303. package/dist/engine/compile/phases.js.map +0 -1
  304. package/dist/engine/compile/provenance.d.ts +0 -45
  305. package/dist/engine/compile/provenance.js +0 -103
  306. package/dist/engine/compile/provenance.js.map +0 -1
  307. package/dist/engine/compile/sha-cache.d.ts +0 -42
  308. package/dist/engine/compile/sha-cache.js +0 -86
  309. package/dist/engine/compile/sha-cache.js.map +0 -1
  310. package/dist/engine/compile/types.d.ts +0 -71
  311. package/dist/engine/compile/types.js +0 -9
  312. package/dist/engine/compile/types.js.map +0 -1
  313. package/dist/engine/compile/worker.d.ts +0 -47
  314. package/dist/engine/compile/worker.js +0 -75
  315. package/dist/engine/compile/worker.js.map +0 -1
  316. package/dist/engine/distill/analyzer.d.ts +0 -51
  317. package/dist/engine/distill/analyzer.js +0 -279
  318. package/dist/engine/distill/analyzer.js.map +0 -1
  319. package/dist/engine/distill/clean-room.d.ts +0 -46
  320. package/dist/engine/distill/clean-room.js +0 -131
  321. package/dist/engine/distill/clean-room.js.map +0 -1
  322. package/dist/engine/distill/report.d.ts +0 -23
  323. package/dist/engine/distill/report.js +0 -107
  324. package/dist/engine/distill/report.js.map +0 -1
  325. package/dist/engine/distill/types.d.ts +0 -89
  326. package/dist/engine/distill/types.js +0 -9
  327. package/dist/engine/distill/types.js.map +0 -1
  328. package/dist/engine/embed/pull.d.ts +0 -51
  329. package/dist/engine/embed/pull.js +0 -90
  330. package/dist/engine/embed/pull.js.map +0 -1
  331. package/dist/engine/graph/community.d.ts +0 -38
  332. package/dist/engine/graph/community.js +0 -122
  333. package/dist/engine/graph/community.js.map +0 -1
  334. package/dist/engine/index.d.ts +0 -5
  335. package/dist/engine/index.js +0 -2
  336. package/dist/engine/index.js.map +0 -1
  337. package/dist/engine/mcp/index.d.ts +0 -15
  338. package/dist/engine/mcp/index.js +0 -19
  339. package/dist/engine/mcp/index.js.map +0 -1
  340. package/dist/engine/mcp/retrieve-mapper.d.ts +0 -38
  341. package/dist/engine/mcp/retrieve-mapper.js +0 -96
  342. package/dist/engine/mcp/retrieve-mapper.js.map +0 -1
  343. package/dist/engine/setup/ambiguity.d.ts +0 -39
  344. package/dist/engine/setup/ambiguity.js +0 -50
  345. package/dist/engine/setup/ambiguity.js.map +0 -1
  346. package/dist/engine/setup/types.d.ts +0 -71
  347. package/dist/engine/setup/types.js +0 -22
  348. package/dist/engine/setup/types.js.map +0 -1
  349. package/dist/engine/setup/writer.d.ts +0 -32
  350. package/dist/engine/setup/writer.js +0 -77
  351. package/dist/engine/setup/writer.js.map +0 -1
  352. package/dist/engine/wiki/collection.d.ts +0 -91
  353. package/dist/engine/wiki/collection.js +0 -188
  354. package/dist/engine/wiki/collection.js.map +0 -1
  355. package/dist/engine/wiki/ledger.d.ts +0 -59
  356. package/dist/engine/wiki/ledger.js +0 -130
  357. package/dist/engine/wiki/ledger.js.map +0 -1
  358. package/dist/engine/wiki/lint.d.ts +0 -38
  359. package/dist/engine/wiki/lint.js +0 -186
  360. package/dist/engine/wiki/lint.js.map +0 -1
  361. package/dist/engine/wiki/navigation.d.ts +0 -40
  362. package/dist/engine/wiki/navigation.js +0 -83
  363. package/dist/engine/wiki/navigation.js.map +0 -1
  364. package/dist/engine/wiki/types.d.ts +0 -54
  365. package/dist/engine/wiki/types.js +0 -7
  366. package/dist/engine/wiki/types.js.map +0 -1
  367. package/dist/ontology/loader.d.ts +0 -13
  368. package/dist/ontology/loader.js.map +0 -1
  369. package/dist/ontology/resolver.d.ts +0 -13
  370. package/dist/ontology/resolver.js.map +0 -1
  371. package/dist/ontology/types.d.ts +0 -72
  372. package/dist/ontology/types.js +0 -12
  373. package/dist/ontology/types.js.map +0 -1
  374. package/dist/retrieve/embedding-sync.d.ts +0 -3
  375. package/dist/retrieve/embedding-sync.js +0 -21
  376. package/dist/retrieve/embedding-sync.js.map +0 -1
  377. package/dist/runtime/assets.d.ts +0 -7
  378. package/dist/runtime/assets.js +0 -13
  379. package/dist/runtime/assets.js.map +0 -1
  380. package/dist/search/semantic-collections.d.ts +0 -32
  381. package/dist/search/semantic-collections.js +0 -68
  382. package/dist/search/semantic-collections.js.map +0 -1
  383. package/dist/search/semantic-contexts.d.ts +0 -21
  384. package/dist/search/semantic-contexts.js +0 -28
  385. package/dist/search/semantic-contexts.js.map +0 -1
  386. package/dist/search/semantic-diagnostics.d.ts +0 -16
  387. package/dist/search/semantic-diagnostics.js +0 -110
  388. package/dist/search/semantic-diagnostics.js.map +0 -1
  389. package/dist/search/semantic-documents.d.ts +0 -3
  390. package/dist/search/semantic-documents.js +0 -150
  391. package/dist/search/semantic-documents.js.map +0 -1
  392. package/dist/search/semantic-embedding-hash.d.ts +0 -3
  393. package/dist/search/semantic-embedding-hash.js +0 -30
  394. package/dist/search/semantic-embedding-hash.js.map +0 -1
  395. package/dist/search/semantic-embedding-provider.d.ts +0 -9
  396. package/dist/search/semantic-embedding-provider.js +0 -58
  397. package/dist/search/semantic-embedding-provider.js.map +0 -1
  398. package/dist/search/semantic-index-build.d.ts +0 -13
  399. package/dist/search/semantic-index-build.js +0 -101
  400. package/dist/search/semantic-index-build.js.map +0 -1
  401. package/dist/search/semantic-index-core.d.ts +0 -21
  402. package/dist/search/semantic-index-core.js +0 -106
  403. package/dist/search/semantic-index-core.js.map +0 -1
  404. package/dist/search/semantic-index-io.d.ts +0 -19
  405. package/dist/search/semantic-index-io.js +0 -214
  406. package/dist/search/semantic-index-io.js.map +0 -1
  407. package/dist/search/semantic-index-types.d.ts +0 -50
  408. package/dist/search/semantic-index-types.js +0 -2
  409. package/dist/search/semantic-index-types.js.map +0 -1
  410. package/dist/search/semantic-index.d.ts +0 -4
  411. package/dist/search/semantic-index.js +0 -4
  412. package/dist/search/semantic-index.js.map +0 -1
  413. package/dist/search/semantic-listing.d.ts +0 -12
  414. package/dist/search/semantic-listing.js +0 -64
  415. package/dist/search/semantic-listing.js.map +0 -1
  416. package/dist/search/semantic-maintenance-shared.d.ts +0 -15
  417. package/dist/search/semantic-maintenance-shared.js +0 -43
  418. package/dist/search/semantic-maintenance-shared.js.map +0 -1
  419. package/dist/search/semantic-maintenance-types.d.ts +0 -103
  420. package/dist/search/semantic-maintenance-types.js +0 -2
  421. package/dist/search/semantic-maintenance-types.js.map +0 -1
  422. package/dist/search/semantic-maintenance.d.ts +0 -4
  423. package/dist/search/semantic-maintenance.js +0 -5
  424. package/dist/search/semantic-maintenance.js.map +0 -1
  425. package/dist/search/semantic-provider-types.d.ts +0 -34
  426. package/dist/search/semantic-provider-types.js +0 -2
  427. package/dist/search/semantic-provider-types.js.map +0 -1
  428. package/dist/search/semantic-query-types.d.ts +0 -83
  429. package/dist/search/semantic-query-types.js +0 -2
  430. package/dist/search/semantic-query-types.js.map +0 -1
  431. package/dist/search/semantic-query.d.ts +0 -2
  432. package/dist/search/semantic-query.js +0 -188
  433. package/dist/search/semantic-query.js.map +0 -1
  434. package/dist/search/semantic-sqlite-db.d.ts +0 -18
  435. package/dist/search/semantic-sqlite-db.js +0 -87
  436. package/dist/search/semantic-sqlite-db.js.map +0 -1
  437. package/dist/search/semantic-sqlite-query.d.ts +0 -2
  438. package/dist/search/semantic-sqlite-query.js +0 -128
  439. package/dist/search/semantic-sqlite-query.js.map +0 -1
  440. package/dist/search/semantic-sqlite-read.d.ts +0 -5
  441. package/dist/search/semantic-sqlite-read.js +0 -104
  442. package/dist/search/semantic-sqlite-read.js.map +0 -1
  443. package/dist/search/semantic-sqlite-write.d.ts +0 -7
  444. package/dist/search/semantic-sqlite-write.js +0 -66
  445. package/dist/search/semantic-sqlite-write.js.map +0 -1
  446. package/dist/search/semantic-store.d.ts +0 -15
  447. package/dist/search/semantic-store.js +0 -17
  448. package/dist/search/semantic-store.js.map +0 -1
  449. package/dist/search/semantic-sync-types.d.ts +0 -47
  450. package/dist/search/semantic-sync-types.js +0 -2
  451. package/dist/search/semantic-sync-types.js.map +0 -1
  452. package/dist/search/semantic-sync.d.ts +0 -13
  453. package/dist/search/semantic-sync.js +0 -131
  454. package/dist/search/semantic-sync.js.map +0 -1
  455. package/dist/search/semantic-test-fixtures.d.ts +0 -1
  456. package/dist/search/semantic-test-fixtures.js +0 -38
  457. package/dist/search/semantic-test-fixtures.js.map +0 -1
  458. package/dist/search/semantic-token.d.ts +0 -25
  459. package/dist/search/semantic-token.js +0 -114
  460. package/dist/search/semantic-token.js.map +0 -1
  461. package/dist/search/semantic-types.d.ts +0 -5
  462. package/dist/search/semantic-types.js +0 -2
  463. package/dist/search/semantic-types.js.map +0 -1
  464. package/dist/search/semantic.d.ts +0 -6
  465. package/dist/search/semantic.js +0 -6
  466. package/dist/search/semantic.js.map +0 -1
@@ -1,91 +0,0 @@
1
- /**
2
- * Wiki Collection Owner.
3
- *
4
- * Five responsibilities (Astro-Han collection owner pattern, MIT — idea absorption):
5
- * 1. Namespace / identity — concept ID → file path mapping
6
- * 2. Link-graph closure — verify no dangling [[wikilinks]]
7
- * 3. Staleness ledger — delegate to ledger.ts
8
- * 4. Navigation surfaces — delegate to navigation.ts
9
- * 5. Processed→wiki promotion — the ONLY path into wiki/
10
- *
11
- * Nvk 3-phase hard separation (Apache-2.0 — idea absorption):
12
- * Research(M1) → Compile(M2, sequential) → Wiki(read-only query surface)
13
- * - A wiki *query* NEVER triggers compile.
14
- * - Compile NEVER writes wiki/ directly (promotion only).
15
- * - wiki/ is a read-only query surface; compile writes to processed/ only.
16
- * - Sync boundary: processed/ is engine-internal and is NEVER synced to the
17
- * Obsidian vault. Only wiki/ crosses the Obsidian sync boundary.
18
- */
19
- import type { CascadeFlipResult, LinkClosureResult, NowFn, StalenessLedger } from "./types.js";
20
- /**
21
- * Map a concept ID (vault-relative path) to an absolute file path in wiki/.
22
- * Uses only the basename so nested concept IDs are flattened to wiki/ root.
23
- */
24
- export declare function conceptToWikiPath(wikiDir: string, conceptId: string): string;
25
- /**
26
- * Map a concept ID to its processed/ output path.
27
- */
28
- export declare function conceptToProcessedPath(processedDir: string, conceptId: string): string;
29
- /**
30
- * Extract all [[wikilink]] targets from a Markdown body.
31
- * Exported for use by lint.ts.
32
- */
33
- export declare function extractWikilinks(body: string): string[];
34
- /**
35
- * Check link-graph closure: every [[wikilink]] in `body` must resolve to a
36
- * page currently present in wiki/.
37
- *
38
- * @param wikiDir - Absolute path to the wiki/ directory.
39
- * @param body - Markdown body to check.
40
- */
41
- export declare function checkLinkClosure(wikiDir: string, body: string): Promise<LinkClosureResult>;
42
- /**
43
- * Promote a compiled page from processed/ to wiki/.
44
- *
45
- * Called ONLY after the cascade pass completes.
46
- * Compile NEVER calls this directly — promotion is the sole entry point into wiki/.
47
- *
48
- * @param processedDir - Absolute path to the processed/ tier (Phase-B output).
49
- * @param wikiDir - Absolute path to the wiki/ directory.
50
- * @param conceptId - Vault-relative concept ID (basename used as filename).
51
- */
52
- export declare function promoteToWiki(processedDir: string, wikiDir: string, conceptId: string): Promise<void>;
53
- export interface CollectionRunOptions {
54
- /** Absolute path to the processed/ tier (Phase-B compile output). */
55
- processedDir: string;
56
- /** Absolute path to the wiki/ directory (read-only query surface). */
57
- wikiDir: string;
58
- /** Absolute path to the .llmwiki/ dotfolder (ledger + SHA cache). */
59
- dotLlmwiki: string;
60
- /** Vault-relative concept ID that was just compiled. */
61
- conceptId: string;
62
- /** Human-readable concept name (for log.md). */
63
- conceptName: string;
64
- /** Backlinks returned by the M2 cascade pass (affected_backlinks). */
65
- affectedBacklinks: readonly string[];
66
- /** Injected clock returning ISO-8601 string. */
67
- now: NowFn;
68
- }
69
- export interface CollectionRunResult {
70
- /** Concept IDs whose CLEAN state was flipped to DIRTY by the cascade. */
71
- cascadeFlipped: CascadeFlipResult;
72
- /** Link-graph closure result for the newly promoted page. */
73
- linkClosure: LinkClosureResult;
74
- /** The ledger state after this run. */
75
- ledger: StalenessLedger;
76
- }
77
- /**
78
- * Run a full collection cycle after a successful M2 compile.
79
- *
80
- * Order (enforced to satisfy nvk 3-phase separation):
81
- * 1. Promote processed/→wiki/ for the compiled concept.
82
- * 2. Mark compiled concept CLEAN in the ledger.
83
- * 3. Apply cascade: flip CLEAN backlinks to DIRTY.
84
- * 4. Detect stubs: wikilinks in the promoted page with no wiki/ target.
85
- * 5. Detect orphans: wiki/ pages with no incoming wikilinks.
86
- * 6. Regenerate navigation surfaces (index.md + log.md).
87
- * 7. Persist ledger.
88
- *
89
- * A wiki *query* NEVER calls this function (nvk hard separation enforced here).
90
- */
91
- export declare function runCollection(opts: CollectionRunOptions): Promise<CollectionRunResult>;
@@ -1,188 +0,0 @@
1
- /**
2
- * Wiki Collection Owner.
3
- *
4
- * Five responsibilities (Astro-Han collection owner pattern, MIT — idea absorption):
5
- * 1. Namespace / identity — concept ID → file path mapping
6
- * 2. Link-graph closure — verify no dangling [[wikilinks]]
7
- * 3. Staleness ledger — delegate to ledger.ts
8
- * 4. Navigation surfaces — delegate to navigation.ts
9
- * 5. Processed→wiki promotion — the ONLY path into wiki/
10
- *
11
- * Nvk 3-phase hard separation (Apache-2.0 — idea absorption):
12
- * Research(M1) → Compile(M2, sequential) → Wiki(read-only query surface)
13
- * - A wiki *query* NEVER triggers compile.
14
- * - Compile NEVER writes wiki/ directly (promotion only).
15
- * - wiki/ is a read-only query surface; compile writes to processed/ only.
16
- * - Sync boundary: processed/ is engine-internal and is NEVER synced to the
17
- * Obsidian vault. Only wiki/ crosses the Obsidian sync boundary.
18
- */
19
- import { copyFile, mkdir, readdir, readFile } from "node:fs/promises";
20
- import path from "node:path";
21
- import { applyAffectedBacklinks, loadLedger, saveLedger, transitionClean, transitionOrphan, transitionStub, } from "./ledger.js";
22
- import { appendLog, regenerateIndex } from "./navigation.js";
23
- // ---------------------------------------------------------------------------
24
- // 1. Namespace / identity
25
- // ---------------------------------------------------------------------------
26
- /**
27
- * Map a concept ID (vault-relative path) to an absolute file path in wiki/.
28
- * Uses only the basename so nested concept IDs are flattened to wiki/ root.
29
- */
30
- export function conceptToWikiPath(wikiDir, conceptId) {
31
- return path.join(wikiDir, path.basename(conceptId));
32
- }
33
- /**
34
- * Map a concept ID to its processed/ output path.
35
- */
36
- export function conceptToProcessedPath(processedDir, conceptId) {
37
- return path.join(processedDir, path.basename(conceptId));
38
- }
39
- // ---------------------------------------------------------------------------
40
- // 2. Link-graph closure
41
- // ---------------------------------------------------------------------------
42
- /**
43
- * Extract all [[wikilink]] targets from a Markdown body.
44
- * Exported for use by lint.ts.
45
- */
46
- export function extractWikilinks(body) {
47
- const pattern = /\[\[([^\]]+)\]\]/g;
48
- const links = [];
49
- let match;
50
- while ((match = pattern.exec(body)) !== null) {
51
- const target = match[1];
52
- if (target !== undefined)
53
- links.push(target);
54
- }
55
- return links;
56
- }
57
- /**
58
- * Check link-graph closure: every [[wikilink]] in `body` must resolve to a
59
- * page currently present in wiki/.
60
- *
61
- * @param wikiDir - Absolute path to the wiki/ directory.
62
- * @param body - Markdown body to check.
63
- */
64
- export async function checkLinkClosure(wikiDir, body) {
65
- const links = extractWikilinks(body);
66
- if (links.length === 0)
67
- return { dangling: [], closed: true };
68
- let files = [];
69
- try {
70
- files = await readdir(wikiDir);
71
- }
72
- catch {
73
- // wiki/ doesn't exist yet — every link is dangling
74
- }
75
- const pageNames = new Set(files
76
- .filter((f) => f.endsWith(".md"))
77
- .map((f) => path.basename(f, ".md")));
78
- const dangling = links.filter((link) => {
79
- const name = link.replace(/\.md$/, "");
80
- return !pageNames.has(name);
81
- });
82
- return { dangling, closed: dangling.length === 0 };
83
- }
84
- // ---------------------------------------------------------------------------
85
- // 5. Processed → wiki promotion (the ONLY path into wiki/)
86
- // ---------------------------------------------------------------------------
87
- /**
88
- * Promote a compiled page from processed/ to wiki/.
89
- *
90
- * Called ONLY after the cascade pass completes.
91
- * Compile NEVER calls this directly — promotion is the sole entry point into wiki/.
92
- *
93
- * @param processedDir - Absolute path to the processed/ tier (Phase-B output).
94
- * @param wikiDir - Absolute path to the wiki/ directory.
95
- * @param conceptId - Vault-relative concept ID (basename used as filename).
96
- */
97
- export async function promoteToWiki(processedDir, wikiDir, conceptId) {
98
- await mkdir(wikiDir, { recursive: true });
99
- const src = conceptToProcessedPath(processedDir, conceptId);
100
- const dst = conceptToWikiPath(wikiDir, conceptId);
101
- await copyFile(src, dst);
102
- }
103
- /**
104
- * Run a full collection cycle after a successful M2 compile.
105
- *
106
- * Order (enforced to satisfy nvk 3-phase separation):
107
- * 1. Promote processed/→wiki/ for the compiled concept.
108
- * 2. Mark compiled concept CLEAN in the ledger.
109
- * 3. Apply cascade: flip CLEAN backlinks to DIRTY.
110
- * 4. Detect stubs: wikilinks in the promoted page with no wiki/ target.
111
- * 5. Detect orphans: wiki/ pages with no incoming wikilinks.
112
- * 6. Regenerate navigation surfaces (index.md + log.md).
113
- * 7. Persist ledger.
114
- *
115
- * A wiki *query* NEVER calls this function (nvk hard separation enforced here).
116
- */
117
- export async function runCollection(opts) {
118
- const { processedDir, wikiDir, dotLlmwiki, conceptId, conceptName, affectedBacklinks, now, } = opts;
119
- // Step 1: promote processed/→wiki/ (the ONLY path into wiki/)
120
- await promoteToWiki(processedDir, wikiDir, conceptId);
121
- // Load ledger
122
- let ledger = await loadLedger(dotLlmwiki);
123
- // Step 2: mark compiled concept CLEAN
124
- ledger = transitionClean(ledger, conceptId, now);
125
- // Step 3: cascade — flip CLEAN backlinks to DIRTY
126
- const { ledger: ledgerAfterCascade, flipped } = applyAffectedBacklinks(ledger, affectedBacklinks, now);
127
- ledger = ledgerAfterCascade;
128
- // Step 4: detect stubs — read promoted page, check all [[wikilinks]]
129
- const promotedPath = conceptToWikiPath(wikiDir, conceptId);
130
- let promotedBody = "";
131
- try {
132
- promotedBody = await readFile(promotedPath, "utf8");
133
- }
134
- catch {
135
- // promoted file unreadable — skip stub detection
136
- }
137
- const linkClosure = await checkLinkClosure(wikiDir, promotedBody);
138
- for (const dangling of linkClosure.dangling) {
139
- // Use a stable concept ID for stub entries
140
- const stubId = dangling.endsWith(".md") ? dangling : `${dangling}.md`;
141
- const current = ledger[stubId];
142
- if (current === undefined || current.state === "STUB") {
143
- ledger = transitionStub(ledger, stubId, now);
144
- }
145
- }
146
- // Step 5: detect orphans — wiki/ pages with no incoming wikilinks
147
- let wikiFiles = [];
148
- try {
149
- wikiFiles = (await readdir(wikiDir)).filter((f) => f.endsWith(".md") && f !== "index.md" && f !== "log.md");
150
- }
151
- catch {
152
- // ok if dir is empty
153
- }
154
- // Build set of all link targets found across all wiki pages
155
- const allLinkTargets = new Set();
156
- for (const file of wikiFiles) {
157
- try {
158
- const content = await readFile(path.join(wikiDir, file), "utf8");
159
- for (const link of extractWikilinks(content)) {
160
- allLinkTargets.add(link.replace(/\.md$/, ""));
161
- }
162
- }
163
- catch {
164
- // ignore unreadable files
165
- }
166
- }
167
- for (const file of wikiFiles) {
168
- const baseName = path.basename(file, ".md");
169
- if (!allLinkTargets.has(baseName)) {
170
- const fileConceptId = file; // use bare filename as ledger key for orphan entries
171
- ledger = transitionOrphan(ledger, fileConceptId, now);
172
- }
173
- }
174
- // Step 6: regenerate navigation (index.md + log.md — always written before returning)
175
- const cleanIds = Object.keys(ledger)
176
- .filter((id) => ledger[id]?.state === "CLEAN")
177
- .sort();
178
- await regenerateIndex(wikiDir, cleanIds, now);
179
- await appendLog(wikiDir, conceptName, now);
180
- // Step 7: persist ledger
181
- await saveLedger(dotLlmwiki, ledger);
182
- return {
183
- cascadeFlipped: { flipped },
184
- linkClosure,
185
- ledger,
186
- };
187
- }
188
- //# sourceMappingURL=collection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collection.js","sourceRoot":"","sources":["../../../src/engine/wiki/collection.ts"],"names":[],"mappings":"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"}
@@ -1,59 +0,0 @@
1
- /**
2
- * Staleness ledger — 5-state FSM for wiki pages.
3
- *
4
- * Persists to .llmwiki/staleness.json (human-readable, never synced dotfolder).
5
- * All state is plain disk JSON written only on explicit calls (R2: stateless/manual).
6
- * No daemon, no watcher, no setInterval.
7
- *
8
- * Pass the dotLlmwiki dir in — no hardcoded vault path.
9
- *
10
- * Full-rebuild escape hatch: delete .llmwiki/staleness.json → every known page
11
- * resets to DIRTY on the next loadLedger call.
12
- */
13
- import type { NowFn, StalenessLedger } from "./types.js";
14
- /**
15
- * Load the staleness ledger from disk.
16
- * Returns an empty ledger if the file is absent or unreadable.
17
- */
18
- export declare function loadLedger(dotLlmwiki: string): Promise<StalenessLedger>;
19
- /**
20
- * Persist the staleness ledger to disk.
21
- * Creates the dotLlmwiki directory if it does not exist.
22
- */
23
- export declare function saveLedger(dotLlmwiki: string, ledger: StalenessLedger): Promise<void>;
24
- /** Mark a concept DIRTY (source SHA changed or cascade flip). */
25
- export declare function transitionDirty(ledger: StalenessLedger, conceptId: string, now: NowFn): StalenessLedger;
26
- /** Mark a concept CLEAN (compile output produced successfully). */
27
- export declare function transitionClean(ledger: StalenessLedger, conceptId: string, now: NowFn): StalenessLedger;
28
- /** Mark a concept STUB (referenced by wikilinks but no compile output exists). */
29
- export declare function transitionStub(ledger: StalenessLedger, conceptId: string, now: NowFn): StalenessLedger;
30
- /** Mark a concept ORPHAN (no incoming wikilinks from any other wiki page). */
31
- export declare function transitionOrphan(ledger: StalenessLedger, conceptId: string, now: NowFn): StalenessLedger;
32
- /**
33
- * Mark a concept CONFLICT (two compile sources produced conflicting content).
34
- *
35
- * @param conflictNote - Human-readable description of the conflict.
36
- * Format: "A claims X; B claims Y" — surfaced in lint as:
37
- * "> **Conflict:** A claims X; B claims Y. Unresolved."
38
- */
39
- export declare function transitionConflict(ledger: StalenessLedger, conceptId: string, now: NowFn, conflictNote: string): StalenessLedger;
40
- /**
41
- * Full-rebuild escape hatch: delete staleness.json and return all known concept IDs
42
- * re-marked as DIRTY.
43
- *
44
- * If the file doesn't exist, is a no-op (returns empty ledger).
45
- * The caller must call saveLedger() to persist the reset state.
46
- */
47
- export declare function resetLedger(dotLlmwiki: string, now: NowFn): Promise<StalenessLedger>;
48
- /**
49
- * Consume affected_backlinks from an M2 compile cascade return.
50
- *
51
- * For each affected page: if the current state is CLEAN, flip to DIRTY and
52
- * queue for the next compile run. Other states are left unchanged.
53
- *
54
- * Returns the updated ledger and the list of concept IDs that were flipped.
55
- */
56
- export declare function applyAffectedBacklinks(ledger: StalenessLedger, affectedBacklinks: readonly string[], now: NowFn): {
57
- ledger: StalenessLedger;
58
- flipped: string[];
59
- };
@@ -1,130 +0,0 @@
1
- /**
2
- * Staleness ledger — 5-state FSM for wiki pages.
3
- *
4
- * Persists to .llmwiki/staleness.json (human-readable, never synced dotfolder).
5
- * All state is plain disk JSON written only on explicit calls (R2: stateless/manual).
6
- * No daemon, no watcher, no setInterval.
7
- *
8
- * Pass the dotLlmwiki dir in — no hardcoded vault path.
9
- *
10
- * Full-rebuild escape hatch: delete .llmwiki/staleness.json → every known page
11
- * resets to DIRTY on the next loadLedger call.
12
- */
13
- import { mkdir, readFile, unlink, writeFile } from "node:fs/promises";
14
- import path from "node:path";
15
- // ---------------------------------------------------------------------------
16
- // File path
17
- // ---------------------------------------------------------------------------
18
- function ledgerFilePath(dotLlmwiki) {
19
- return path.join(dotLlmwiki, "staleness.json");
20
- }
21
- // ---------------------------------------------------------------------------
22
- // Persistence
23
- // ---------------------------------------------------------------------------
24
- /**
25
- * Load the staleness ledger from disk.
26
- * Returns an empty ledger if the file is absent or unreadable.
27
- */
28
- export async function loadLedger(dotLlmwiki) {
29
- try {
30
- const raw = await readFile(ledgerFilePath(dotLlmwiki), "utf8");
31
- const parsed = JSON.parse(raw);
32
- if (parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)) {
33
- return parsed;
34
- }
35
- return {};
36
- }
37
- catch {
38
- return {};
39
- }
40
- }
41
- /**
42
- * Persist the staleness ledger to disk.
43
- * Creates the dotLlmwiki directory if it does not exist.
44
- */
45
- export async function saveLedger(dotLlmwiki, ledger) {
46
- await mkdir(dotLlmwiki, { recursive: true });
47
- await writeFile(ledgerFilePath(dotLlmwiki), JSON.stringify(ledger, null, 2), "utf8");
48
- }
49
- // ---------------------------------------------------------------------------
50
- // Internal helper
51
- // ---------------------------------------------------------------------------
52
- function makeEntry(state, now, extra) {
53
- return { state, updatedAt: now(), ...extra };
54
- }
55
- // ---------------------------------------------------------------------------
56
- // State transitions — pure functions returning a new ledger
57
- // ---------------------------------------------------------------------------
58
- /** Mark a concept DIRTY (source SHA changed or cascade flip). */
59
- export function transitionDirty(ledger, conceptId, now) {
60
- return { ...ledger, [conceptId]: makeEntry("DIRTY", now) };
61
- }
62
- /** Mark a concept CLEAN (compile output produced successfully). */
63
- export function transitionClean(ledger, conceptId, now) {
64
- return { ...ledger, [conceptId]: makeEntry("CLEAN", now) };
65
- }
66
- /** Mark a concept STUB (referenced by wikilinks but no compile output exists). */
67
- export function transitionStub(ledger, conceptId, now) {
68
- return { ...ledger, [conceptId]: makeEntry("STUB", now) };
69
- }
70
- /** Mark a concept ORPHAN (no incoming wikilinks from any other wiki page). */
71
- export function transitionOrphan(ledger, conceptId, now) {
72
- return { ...ledger, [conceptId]: makeEntry("ORPHAN", now) };
73
- }
74
- /**
75
- * Mark a concept CONFLICT (two compile sources produced conflicting content).
76
- *
77
- * @param conflictNote - Human-readable description of the conflict.
78
- * Format: "A claims X; B claims Y" — surfaced in lint as:
79
- * "> **Conflict:** A claims X; B claims Y. Unresolved."
80
- */
81
- export function transitionConflict(ledger, conceptId, now, conflictNote) {
82
- return { ...ledger, [conceptId]: makeEntry("CONFLICT", now, { conflictNote }) };
83
- }
84
- // ---------------------------------------------------------------------------
85
- // Escape hatch: reset by deleting staleness.json
86
- // ---------------------------------------------------------------------------
87
- /**
88
- * Full-rebuild escape hatch: delete staleness.json and return all known concept IDs
89
- * re-marked as DIRTY.
90
- *
91
- * If the file doesn't exist, is a no-op (returns empty ledger).
92
- * The caller must call saveLedger() to persist the reset state.
93
- */
94
- export async function resetLedger(dotLlmwiki, now) {
95
- const current = await loadLedger(dotLlmwiki);
96
- try {
97
- await unlink(ledgerFilePath(dotLlmwiki));
98
- }
99
- catch {
100
- // File doesn't exist — that's fine
101
- }
102
- const reset = {};
103
- for (const conceptId of Object.keys(current)) {
104
- reset[conceptId] = makeEntry("DIRTY", now);
105
- }
106
- return reset;
107
- }
108
- // ---------------------------------------------------------------------------
109
- // Cascade integration
110
- // ---------------------------------------------------------------------------
111
- /**
112
- * Consume affected_backlinks from an M2 compile cascade return.
113
- *
114
- * For each affected page: if the current state is CLEAN, flip to DIRTY and
115
- * queue for the next compile run. Other states are left unchanged.
116
- *
117
- * Returns the updated ledger and the list of concept IDs that were flipped.
118
- */
119
- export function applyAffectedBacklinks(ledger, affectedBacklinks, now) {
120
- let updated = { ...ledger };
121
- const flipped = [];
122
- for (const conceptId of affectedBacklinks) {
123
- if (updated[conceptId]?.state === "CLEAN") {
124
- updated = transitionDirty(updated, conceptId, now);
125
- flipped.push(conceptId);
126
- }
127
- }
128
- return { ledger: updated, flipped };
129
- }
130
- //# sourceMappingURL=ledger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../src/engine/wiki/ledger.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- /**
2
- * Astro-Han 2-tier lint (MIT — idea absorption only).
3
- *
4
- * Auto-fix tier (runs automatically, mutates wiki/ files):
5
- * - index consistency: concept present in wiki/ but absent from index.md
6
- * - internal-link correctness: broken [[wikilinks]] flagged
7
- * - See-Also sections: added if missing
8
- *
9
- * Report-only tier (reports to return value; NO autofix without forceHumanGate):
10
- * - factual contradictions typed as:
11
- * "> **Conflict:** A claims X; B claims Y. Unresolved."
12
- * - orphan pages (in ledger as ORPHAN state)
13
- * - outdated refs (DIRTY pages in the ledger)
14
- *
15
- * Mutation policy: report-only findings are NEVER auto-fixed unless the caller
16
- * explicitly sets forceHumanGate: true. This is the human-gate flag.
17
- */
18
- import type { LintResult, StalenessLedger } from "./types.js";
19
- export interface LintOptions {
20
- /** Absolute path to the wiki/ directory. */
21
- wikiDir: string;
22
- /** Current staleness ledger (used for report-only checks). */
23
- ledger: StalenessLedger;
24
- /**
25
- * Human-gate flag — not set automatically.
26
- * When true, allows autofix of report-only findings (not currently implemented;
27
- * present as explicit hook for future human-approved bulk operations).
28
- */
29
- forceHumanGate?: boolean;
30
- }
31
- /**
32
- * Run all lint checks.
33
- *
34
- * Auto-fix tier mutates wiki/ files automatically.
35
- * Report-only tier returns findings but does NOT mutate anything unless
36
- * forceHumanGate is true (currently reserved — no report-only autofix implemented).
37
- */
38
- export declare function runLint(opts: LintOptions): Promise<LintResult>;