@plurnk/plurnk-service 1.3.12 → 1.4.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 (469) hide show
  1. package/.env.defaults +84 -77
  2. package/INSTALL.md +50 -25
  3. package/README.md +24 -10
  4. package/SPEC.md +2311 -928
  5. package/dist/Paths.d.ts +4 -1
  6. package/dist/Paths.d.ts.map +1 -1
  7. package/dist/Paths.js +23 -21
  8. package/dist/Paths.js.map +1 -1
  9. package/dist/build-info.json +1 -1
  10. package/dist/content/edit-receipt.d.ts +13 -28
  11. package/dist/content/edit-receipt.d.ts.map +1 -1
  12. package/dist/content/edit-receipt.js +285 -104
  13. package/dist/content/edit-receipt.js.map +1 -1
  14. package/dist/content/edited-span.d.ts.map +1 -1
  15. package/dist/content/edited-span.js +2 -5
  16. package/dist/content/edited-span.js.map +1 -1
  17. package/dist/content/index.d.ts +3 -3
  18. package/dist/content/index.d.ts.map +1 -1
  19. package/dist/content/index.js +1 -1
  20. package/dist/content/index.js.map +1 -1
  21. package/dist/content/line-marker.d.ts +6 -9
  22. package/dist/content/line-marker.d.ts.map +1 -1
  23. package/dist/content/line-marker.js +7 -11
  24. package/dist/content/line-marker.js.map +1 -1
  25. package/dist/content/matcher.d.ts +14 -25
  26. package/dist/content/matcher.d.ts.map +1 -1
  27. package/dist/content/matcher.js +77 -107
  28. package/dist/content/matcher.js.map +1 -1
  29. package/dist/content/mimetype-binary.d.ts +2 -2
  30. package/dist/content/mimetype-binary.d.ts.map +1 -1
  31. package/dist/content/mimetype-binary.js +10 -10
  32. package/dist/content/mimetype-binary.js.map +1 -1
  33. package/dist/content/path-mimetype.js +3 -3
  34. package/dist/content/path-mimetype.js.map +1 -1
  35. package/dist/content/read-resolve.d.ts +8 -4
  36. package/dist/content/read-resolve.d.ts.map +1 -1
  37. package/dist/content/read-resolve.js +101 -49
  38. package/dist/content/read-resolve.js.map +1 -1
  39. package/dist/core/BranchReceipt.d.ts +7 -0
  40. package/dist/core/BranchReceipt.d.ts.map +1 -0
  41. package/dist/core/BranchReceipt.js +27 -0
  42. package/dist/core/BranchReceipt.js.map +1 -0
  43. package/dist/core/BudgetOverflow.d.ts +23 -0
  44. package/dist/core/BudgetOverflow.d.ts.map +1 -0
  45. package/dist/core/BudgetOverflow.js +61 -0
  46. package/dist/core/BudgetOverflow.js.map +1 -0
  47. package/dist/core/BudgetReadout.d.ts +8 -0
  48. package/dist/core/BudgetReadout.d.ts.map +1 -0
  49. package/dist/core/BudgetReadout.js +79 -0
  50. package/dist/core/BudgetReadout.js.map +1 -0
  51. package/dist/core/ChannelWrite.d.ts +28 -9
  52. package/dist/core/ChannelWrite.d.ts.map +1 -1
  53. package/dist/core/ChannelWrite.js +28 -21
  54. package/dist/core/ChannelWrite.js.map +1 -1
  55. package/dist/core/ChannelWrite.sql +11 -10
  56. package/dist/core/CoreSchemeServices.d.ts +10 -4
  57. package/dist/core/CoreSchemeServices.d.ts.map +1 -1
  58. package/dist/core/CoreSchemeServices.js +7 -1
  59. package/dist/core/CoreSchemeServices.js.map +1 -1
  60. package/dist/core/Dispatcher.d.ts +29 -20
  61. package/dist/core/Dispatcher.d.ts.map +1 -1
  62. package/dist/core/Dispatcher.js +1488 -599
  63. package/dist/core/Dispatcher.js.map +1 -1
  64. package/dist/core/DurableStatement.d.ts +6 -0
  65. package/dist/core/DurableStatement.d.ts.map +1 -0
  66. package/dist/core/DurableStatement.js +51 -0
  67. package/dist/core/DurableStatement.js.map +1 -0
  68. package/dist/core/Engine.d.ts +48 -20
  69. package/dist/core/Engine.d.ts.map +1 -1
  70. package/dist/core/Engine.js +1208 -789
  71. package/dist/core/Engine.js.map +1 -1
  72. package/dist/core/Engine.sql +309 -217
  73. package/dist/core/EnvFlags.js +1 -1
  74. package/dist/core/EnvFlags.js.map +1 -1
  75. package/dist/core/ErrorDetail.d.ts +6 -0
  76. package/dist/core/ErrorDetail.d.ts.map +1 -0
  77. package/dist/core/ErrorDetail.js +20 -0
  78. package/dist/core/ErrorDetail.js.map +1 -0
  79. package/dist/core/ExecutorRegistry.d.ts +14 -3
  80. package/dist/core/ExecutorRegistry.d.ts.map +1 -1
  81. package/dist/core/ExecutorRegistry.js +56 -30
  82. package/dist/core/ExecutorRegistry.js.map +1 -1
  83. package/dist/core/GitBranch.d.ts +20 -0
  84. package/dist/core/GitBranch.d.ts.map +1 -0
  85. package/dist/core/GitBranch.js +110 -0
  86. package/dist/core/GitBranch.js.map +1 -0
  87. package/dist/core/JournalTurn.d.ts +9 -0
  88. package/dist/core/JournalTurn.d.ts.map +1 -0
  89. package/dist/core/JournalTurn.js +14 -0
  90. package/dist/core/JournalTurn.js.map +1 -0
  91. package/dist/core/JournalTurn.sql +10 -0
  92. package/dist/core/LogBody.d.ts +17 -0
  93. package/dist/core/LogBody.d.ts.map +1 -0
  94. package/dist/core/LogBody.js +148 -0
  95. package/dist/core/LogBody.js.map +1 -0
  96. package/dist/core/LoopFlagsReader.d.ts +7 -0
  97. package/dist/core/LoopFlagsReader.d.ts.map +1 -0
  98. package/dist/core/LoopFlagsReader.js +33 -0
  99. package/dist/core/LoopFlagsReader.js.map +1 -0
  100. package/dist/core/LoopLifecycle.d.ts +8 -1
  101. package/dist/core/LoopLifecycle.d.ts.map +1 -1
  102. package/dist/core/LoopLifecycle.js +55 -9
  103. package/dist/core/LoopLifecycle.js.map +1 -1
  104. package/dist/core/LoopLifecycle.sql +9 -3
  105. package/dist/core/NoticeChannel.d.ts +13 -0
  106. package/dist/core/NoticeChannel.d.ts.map +1 -0
  107. package/dist/core/NoticeChannel.js +40 -0
  108. package/dist/core/NoticeChannel.js.map +1 -0
  109. package/dist/core/Owner.d.ts +0 -1
  110. package/dist/core/Owner.d.ts.map +1 -1
  111. package/dist/core/Owner.js +2 -5
  112. package/dist/core/Owner.js.map +1 -1
  113. package/dist/core/PacketBuilder.d.ts +25 -24
  114. package/dist/core/PacketBuilder.d.ts.map +1 -1
  115. package/dist/core/PacketBuilder.js +313 -375
  116. package/dist/core/PacketBuilder.js.map +1 -1
  117. package/dist/core/ProblemLog.d.ts +26 -0
  118. package/dist/core/ProblemLog.d.ts.map +1 -0
  119. package/dist/core/ProblemLog.js +58 -0
  120. package/dist/core/ProblemLog.js.map +1 -0
  121. package/dist/core/ProposalLifecycle.d.ts +15 -21
  122. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  123. package/dist/core/ProposalLifecycle.js +291 -78
  124. package/dist/core/ProposalLifecycle.js.map +1 -1
  125. package/dist/core/ProviderInstantiate.d.ts.map +1 -1
  126. package/dist/core/ProviderInstantiate.js +51 -48
  127. package/dist/core/ProviderInstantiate.js.map +1 -1
  128. package/dist/core/SchemeRegistry.d.ts +14 -8
  129. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  130. package/dist/core/SchemeRegistry.js +189 -114
  131. package/dist/core/SchemeRegistry.js.map +1 -1
  132. package/dist/core/ServiceTeardown.d.ts +11 -0
  133. package/dist/core/ServiceTeardown.d.ts.map +1 -0
  134. package/dist/core/ServiceTeardown.js +70 -0
  135. package/dist/core/ServiceTeardown.js.map +1 -0
  136. package/dist/core/StoredPacket.d.ts +29 -0
  137. package/dist/core/StoredPacket.d.ts.map +1 -0
  138. package/dist/core/StoredPacket.js +147 -0
  139. package/dist/core/StoredPacket.js.map +1 -0
  140. package/dist/core/StrikeRail.d.ts +1 -2
  141. package/dist/core/StrikeRail.d.ts.map +1 -1
  142. package/dist/core/StrikeRail.js +25 -55
  143. package/dist/core/StrikeRail.js.map +1 -1
  144. package/dist/core/WorkerControlAddress.d.ts +17 -0
  145. package/dist/core/WorkerControlAddress.d.ts.map +1 -0
  146. package/dist/core/WorkerControlAddress.js +44 -0
  147. package/dist/core/WorkerControlAddress.js.map +1 -0
  148. package/dist/core/WorkerName.d.ts +31 -0
  149. package/dist/core/WorkerName.d.ts.map +1 -0
  150. package/dist/core/WorkerName.js +95 -0
  151. package/dist/core/WorkerName.js.map +1 -0
  152. package/dist/core/WorkerName.sql +36 -0
  153. package/dist/core/WorkspaceGate.d.ts +14 -0
  154. package/dist/core/WorkspaceGate.d.ts.map +1 -0
  155. package/dist/core/WorkspaceGate.js +155 -0
  156. package/dist/core/WorkspaceGate.js.map +1 -0
  157. package/dist/core/caps/CapsResolve.d.ts +1 -1
  158. package/dist/core/caps/CapsResolve.d.ts.map +1 -1
  159. package/dist/core/caps/CapsResolve.js.map +1 -1
  160. package/dist/core/caps/DbChannelCaps.d.ts +5 -11
  161. package/dist/core/caps/DbChannelCaps.d.ts.map +1 -1
  162. package/dist/core/caps/DbChannelCaps.js +24 -8
  163. package/dist/core/caps/DbChannelCaps.js.map +1 -1
  164. package/dist/core/caps/DbEntryCaps.d.ts +4 -13
  165. package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
  166. package/dist/core/caps/DbEntryCaps.js +15 -6
  167. package/dist/core/caps/DbEntryCaps.js.map +1 -1
  168. package/dist/core/caps/DbNotifyCaps.d.ts +1 -1
  169. package/dist/core/caps/DbNotifyCaps.d.ts.map +1 -1
  170. package/dist/core/caps/DbNotifyCaps.js +12 -11
  171. package/dist/core/caps/DbNotifyCaps.js.map +1 -1
  172. package/dist/core/caps/DbProjectionCaps.d.ts +5 -5
  173. package/dist/core/caps/DbProjectionCaps.d.ts.map +1 -1
  174. package/dist/core/caps/DbProjectionCaps.js +21 -4
  175. package/dist/core/caps/DbProjectionCaps.js.map +1 -1
  176. package/dist/core/caps/DbSubscriptionCaps.d.ts +4 -4
  177. package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
  178. package/dist/core/caps/DbSubscriptionCaps.js +57 -62
  179. package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
  180. package/dist/core/caps/DbTagCaps.d.ts +5 -12
  181. package/dist/core/caps/DbTagCaps.d.ts.map +1 -1
  182. package/dist/core/caps/DbTagCaps.js +14 -7
  183. package/dist/core/caps/DbTagCaps.js.map +1 -1
  184. package/dist/core/content-hash.js +1 -1
  185. package/dist/core/content-hash.js.map +1 -1
  186. package/dist/core/env-defaults.d.ts.map +1 -1
  187. package/dist/core/env-defaults.js.map +1 -1
  188. package/dist/core/fork.d.ts.map +1 -1
  189. package/dist/core/fork.js +55 -30
  190. package/dist/core/fork.js.map +1 -1
  191. package/dist/core/fork.sql +41 -27
  192. package/dist/core/git-env.d.ts +2 -0
  193. package/dist/core/git-env.d.ts.map +1 -1
  194. package/dist/core/git-env.js +13 -18
  195. package/dist/core/git-env.js.map +1 -1
  196. package/dist/core/git-iso.d.ts.map +1 -1
  197. package/dist/core/git-iso.js +9 -15
  198. package/dist/core/git-iso.js.map +1 -1
  199. package/dist/core/git-membership.d.ts +1 -1
  200. package/dist/core/git-membership.d.ts.map +1 -1
  201. package/dist/core/git-membership.js +198 -146
  202. package/dist/core/git-membership.js.map +1 -1
  203. package/dist/core/git-state.d.ts.map +1 -1
  204. package/dist/core/git-state.js +10 -11
  205. package/dist/core/git-state.js.map +1 -1
  206. package/dist/core/owner.sql +1 -1
  207. package/dist/core/packet-inject.d.ts.map +1 -1
  208. package/dist/core/packet-inject.js +7 -11
  209. package/dist/core/packet-inject.js.map +1 -1
  210. package/dist/core/packet-wire.d.ts +2 -20
  211. package/dist/core/packet-wire.d.ts.map +1 -1
  212. package/dist/core/packet-wire.js +242 -368
  213. package/dist/core/packet-wire.js.map +1 -1
  214. package/dist/core/plurnk-uri.d.ts +12 -1
  215. package/dist/core/plurnk-uri.d.ts.map +1 -1
  216. package/dist/core/plurnk-uri.js +49 -29
  217. package/dist/core/plurnk-uri.js.map +1 -1
  218. package/dist/core/results.d.ts +16 -5
  219. package/dist/core/results.d.ts.map +1 -1
  220. package/dist/core/results.js +27 -18
  221. package/dist/core/results.js.map +1 -1
  222. package/dist/core/ruler_count.d.ts +4 -0
  223. package/dist/core/ruler_count.d.ts.map +1 -0
  224. package/dist/core/ruler_count.js +7 -0
  225. package/dist/core/ruler_count.js.map +1 -0
  226. package/dist/core/scheme-types.d.ts +9 -11
  227. package/dist/core/scheme-types.d.ts.map +1 -1
  228. package/dist/core/scheme-types.js.map +1 -1
  229. package/dist/core/search-gate.d.ts.map +1 -1
  230. package/dist/core/search-gate.js +3 -11
  231. package/dist/core/search-gate.js.map +1 -1
  232. package/dist/core/teaching-corpus.d.ts +6 -0
  233. package/dist/core/teaching-corpus.d.ts.map +1 -0
  234. package/dist/core/teaching-corpus.js +23 -0
  235. package/dist/core/teaching-corpus.js.map +1 -0
  236. package/dist/core/teaching.d.ts +0 -1
  237. package/dist/core/teaching.d.ts.map +1 -1
  238. package/dist/core/teaching.js +2 -8
  239. package/dist/core/teaching.js.map +1 -1
  240. package/dist/core/token-ruler.d.ts.map +1 -1
  241. package/dist/core/token-ruler.js +3 -16
  242. package/dist/core/token-ruler.js.map +1 -1
  243. package/dist/core/turn-scheduler.d.ts +1 -1
  244. package/dist/core/turn-scheduler.d.ts.map +1 -1
  245. package/dist/core/turn-scheduler.js +1 -1
  246. package/dist/core/turn-scheduler.js.map +1 -1
  247. package/dist/core/worker-cap.d.ts +2 -4
  248. package/dist/core/worker-cap.d.ts.map +1 -1
  249. package/dist/core/worker-cap.js +13 -4
  250. package/dist/core/worker-cap.js.map +1 -1
  251. package/dist/core/{run-ops.sql → worker-ops.sql} +11 -11
  252. package/dist/core/workspace-settings.d.ts.map +1 -1
  253. package/dist/core/workspace-settings.js +17 -9
  254. package/dist/core/workspace-settings.js.map +1 -1
  255. package/dist/digest/Digest.d.ts +2 -1
  256. package/dist/digest/Digest.d.ts.map +1 -1
  257. package/dist/digest/Digest.js +337 -138
  258. package/dist/digest/Digest.js.map +1 -1
  259. package/dist/digest/digest.sql +19 -10
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +3 -5
  262. package/dist/index.js.map +1 -1
  263. package/dist/matrix/live-specimen.d.ts +9 -0
  264. package/dist/matrix/live-specimen.d.ts.map +1 -0
  265. package/dist/matrix/live-specimen.js +37 -0
  266. package/dist/matrix/live-specimen.js.map +1 -0
  267. package/dist/observe/api.d.ts +6 -0
  268. package/dist/observe/api.d.ts.map +1 -0
  269. package/dist/observe/api.js +11 -0
  270. package/dist/observe/api.js.map +1 -0
  271. package/dist/observe/init.d.ts +7 -0
  272. package/dist/observe/init.d.ts.map +1 -0
  273. package/dist/observe/init.js +159 -0
  274. package/dist/observe/init.js.map +1 -0
  275. package/dist/observe/metrics.d.ts +6 -0
  276. package/dist/observe/metrics.d.ts.map +1 -0
  277. package/dist/observe/metrics.js +15 -0
  278. package/dist/observe/metrics.js.map +1 -0
  279. package/dist/observe/spans.d.ts +4 -0
  280. package/dist/observe/spans.d.ts.map +1 -0
  281. package/dist/observe/spans.js +51 -0
  282. package/dist/observe/spans.js.map +1 -0
  283. package/dist/schemes/EffectPolicy.d.ts +1 -0
  284. package/dist/schemes/EffectPolicy.d.ts.map +1 -1
  285. package/dist/schemes/EffectPolicy.js +5 -2
  286. package/dist/schemes/EffectPolicy.js.map +1 -1
  287. package/dist/schemes/Exec.d.ts +6 -11
  288. package/dist/schemes/Exec.d.ts.map +1 -1
  289. package/dist/schemes/Exec.js +364 -247
  290. package/dist/schemes/Exec.js.map +1 -1
  291. package/dist/schemes/ExecOutputScheme.d.ts +8 -7
  292. package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
  293. package/dist/schemes/ExecOutputScheme.js +48 -9
  294. package/dist/schemes/ExecOutputScheme.js.map +1 -1
  295. package/dist/schemes/File.d.ts +7 -11
  296. package/dist/schemes/File.d.ts.map +1 -1
  297. package/dist/schemes/File.js +279 -142
  298. package/dist/schemes/File.js.map +1 -1
  299. package/dist/schemes/Log.d.ts +4 -8
  300. package/dist/schemes/Log.d.ts.map +1 -1
  301. package/dist/schemes/Log.js +475 -208
  302. package/dist/schemes/Log.js.map +1 -1
  303. package/dist/schemes/Log.sql +62 -30
  304. package/dist/schemes/Prompt.d.ts +3 -2
  305. package/dist/schemes/Prompt.d.ts.map +1 -1
  306. package/dist/schemes/Prompt.js +9 -6
  307. package/dist/schemes/Prompt.js.map +1 -1
  308. package/dist/schemes/Skill.d.ts +1 -1
  309. package/dist/schemes/Skill.d.ts.map +1 -1
  310. package/dist/schemes/Skill.js +2 -3
  311. package/dist/schemes/Skill.js.map +1 -1
  312. package/dist/schemes/Worker.d.ts +8 -16
  313. package/dist/schemes/Worker.d.ts.map +1 -1
  314. package/dist/schemes/Worker.js +179 -69
  315. package/dist/schemes/Worker.js.map +1 -1
  316. package/dist/schemes/_entry-chunk.d.ts.map +1 -1
  317. package/dist/schemes/_entry-chunk.js +12 -5
  318. package/dist/schemes/_entry-chunk.js.map +1 -1
  319. package/dist/schemes/_entry-crud.d.ts +10 -9
  320. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  321. package/dist/schemes/_entry-crud.js +59 -13
  322. package/dist/schemes/_entry-crud.js.map +1 -1
  323. package/dist/schemes/_entry-crud.sql +20 -8
  324. package/dist/schemes/_entry-find.d.ts +20 -15
  325. package/dist/schemes/_entry-find.d.ts.map +1 -1
  326. package/dist/schemes/_entry-find.js +339 -174
  327. package/dist/schemes/_entry-find.js.map +1 -1
  328. package/dist/schemes/_entry-find.sql +20 -8
  329. package/dist/schemes/_entry-graph.d.ts +4 -2
  330. package/dist/schemes/_entry-graph.d.ts.map +1 -1
  331. package/dist/schemes/_entry-graph.js +55 -31
  332. package/dist/schemes/_entry-graph.js.map +1 -1
  333. package/dist/schemes/_entry-graph.sql +37 -22
  334. package/dist/schemes/_entry-manifest.d.ts +10 -15
  335. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  336. package/dist/schemes/_entry-manifest.js +50 -268
  337. package/dist/schemes/_entry-manifest.js.map +1 -1
  338. package/dist/schemes/_entry-ops.d.ts +9 -14
  339. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  340. package/dist/schemes/_entry-ops.js +149 -77
  341. package/dist/schemes/_entry-ops.js.map +1 -1
  342. package/dist/schemes/_entry-ops.sql +1 -1
  343. package/dist/schemes/_entry-semantic.d.ts +23 -8
  344. package/dist/schemes/_entry-semantic.d.ts.map +1 -1
  345. package/dist/schemes/_entry-semantic.js +141 -60
  346. package/dist/schemes/_entry-semantic.js.map +1 -1
  347. package/dist/schemes/_entry-semantic.sql +63 -45
  348. package/dist/schemes/_entry-send.d.ts +3 -4
  349. package/dist/schemes/_entry-send.d.ts.map +1 -1
  350. package/dist/schemes/_entry-send.js +48 -23
  351. package/dist/schemes/_entry-send.js.map +1 -1
  352. package/dist/schemes/_path-scope.d.ts +23 -0
  353. package/dist/schemes/_path-scope.d.ts.map +1 -0
  354. package/dist/schemes/_path-scope.js +61 -0
  355. package/dist/schemes/_path-scope.js.map +1 -0
  356. package/dist/schemes/_search-candidate.d.ts +20 -0
  357. package/dist/schemes/_search-candidate.d.ts.map +1 -0
  358. package/dist/schemes/_search-candidate.js +19 -0
  359. package/dist/schemes/_search-candidate.js.map +1 -0
  360. package/dist/schemes/_search-exclusion.d.ts +7 -0
  361. package/dist/schemes/_search-exclusion.d.ts.map +1 -0
  362. package/dist/schemes/_search-exclusion.js +23 -0
  363. package/dist/schemes/_search-exclusion.js.map +1 -0
  364. package/dist/schemes/_search-index.d.ts +6 -0
  365. package/dist/schemes/_search-index.d.ts.map +1 -0
  366. package/dist/schemes/_search-index.js +326 -0
  367. package/dist/schemes/_search-index.js.map +1 -0
  368. package/dist/schemes/cosine.js +1 -1
  369. package/dist/schemes/cosine.js.map +1 -1
  370. package/dist/schemes/exec-abort.js +3 -3
  371. package/dist/schemes/exec-abort.js.map +1 -1
  372. package/dist/schemes/exec-env.js +3 -3
  373. package/dist/schemes/exec-env.js.map +1 -1
  374. package/dist/server/BranchBatches.d.ts +48 -0
  375. package/dist/server/BranchBatches.d.ts.map +1 -0
  376. package/dist/server/BranchBatches.js +591 -0
  377. package/dist/server/BranchBatches.js.map +1 -0
  378. package/dist/server/Daemon.d.ts +36 -66
  379. package/dist/server/Daemon.d.ts.map +1 -1
  380. package/dist/server/Daemon.js +920 -446
  381. package/dist/server/Daemon.js.map +1 -1
  382. package/dist/server/DaemonModule.d.ts +31 -0
  383. package/dist/server/DaemonModule.d.ts.map +1 -0
  384. package/dist/server/DaemonModule.js +2 -0
  385. package/dist/server/DaemonModule.js.map +1 -0
  386. package/dist/server/branch-batch.sql +152 -0
  387. package/dist/server/client-input.d.ts +12 -0
  388. package/dist/server/client-input.d.ts.map +1 -1
  389. package/dist/server/client-input.js +262 -57
  390. package/dist/server/client-input.js.map +1 -1
  391. package/dist/server/dispatch-as-plurnk.d.ts +1 -1
  392. package/dist/server/dispatch-as-plurnk.d.ts.map +1 -1
  393. package/dist/server/dispatch-as-plurnk.js +15 -7
  394. package/dist/server/dispatch-as-plurnk.js.map +1 -1
  395. package/dist/server/drain.sql +92 -62
  396. package/dist/server/envelope.d.ts +2 -5
  397. package/dist/server/envelope.d.ts.map +1 -1
  398. package/dist/server/envelope.js +119 -95
  399. package/dist/server/envelope.js.map +1 -1
  400. package/dist/server/envelope.sql +19 -23
  401. package/dist/server/exec-poll-backoff.js +1 -1
  402. package/dist/server/exec-poll-backoff.js.map +1 -1
  403. package/dist/server/lifecycle-recovery.sql +79 -2
  404. package/dist/server/logEntry.d.ts +3 -1
  405. package/dist/server/logEntry.d.ts.map +1 -1
  406. package/dist/server/logEntry.js +4 -2
  407. package/dist/server/logEntry.js.map +1 -1
  408. package/dist/server/logEntry.sql +1 -1
  409. package/dist/server/loop-model.d.ts.map +1 -1
  410. package/dist/server/loop-model.js +22 -9
  411. package/dist/server/loop-model.js.map +1 -1
  412. package/dist/server/loopDocs.d.ts.map +1 -1
  413. package/dist/server/loopDocs.js +5 -4
  414. package/dist/server/loopDocs.js.map +1 -1
  415. package/dist/server/seam-entry-read.sql +15 -10
  416. package/dist/server/seam-log-read.sql +2 -2
  417. package/dist/server/seam-loop.sql +1 -1
  418. package/dist/server/seam-proposal-list.sql +17 -7
  419. package/dist/service.d.ts.map +1 -1
  420. package/dist/service.js +66 -60
  421. package/dist/service.js.map +1 -1
  422. package/migrations/001_schema.sql +897 -0
  423. package/package.json +57 -26
  424. package/dist/core/PluginLoader.d.ts +0 -20
  425. package/dist/core/PluginLoader.d.ts.map +0 -1
  426. package/dist/core/PluginLoader.js +0 -142
  427. package/dist/core/PluginLoader.js.map +0 -1
  428. package/dist/core/TelemetryChannel.d.ts +0 -37
  429. package/dist/core/TelemetryChannel.d.ts.map +0 -1
  430. package/dist/core/TelemetryChannel.js +0 -80
  431. package/dist/core/TelemetryChannel.js.map +0 -1
  432. package/dist/core/path-decode.d.ts +0 -3
  433. package/dist/core/path-decode.d.ts.map +0 -1
  434. package/dist/core/path-decode.js +0 -9
  435. package/dist/core/path-decode.js.map +0 -1
  436. package/dist/core/plugin-attribution.d.ts +0 -5
  437. package/dist/core/plugin-attribution.d.ts.map +0 -1
  438. package/dist/core/plugin-attribution.js +0 -39
  439. package/dist/core/plugin-attribution.js.map +0 -1
  440. package/dist/core/world-state.d.ts +0 -10
  441. package/dist/core/world-state.d.ts.map +0 -1
  442. package/dist/core/world-state.js +0 -35
  443. package/dist/core/world-state.js.map +0 -1
  444. package/dist/core/world-state.sql +0 -35
  445. package/dist/core/zero-pin.d.ts +0 -3
  446. package/dist/core/zero-pin.d.ts.map +0 -1
  447. package/dist/core/zero-pin.js +0 -16
  448. package/dist/core/zero-pin.js.map +0 -1
  449. package/dist/server/auto.d.ts +0 -6
  450. package/dist/server/auto.d.ts.map +0 -1
  451. package/dist/server/auto.js +0 -63
  452. package/dist/server/auto.js.map +0 -1
  453. package/dist/server/clientTurn.d.ts +0 -6
  454. package/dist/server/clientTurn.d.ts.map +0 -1
  455. package/dist/server/clientTurn.js +0 -22
  456. package/dist/server/clientTurn.js.map +0 -1
  457. package/dist/server/clientTurn.sql +0 -10
  458. package/dist/server/noProposals.d.ts +0 -6
  459. package/dist/server/noProposals.d.ts.map +0 -1
  460. package/dist/server/noProposals.js +0 -37
  461. package/dist/server/noProposals.js.map +0 -1
  462. package/dist/server/version-info.d.ts +0 -14
  463. package/dist/server/version-info.d.ts.map +0 -1
  464. package/dist/server/version-info.js +0 -69
  465. package/dist/server/version-info.js.map +0 -1
  466. package/migrations/0000-00-00.01_schema.sql +0 -536
  467. package/migrations/0004_loop-provider.sql +0 -3
  468. package/migrations/0005_subscription-published-channel.sql +0 -3
  469. package/migrations/0006_loop-max-turns.sql +0 -3
@@ -1,536 +0,0 @@
1
- -- MIGRATE: 1 baseline
2
- -- The complete v3 schema baseline. SqlRite owns PRAGMA user_version: subsequent
3
- -- MIGRATE blocks are both the evolution history and the external schema stamp.
4
-
5
- -- workspaces
6
- -- project_root: workspace pointer. NULL = headless (no disk side-effects);
7
- -- non-null = absolute path to the client's source tree, supplied at
8
- -- workspace.create or workspace.set_root.
9
- CREATE TABLE IF NOT EXISTS workspaces (
10
- id INTEGER NOT NULL PRIMARY KEY,
11
- version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
12
- name TEXT NOT NULL UNIQUE CHECK (length(name) > 0),
13
- created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
14
- cost_usd REAL NOT NULL DEFAULT 0 CHECK (cost_usd >= 0),
15
- scheme_registry_additions TEXT NOT NULL DEFAULT '[]' CHECK (json_valid(scheme_registry_additions)),
16
- project_root TEXT,
17
- -- #231 client-chosen workspace-open context: { manifestItems?, mdDocs? }, read at turn-0
18
- -- with precedence over env (manifestItems replaces PLURNK_MANIFEST_ITEMS; mdDocs unions PLURNK_MD_*).
19
- settings TEXT NOT NULL DEFAULT '{}' CHECK (json_valid(settings))
20
- ) STRICT;
21
-
22
- CREATE INDEX IF NOT EXISTS sessions_created_at ON workspaces (created_at);
23
-
24
- -- runs
25
- CREATE TABLE IF NOT EXISTS workers (
26
- id INTEGER NOT NULL PRIMARY KEY,
27
- version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
28
- workspace_id INTEGER NOT NULL,
29
- name TEXT NOT NULL CHECK (length(name) > 0),
30
- created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
31
- -- runs fork via parent_worker_id; workspaces carry no parent — §machine-processes-no-fork-workspace
32
- parent_worker_id INTEGER CHECK (parent_worker_id IS NULL OR parent_worker_id != id),
33
- cost_usd REAL NOT NULL DEFAULT 0 CHECK (cost_usd >= 0),
34
- origin TEXT NOT NULL DEFAULT 'client' CHECK (origin IN ('model', 'client', 'plurnk')),
35
- FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE,
36
- FOREIGN KEY (parent_worker_id) REFERENCES workers(id) ON DELETE CASCADE
37
- ) STRICT;
38
-
39
- CREATE INDEX IF NOT EXISTS workers_workspace_id_created_at ON workers (workspace_id, created_at);
40
- CREATE INDEX IF NOT EXISTS workers_parent_worker_id ON workers (parent_worker_id);
41
- -- NOT unique: a name is frozen per worker (§machine-processes-worker-origin) but RECLAIMABLE across
42
- -- time — a terminated run keeps its name in permanent history while a fresh spawn reuses it;
43
- -- worker_resolve_by_name picks the newest. A LIVE collision is refused at the spawn gate (Run.edit
44
- -- → worker_live_by_name → 409), never by this index. Indexed for the by-name resolve/spawn lookup.
45
- CREATE INDEX IF NOT EXISTS workers_workspace_name ON workers (workspace_id, name);
46
-
47
- -- loops
48
- -- flags: per-loop runtime flags (auto, noProposals, noWeb, noInteraction,
49
- -- mode). JSON column, merged over DEFAULT_LOOP_FLAGS in code so missing
50
- -- keys read as their defaults. SchemeRegistry.resolveForLoop gates schemes
51
- -- by manifest affinity (proposes / excludedInAsk / requiresWeb / etc).
52
- CREATE TABLE IF NOT EXISTS loops (
53
- id INTEGER NOT NULL PRIMARY KEY,
54
- version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
55
- worker_id INTEGER NOT NULL,
56
- sequence INTEGER NOT NULL CHECK (sequence >= 1),
57
- status INTEGER NOT NULL DEFAULT 102 CHECK (status IN (100, 102, 200, 202, 413, 429, 499, 500, 504, 508)),
58
- prompt TEXT NOT NULL,
59
- flags TEXT NOT NULL DEFAULT '{}' CHECK (json_valid(flags)),
60
- -- #249 — attribution tags of the loop's active plugins (string[] JSON); the activity tagged
61
- -- with what its plugins offer. Same set the engine rides on each turn's generate() wire.
62
- attributions TEXT NOT NULL DEFAULT '[]' CHECK (json_valid(attributions)),
63
- -- #260 — client-passed @file paths foisted as turn-0 READs (string[] JSON). The daemon owns the
64
- -- workspace, so it READs them in instead of the client inlining bytes (co-location law).
65
- open_paths TEXT NOT NULL DEFAULT '[]' CHECK (json_valid(open_paths)),
66
- -- §worker-scheme loop-termination delta: terminated_at is stamped by the trigger
67
- -- below when status crosses into terminal (every death-path, uniformly);
68
- -- terminal_message is the deliverable — the SEND[200] body or the abandonment
69
- -- reason — set by the guarded terminal lifecycle transition.
70
- terminated_at TEXT,
71
- terminal_message TEXT,
72
- -- Who ended the loop when it wasn't the model's own deliberate terminal: 'collapse' (the
73
- -- ∅-wait conclude, #379) or 'cancel' (an external loop.cancel, #380). NULL = the model's own
74
- -- SEND / the engine's budget-strike terminals, whose status already carries the story. The
75
- -- COLLECT and the termination delta render it as a marker ALONGSIDE terminal_message — the
76
- -- model's words are never rewritten; the engine's act is named.
77
- terminated_by TEXT CHECK (terminated_by IS NULL OR terminated_by IN ('collapse', 'cancel')),
78
- FOREIGN KEY (worker_id) REFERENCES workers(id) ON DELETE CASCADE
79
- ) STRICT;
80
-
81
- CREATE UNIQUE INDEX IF NOT EXISTS loops_worker_id_sequence ON loops (worker_id, sequence);
82
-
83
- -- §worker-scheme: a loop crossing into a terminal status stamps terminated_at, so sibling
84
- -- runs pull the termination as a folded ambient delta — caught uniformly across every
85
- -- death-path (SEND, grinder, max-turns, strike, KILL). The stamp updates terminated_at,
86
- -- never status, so it cannot re-fire this trigger. Terminals: 200 done · 413 budget ·
87
- -- 429 turn-ceiling · 499 cancel · 500 fail · 504 wall-clock timeout · 508 runaway. (202 = parked/sleeping, NOT terminal.)
88
- CREATE TRIGGER IF NOT EXISTS loops_stamp_terminated_at
89
- AFTER UPDATE OF status ON loops
90
- WHEN NEW.status IN (200, 413, 429, 499, 500, 504, 508) AND OLD.status NOT IN (200, 413, 429, 499, 500, 504, 508)
91
- BEGIN
92
- UPDATE loops SET terminated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = NEW.id;
93
- END;
94
-
95
- -- turns
96
- -- finish_reason / model: provider-call metadata (plurnk-grammar Turn.json).
97
- -- Properties of the call, not of the model's emission payload — kept on
98
- -- the Turn row alongside usage rather than nested into packet.assistant.
99
- CREATE TABLE IF NOT EXISTS turns (
100
- id INTEGER NOT NULL PRIMARY KEY,
101
- version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
102
- loop_id INTEGER NOT NULL,
103
- sequence INTEGER NOT NULL CHECK (sequence >= 1),
104
- timestamp TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
105
- status INTEGER NOT NULL CHECK (status BETWEEN 100 AND 599),
106
- usage_prompt INTEGER NOT NULL DEFAULT 0 CHECK (usage_prompt >= 0),
107
- usage_completion INTEGER NOT NULL DEFAULT 0 CHECK (usage_completion >= 0),
108
- usage_reasoning INTEGER NOT NULL DEFAULT 0 CHECK (usage_reasoning >= 0),
109
- usage_cached INTEGER NOT NULL DEFAULT 0 CHECK (usage_cached >= 0),
110
- usage_cost_usd REAL NOT NULL DEFAULT 0 CHECK (usage_cost_usd >= 0),
111
- -- #274 — the context window of the model that RAN this turn (provider.contextSize), so the
112
- -- gauge denominator matches the loop's actual model under any /model switch. NULL = the
113
- -- provider can't report a window (the client omits the gauge).
114
- usage_prompt_budget INTEGER CHECK (usage_prompt_budget IS NULL OR usage_prompt_budget >= 1),
115
- packet TEXT NOT NULL CHECK (json_valid(packet)),
116
- finish_reason TEXT,
117
- model TEXT NOT NULL DEFAULT 'unknown' CHECK (length(model) >= 1),
118
- -- #252 — opaque provider→client metadata passthrough. Stored
119
- -- UNENFORCED (json_valid only, no schema): the canonical-field contract lives between
120
- -- the provider framework (normalizes) and the client (renders) — the service authors
121
- -- only the engine-stamped rail keys ({§rail-truth-engine-verdict}, #534).
122
- meta TEXT NOT NULL DEFAULT '{}' CHECK (json_valid(meta)),
123
- FOREIGN KEY (loop_id) REFERENCES loops(id) ON DELETE CASCADE
124
- ) STRICT;
125
-
126
- CREATE UNIQUE INDEX IF NOT EXISTS turns_loop_id_sequence ON turns (loop_id, sequence);
127
- CREATE INDEX IF NOT EXISTS turns_timestamp ON turns (timestamp);
128
-
129
- -- derivations
130
- -- Content-addressed deep projections. Entries point at a COMPLETE artifact by
131
- -- deep_hash; graph, FTS, and vectors are stored once regardless of how many
132
- -- workspace/worktree paths carry identical content under the same reader/config.
133
- -- A building row is unattached and safely replaceable after interruption.
134
- CREATE TABLE IF NOT EXISTS derivations (
135
- id INTEGER NOT NULL PRIMARY KEY,
136
- deep_hash TEXT NOT NULL UNIQUE CHECK (length(deep_hash) > 0),
137
- state TEXT NOT NULL DEFAULT 'building' CHECK (state IN ('building', 'complete')),
138
- disposition TEXT CHECK (disposition IN ('vector', 'lexical', 'excluded', 'nonsemantic', 'failed')),
139
- reason TEXT,
140
- CHECK ((state = 'building' AND disposition IS NULL) OR (state = 'complete' AND disposition IS NOT NULL))
141
- ) STRICT;
142
-
143
- -- entries
144
- -- The canonical addressable store. (workspace, owner, scheme, pathname) is the identity
145
- -- tuple, and NO component may be NULL: NULLs are distinct under SQL UNIQUE, so a nullable
146
- -- component voids the identity index — the #526 disease, re-run on this axis as run59/#545
147
- -- (one phantom member row per turn; 74k rows for 530 identities). Bare/file paths persist
148
- -- under the reserved 'file' scheme; they still RENDER as bare paths. {§entry-identity-no-null}
149
- CREATE TABLE IF NOT EXISTS entries (
150
- id INTEGER NOT NULL PRIMARY KEY,
151
- version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
152
- workspace_id INTEGER,
153
- scheme TEXT NOT NULL CHECK (length(scheme) > 0),
154
- username TEXT,
155
- password TEXT,
156
- hostname TEXT,
157
- port INTEGER CHECK (port IS NULL OR (port BETWEEN 0 AND 65535)),
158
- pathname TEXT NOT NULL,
159
- -- #527 {§entry-owner} — every entry is owned by a worker: the spawning worker for capability
160
- -- streams, the workspace's reserved 'commons' worker for shared content. A real row, never
161
- -- NULL (NULLs are distinct under UNIQUE — a nullable owner would let the commons fragment).
162
- -- The id never renders into a URI or packet; the model addresses owners by NAME (authority).
163
- owner_id INTEGER NOT NULL,
164
- params TEXT CHECK (params IS NULL OR json_valid(params)),
165
- attributes TEXT NOT NULL DEFAULT '{}' CHECK (json_valid(attributes)),
166
- -- SPEC §membership — how a file member entered the curated surface. 'git' rows are
167
- -- reconciled against the repo's members each turn — tracked ls-files PLUS untracked-
168
- -- but-not-ignored files (§membership-auto-add) — registered + un-registered so entries
169
- -- == members; 'client'/'constraint' (model-created, add-glob) are not git's to reclaim.
170
- -- NULL = not a file member (other schemes don't carry origin).
171
- membership_origin TEXT CHECK (membership_origin IS NULL OR membership_origin IN ('git', 'client', 'constraint')),
172
- -- @graph / ~semantic change-gate (#186): hash of the body content at the last
173
- -- deep-channel derivation. The manifest-add pass re-derives symbols/refs (and
174
- -- embeddings, later) ONLY when this differs from the current body hash — an
175
- -- unchanged entry is skipped, never re-metadatafied every turn.
176
- deep_hash TEXT,
177
- -- SPEC §membership-change-gated-sync — the per-member sync stat-detect:
178
- -- "<mtimeMs>:<size>" of the disk file at its last materialization. The pre-turn
179
- -- sync stat()s every member but re-reads/re-tokenizes/rewrites only one whose
180
- -- signature changed; an unchanged member is a no-op. NULL = never synced.
181
- synced_sig TEXT,
182
- -- User Note 5 — manifest cache-friendliness. Last-modified stamp, bumped on every
183
- -- channel write by entries_touch_on_channel_write; engine_list_workspace_entries orders
184
- -- the catalog by it ASC so dormant entries hold the stable prompt-cache prefix.
185
- updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
186
- CHECK (workspace_id IS NOT NULL),
187
- FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE,
188
- FOREIGN KEY (owner_id) REFERENCES workers(id) ON DELETE CASCADE,
189
- FOREIGN KEY (deep_hash) REFERENCES derivations(deep_hash)
190
- ) STRICT;
191
-
192
- -- {§entry-owner} / {§stream-owner-scoped} — ONE identity: the owner is the axis (scope is dead).
193
- -- Concurrent workers' capability streams share the loop-relative coordinate (every worker's first
194
- -- loop is seq 1), so identity keys on the owner and identical coordinates are DISTINCT rows (#526).
195
- CREATE UNIQUE INDEX IF NOT EXISTS entries_identity ON entries (workspace_id, owner_id, scheme, pathname);
196
-
197
- -- entries_scheme_heal
198
- -- v1→v2 in-place heal ({§entry-identity-no-null}): fold legacy NULL-scheme member rows onto
199
- -- the reserved 'file' scheme. Idempotent — a second pass updates zero rows. A v1 db already
200
- -- fragmented by the #545 duplicate class fails HERE on the identity index, loudly and by
201
- -- design: a fragmented store has no safe automatic merge; recover via a fresh db.
202
- UPDATE entries SET scheme = 'file' WHERE scheme IS NULL;
203
-
204
- -- entries_pathname_heal
205
- -- v2→v3 in-place heal ({§fs-canonical-name}): file-class keys migrate to the bare git-pathspec
206
- -- form — the leading slash was the retired namespace-origin notation. Idempotent; a db holding
207
- -- both spellings of one member fails HERE on the identity index, loudly (fresh-db recovery).
208
- UPDATE entries SET pathname = substr(pathname, 2) WHERE scheme = 'file' AND pathname LIKE '/%';
209
-
210
- -- The ONE engine-imposed constraint (SPEC §stream-constraints, §stream-constraints-engine-one-cap): 100 MiB char-length cap
211
- -- per channel content body. All other limits are extrinsic.
212
- CREATE TABLE IF NOT EXISTS entry_channels (
213
- entry_id INTEGER NOT NULL,
214
- name TEXT NOT NULL CHECK (length(name) > 0),
215
- content TEXT NOT NULL CHECK (length(content) <= 104857600),
216
- mimetype TEXT NOT NULL CHECK (length(mimetype) > 0),
217
- tokens INTEGER NOT NULL DEFAULT 0 CHECK (tokens >= 0),
218
- -- content identity: sha256 of content, stamped at static writes (streamed appends leave it
219
- -- NULL). The per-tokenizer token cache it once keyed was retired — §tokenomics-agnostic-ruler.
220
- content_hash TEXT,
221
- state TEXT NOT NULL DEFAULT 'static' CHECK (state IN ('static', 'active', 'closed', 'errored')),
222
- PRIMARY KEY (entry_id, name),
223
- FOREIGN KEY (entry_id) REFERENCES entries(id) ON DELETE CASCADE
224
- ) STRICT, WITHOUT ROWID;
225
-
226
- -- User Note 5 — bump the entry's updated_at on any channel write so the catalog
227
- -- (ordered by updated_at ASC) keeps recently-touched entries at the tail and holds
228
- -- the prompt-cache prefix stable across turns.
229
- CREATE TRIGGER IF NOT EXISTS entries_touch_on_channel_write
230
- AFTER INSERT ON entry_channels
231
- BEGIN
232
- UPDATE entries SET updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = NEW.entry_id;
233
- END;
234
-
235
- CREATE TABLE IF NOT EXISTS entry_tags (
236
- entry_id INTEGER NOT NULL,
237
- tag TEXT NOT NULL CHECK (length(tag) > 0),
238
- PRIMARY KEY (entry_id, tag),
239
- FOREIGN KEY (entry_id) REFERENCES entries(id) ON DELETE CASCADE
240
- ) STRICT, WITHOUT ROWID;
241
-
242
- CREATE INDEX IF NOT EXISTS entry_tags_tag ON entry_tags (tag);
243
-
244
- -- symbol_defs
245
- -- @graph NODES (plurnk-service#186). Code symbol definitions, populated
246
- -- once per content-addressed derivation from mimetypes'
247
- -- `symbols` channel. Qualified path = container ? container || '.' || name : name.
248
- CREATE TABLE IF NOT EXISTS symbol_defs (
249
- id INTEGER NOT NULL PRIMARY KEY,
250
- derivation_id INTEGER NOT NULL,
251
- name TEXT NOT NULL CHECK (length(name) > 0),
252
- kind TEXT NOT NULL,
253
- container TEXT,
254
- line INTEGER NOT NULL,
255
- end_line INTEGER,
256
- FOREIGN KEY (derivation_id) REFERENCES derivations(id) ON DELETE CASCADE
257
- ) STRICT;
258
-
259
- CREATE INDEX IF NOT EXISTS symbol_defs_name ON symbol_defs (name);
260
-
261
- -- symbol_refs
262
- -- @graph EDGES (plurnk-service#186), from mimetypes' `references` channel.
263
- -- name = edge TARGET; container = the SOURCE def's full qualified path (the
264
- -- @> join key; module-level → NULL); kind ∈ import|call|instantiate|inherit|
265
- -- type|use (frozen, edge metadata only — traversal is kind-agnostic).
266
- CREATE TABLE IF NOT EXISTS symbol_refs (
267
- id INTEGER NOT NULL PRIMARY KEY,
268
- derivation_id INTEGER NOT NULL,
269
- name TEXT NOT NULL CHECK (length(name) > 0),
270
- kind TEXT NOT NULL,
271
- container TEXT,
272
- line INTEGER NOT NULL,
273
- col INTEGER,
274
- FOREIGN KEY (derivation_id) REFERENCES derivations(id) ON DELETE CASCADE
275
- ) STRICT;
276
-
277
- CREATE INDEX IF NOT EXISTS symbol_refs_name ON symbol_refs (name);
278
- CREATE INDEX IF NOT EXISTS symbol_refs_source ON symbol_refs (derivation_id, container);
279
-
280
- -- entry_fts (~semantic FTS half — plurnk-service#186)
281
- -- Keyword/content index over a derivation's readable content; rowid IS derivations.id.
282
- -- Explicit keyword fallback when no embedder is installed. Vector search never
283
- -- consults this table: semantic recall is exhaustive over complete vectors.
284
- CREATE VIRTUAL TABLE IF NOT EXISTS entry_fts USING fts5(content);
285
-
286
- -- entry_embeddings (~semantic vector half — plurnk-service#186; Project
287
- -- Semantics chunking). One Float32 vector per CHUNK: a derivation tiles into N chunks,
288
- -- each addressed by its <L> line range (line_start..line_end) and embedded
289
- -- separately, so a large body is fully searchable instead of truncated at the
290
- -- embedder's window. line_start/line_end are stored for Project Findings to expose;
291
- -- the rank currently max-pools a derivation's chunks, then projects every attached
292
- -- pathname. semantic_rank exhaustively cosine-ranks these.
293
- -- CASCADE-deleted with the derivation artifact.
294
- CREATE TABLE IF NOT EXISTS entry_embeddings (
295
- derivation_id INTEGER NOT NULL,
296
- chunk_seq INTEGER NOT NULL,
297
- line_start INTEGER NOT NULL,
298
- line_end INTEGER NOT NULL,
299
- vector BLOB NOT NULL,
300
- -- The model id that produced this vector (mimetypes' `embeddingModel`). Stored
301
- -- per row as the dimension/staleness guard: rank filters by the current model so
302
- -- a swap never cosine-compares mismatched dimensions.
303
- embedding_model TEXT NOT NULL,
304
- PRIMARY KEY (derivation_id, chunk_seq),
305
- FOREIGN KEY (derivation_id) REFERENCES derivations(id) ON DELETE CASCADE
306
- ) STRICT;
307
-
308
- -- log_entries
309
- -- Chronological event store. sequence is 1-based, scoped to the turn —
310
- -- resets at each new turn. URI-bit columns are unprefixed (scheme,
311
- -- pathname, …). state/outcome/attrs carry the proposal lifecycle —
312
- -- status⊥state: status is the HTTP outcome, state is where in the
313
- -- lifecycle the entry sits. Most rows write 'resolved' directly;
314
- -- proposing schemes transition 'proposed' → resolved/failed/cancelled.
315
- -- expanded: per-row visibility for OPEN/FOLD via the log:/// scheme.
316
- CREATE TABLE IF NOT EXISTS log_entries (
317
- id INTEGER NOT NULL PRIMARY KEY,
318
- version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
319
-
320
- worker_id INTEGER NOT NULL,
321
- loop_id INTEGER NOT NULL,
322
- turn_id INTEGER NOT NULL,
323
- sequence INTEGER NOT NULL CHECK (sequence >= 1),
324
- at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
325
- origin TEXT NOT NULL CHECK (origin IN ('model', 'client', 'plurnk', 'plugin')),
326
- -- §env-delta environment-delta cause: a sibling run-id or a scheme ('file');
327
- -- NULL = the owning run itself (self), rendered without a worker= label.
328
- source TEXT,
329
-
330
- -- 'error' is an ACTIONLESS row (§telemetry — errors are log items): a parse failure that
331
- -- produced no op still records a log entry (op='error', status_rx≥400, no target) so the model
332
- -- can fold/kill/recall its own mistakes like any other log row — one budget surface, the log.
333
- -- 'model' is an ACTIONLESS row too (§model-entry): the model's own verbatim emission, mirrored
334
- -- back as a foldable log item so it can finally SEE its prior output (born folded; the turn-0
335
- -- exemplar is born open). text/vnd.plurnk-typed; OPEN/FOLD/KILL-able like any row.
336
- -- No op enum here: the grammar op set is grammar's contract (PlurnkOp), and this column is written
337
- -- only by the PlurnkOp-typed engine (grammar ops) or with the two service markers ('error','model').
338
- -- A SQL enum would be a hand-copy of grammar's op list that silently goes stale on every new verb
339
- -- (it did — FORK/WORK). Validity lives at the parse + type layer, not duplicated in DDL.
340
- op TEXT NOT NULL,
341
- suffix TEXT NOT NULL DEFAULT '',
342
- signal TEXT CHECK (signal IS NULL OR json_valid(signal)),
343
-
344
- scheme TEXT CHECK (scheme IS NULL OR length(scheme) > 0),
345
- username TEXT,
346
- password TEXT,
347
- hostname TEXT,
348
- port INTEGER CHECK (port IS NULL OR (port BETWEEN 0 AND 65535)),
349
- pathname TEXT,
350
- params TEXT CHECK (params IS NULL OR json_valid(params)),
351
- fragment TEXT,
352
-
353
- lineMarker TEXT CHECK (lineMarker IS NULL OR json_valid(lineMarker)),
354
-
355
- tx TEXT NOT NULL,
356
- mimetype_tx TEXT NOT NULL CHECK (length(mimetype_tx) > 0),
357
-
358
- rx TEXT NOT NULL,
359
- mimetype_rx TEXT NOT NULL CHECK (length(mimetype_rx) > 0),
360
- status_rx INTEGER NOT NULL CHECK (status_rx BETWEEN 100 AND 599),
361
-
362
- tokens INTEGER NOT NULL DEFAULT 0 CHECK (tokens >= 0),
363
-
364
- state TEXT NOT NULL DEFAULT 'resolved'
365
- CHECK (state IN ('proposed', 'resolved', 'failed', 'cancelled')),
366
- outcome TEXT,
367
- attrs TEXT NOT NULL DEFAULT '{}' CHECK (json_valid(attrs)),
368
-
369
- expanded INTEGER NOT NULL DEFAULT 1 CHECK (expanded IN (0, 1)),
370
-
371
- FOREIGN KEY (worker_id) REFERENCES workers(id) ON DELETE CASCADE,
372
- FOREIGN KEY (loop_id) REFERENCES loops(id) ON DELETE CASCADE,
373
- FOREIGN KEY (turn_id) REFERENCES turns(id) ON DELETE CASCADE
374
- ) STRICT;
375
-
376
- CREATE UNIQUE INDEX IF NOT EXISTS log_entries_turn_id_sequence ON log_entries (turn_id, sequence);
377
- CREATE INDEX IF NOT EXISTS log_entries_worker_id ON log_entries (worker_id);
378
- CREATE INDEX IF NOT EXISTS log_entries_loop_id ON log_entries (loop_id);
379
- CREATE INDEX IF NOT EXISTS log_entries_at ON log_entries (at);
380
-
381
- -- §log-region-tagging — named log-region curation. FOLD is the log's write-op (EDIT can't
382
- -- reach engine-written rows): FOLD[tag] stamps a tag on a region; OPEN[tag]/FIND[tag] filter
383
- -- by it. Mirrors entry_tags (apply additive / filter ALL-tags AND); CASCADE with the row on KILL.
384
- CREATE TABLE IF NOT EXISTS log_tags (
385
- log_entry_id INTEGER NOT NULL,
386
- tag TEXT NOT NULL CHECK (length(tag) > 0),
387
- PRIMARY KEY (log_entry_id, tag),
388
- FOREIGN KEY (log_entry_id) REFERENCES log_entries(id) ON DELETE CASCADE
389
- ) STRICT, WITHOUT ROWID;
390
-
391
- CREATE INDEX IF NOT EXISTS log_tags_tag ON log_tags (tag);
392
-
393
- -- Column-scoped immutability: the original action's identity and target
394
- -- never change; the proposal lifecycle is allowed to mutate state,
395
- -- outcome, status_rx, rx, expanded.
396
- CREATE TRIGGER IF NOT EXISTS log_entries_immutable_core
397
- BEFORE UPDATE OF
398
- worker_id, loop_id, turn_id, sequence, at, origin, source,
399
- op, suffix, signal,
400
- scheme, username, password, hostname,
401
- port, pathname, params, fragment,
402
- lineMarker, tx, mimetype_tx, mimetype_rx, attrs
403
- ON log_entries
404
- BEGIN
405
- SELECT RAISE(ABORT, 'log_entries core fields are immutable; only state/outcome/status_rx/rx/expanded may change');
406
- END;
407
-
408
- -- schemes_providers
409
- -- Scheme/provider catalog. Schemes are static (registered at boot);
410
- -- providers carry per-model metadata for cost accounting and selection.
411
- CREATE TABLE IF NOT EXISTS schemes (
412
- name TEXT NOT NULL PRIMARY KEY CHECK (length(name) > 0),
413
- model_visible INTEGER NOT NULL CHECK (model_visible IN (0, 1)),
414
- category TEXT NOT NULL CHECK (length(category) > 0),
415
- default_scope TEXT NOT NULL CHECK (default_scope IN ('workspace')),
416
- default_channel TEXT NOT NULL CHECK (length(default_channel) > 0),
417
- channel_orientations TEXT CHECK (channel_orientations IS NULL OR json_valid(channel_orientations)),
418
- writable_by TEXT NOT NULL CHECK (json_valid(writable_by)),
419
- volatile INTEGER NOT NULL CHECK (volatile IN (0, 1)),
420
- handler TEXT
421
- ) STRICT, WITHOUT ROWID;
422
-
423
- CREATE TABLE IF NOT EXISTS providers (
424
- id INTEGER NOT NULL PRIMARY KEY,
425
- version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
426
- provider TEXT NOT NULL CHECK (length(provider) > 0),
427
- family TEXT NOT NULL CHECK (length(family) > 0),
428
- model TEXT NOT NULL CHECK (length(model) > 0),
429
- contextSize INTEGER NOT NULL CHECK (contextSize >= 1),
430
- currency TEXT NOT NULL CHECK (length(currency) = 3),
431
- created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
432
- ) STRICT;
433
-
434
- CREATE INDEX IF NOT EXISTS providers_created_at ON providers (created_at);
435
-
436
- -- cost_rollups
437
- -- Triggers maintaining denormalized cost_usd totals on runs and workspaces
438
- -- as turns insert/update. Pure denormalization (textbook trigger use);
439
- -- no branching state-machine logic lives here.
440
- CREATE TRIGGER IF NOT EXISTS turns_cost_rollup_insert_worker
441
- AFTER INSERT ON turns
442
- BEGIN
443
- UPDATE workers
444
- SET cost_usd = cost_usd + NEW.usage_cost_usd
445
- WHERE id = (SELECT worker_id FROM loops WHERE id = NEW.loop_id);
446
- END;
447
-
448
- CREATE TRIGGER IF NOT EXISTS turns_cost_rollup_insert_workspace
449
- AFTER INSERT ON turns
450
- BEGIN
451
- UPDATE workspaces
452
- SET cost_usd = cost_usd + NEW.usage_cost_usd
453
- WHERE id = (
454
- SELECT r.workspace_id
455
- FROM workers r
456
- JOIN loops l ON l.worker_id = r.id
457
- WHERE l.id = NEW.loop_id
458
- );
459
- END;
460
-
461
- CREATE TRIGGER IF NOT EXISTS turns_cost_rollup_update_worker
462
- AFTER UPDATE OF usage_cost_usd ON turns
463
- WHEN NEW.usage_cost_usd != OLD.usage_cost_usd
464
- BEGIN
465
- UPDATE workers
466
- SET cost_usd = cost_usd + NEW.usage_cost_usd - OLD.usage_cost_usd
467
- WHERE id = (SELECT worker_id FROM loops WHERE id = NEW.loop_id);
468
- END;
469
-
470
- CREATE TRIGGER IF NOT EXISTS turns_cost_rollup_update_workspace
471
- AFTER UPDATE OF usage_cost_usd ON turns
472
- WHEN NEW.usage_cost_usd != OLD.usage_cost_usd
473
- BEGIN
474
- UPDATE workspaces
475
- SET cost_usd = cost_usd + NEW.usage_cost_usd - OLD.usage_cost_usd
476
- WHERE id = (
477
- SELECT r.workspace_id
478
- FROM workers r
479
- JOIN loops l ON l.worker_id = r.id
480
- WHERE l.id = NEW.loop_id
481
- );
482
- END;
483
-
484
- -- subscriptions
485
- -- Durable subscription lifecycle per SPEC §subscriptions. The row records what
486
- -- the worker holds and routes cancellation to a separate process-local callable;
487
- -- it never serializes that callable. Closed rows persist for forensics; partial
488
- -- unique index enforces one active subscription per (worker, entry).
489
- CREATE TABLE IF NOT EXISTS subscriptions (
490
- id INTEGER NOT NULL PRIMARY KEY,
491
- version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
492
- worker_id INTEGER NOT NULL,
493
- entry_id INTEGER NOT NULL,
494
- scheme TEXT NOT NULL CHECK (length(scheme) > 0),
495
- handle TEXT NOT NULL CHECK (length(handle) > 0),
496
- opened_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
497
- -- grammar 0.74.20 EXEC `<T,P>` poll cadence (seconds). NULL = not polled. While the owning
498
- -- loop hibernates (202), the daemon wakes it every poll_seconds to inspect this stream (§exec-poll).
499
- poll_seconds INTEGER CHECK (poll_seconds IS NULL OR poll_seconds > 0),
500
- -- EXEC `<0>` — turn-scoped: the stream is reaped at the worker's next pre-turn so it never survives
501
- -- into the subsequent turn; its terminal output surfaces born-OPEN like any conclusion. §exec-poll
502
- turn_scoped INTEGER NOT NULL DEFAULT 0 CHECK (turn_scoped IN (0, 1)),
503
- closed_at TEXT,
504
- close_status INTEGER CHECK (close_status IS NULL OR (close_status BETWEEN 100 AND 599)),
505
- CHECK ((closed_at IS NULL AND close_status IS NULL)
506
- OR (closed_at IS NOT NULL AND close_status IS NOT NULL)),
507
- FOREIGN KEY (worker_id) REFERENCES workers(id) ON DELETE CASCADE,
508
- FOREIGN KEY (entry_id) REFERENCES entries(id) ON DELETE CASCADE
509
- ) STRICT;
510
-
511
- CREATE UNIQUE INDEX IF NOT EXISTS subscriptions_active_one_per_entry
512
- ON subscriptions (worker_id, entry_id)
513
- WHERE closed_at IS NULL;
514
-
515
- CREATE INDEX IF NOT EXISTS subscriptions_scheme_active
516
- ON subscriptions (scheme)
517
- WHERE closed_at IS NULL;
518
-
519
- CREATE INDEX IF NOT EXISTS subscriptions_opened_at ON subscriptions (opened_at);
520
-
521
- -- (worker_watermarks removed — §env-delta is now pull-from-log, no per-worker snapshot.)
522
-
523
- -- workspace_constraints
524
- -- SPEC §membership constraint overlay — the client's supersede over git membership.
525
- -- Per (workspace, effect, glob/target): `pick` (members git misses, resolved by a
526
- -- targeted client-dictated scan), `hide` (drop git-tracked matches), `view` (member
527
- -- for read; File.edit rejects the write), `repo` (declare a git repo whose ls-files
528
- -- join membership, path-prefixed). git-absent, `pick` rows are the sole substrate
529
- -- source. Composed at membership resolution; node:path.matchesGlob.
530
- CREATE TABLE IF NOT EXISTS workspace_constraints (
531
- workspace_id INTEGER NOT NULL,
532
- effect TEXT NOT NULL CHECK (effect IN ('pick', 'hide', 'view', 'repo')),
533
- glob TEXT NOT NULL,
534
- PRIMARY KEY (workspace_id, effect, glob),
535
- FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE
536
- ) STRICT, WITHOUT ROWID;
@@ -1,3 +0,0 @@
1
- -- MIGRATE: 4 loop_provider
2
- ALTER TABLE loops
3
- ADD COLUMN provider_spec TEXT NOT NULL DEFAULT 'null' CHECK (json_valid(provider_spec));
@@ -1,3 +0,0 @@
1
- -- MIGRATE: 5 subscription_published_channel
2
- ALTER TABLE subscriptions
3
- ADD COLUMN published_channel TEXT CHECK (published_channel IS NULL OR length(published_channel) > 0);
@@ -1,3 +0,0 @@
1
- -- MIGRATE: 6 loop_max_turns
2
- ALTER TABLE loops
3
- ADD COLUMN max_turns INTEGER NOT NULL DEFAULT 50 CHECK (max_turns >= -1);