llmtxt 2026.4.4 → 2026.4.6

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 (409) hide show
  1. package/CHANGELOG.md +84 -1
  2. package/LICENSE +0 -0
  3. package/README.md +40 -0
  4. package/dist/__tests__/a2a.test.d.ts +14 -0
  5. package/dist/__tests__/a2a.test.d.ts.map +1 -0
  6. package/dist/__tests__/a2a.test.js +217 -0
  7. package/dist/__tests__/a2a.test.js.map +1 -0
  8. package/dist/__tests__/backend-contract.test.d.ts +24 -0
  9. package/dist/__tests__/backend-contract.test.d.ts.map +1 -0
  10. package/dist/__tests__/backend-contract.test.js +961 -0
  11. package/dist/__tests__/backend-contract.test.js.map +1 -0
  12. package/dist/__tests__/backend-factory.test.d.ts +18 -0
  13. package/dist/__tests__/backend-factory.test.d.ts.map +1 -0
  14. package/dist/__tests__/backend-factory.test.js +254 -0
  15. package/dist/__tests__/backend-factory.test.js.map +1 -0
  16. package/dist/__tests__/blob-5-agent-hub-spoke.test.d.ts +26 -0
  17. package/dist/__tests__/blob-5-agent-hub-spoke.test.d.ts.map +1 -0
  18. package/dist/__tests__/blob-5-agent-hub-spoke.test.js +262 -0
  19. package/dist/__tests__/blob-5-agent-hub-spoke.test.js.map +1 -0
  20. package/dist/__tests__/blob-backend.test.d.ts +16 -0
  21. package/dist/__tests__/blob-backend.test.d.ts.map +1 -0
  22. package/dist/__tests__/blob-backend.test.js +271 -0
  23. package/dist/__tests__/blob-backend.test.js.map +1 -0
  24. package/dist/__tests__/blob-changeset.test.d.ts +10 -0
  25. package/dist/__tests__/blob-changeset.test.d.ts.map +1 -0
  26. package/dist/__tests__/blob-changeset.test.js +286 -0
  27. package/dist/__tests__/blob-changeset.test.js.map +1 -0
  28. package/dist/__tests__/blob-cli.test.d.ts +20 -0
  29. package/dist/__tests__/blob-cli.test.d.ts.map +1 -0
  30. package/dist/__tests__/blob-cli.test.js +178 -0
  31. package/dist/__tests__/blob-cli.test.js.map +1 -0
  32. package/dist/__tests__/blob-fs-adapter.test.d.ts +16 -0
  33. package/dist/__tests__/blob-fs-adapter.test.d.ts.map +1 -0
  34. package/dist/__tests__/blob-fs-adapter.test.js +385 -0
  35. package/dist/__tests__/blob-fs-adapter.test.js.map +1 -0
  36. package/dist/__tests__/crdt-primitives.test.d.ts +20 -0
  37. package/dist/__tests__/crdt-primitives.test.d.ts.map +1 -0
  38. package/dist/__tests__/crdt-primitives.test.js +255 -0
  39. package/dist/__tests__/crdt-primitives.test.js.map +1 -0
  40. package/dist/__tests__/crdt-sdk.test.d.ts +30 -0
  41. package/dist/__tests__/crdt-sdk.test.d.ts.map +1 -0
  42. package/dist/__tests__/crdt-sdk.test.js +380 -0
  43. package/dist/__tests__/crdt-sdk.test.js.map +1 -0
  44. package/dist/__tests__/crsqlite-loader.test.d.ts +15 -0
  45. package/dist/__tests__/crsqlite-loader.test.d.ts.map +1 -0
  46. package/dist/__tests__/crsqlite-loader.test.js +116 -0
  47. package/dist/__tests__/crsqlite-loader.test.js.map +1 -0
  48. package/dist/__tests__/discovery.test.d.ts +15 -0
  49. package/dist/__tests__/discovery.test.d.ts.map +1 -0
  50. package/dist/__tests__/discovery.test.js +174 -0
  51. package/dist/__tests__/discovery.test.js.map +1 -0
  52. package/dist/__tests__/export-backend.test.d.ts +15 -0
  53. package/dist/__tests__/export-backend.test.d.ts.map +1 -0
  54. package/dist/__tests__/export-backend.test.js +316 -0
  55. package/dist/__tests__/export-backend.test.js.map +1 -0
  56. package/dist/__tests__/export-determinism.test.d.ts +19 -0
  57. package/dist/__tests__/export-determinism.test.d.ts.map +1 -0
  58. package/dist/__tests__/export-determinism.test.js +253 -0
  59. package/dist/__tests__/export-determinism.test.js.map +1 -0
  60. package/dist/__tests__/export.test.d.ts +11 -0
  61. package/dist/__tests__/export.test.d.ts.map +1 -0
  62. package/dist/__tests__/export.test.js +297 -0
  63. package/dist/__tests__/export.test.js.map +1 -0
  64. package/dist/__tests__/helpers/test-pg.d.ts +150 -0
  65. package/dist/__tests__/helpers/test-pg.d.ts.map +1 -0
  66. package/dist/__tests__/helpers/test-pg.js +799 -0
  67. package/dist/__tests__/helpers/test-pg.js.map +1 -0
  68. package/dist/__tests__/hub-spoke-topology.test.d.ts +24 -0
  69. package/dist/__tests__/hub-spoke-topology.test.d.ts.map +1 -0
  70. package/dist/__tests__/hub-spoke-topology.test.js +299 -0
  71. package/dist/__tests__/hub-spoke-topology.test.js.map +1 -0
  72. package/dist/__tests__/local-backend-crr.test.d.ts +25 -0
  73. package/dist/__tests__/local-backend-crr.test.d.ts.map +1 -0
  74. package/dist/__tests__/local-backend-crr.test.js +197 -0
  75. package/dist/__tests__/local-backend-crr.test.js.map +1 -0
  76. package/dist/__tests__/local-backend-sync.test.d.ts +20 -0
  77. package/dist/__tests__/local-backend-sync.test.d.ts.map +1 -0
  78. package/dist/__tests__/local-backend-sync.test.js +373 -0
  79. package/dist/__tests__/local-backend-sync.test.js.map +1 -0
  80. package/dist/__tests__/local-multi-agent.test.d.ts +20 -0
  81. package/dist/__tests__/local-multi-agent.test.d.ts.map +1 -0
  82. package/dist/__tests__/local-multi-agent.test.js +229 -0
  83. package/dist/__tests__/local-multi-agent.test.js.map +1 -0
  84. package/dist/__tests__/loro-crsqlite-integration.test.d.ts +32 -0
  85. package/dist/__tests__/loro-crsqlite-integration.test.d.ts.map +1 -0
  86. package/dist/__tests__/loro-crsqlite-integration.test.js +340 -0
  87. package/dist/__tests__/loro-crsqlite-integration.test.js.map +1 -0
  88. package/dist/__tests__/mesh-5-peer.test.d.ts +35 -0
  89. package/dist/__tests__/mesh-5-peer.test.d.ts.map +1 -0
  90. package/dist/__tests__/mesh-5-peer.test.js +435 -0
  91. package/dist/__tests__/mesh-5-peer.test.js.map +1 -0
  92. package/dist/__tests__/mesh-cli.test.d.ts +18 -0
  93. package/dist/__tests__/mesh-cli.test.d.ts.map +1 -0
  94. package/dist/__tests__/mesh-cli.test.js +143 -0
  95. package/dist/__tests__/mesh-cli.test.js.map +1 -0
  96. package/dist/__tests__/presence.test.d.ts +13 -0
  97. package/dist/__tests__/presence.test.d.ts.map +1 -0
  98. package/dist/__tests__/presence.test.js +198 -0
  99. package/dist/__tests__/presence.test.js.map +1 -0
  100. package/dist/__tests__/session.test.d.ts +13 -0
  101. package/dist/__tests__/session.test.d.ts.map +1 -0
  102. package/dist/__tests__/session.test.js +1187 -0
  103. package/dist/__tests__/session.test.js.map +1 -0
  104. package/dist/__tests__/standalone-topology.test.d.ts +18 -0
  105. package/dist/__tests__/standalone-topology.test.d.ts.map +1 -0
  106. package/dist/__tests__/standalone-topology.test.js +297 -0
  107. package/dist/__tests__/standalone-topology.test.js.map +1 -0
  108. package/dist/__tests__/sync-engine.test.d.ts +15 -0
  109. package/dist/__tests__/sync-engine.test.d.ts.map +1 -0
  110. package/dist/__tests__/sync-engine.test.js +286 -0
  111. package/dist/__tests__/sync-engine.test.js.map +1 -0
  112. package/dist/__tests__/topology-failure.test.d.ts +23 -0
  113. package/dist/__tests__/topology-failure.test.d.ts.map +1 -0
  114. package/dist/__tests__/topology-failure.test.js +357 -0
  115. package/dist/__tests__/topology-failure.test.js.map +1 -0
  116. package/dist/__tests__/topology.test.d.ts +17 -0
  117. package/dist/__tests__/topology.test.d.ts.map +1 -0
  118. package/dist/__tests__/topology.test.js +346 -0
  119. package/dist/__tests__/topology.test.js.map +1 -0
  120. package/dist/__tests__/transport.test.d.ts +18 -0
  121. package/dist/__tests__/transport.test.d.ts.map +1 -0
  122. package/dist/__tests__/transport.test.js +305 -0
  123. package/dist/__tests__/transport.test.js.map +1 -0
  124. package/dist/awareness.d.ts +70 -0
  125. package/dist/awareness.d.ts.map +1 -0
  126. package/dist/awareness.js +265 -0
  127. package/dist/awareness.js.map +1 -0
  128. package/dist/backend/factory.d.ts +379 -0
  129. package/dist/backend/factory.d.ts.map +1 -0
  130. package/dist/backend/factory.js +824 -0
  131. package/dist/backend/factory.js.map +1 -0
  132. package/dist/cache.d.ts +0 -0
  133. package/dist/cache.d.ts.map +0 -0
  134. package/dist/cache.js +0 -0
  135. package/dist/cache.js.map +0 -0
  136. package/dist/cli/index.d.ts +11 -0
  137. package/dist/cli/index.d.ts.map +1 -0
  138. package/dist/cli/index.js +11 -0
  139. package/dist/cli/index.js.map +1 -0
  140. package/dist/cli/llmtxt.d.ts +30 -0
  141. package/dist/cli/llmtxt.d.ts.map +1 -0
  142. package/dist/cli/llmtxt.js +1702 -0
  143. package/dist/cli/llmtxt.js.map +1 -0
  144. package/dist/client.d.ts +0 -0
  145. package/dist/client.d.ts.map +0 -0
  146. package/dist/client.js +0 -0
  147. package/dist/client.js.map +0 -0
  148. package/dist/compression.d.ts +1 -1
  149. package/dist/compression.d.ts.map +1 -1
  150. package/dist/compression.js +1 -1
  151. package/dist/compression.js.map +1 -1
  152. package/dist/core/backend.d.ts +1230 -0
  153. package/dist/core/backend.d.ts.map +1 -0
  154. package/dist/core/backend.js +31 -0
  155. package/dist/core/backend.js.map +1 -0
  156. package/dist/core/errors.d.ts +59 -0
  157. package/dist/core/errors.d.ts.map +1 -0
  158. package/dist/core/errors.js +81 -0
  159. package/dist/core/errors.js.map +1 -0
  160. package/dist/crdt-primitives.d.ts +142 -0
  161. package/dist/crdt-primitives.d.ts.map +1 -0
  162. package/dist/crdt-primitives.js +219 -0
  163. package/dist/crdt-primitives.js.map +1 -0
  164. package/dist/crdt.d.ts +143 -0
  165. package/dist/crdt.d.ts.map +1 -0
  166. package/dist/crdt.js +243 -0
  167. package/dist/crdt.js.map +1 -0
  168. package/dist/crsqlite-loader.d.ts +35 -0
  169. package/dist/crsqlite-loader.d.ts.map +1 -0
  170. package/dist/crsqlite-loader.js +56 -0
  171. package/dist/crsqlite-loader.js.map +1 -0
  172. package/dist/disclosure.d.ts +0 -0
  173. package/dist/disclosure.d.ts.map +0 -0
  174. package/dist/disclosure.js +0 -0
  175. package/dist/disclosure.js.map +0 -0
  176. package/dist/embeddings.d.ts +82 -0
  177. package/dist/embeddings.d.ts.map +1 -0
  178. package/dist/embeddings.js +372 -0
  179. package/dist/embeddings.js.map +1 -0
  180. package/dist/export/backend-export.d.ts +58 -0
  181. package/dist/export/backend-export.d.ts.map +1 -0
  182. package/dist/export/backend-export.js +193 -0
  183. package/dist/export/backend-export.js.map +1 -0
  184. package/dist/export/canonical.d.ts +69 -0
  185. package/dist/export/canonical.d.ts.map +1 -0
  186. package/dist/export/canonical.js +82 -0
  187. package/dist/export/canonical.js.map +1 -0
  188. package/dist/export/import-parser.d.ts +36 -0
  189. package/dist/export/import-parser.d.ts.map +1 -0
  190. package/dist/export/import-parser.js +209 -0
  191. package/dist/export/import-parser.js.map +1 -0
  192. package/dist/export/index.d.ts +17 -0
  193. package/dist/export/index.d.ts.map +1 -0
  194. package/dist/export/index.js +17 -0
  195. package/dist/export/index.js.map +1 -0
  196. package/dist/export/json.d.ts +52 -0
  197. package/dist/export/json.d.ts.map +1 -0
  198. package/dist/export/json.js +103 -0
  199. package/dist/export/json.js.map +1 -0
  200. package/dist/export/llmtxt.d.ts +56 -0
  201. package/dist/export/llmtxt.d.ts.map +1 -0
  202. package/dist/export/llmtxt.js +110 -0
  203. package/dist/export/llmtxt.js.map +1 -0
  204. package/dist/export/markdown.d.ts +36 -0
  205. package/dist/export/markdown.d.ts.map +1 -0
  206. package/dist/export/markdown.js +67 -0
  207. package/dist/export/markdown.js.map +1 -0
  208. package/dist/export/txt.d.ts +29 -0
  209. package/dist/export/txt.d.ts.map +1 -0
  210. package/dist/export/txt.js +33 -0
  211. package/dist/export/txt.js.map +1 -0
  212. package/dist/export/types.d.ts +76 -0
  213. package/dist/export/types.d.ts.map +1 -0
  214. package/dist/export/types.js +11 -0
  215. package/dist/export/types.js.map +1 -0
  216. package/dist/graph.d.ts +0 -0
  217. package/dist/graph.d.ts.map +0 -0
  218. package/dist/graph.js +0 -0
  219. package/dist/graph.js.map +0 -0
  220. package/dist/identity.d.ts +102 -0
  221. package/dist/identity.d.ts.map +1 -0
  222. package/dist/identity.js +243 -0
  223. package/dist/identity.js.map +1 -0
  224. package/dist/index.d.ts +19 -1
  225. package/dist/index.d.ts.map +1 -1
  226. package/dist/index.js +21 -1
  227. package/dist/index.js.map +1 -1
  228. package/dist/leases.d.ts +79 -0
  229. package/dist/leases.d.ts.map +1 -0
  230. package/dist/leases.js +172 -0
  231. package/dist/leases.js.map +1 -0
  232. package/dist/local/blob-changeset.d.ts +106 -0
  233. package/dist/local/blob-changeset.d.ts.map +1 -0
  234. package/dist/local/blob-changeset.js +169 -0
  235. package/dist/local/blob-changeset.js.map +1 -0
  236. package/dist/local/blob-fs-adapter.d.ts +86 -0
  237. package/dist/local/blob-fs-adapter.d.ts.map +1 -0
  238. package/dist/local/blob-fs-adapter.js +293 -0
  239. package/dist/local/blob-fs-adapter.js.map +1 -0
  240. package/dist/local/index.d.ts +11 -0
  241. package/dist/local/index.d.ts.map +1 -0
  242. package/dist/local/index.js +10 -0
  243. package/dist/local/index.js.map +1 -0
  244. package/dist/local/local-backend.d.ts +275 -0
  245. package/dist/local/local-backend.d.ts.map +1 -0
  246. package/dist/local/local-backend.js +2002 -0
  247. package/dist/local/local-backend.js.map +1 -0
  248. package/dist/local/migrations/20260416054148_wandering_paibok/migration.sql +168 -0
  249. package/dist/local/migrations/20260416054148_wandering_paibok/snapshot.json +1593 -0
  250. package/dist/local/migrations/20260417220000_crdt_state_rename/migration.sql +15 -0
  251. package/dist/local/migrations/20260417220000_crdt_state_rename/snapshot.json +1594 -0
  252. package/dist/local/migrations/20260417230000_crsql_as_crr/migration.sql +45 -0
  253. package/dist/local/migrations/20260417230000_crsql_as_crr/snapshot.json +1593 -0
  254. package/dist/local/schema-local.d.ts +4268 -0
  255. package/dist/local/schema-local.d.ts.map +1 -0
  256. package/dist/local/schema-local.js +376 -0
  257. package/dist/local/schema-local.js.map +1 -0
  258. package/dist/merge.d.ts +0 -0
  259. package/dist/merge.d.ts.map +0 -0
  260. package/dist/merge.js +0 -0
  261. package/dist/merge.js.map +0 -0
  262. package/dist/mesh/a2a.d.ts +93 -0
  263. package/dist/mesh/a2a.d.ts.map +1 -0
  264. package/dist/mesh/a2a.js +326 -0
  265. package/dist/mesh/a2a.js.map +1 -0
  266. package/dist/mesh/discovery.d.ts +134 -0
  267. package/dist/mesh/discovery.d.ts.map +1 -0
  268. package/dist/mesh/discovery.js +290 -0
  269. package/dist/mesh/discovery.js.map +1 -0
  270. package/dist/mesh/index.d.ts +16 -0
  271. package/dist/mesh/index.d.ts.map +1 -0
  272. package/dist/mesh/index.js +16 -0
  273. package/dist/mesh/index.js.map +1 -0
  274. package/dist/mesh/presence.d.ts +94 -0
  275. package/dist/mesh/presence.d.ts.map +1 -0
  276. package/dist/mesh/presence.js +219 -0
  277. package/dist/mesh/presence.js.map +1 -0
  278. package/dist/mesh/server-peer-adapter.d.ts +248 -0
  279. package/dist/mesh/server-peer-adapter.d.ts.map +1 -0
  280. package/dist/mesh/server-peer-adapter.js +269 -0
  281. package/dist/mesh/server-peer-adapter.js.map +1 -0
  282. package/dist/mesh/sync-engine.d.ts +116 -0
  283. package/dist/mesh/sync-engine.d.ts.map +1 -0
  284. package/dist/mesh/sync-engine.js +349 -0
  285. package/dist/mesh/sync-engine.js.map +1 -0
  286. package/dist/mesh/transport.d.ts +196 -0
  287. package/dist/mesh/transport.d.ts.map +1 -0
  288. package/dist/mesh/transport.js +795 -0
  289. package/dist/mesh/transport.js.map +1 -0
  290. package/dist/patch.d.ts +0 -0
  291. package/dist/patch.d.ts.map +0 -0
  292. package/dist/patch.js +0 -0
  293. package/dist/patch.js.map +0 -0
  294. package/dist/pg/index.d.ts +11 -0
  295. package/dist/pg/index.d.ts.map +1 -0
  296. package/dist/pg/index.js +10 -0
  297. package/dist/pg/index.js.map +1 -0
  298. package/dist/pg/pg-backend.d.ts +434 -0
  299. package/dist/pg/pg-backend.d.ts.map +1 -0
  300. package/dist/pg/pg-backend.js +2749 -0
  301. package/dist/pg/pg-backend.js.map +1 -0
  302. package/dist/remote/index.d.ts +10 -0
  303. package/dist/remote/index.d.ts.map +1 -0
  304. package/dist/remote/index.js +9 -0
  305. package/dist/remote/index.js.map +1 -0
  306. package/dist/remote/remote-backend.d.ts +185 -0
  307. package/dist/remote/remote-backend.d.ts.map +1 -0
  308. package/dist/remote/remote-backend.js +919 -0
  309. package/dist/remote/remote-backend.js.map +1 -0
  310. package/dist/schemas.d.ts +31 -85
  311. package/dist/schemas.d.ts.map +1 -1
  312. package/dist/schemas.js +2 -2
  313. package/dist/schemas.js.map +1 -1
  314. package/dist/sdk/a2a.d.ts +132 -0
  315. package/dist/sdk/a2a.d.ts.map +1 -0
  316. package/dist/sdk/a2a.js +246 -0
  317. package/dist/sdk/a2a.js.map +1 -0
  318. package/dist/sdk/attribution.d.ts +0 -0
  319. package/dist/sdk/attribution.d.ts.map +0 -0
  320. package/dist/sdk/attribution.js +0 -0
  321. package/dist/sdk/attribution.js.map +0 -0
  322. package/dist/sdk/bft.d.ts +94 -0
  323. package/dist/sdk/bft.d.ts.map +1 -0
  324. package/dist/sdk/bft.js +99 -0
  325. package/dist/sdk/bft.js.map +1 -0
  326. package/dist/sdk/consensus.d.ts +0 -0
  327. package/dist/sdk/consensus.d.ts.map +0 -0
  328. package/dist/sdk/consensus.js +0 -0
  329. package/dist/sdk/consensus.js.map +0 -0
  330. package/dist/sdk/document.d.ts +0 -0
  331. package/dist/sdk/document.d.ts.map +0 -0
  332. package/dist/sdk/document.js +0 -0
  333. package/dist/sdk/document.js.map +0 -0
  334. package/dist/sdk/index.d.ts +8 -0
  335. package/dist/sdk/index.d.ts.map +1 -1
  336. package/dist/sdk/index.js +4 -0
  337. package/dist/sdk/index.js.map +1 -1
  338. package/dist/sdk/lifecycle.d.ts +0 -0
  339. package/dist/sdk/lifecycle.d.ts.map +0 -0
  340. package/dist/sdk/lifecycle.js +0 -0
  341. package/dist/sdk/lifecycle.js.map +0 -0
  342. package/dist/sdk/retrieval.d.ts +0 -0
  343. package/dist/sdk/retrieval.d.ts.map +0 -0
  344. package/dist/sdk/retrieval.js +0 -0
  345. package/dist/sdk/retrieval.js.map +0 -0
  346. package/dist/sdk/scratchpad.d.ts +91 -0
  347. package/dist/sdk/scratchpad.d.ts.map +1 -0
  348. package/dist/sdk/scratchpad.js +144 -0
  349. package/dist/sdk/scratchpad.js.map +1 -0
  350. package/dist/sdk/session.d.ts +255 -0
  351. package/dist/sdk/session.d.ts.map +1 -0
  352. package/dist/sdk/session.js +373 -0
  353. package/dist/sdk/session.js.map +1 -0
  354. package/dist/sdk/storage-adapter.d.ts +0 -0
  355. package/dist/sdk/storage-adapter.d.ts.map +0 -0
  356. package/dist/sdk/storage-adapter.js +0 -0
  357. package/dist/sdk/storage-adapter.js.map +0 -0
  358. package/dist/sdk/storage.d.ts +0 -0
  359. package/dist/sdk/storage.d.ts.map +0 -0
  360. package/dist/sdk/storage.js +0 -0
  361. package/dist/sdk/storage.js.map +0 -0
  362. package/dist/sdk/versions.d.ts +0 -0
  363. package/dist/sdk/versions.d.ts.map +0 -0
  364. package/dist/sdk/versions.js +0 -0
  365. package/dist/sdk/versions.js.map +0 -0
  366. package/dist/signed-url.d.ts +0 -0
  367. package/dist/signed-url.d.ts.map +0 -0
  368. package/dist/signed-url.js +0 -0
  369. package/dist/signed-url.js.map +0 -0
  370. package/dist/similarity.d.ts +0 -0
  371. package/dist/similarity.d.ts.map +0 -0
  372. package/dist/similarity.js +0 -0
  373. package/dist/similarity.js.map +0 -0
  374. package/dist/snapshot.d.ts +0 -0
  375. package/dist/snapshot.d.ts.map +0 -0
  376. package/dist/snapshot.js +0 -0
  377. package/dist/snapshot.js.map +0 -0
  378. package/dist/subscriptions.d.ts +79 -0
  379. package/dist/subscriptions.d.ts.map +1 -0
  380. package/dist/subscriptions.js +122 -0
  381. package/dist/subscriptions.js.map +1 -0
  382. package/dist/topology.d.ts +210 -0
  383. package/dist/topology.d.ts.map +1 -0
  384. package/dist/topology.js +153 -0
  385. package/dist/topology.js.map +1 -0
  386. package/dist/types.d.ts +0 -0
  387. package/dist/types.d.ts.map +0 -0
  388. package/dist/types.js +0 -0
  389. package/dist/types.js.map +0 -0
  390. package/dist/validation.d.ts +0 -0
  391. package/dist/validation.d.ts.map +0 -0
  392. package/dist/validation.js +1 -1
  393. package/dist/validation.js.map +0 -0
  394. package/dist/wasm.d.ts +8 -0
  395. package/dist/wasm.d.ts.map +1 -1
  396. package/dist/wasm.js +10 -0
  397. package/dist/wasm.js.map +1 -1
  398. package/dist/watch.d.ts +68 -0
  399. package/dist/watch.d.ts.map +1 -0
  400. package/dist/watch.js +190 -0
  401. package/dist/watch.js.map +1 -0
  402. package/package.json +72 -15
  403. package/wasm/LICENSE +0 -0
  404. package/wasm/README.md +0 -0
  405. package/wasm/llmtxt_core.d.ts +210 -0
  406. package/wasm/llmtxt_core.js +563 -0
  407. package/wasm/llmtxt_core_bg.wasm +0 -0
  408. package/wasm/llmtxt_core_bg.wasm.d.ts +60 -42
  409. package/wasm/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,84 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2026.4.5] - 2026-04-16
11
+
12
+ This release ships the full Round 1+2+3 multi-agent foundation: CRDT/Yrs, signed Ed25519 identity, append-only event log, real-time presence/leases/diff-subscriptions (W1+W2), BFT consensus, agent scratchpad, A2A envelope routing (W3), a self-hosted observability stack (Grafana / Loki / Tempo / Prometheus / OTel collector / GlitchTip on Railway), OpenAPI schema generation with forge-ts integration, local semantic embeddings via pgvector + ONNX, four reference agents plus a `/demo` page, and a fully portable SDK offering `LocalBackend`, `RemoteBackend`, and `llmtxt` CLI — including a complete CLEO integration example. Also upgrades drizzle-orm/kit to `1.0.0-beta.21` and zod to `^4`.
13
+
14
+ ### Added — Portable SDK / LocalBackend (T317)
15
+
16
+ **T332: RemoteBackend** (`llmtxt/remote`) — thin HTTP/WS client implementing the
17
+ full `Backend` interface. REST for CRUD, SSE for `subscribeStream`, WebSocket for
18
+ `subscribeSection`. Drop-in replacement for `LocalBackend` for remote deployments.
19
+
20
+ **T333: Backend contract test suite** — 25-test parameterised harness that
21
+ validates any `Backend` implementation against the full interface contract.
22
+ Covers documents, versions, lifecycle transitions, events, leases, scratchpad,
23
+ A2A, identity, and nonces.
24
+
25
+ **T334: Fastify LocalBackend plugin** (`apps/backend/src/plugins/local-backend-plugin.ts`)
26
+ — Fastify plugin that decorates the app with `fastify.localBackend`. New routes
27
+ can use the portable SDK without touching the existing Drizzle/Postgres layer.
28
+
29
+ **T335 + T336: `llmtxt` CLI binary** — `packages/llmtxt/src/cli/llmtxt.ts`
30
+ compiled to `dist/cli/llmtxt.js` and listed in `package.json bin`. Commands:
31
+ `init` (SQLite + Ed25519 keypair), `create-doc`, `push-version`, `pull`, `watch`,
32
+ `search`, `keys generate|list|revoke`, `sync`. Defaults to `LocalBackend`; use
33
+ `--remote <url>` for `RemoteBackend`.
34
+
35
+ **T337: `llmtxt sync`** — pulls remote events/documents not in local, pushes
36
+ local documents/events not in remote. State vector exchange for CRDT sections.
37
+
38
+ **T338: CLEO integration example** (`apps/examples/cleo-integration/index.ts`)
39
+ — runnable end-to-end example showing 4 patterns: task attachment docs, BFT
40
+ decision records, A2A coordination, real-time presence.
41
+
42
+ **T339: Docs** (`apps/docs/content/docs/embed/cleo-pm.mdx`) — documentation
43
+ page covering all 4 CLEO + LLMtxt integration patterns with working snippets.
44
+
45
+ **T340: Subpath exports** — `llmtxt/local`, `llmtxt/remote`, `llmtxt/cli` added
46
+ to `package.json` exports map with `types` + `import` entries.
47
+
48
+ **Build**: `build` script now copies `src/local/migrations` into `dist/local/migrations`
49
+ so the CLI and embedded consumers find migrations at runtime.
50
+
51
+ ### Fixed
52
+
53
+ - **Migration idempotency** (7df5795): W2 leases (`20260416021212_natural_shiva`) and W3 BFT/A2A inbox (`20260416030000_w3_bft_a2a_inbox`) Postgres migrations are now fully idempotent — all `CREATE TABLE` / `CREATE INDEX` / `ADD CONSTRAINT` statements use `IF NOT EXISTS` guards and a redundant `ALTER TABLE` that caused Railway crash-loops on retry is removed.
54
+
55
+ ## [2026.4.4] - 2026-04-15
56
+
57
+ ### Changed — SDK-First Refactor (T111)
58
+
59
+ All 22 violations from `docs/SSOT-AUDIT.md` resolved. `crates/llmtxt-core` is now the canonical Single Source of Truth (SSoT) for all portable primitives. `packages/llmtxt` is a thin WASM wrapper + TypeScript types. `apps/backend` imports only from the SDK — no more direct `node:crypto`, no more pure-TS re-implementations.
60
+
61
+ **Rust primitives added to `crates/llmtxt-core`** (WASM-exported via `packages/llmtxt`):
62
+ - `crypto::sign_webhook_payload` (HMAC-SHA256 for webhook signing) — replaces backend `createHmac`
63
+ - `normalize::l2_normalize` (L2 vector normalization) — replaces backend inline TS
64
+ - `slugify::slugify` — replaces backend inline TS
65
+ - `rbac` module (ROLE_PERMISSIONS matrix lookups) — replaces backend matrix + types
66
+ - `validation` module (`detect_format`, `contains_binary_content`, `find_overlong_line`) — replaces pure-TS re-implementations
67
+ - `graph` module (mentions, tags, directives, graph build + top rankings) — replaces pure-TS `graph.ts`
68
+ - `similarity` module (n-grams, jaccard, text/content similarity, min-hash, rank_by_similarity) — replaces pure-TS `similarity.ts`
69
+ - `disclosure` module with submodules (markdown/code/json/text parsers, search, jsonpath, generateOverview) — replaces pure-TS `disclosure.ts` (729 LoC → ~100 LoC wrapper)
70
+ - `tfidf` module (FNV1a hashing + TF-IDF batch embed) — replaces backend `LocalEmbeddingProvider`
71
+
72
+ **TypeScript types/constants now exported from `packages/llmtxt`**:
73
+ - `DocumentEventType`, `DocumentEvent`, `AuditAction`
74
+ - `Permission`, `DocumentRole`, `OrgRole`, `ROLE_PERMISSIONS`
75
+ - `CONTENT_LIMITS`, `API_VERSION_REGISTRY`, `CURRENT_API_VERSION`, `LATEST_API_VERSION`, `ApiVersionInfo`
76
+ - `VALID_LINK_TYPES`
77
+ - `COLLECTION_EXPORT_SEPARATOR`, `API_KEY_PREFIX`, `API_KEY_LENGTH`, `API_KEY_DISPLAY_LENGTH`
78
+ - `STATE_CHANGING_METHODS` (deduplicated from audit + csrf middleware)
79
+
80
+ ### Deferred
81
+ T112 (NAPI-RS native bindings) deferred 2026-04-15 pending production benchmark evidence. WASM is the sole Rust→JS binding for `llmtxt` until benchmarks justify native.
82
+
83
+ ### Testing
84
+ - Cargo tests: 122 → 278 (+156 new Rust tests for migrated primitives)
85
+ - Backend tests: 67/67 throughout — zero regression
86
+ - Byte-identity tests: every migrated primitive verified Rust output == previous TypeScript output for ≥3 vectors
87
+
10
88
  ## [2026.4.3] - 2026-04-13
11
89
 
12
90
  ### Added
@@ -119,7 +197,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
119
197
  - **cache**: generic LRU cache with configurable TTL, max size, and hit/miss statistics
120
198
  - **signed-url**: HMAC-SHA256 signed URL generation and verification -- conversation-scoped, time-limited, with timing-safe comparison
121
199
 
122
- [Unreleased]: https://github.com/kryptobaseddev/llmtxt/compare/core-v2026.4.0...HEAD
200
+ [Unreleased]: https://github.com/kryptobaseddev/llmtxt/compare/core-v2026.4.5...HEAD
201
+ [2026.4.5]: https://github.com/kryptobaseddev/llmtxt/compare/core-v2026.4.4...core-v2026.4.5
202
+ [2026.4.4]: https://github.com/kryptobaseddev/llmtxt/compare/core-v2026.4.3...core-v2026.4.4
203
+ [2026.4.3]: https://github.com/kryptobaseddev/llmtxt/compare/core-v2026.4.2...core-v2026.4.3
204
+ [2026.4.2]: https://github.com/kryptobaseddev/llmtxt/compare/core-v2026.4.1...core-v2026.4.2
205
+ [2026.4.1]: https://github.com/kryptobaseddev/llmtxt/compare/core-v2026.4.0...core-v2026.4.1
123
206
  [2026.4.0]: https://github.com/kryptobaseddev/llmtxt/releases/tag/core-v2026.4.0
124
207
  [2026.3.1]: https://github.com/kryptobaseddev/llmtxt/releases/tag/core-v2026.3.1
125
208
  [2026.3.0]: https://github.com/kryptobaseddev/llmtxt/releases/tag/core-v2026.3.0
package/LICENSE CHANGED
File without changes
package/README.md CHANGED
@@ -67,6 +67,46 @@ import { textSimilarity, rankBySimilarity } from 'llmtxt/similarity';
67
67
  import { buildGraph } from 'llmtxt/graph';
68
68
  ```
69
69
 
70
+ ## LocalBackend (Embedded, Zero-Network)
71
+
72
+ ```ts
73
+ import { LocalBackend } from 'llmtxt/local';
74
+
75
+ const backend = new LocalBackend({ storagePath: './.llmtxt' });
76
+ await backend.open();
77
+
78
+ const doc = await backend.createDocument({ title: 'My Spec', createdBy: 'agent-1' });
79
+ await backend.publishVersion({ documentId: doc.id, content: '# Spec', patchText: '', createdBy: 'agent-1', changelog: 'Initial' });
80
+ await backend.close();
81
+ ```
82
+
83
+ ## RemoteBackend (HTTP/WS Client)
84
+
85
+ ```ts
86
+ import { RemoteBackend } from 'llmtxt/remote';
87
+
88
+ const backend = new RemoteBackend({ baseUrl: 'https://api.llmtxt.my', apiKey: process.env.LLMTXT_API_KEY });
89
+ await backend.open();
90
+ // Same calls as LocalBackend — same Backend interface.
91
+ await backend.close();
92
+ ```
93
+
94
+ ## CLI
95
+
96
+ ```bash
97
+ # Initialise local storage + identity keypair
98
+ llmtxt init
99
+
100
+ # Create a document
101
+ llmtxt create-doc "My Specification"
102
+
103
+ # Push a version from stdin
104
+ cat spec.md | llmtxt push-version my-specification "First draft"
105
+
106
+ # Sync local ↔ remote
107
+ llmtxt sync --remote https://api.llmtxt.my --api-key $KEY
108
+ ```
109
+
70
110
  ## What Ships
71
111
 
72
112
  - Compression, hashing, base62, token estimation (Rust WASM)
@@ -0,0 +1,14 @@
1
+ /**
2
+ * a2a.test.ts — T419: A2A over Mesh tests
3
+ *
4
+ * 5 tests covering:
5
+ * 1. Direct send: signed message delivered to directly-connected peer.
6
+ * 2. SECURITY: unsigned/invalid-sig message is rejected before delivery.
7
+ * 3. Relay path: message forwarded via connected peer when target not direct.
8
+ * 4. Queue: message queued locally when no relay path found.
9
+ * 5. Payload size limit: payload >1 MB is rejected at send.
10
+ *
11
+ * Spec: P3-p2p-mesh.md §7, §10
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=a2a.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/a2a.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * a2a.test.ts — T419: A2A over Mesh tests
3
+ *
4
+ * 5 tests covering:
5
+ * 1. Direct send: signed message delivered to directly-connected peer.
6
+ * 2. SECURITY: unsigned/invalid-sig message is rejected before delivery.
7
+ * 3. Relay path: message forwarded via connected peer when target not direct.
8
+ * 4. Queue: message queued locally when no relay path found.
9
+ * 5. Payload size limit: payload >1 MB is rejected at send.
10
+ *
11
+ * Spec: P3-p2p-mesh.md §7, §10
12
+ */
13
+ import { describe, it, before } from 'node:test';
14
+ import assert from 'node:assert/strict';
15
+ import { AgentIdentity } from '../identity.js';
16
+ import { MeshMessenger } from '../mesh/a2a.js';
17
+ // ── Helpers ───────────────────────────────────────────────────────
18
+ const MSG_TYPE_A2A = 0x10;
19
+ function buildA2AFrame(envelope) {
20
+ const json = JSON.stringify(envelope);
21
+ const jsonBytes = new TextEncoder().encode(json);
22
+ const out = new Uint8Array(1 + jsonBytes.length);
23
+ out[0] = MSG_TYPE_A2A;
24
+ out.set(jsonBytes, 1);
25
+ return out;
26
+ }
27
+ function mockTransport(opts) {
28
+ const sent = [];
29
+ let listener;
30
+ return {
31
+ type: 'mock-a2a',
32
+ sent,
33
+ simulateInbound(peerId, data) {
34
+ listener?.(peerId, data);
35
+ },
36
+ async listen(cb) {
37
+ listener = cb;
38
+ },
39
+ async sendChangeset(peerId, _address, data) {
40
+ if (opts?.failForPeer && peerId === opts.failForPeer) {
41
+ throw new Error(`[mock] peer ${peerId} unreachable`);
42
+ }
43
+ sent.push({ peerId, data });
44
+ await opts?.onSend?.(peerId, data);
45
+ },
46
+ async close() {
47
+ // no-op
48
+ },
49
+ };
50
+ }
51
+ function mockDiscovery(peers) {
52
+ return {
53
+ async discover() {
54
+ return peers;
55
+ },
56
+ markInactive(_id) { },
57
+ };
58
+ }
59
+ async function makeIdentity() {
60
+ const seed = new Uint8Array(32);
61
+ globalThis.crypto.getRandomValues(seed);
62
+ return AgentIdentity.fromSeed(seed);
63
+ }
64
+ // ── Tests ─────────────────────────────────────────────────────────
65
+ describe('MeshMessenger', () => {
66
+ let senderIdentity;
67
+ let recipientIdentity;
68
+ before(async () => {
69
+ senderIdentity = await makeIdentity();
70
+ recipientIdentity = await makeIdentity();
71
+ });
72
+ it('test-1: direct send — signed message delivered to directly-connected peer', async () => {
73
+ const transport = mockTransport();
74
+ const peers = [
75
+ {
76
+ agentId: recipientIdentity.pubkeyHex,
77
+ address: 'unix:/tmp/recv.sock',
78
+ pubkeyBase64: Buffer.from(recipientIdentity.pk).toString('base64'),
79
+ },
80
+ ];
81
+ const discovery = mockDiscovery(peers);
82
+ const received = [];
83
+ const messenger = new MeshMessenger({
84
+ identity: senderIdentity,
85
+ transport,
86
+ discovery,
87
+ onMessage: (env) => received.push(env),
88
+ });
89
+ await messenger.start();
90
+ await messenger.send(recipientIdentity.pubkeyHex, { action: 'ping' });
91
+ await messenger.stop();
92
+ assert.equal(transport.sent.length, 1, 'one send call expected');
93
+ const frame = transport.sent[0];
94
+ assert.equal(frame.peerId, recipientIdentity.pubkeyHex);
95
+ assert.equal(frame.data[0], MSG_TYPE_A2A);
96
+ // Decode envelope.
97
+ const json = new TextDecoder().decode(frame.data.slice(1));
98
+ const env = JSON.parse(json);
99
+ assert.equal(env.type, 'a2a');
100
+ assert.equal(env.from, senderIdentity.pubkeyHex);
101
+ assert.equal(env.to, recipientIdentity.pubkeyHex);
102
+ assert.ok(typeof env.sig === 'string' && env.sig.length > 0, 'message must be signed');
103
+ assert.deepEqual(env.payload, { action: 'ping' });
104
+ });
105
+ it('test-2: SECURITY — unsigned/invalid-sig inbound message is rejected', async () => {
106
+ const transport = mockTransport();
107
+ const discovery = mockDiscovery([]);
108
+ const received = [];
109
+ const rejections = [];
110
+ const messenger = new MeshMessenger({
111
+ identity: recipientIdentity,
112
+ transport,
113
+ discovery,
114
+ onMessage: (env) => received.push(env),
115
+ });
116
+ messenger.on('security-rejection', (r) => rejections.push(r));
117
+ await messenger.start();
118
+ // Build a message with an invalid signature.
119
+ const badEnvelope = {
120
+ type: 'a2a',
121
+ from: senderIdentity.pubkeyHex,
122
+ to: recipientIdentity.pubkeyHex,
123
+ payload: { action: 'malicious' },
124
+ sig: Buffer.from('invalid-sig-bytes-xxxx').toString('base64'),
125
+ sentAt: new Date().toISOString(),
126
+ };
127
+ const frame = buildA2AFrame(badEnvelope);
128
+ transport.simulateInbound('attacker', frame);
129
+ // Allow async verification to complete.
130
+ await new Promise((r) => setTimeout(r, 100));
131
+ await messenger.stop();
132
+ assert.equal(received.length, 0, 'message with invalid sig MUST NOT be delivered');
133
+ assert.ok(rejections.length >= 1, 'security-rejection event must be emitted');
134
+ });
135
+ it('test-3: relay path — message forwarded through connected peer', async () => {
136
+ // senderIdentity → relay agent → recipientIdentity
137
+ const relayAgentId = 'relay-agent-hex-pubkey';
138
+ const transport = mockTransport();
139
+ // Only relay is directly connected; recipient is NOT in peer list.
140
+ const peers = [
141
+ {
142
+ agentId: relayAgentId,
143
+ address: 'unix:/tmp/relay.sock',
144
+ pubkeyBase64: Buffer.alloc(32, 0x44).toString('base64'),
145
+ },
146
+ ];
147
+ const discovery = mockDiscovery(peers);
148
+ const messenger = new MeshMessenger({
149
+ identity: senderIdentity,
150
+ transport,
151
+ discovery,
152
+ });
153
+ await messenger.start();
154
+ // Should relay since recipient not directly connected.
155
+ await messenger.send(recipientIdentity.pubkeyHex, { action: 'routed-task' });
156
+ await messenger.stop();
157
+ // Message should have been sent to relay agent.
158
+ const relaySends = transport.sent.filter((s) => s.peerId === relayAgentId);
159
+ assert.ok(relaySends.length >= 1, 'message must be forwarded to relay peer');
160
+ // Verify the relay frame contains the inner envelope.
161
+ const relayFrame = relaySends[0];
162
+ assert.equal(relayFrame.data[0], MSG_TYPE_A2A);
163
+ const json = new TextDecoder().decode(relayFrame.data.slice(1));
164
+ const parsed = JSON.parse(json);
165
+ // The relay wraps in a relay frame.
166
+ assert.equal(parsed.type, 'relay', 'relay frame type must be "relay"');
167
+ assert.ok(parsed.inner, 'relay frame must contain inner envelope');
168
+ assert.equal(parsed.inner.to, recipientIdentity.pubkeyHex);
169
+ });
170
+ it('test-4: no-path — message queued locally when no relay found', async () => {
171
+ const transport = mockTransport();
172
+ // No peers at all — no direct or relay path.
173
+ const discovery = mockDiscovery([]);
174
+ const queued = [];
175
+ const messenger = new MeshMessenger({
176
+ identity: senderIdentity,
177
+ transport,
178
+ discovery,
179
+ });
180
+ messenger.on('queued', (e) => queued.push(e));
181
+ await messenger.start();
182
+ await messenger.send(recipientIdentity.pubkeyHex, { action: 'offline-task' });
183
+ await messenger.stop();
184
+ assert.equal(transport.sent.length, 0, 'nothing must be sent when no path exists');
185
+ const status = messenger.getQueueStatus();
186
+ const totalQueued = Object.values(status).reduce((a, b) => a + b, 0);
187
+ assert.ok(totalQueued >= 1, 'message must be queued locally');
188
+ assert.ok(queued.length >= 1, 'queued event must be emitted');
189
+ });
190
+ it('test-5: payload >1 MB is rejected at send', async () => {
191
+ const transport = mockTransport();
192
+ const peers = [
193
+ {
194
+ agentId: recipientIdentity.pubkeyHex,
195
+ address: 'unix:/tmp/recv.sock',
196
+ pubkeyBase64: Buffer.from(recipientIdentity.pk).toString('base64'),
197
+ },
198
+ ];
199
+ const discovery = mockDiscovery(peers);
200
+ const messenger = new MeshMessenger({
201
+ identity: senderIdentity,
202
+ transport,
203
+ discovery,
204
+ });
205
+ await messenger.start();
206
+ // Build a payload just over 1 MB.
207
+ const bigString = 'x'.repeat(1024 * 1024 + 1);
208
+ await assert.rejects(() => messenger.send(recipientIdentity.pubkeyHex, { data: bigString }), (err) => {
209
+ assert.ok(err instanceof Error, 'must throw an Error');
210
+ assert.ok(err.message.includes('1 MB'), `error message must mention 1 MB limit, got: ${err.message}`);
211
+ return true;
212
+ }, 'send must reject payloads over 1 MB');
213
+ assert.equal(transport.sent.length, 0, 'oversized payload must not be sent');
214
+ await messenger.stop();
215
+ });
216
+ });
217
+ //# sourceMappingURL=a2a.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a.test.js","sourceRoot":"","sources":["../../src/__tests__/a2a.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Backend contract test suite — parametrized over LocalBackend and PostgresBackend.
3
+ *
4
+ * Runs the same set of behavioural assertions against any Backend implementation.
5
+ * Each describe block receives a BackendFactory and runs identical assertions
6
+ * regardless of which backend is under test.
7
+ *
8
+ * Backends:
9
+ * - LocalBackend (SQLite, temp dir) — always runs.
10
+ * - PostgresBackend (Postgres via DATABASE_URL_PG env) — skipped with WARN if
11
+ * DATABASE_URL_PG is not set. Never fails the suite when absent.
12
+ *
13
+ * Output format:
14
+ * [LocalBackend] documents.create …
15
+ * [PostgresBackend] documents.create … (or SKIPPED if no PG)
16
+ *
17
+ * Multi-agent semantic tests (added in T361):
18
+ * - Lease contention: agent-1 acquires, agent-2 blocked, release, agent-2 acquires.
19
+ * - A2A round-trip: send + pollInbox + markRead (deleteA2AMessage).
20
+ * - Scratchpad round-trip: send + poll + delete.
21
+ * - Identity: register + lookup + revoke + nonce replay prevention.
22
+ */
23
+ export {};
24
+ //# sourceMappingURL=backend-contract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-contract.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/backend-contract.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG"}