@plurnk/plurnk-service 1.3.12 → 1.5.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 (488) hide show
  1. package/.env.defaults +95 -91
  2. package/INSTALL.md +54 -28
  3. package/README.md +25 -10
  4. package/SPEC.md +2426 -942
  5. package/dist/Paths.d.ts +4 -1
  6. package/dist/Paths.d.ts.map +1 -1
  7. package/dist/Paths.js +24 -23
  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 +4 -3
  18. package/dist/content/index.d.ts.map +1 -1
  19. package/dist/content/index.js +2 -1
  20. package/dist/content/index.js.map +1 -1
  21. package/dist/content/line-marker.d.ts +10 -9
  22. package/dist/content/line-marker.d.ts.map +1 -1
  23. package/dist/content/line-marker.js +8 -11
  24. package/dist/content/line-marker.js.map +1 -1
  25. package/dist/content/matcher.d.ts +15 -26
  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-projector.d.ts +14 -0
  36. package/dist/content/read-projector.d.ts.map +1 -0
  37. package/dist/content/read-projector.js +86 -0
  38. package/dist/content/read-projector.js.map +1 -0
  39. package/dist/content/read-resolve.d.ts +6 -7
  40. package/dist/content/read-resolve.d.ts.map +1 -1
  41. package/dist/content/read-resolve.js +36 -59
  42. package/dist/content/read-resolve.js.map +1 -1
  43. package/dist/core/BranchReceipt.d.ts +6 -0
  44. package/dist/core/BranchReceipt.d.ts.map +1 -0
  45. package/dist/core/BranchReceipt.js +24 -0
  46. package/dist/core/BranchReceipt.js.map +1 -0
  47. package/dist/core/BudgetOverflow.d.ts +20 -0
  48. package/dist/core/BudgetOverflow.d.ts.map +1 -0
  49. package/dist/core/BudgetOverflow.js +49 -0
  50. package/dist/core/BudgetOverflow.js.map +1 -0
  51. package/dist/core/BudgetReadout.d.ts +8 -0
  52. package/dist/core/BudgetReadout.d.ts.map +1 -0
  53. package/dist/core/BudgetReadout.js +79 -0
  54. package/dist/core/BudgetReadout.js.map +1 -0
  55. package/dist/core/ChannelWrite.d.ts +31 -9
  56. package/dist/core/ChannelWrite.d.ts.map +1 -1
  57. package/dist/core/ChannelWrite.js +30 -23
  58. package/dist/core/ChannelWrite.js.map +1 -1
  59. package/dist/core/ChannelWrite.sql +14 -12
  60. package/dist/core/CoreSchemeServices.d.ts +18 -4
  61. package/dist/core/CoreSchemeServices.d.ts.map +1 -1
  62. package/dist/core/CoreSchemeServices.js +7 -1
  63. package/dist/core/CoreSchemeServices.js.map +1 -1
  64. package/dist/core/Dispatcher.d.ts +26 -21
  65. package/dist/core/Dispatcher.d.ts.map +1 -1
  66. package/dist/core/Dispatcher.js +1626 -671
  67. package/dist/core/Dispatcher.js.map +1 -1
  68. package/dist/core/DurableStatement.d.ts +6 -0
  69. package/dist/core/DurableStatement.d.ts.map +1 -0
  70. package/dist/core/DurableStatement.js +51 -0
  71. package/dist/core/DurableStatement.js.map +1 -0
  72. package/dist/core/Engine.d.ts +64 -29
  73. package/dist/core/Engine.d.ts.map +1 -1
  74. package/dist/core/Engine.js +1348 -835
  75. package/dist/core/Engine.js.map +1 -1
  76. package/dist/core/Engine.sql +329 -234
  77. package/dist/core/EnvFlags.js +1 -1
  78. package/dist/core/EnvFlags.js.map +1 -1
  79. package/dist/core/ErrorDetail.d.ts +6 -0
  80. package/dist/core/ErrorDetail.d.ts.map +1 -0
  81. package/dist/core/ErrorDetail.js +20 -0
  82. package/dist/core/ErrorDetail.js.map +1 -0
  83. package/dist/core/ExecutorRegistry.d.ts +14 -3
  84. package/dist/core/ExecutorRegistry.d.ts.map +1 -1
  85. package/dist/core/ExecutorRegistry.js +56 -30
  86. package/dist/core/ExecutorRegistry.js.map +1 -1
  87. package/dist/core/GitBranch.d.ts +20 -0
  88. package/dist/core/GitBranch.d.ts.map +1 -0
  89. package/dist/core/GitBranch.js +110 -0
  90. package/dist/core/GitBranch.js.map +1 -0
  91. package/dist/core/JournalTurn.d.ts +9 -0
  92. package/dist/core/JournalTurn.d.ts.map +1 -0
  93. package/dist/core/JournalTurn.js +14 -0
  94. package/dist/core/JournalTurn.js.map +1 -0
  95. package/dist/core/JournalTurn.sql +10 -0
  96. package/dist/core/LogBody.d.ts +18 -0
  97. package/dist/core/LogBody.d.ts.map +1 -0
  98. package/dist/core/LogBody.js +180 -0
  99. package/dist/core/LogBody.js.map +1 -0
  100. package/dist/core/LoopFlagsReader.d.ts +7 -0
  101. package/dist/core/LoopFlagsReader.d.ts.map +1 -0
  102. package/dist/core/LoopFlagsReader.js +33 -0
  103. package/dist/core/LoopFlagsReader.js.map +1 -0
  104. package/dist/core/LoopLifecycle.d.ts +8 -2
  105. package/dist/core/LoopLifecycle.d.ts.map +1 -1
  106. package/dist/core/LoopLifecycle.js +54 -11
  107. package/dist/core/LoopLifecycle.js.map +1 -1
  108. package/dist/core/LoopLifecycle.sql +10 -7
  109. package/dist/core/NoticeChannel.d.ts +13 -0
  110. package/dist/core/NoticeChannel.d.ts.map +1 -0
  111. package/dist/core/NoticeChannel.js +40 -0
  112. package/dist/core/NoticeChannel.js.map +1 -0
  113. package/dist/core/Owner.d.ts +0 -1
  114. package/dist/core/Owner.d.ts.map +1 -1
  115. package/dist/core/Owner.js +2 -5
  116. package/dist/core/Owner.js.map +1 -1
  117. package/dist/core/PacketBuilder.d.ts +27 -25
  118. package/dist/core/PacketBuilder.d.ts.map +1 -1
  119. package/dist/core/PacketBuilder.js +321 -383
  120. package/dist/core/PacketBuilder.js.map +1 -1
  121. package/dist/core/ProblemLog.d.ts +26 -0
  122. package/dist/core/ProblemLog.d.ts.map +1 -0
  123. package/dist/core/ProblemLog.js +58 -0
  124. package/dist/core/ProblemLog.js.map +1 -0
  125. package/dist/core/ProposalLifecycle.d.ts +15 -21
  126. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  127. package/dist/core/ProposalLifecycle.js +291 -78
  128. package/dist/core/ProposalLifecycle.js.map +1 -1
  129. package/dist/core/ProviderInstantiate.d.ts.map +1 -1
  130. package/dist/core/ProviderInstantiate.js +51 -48
  131. package/dist/core/ProviderInstantiate.js.map +1 -1
  132. package/dist/core/SchemeRegistry.d.ts +14 -8
  133. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  134. package/dist/core/SchemeRegistry.js +189 -114
  135. package/dist/core/SchemeRegistry.js.map +1 -1
  136. package/dist/core/ServiceTeardown.d.ts +11 -0
  137. package/dist/core/ServiceTeardown.d.ts.map +1 -0
  138. package/dist/core/ServiceTeardown.js +70 -0
  139. package/dist/core/ServiceTeardown.js.map +1 -0
  140. package/dist/core/StoredPacket.d.ts +29 -0
  141. package/dist/core/StoredPacket.d.ts.map +1 -0
  142. package/dist/core/StoredPacket.js +147 -0
  143. package/dist/core/StoredPacket.js.map +1 -0
  144. package/dist/core/StrikeRail.d.ts +6 -3
  145. package/dist/core/StrikeRail.d.ts.map +1 -1
  146. package/dist/core/StrikeRail.js +27 -56
  147. package/dist/core/StrikeRail.js.map +1 -1
  148. package/dist/core/TerminalResult.d.ts +16 -0
  149. package/dist/core/TerminalResult.d.ts.map +1 -0
  150. package/dist/core/TerminalResult.js +49 -0
  151. package/dist/core/TerminalResult.js.map +1 -0
  152. package/dist/core/WorkerControlAddress.d.ts +17 -0
  153. package/dist/core/WorkerControlAddress.d.ts.map +1 -0
  154. package/dist/core/WorkerControlAddress.js +44 -0
  155. package/dist/core/WorkerControlAddress.js.map +1 -0
  156. package/dist/core/WorkerName.d.ts +31 -0
  157. package/dist/core/WorkerName.d.ts.map +1 -0
  158. package/dist/core/WorkerName.js +95 -0
  159. package/dist/core/WorkerName.js.map +1 -0
  160. package/dist/core/WorkerName.sql +36 -0
  161. package/dist/core/WorkspaceGate.d.ts +14 -0
  162. package/dist/core/WorkspaceGate.d.ts.map +1 -0
  163. package/dist/core/WorkspaceGate.js +155 -0
  164. package/dist/core/WorkspaceGate.js.map +1 -0
  165. package/dist/core/caps/CapsResolve.d.ts +5 -1
  166. package/dist/core/caps/CapsResolve.d.ts.map +1 -1
  167. package/dist/core/caps/CapsResolve.js +8 -4
  168. package/dist/core/caps/CapsResolve.js.map +1 -1
  169. package/dist/core/caps/DbChannelCaps.d.ts +5 -11
  170. package/dist/core/caps/DbChannelCaps.d.ts.map +1 -1
  171. package/dist/core/caps/DbChannelCaps.js +30 -12
  172. package/dist/core/caps/DbChannelCaps.js.map +1 -1
  173. package/dist/core/caps/DbEntryCaps.d.ts +5 -14
  174. package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
  175. package/dist/core/caps/DbEntryCaps.js +27 -8
  176. package/dist/core/caps/DbEntryCaps.js.map +1 -1
  177. package/dist/core/caps/DbNotifyCaps.d.ts +1 -1
  178. package/dist/core/caps/DbNotifyCaps.d.ts.map +1 -1
  179. package/dist/core/caps/DbNotifyCaps.js +18 -15
  180. package/dist/core/caps/DbNotifyCaps.js.map +1 -1
  181. package/dist/core/caps/DbProjectionCaps.d.ts +5 -5
  182. package/dist/core/caps/DbProjectionCaps.d.ts.map +1 -1
  183. package/dist/core/caps/DbProjectionCaps.js +21 -4
  184. package/dist/core/caps/DbProjectionCaps.js.map +1 -1
  185. package/dist/core/caps/DbSubscriptionCaps.d.ts +4 -6
  186. package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
  187. package/dist/core/caps/DbSubscriptionCaps.js +75 -66
  188. package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
  189. package/dist/core/caps/DbTagCaps.d.ts +5 -12
  190. package/dist/core/caps/DbTagCaps.d.ts.map +1 -1
  191. package/dist/core/caps/DbTagCaps.js +20 -11
  192. package/dist/core/caps/DbTagCaps.js.map +1 -1
  193. package/dist/core/caps/SchemeCtxImpl.d.ts +6 -1
  194. package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
  195. package/dist/core/caps/SchemeCtxImpl.js +6 -6
  196. package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
  197. package/dist/core/content-hash.js +1 -1
  198. package/dist/core/content-hash.js.map +1 -1
  199. package/dist/core/env-defaults.d.ts.map +1 -1
  200. package/dist/core/env-defaults.js.map +1 -1
  201. package/dist/core/fork.d.ts.map +1 -1
  202. package/dist/core/fork.js +55 -30
  203. package/dist/core/fork.js.map +1 -1
  204. package/dist/core/fork.sql +43 -29
  205. package/dist/core/git-env.d.ts +2 -0
  206. package/dist/core/git-env.d.ts.map +1 -1
  207. package/dist/core/git-env.js +13 -18
  208. package/dist/core/git-env.js.map +1 -1
  209. package/dist/core/git-iso.d.ts +3 -2
  210. package/dist/core/git-iso.d.ts.map +1 -1
  211. package/dist/core/git-iso.js +36 -27
  212. package/dist/core/git-iso.js.map +1 -1
  213. package/dist/core/git-membership.d.ts +2 -1
  214. package/dist/core/git-membership.d.ts.map +1 -1
  215. package/dist/core/git-membership.js +276 -162
  216. package/dist/core/git-membership.js.map +1 -1
  217. package/dist/core/git-state.d.ts +8 -1
  218. package/dist/core/git-state.d.ts.map +1 -1
  219. package/dist/core/git-state.js +44 -26
  220. package/dist/core/git-state.js.map +1 -1
  221. package/dist/core/namespace.d.ts +1 -0
  222. package/dist/core/namespace.d.ts.map +1 -1
  223. package/dist/core/namespace.js +20 -0
  224. package/dist/core/namespace.js.map +1 -1
  225. package/dist/core/optimistic-settlement.d.ts +2 -0
  226. package/dist/core/optimistic-settlement.d.ts.map +1 -0
  227. package/dist/core/optimistic-settlement.js +14 -0
  228. package/dist/core/optimistic-settlement.js.map +1 -0
  229. package/dist/core/owner.sql +1 -1
  230. package/dist/core/packet-inject.d.ts.map +1 -1
  231. package/dist/core/packet-inject.js +7 -11
  232. package/dist/core/packet-inject.js.map +1 -1
  233. package/dist/core/packet-wire.d.ts +3 -21
  234. package/dist/core/packet-wire.d.ts.map +1 -1
  235. package/dist/core/packet-wire.js +305 -385
  236. package/dist/core/packet-wire.js.map +1 -1
  237. package/dist/core/plurnk-uri.d.ts +12 -1
  238. package/dist/core/plurnk-uri.d.ts.map +1 -1
  239. package/dist/core/plurnk-uri.js +49 -29
  240. package/dist/core/plurnk-uri.js.map +1 -1
  241. package/dist/core/results.d.ts +18 -5
  242. package/dist/core/results.d.ts.map +1 -1
  243. package/dist/core/results.js +33 -18
  244. package/dist/core/results.js.map +1 -1
  245. package/dist/core/ruler_count.d.ts +4 -0
  246. package/dist/core/ruler_count.d.ts.map +1 -0
  247. package/dist/core/ruler_count.js +7 -0
  248. package/dist/core/ruler_count.js.map +1 -0
  249. package/dist/core/scheme-types.d.ts +3 -17
  250. package/dist/core/scheme-types.d.ts.map +1 -1
  251. package/dist/core/scheme-types.js.map +1 -1
  252. package/dist/core/search-gate.d.ts.map +1 -1
  253. package/dist/core/search-gate.js +3 -11
  254. package/dist/core/search-gate.js.map +1 -1
  255. package/dist/core/teaching-corpus.d.ts +6 -0
  256. package/dist/core/teaching-corpus.d.ts.map +1 -0
  257. package/dist/core/teaching-corpus.js +23 -0
  258. package/dist/core/teaching-corpus.js.map +1 -0
  259. package/dist/core/teaching.d.ts +0 -1
  260. package/dist/core/teaching.d.ts.map +1 -1
  261. package/dist/core/teaching.js +2 -8
  262. package/dist/core/teaching.js.map +1 -1
  263. package/dist/core/token-ruler.d.ts.map +1 -1
  264. package/dist/core/token-ruler.js +3 -16
  265. package/dist/core/token-ruler.js.map +1 -1
  266. package/dist/core/turn-scheduler.d.ts +1 -1
  267. package/dist/core/turn-scheduler.d.ts.map +1 -1
  268. package/dist/core/turn-scheduler.js +1 -1
  269. package/dist/core/turn-scheduler.js.map +1 -1
  270. package/dist/core/worker-cap.d.ts +2 -4
  271. package/dist/core/worker-cap.d.ts.map +1 -1
  272. package/dist/core/worker-cap.js +13 -4
  273. package/dist/core/worker-cap.js.map +1 -1
  274. package/dist/core/{run-ops.sql → worker-ops.sql} +14 -14
  275. package/dist/core/workspace-settings.d.ts.map +1 -1
  276. package/dist/core/workspace-settings.js +17 -9
  277. package/dist/core/workspace-settings.js.map +1 -1
  278. package/dist/digest/Digest.d.ts +2 -1
  279. package/dist/digest/Digest.d.ts.map +1 -1
  280. package/dist/digest/Digest.js +510 -149
  281. package/dist/digest/Digest.js.map +1 -1
  282. package/dist/digest/digest.sql +23 -10
  283. package/dist/index.d.ts.map +1 -1
  284. package/dist/index.js +3 -5
  285. package/dist/index.js.map +1 -1
  286. package/dist/observe/api.d.ts +6 -0
  287. package/dist/observe/api.d.ts.map +1 -0
  288. package/dist/observe/api.js +11 -0
  289. package/dist/observe/api.js.map +1 -0
  290. package/dist/observe/init.d.ts +7 -0
  291. package/dist/observe/init.d.ts.map +1 -0
  292. package/dist/observe/init.js +159 -0
  293. package/dist/observe/init.js.map +1 -0
  294. package/dist/observe/metrics.d.ts +6 -0
  295. package/dist/observe/metrics.d.ts.map +1 -0
  296. package/dist/observe/metrics.js +15 -0
  297. package/dist/observe/metrics.js.map +1 -0
  298. package/dist/observe/spans.d.ts +4 -0
  299. package/dist/observe/spans.d.ts.map +1 -0
  300. package/dist/observe/spans.js +51 -0
  301. package/dist/observe/spans.js.map +1 -0
  302. package/dist/schemes/EffectPolicy.d.ts +1 -0
  303. package/dist/schemes/EffectPolicy.d.ts.map +1 -1
  304. package/dist/schemes/EffectPolicy.js +5 -2
  305. package/dist/schemes/EffectPolicy.js.map +1 -1
  306. package/dist/schemes/Exec.d.ts +9 -14
  307. package/dist/schemes/Exec.d.ts.map +1 -1
  308. package/dist/schemes/Exec.js +402 -262
  309. package/dist/schemes/Exec.js.map +1 -1
  310. package/dist/schemes/ExecOutputScheme.d.ts +9 -9
  311. package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
  312. package/dist/schemes/ExecOutputScheme.js +49 -18
  313. package/dist/schemes/ExecOutputScheme.js.map +1 -1
  314. package/dist/schemes/File.d.ts +7 -13
  315. package/dist/schemes/File.d.ts.map +1 -1
  316. package/dist/schemes/File.js +280 -151
  317. package/dist/schemes/File.js.map +1 -1
  318. package/dist/schemes/Log.d.ts +8 -12
  319. package/dist/schemes/Log.d.ts.map +1 -1
  320. package/dist/schemes/Log.js +402 -233
  321. package/dist/schemes/Log.js.map +1 -1
  322. package/dist/schemes/Log.sql +71 -32
  323. package/dist/schemes/Prompt.d.ts +3 -3
  324. package/dist/schemes/Prompt.d.ts.map +1 -1
  325. package/dist/schemes/Prompt.js +10 -10
  326. package/dist/schemes/Prompt.js.map +1 -1
  327. package/dist/schemes/Skill.d.ts +2 -3
  328. package/dist/schemes/Skill.d.ts.map +1 -1
  329. package/dist/schemes/Skill.js +2 -6
  330. package/dist/schemes/Skill.js.map +1 -1
  331. package/dist/schemes/Worker.d.ts +11 -19
  332. package/dist/schemes/Worker.d.ts.map +1 -1
  333. package/dist/schemes/Worker.js +210 -89
  334. package/dist/schemes/Worker.js.map +1 -1
  335. package/dist/schemes/_entry-chunk.d.ts.map +1 -1
  336. package/dist/schemes/_entry-chunk.js +12 -5
  337. package/dist/schemes/_entry-chunk.js.map +1 -1
  338. package/dist/schemes/_entry-crud.d.ts +11 -9
  339. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  340. package/dist/schemes/_entry-crud.js +72 -13
  341. package/dist/schemes/_entry-crud.js.map +1 -1
  342. package/dist/schemes/_entry-crud.sql +28 -10
  343. package/dist/schemes/_entry-find.d.ts +49 -18
  344. package/dist/schemes/_entry-find.d.ts.map +1 -1
  345. package/dist/schemes/_entry-find.js +348 -195
  346. package/dist/schemes/_entry-find.js.map +1 -1
  347. package/dist/schemes/_entry-find.sql +20 -8
  348. package/dist/schemes/_entry-graph.d.ts +4 -2
  349. package/dist/schemes/_entry-graph.d.ts.map +1 -1
  350. package/dist/schemes/_entry-graph.js +55 -31
  351. package/dist/schemes/_entry-graph.js.map +1 -1
  352. package/dist/schemes/_entry-graph.sql +37 -22
  353. package/dist/schemes/_entry-manifest.d.ts +10 -15
  354. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  355. package/dist/schemes/_entry-manifest.js +50 -268
  356. package/dist/schemes/_entry-manifest.js.map +1 -1
  357. package/dist/schemes/_entry-ops.d.ts +14 -15
  358. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  359. package/dist/schemes/_entry-ops.js +121 -110
  360. package/dist/schemes/_entry-ops.js.map +1 -1
  361. package/dist/schemes/_entry-ops.sql +2 -3
  362. package/dist/schemes/_entry-semantic.d.ts +22 -9
  363. package/dist/schemes/_entry-semantic.d.ts.map +1 -1
  364. package/dist/schemes/_entry-semantic.js +127 -67
  365. package/dist/schemes/_entry-semantic.js.map +1 -1
  366. package/dist/schemes/_entry-semantic.sql +63 -45
  367. package/dist/schemes/_entry-send.d.ts +3 -4
  368. package/dist/schemes/_entry-send.d.ts.map +1 -1
  369. package/dist/schemes/_entry-send.js +48 -23
  370. package/dist/schemes/_entry-send.js.map +1 -1
  371. package/dist/schemes/_path-scope.d.ts +23 -0
  372. package/dist/schemes/_path-scope.d.ts.map +1 -0
  373. package/dist/schemes/_path-scope.js +61 -0
  374. package/dist/schemes/_path-scope.js.map +1 -0
  375. package/dist/schemes/_search-candidate.d.ts +20 -0
  376. package/dist/schemes/_search-candidate.d.ts.map +1 -0
  377. package/dist/schemes/_search-candidate.js +19 -0
  378. package/dist/schemes/_search-candidate.js.map +1 -0
  379. package/dist/schemes/_search-exclusion.d.ts +7 -0
  380. package/dist/schemes/_search-exclusion.d.ts.map +1 -0
  381. package/dist/schemes/_search-exclusion.js +23 -0
  382. package/dist/schemes/_search-exclusion.js.map +1 -0
  383. package/dist/schemes/_search-index.d.ts +6 -0
  384. package/dist/schemes/_search-index.d.ts.map +1 -0
  385. package/dist/schemes/_search-index.js +328 -0
  386. package/dist/schemes/_search-index.js.map +1 -0
  387. package/dist/schemes/cosine.js +1 -1
  388. package/dist/schemes/cosine.js.map +1 -1
  389. package/dist/schemes/exec-abort.js +3 -3
  390. package/dist/schemes/exec-abort.js.map +1 -1
  391. package/dist/schemes/exec-env.js +3 -3
  392. package/dist/schemes/exec-env.js.map +1 -1
  393. package/dist/server/BranchBatches.d.ts +49 -0
  394. package/dist/server/BranchBatches.d.ts.map +1 -0
  395. package/dist/server/BranchBatches.js +592 -0
  396. package/dist/server/BranchBatches.js.map +1 -0
  397. package/dist/server/Daemon.d.ts +39 -71
  398. package/dist/server/Daemon.d.ts.map +1 -1
  399. package/dist/server/Daemon.js +1133 -491
  400. package/dist/server/Daemon.js.map +1 -1
  401. package/dist/server/DaemonModule.d.ts +31 -0
  402. package/dist/server/DaemonModule.d.ts.map +1 -0
  403. package/dist/server/DaemonModule.js +2 -0
  404. package/dist/server/DaemonModule.js.map +1 -0
  405. package/dist/server/branch-batch.sql +154 -0
  406. package/dist/server/client-input.d.ts +13 -0
  407. package/dist/server/client-input.d.ts.map +1 -1
  408. package/dist/server/client-input.js +268 -57
  409. package/dist/server/client-input.js.map +1 -1
  410. package/dist/server/dispatch-as-plurnk.d.ts +1 -1
  411. package/dist/server/dispatch-as-plurnk.d.ts.map +1 -1
  412. package/dist/server/dispatch-as-plurnk.js +15 -7
  413. package/dist/server/dispatch-as-plurnk.js.map +1 -1
  414. package/dist/server/drain.sql +96 -65
  415. package/dist/server/envelope.d.ts +4 -7
  416. package/dist/server/envelope.d.ts.map +1 -1
  417. package/dist/server/envelope.js +118 -95
  418. package/dist/server/envelope.js.map +1 -1
  419. package/dist/server/envelope.sql +18 -23
  420. package/dist/server/exec-poll-backoff.js +1 -1
  421. package/dist/server/exec-poll-backoff.js.map +1 -1
  422. package/dist/server/lifecycle-recovery.sql +112 -2
  423. package/dist/server/logEntry.d.ts +4 -2
  424. package/dist/server/logEntry.d.ts.map +1 -1
  425. package/dist/server/logEntry.js +6 -3
  426. package/dist/server/logEntry.js.map +1 -1
  427. package/dist/server/logEntry.sql +1 -1
  428. package/dist/server/loop-model.d.ts.map +1 -1
  429. package/dist/server/loop-model.js +22 -9
  430. package/dist/server/loop-model.js.map +1 -1
  431. package/dist/server/loopDocs.d.ts.map +1 -1
  432. package/dist/server/loopDocs.js +5 -4
  433. package/dist/server/loopDocs.js.map +1 -1
  434. package/dist/server/seam-entry-read.sql +15 -10
  435. package/dist/server/seam-log-read.sql +2 -2
  436. package/dist/server/seam-loop.sql +1 -1
  437. package/dist/server/seam-proposal-list.sql +17 -7
  438. package/dist/service.d.ts.map +1 -1
  439. package/dist/service.js +79 -61
  440. package/dist/service.js.map +1 -1
  441. package/migrations/001_schema.sql +1010 -0
  442. package/package.json +65 -32
  443. package/dist/core/PluginLoader.d.ts +0 -20
  444. package/dist/core/PluginLoader.d.ts.map +0 -1
  445. package/dist/core/PluginLoader.js +0 -142
  446. package/dist/core/PluginLoader.js.map +0 -1
  447. package/dist/core/TelemetryChannel.d.ts +0 -37
  448. package/dist/core/TelemetryChannel.d.ts.map +0 -1
  449. package/dist/core/TelemetryChannel.js +0 -80
  450. package/dist/core/TelemetryChannel.js.map +0 -1
  451. package/dist/core/path-decode.d.ts +0 -3
  452. package/dist/core/path-decode.d.ts.map +0 -1
  453. package/dist/core/path-decode.js +0 -9
  454. package/dist/core/path-decode.js.map +0 -1
  455. package/dist/core/plugin-attribution.d.ts +0 -5
  456. package/dist/core/plugin-attribution.d.ts.map +0 -1
  457. package/dist/core/plugin-attribution.js +0 -39
  458. package/dist/core/plugin-attribution.js.map +0 -1
  459. package/dist/core/world-state.d.ts +0 -10
  460. package/dist/core/world-state.d.ts.map +0 -1
  461. package/dist/core/world-state.js +0 -35
  462. package/dist/core/world-state.js.map +0 -1
  463. package/dist/core/world-state.sql +0 -35
  464. package/dist/core/zero-pin.d.ts +0 -3
  465. package/dist/core/zero-pin.d.ts.map +0 -1
  466. package/dist/core/zero-pin.js +0 -16
  467. package/dist/core/zero-pin.js.map +0 -1
  468. package/dist/server/auto.d.ts +0 -6
  469. package/dist/server/auto.d.ts.map +0 -1
  470. package/dist/server/auto.js +0 -63
  471. package/dist/server/auto.js.map +0 -1
  472. package/dist/server/clientTurn.d.ts +0 -6
  473. package/dist/server/clientTurn.d.ts.map +0 -1
  474. package/dist/server/clientTurn.js +0 -22
  475. package/dist/server/clientTurn.js.map +0 -1
  476. package/dist/server/clientTurn.sql +0 -10
  477. package/dist/server/noProposals.d.ts +0 -6
  478. package/dist/server/noProposals.d.ts.map +0 -1
  479. package/dist/server/noProposals.js +0 -37
  480. package/dist/server/noProposals.js.map +0 -1
  481. package/dist/server/version-info.d.ts +0 -14
  482. package/dist/server/version-info.d.ts.map +0 -1
  483. package/dist/server/version-info.js +0 -69
  484. package/dist/server/version-info.js.map +0 -1
  485. package/migrations/0000-00-00.01_schema.sql +0 -536
  486. package/migrations/0004_loop-provider.sql +0 -3
  487. package/migrations/0005_subscription-published-channel.sql +0 -3
  488. package/migrations/0006_loop-max-turns.sql +0 -3
@@ -2,10 +2,10 @@
2
2
  // is @plurnk/plurnk-schemes (keystone PR-1). Local OO facade over the
3
3
  // plugin's function; call sites stay `PathMimetype.resolveEntryMimetype(...)`.
4
4
  //
5
- // A pathname's extension drives the effective mimetype (§ext-mimetype-extension-mimetype; via the sibling
5
+ // A pathname's extension drives the effective mimetype ({§ext-mimetype-extension-mimetype}; via the sibling
6
6
  // Mimetypes detect service); the scheme manifest's channel default is the
7
- // fallback when no extension is present. `known:///users.json` →
8
- // application/json; `known:///notes` → scheme default.
7
+ // fallback when no extension is present. `worker:///users.json` →
8
+ // application/json; `worker:///notes` → scheme default.
9
9
  import { PathMimetype as _PathMimetype } from "@plurnk/plurnk-schemes";
10
10
  export default class PathMimetype {
11
11
  static resolveEntryMimetype(pathname, schemeDefault, mimetypes) {
@@ -1 +1 @@
1
- {"version":3,"file":"path-mimetype.js","sourceRoot":"","sources":["../../src/content/path-mimetype.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,+EAA+E;AAC/E,EAAE;AACF,0GAA0G;AAC1G,0EAA0E;AAC1E,iEAAiE;AACjE,uDAAuD;AACvD,OAAO,EAAE,YAAY,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvE,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,MAAM,CAAC,oBAAoB,CAAC,QAAgB,EAAE,aAAqB,EAAE,SAAgC;QACjG,OAAO,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IACrE,CAAC;CACJ"}
1
+ {"version":3,"file":"path-mimetype.js","sourceRoot":"","sources":["../../src/content/path-mimetype.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,+EAA+E;AAC/E,EAAE;AACF,4GAA4G;AAC5G,0EAA0E;AAC1E,kEAAkE;AAClE,wDAAwD;AACxD,OAAO,EAAE,YAAY,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvE,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,MAAM,CAAC,oBAAoB,CAAC,QAAgB,EAAE,aAAqB,EAAE,SAAgC;QACjG,OAAO,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IACrE,CAAC;CACJ"}
@@ -0,0 +1,14 @@
1
+ import type { ReadStatement } from "@plurnk/plurnk-contracts";
2
+ import type { Mimetypes } from "@plurnk/plurnk-mimetypes";
3
+ import type { EntryReadResult, StoredEntryData } from "@plurnk/plurnk-schemes";
4
+ import type { SchemeManifest } from "../core/scheme-types.ts";
5
+ export default class ReadProjector {
6
+ static project(opts: {
7
+ readonly statement: ReadStatement;
8
+ readonly manifest: SchemeManifest;
9
+ readonly target: string;
10
+ readonly representation: StoredEntryData;
11
+ readonly mimetypes: Mimetypes | undefined;
12
+ }): Promise<EntryReadResult>;
13
+ }
14
+ //# sourceMappingURL=read-projector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-projector.d.ts","sourceRoot":"","sources":["../../src/content/read-projector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EACR,eAAe,EACf,eAAe,EAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAS9D,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,OAAa,OAAO,CAAC,IAAI,EAAE;QACvB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;QAClC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;QAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC;QACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;KAC7C,GAAG,OAAO,CAAC,eAAe,CAAC,CAwH3B;CACJ"}
@@ -0,0 +1,86 @@
1
+ import Results from "../core/results.js";
2
+ import MimetypeBinary from "./mimetype-binary.js";
3
+ import ReadResolve from "./read-resolve.js";
4
+ // {§universal-read-composition} Core's one exact-resource projection over a complete canonical
5
+ // representation. Storage adapters supply channels and tags; this layer owns
6
+ // channel selection, tag filtering, binary admission, text coordinates, and
7
+ // composition of the selected producer's durable result.
8
+ export default class ReadProjector {
9
+ static async project(opts) {
10
+ const { statement, manifest, target, representation, mimetypes } = opts;
11
+ const fragment = statement.target?.kind === "url"
12
+ ? statement.target.fragment
13
+ : null;
14
+ const selected = fragment ?? manifest.defaultChannel;
15
+ const channel = selected === "" ? null : selected;
16
+ const availableChannels = [...new Set([
17
+ manifest.defaultChannel,
18
+ ...Object.keys(manifest.channels),
19
+ ])].filter((candidate) => candidate.length > 0);
20
+ const failure = (code, status, detail, fields = {}, extensions = {}) => Results.failure(`scheme:${manifest.name}`, code, status, detail, { content: null, mimetype: null, channel, ...fields }, extensions);
21
+ if (selected !== manifest.defaultChannel && !(selected in manifest.channels)) {
22
+ return failure("channel-not-found", 400, `Channel #${selected} does not exist at ${target}.`, { channel: null }, {
23
+ requestedChannel: selected,
24
+ availableChannels,
25
+ ...(availableChannels.length === 0
26
+ ? {}
27
+ : {
28
+ recovery: `Use one of the available channels: ${availableChannels
29
+ .map((candidate) => `#${candidate}`)
30
+ .join(", ")}.`,
31
+ }),
32
+ retryable: false,
33
+ });
34
+ }
35
+ const selectedRepresentation = representation.channels[selected];
36
+ if (selectedRepresentation === undefined) {
37
+ return failure("entry-not-found", 404, `No entry exists at ${target}.`);
38
+ }
39
+ if (await MimetypeBinary.isBinaryMimetype(selectedRepresentation.mimetype, mimetypes)) {
40
+ return failure("binary-read-unsupported", 415, channel === null
41
+ ? `The representation at ${target} is binary and cannot be rendered.`
42
+ : `The #${channel} channel is binary and cannot be rendered.`, { mimetype: selectedRepresentation.mimetype });
43
+ }
44
+ if (Array.isArray(statement.signal) && statement.signal.length > 0) {
45
+ const tags = new Set(representation.tags);
46
+ const missing = statement.signal.find((tag) => !tags.has(tag));
47
+ if (missing !== undefined) {
48
+ return failure("tag-not-found", 404, `The resource does not carry the required '${missing}' tag.`);
49
+ }
50
+ }
51
+ const resolved = await ReadResolve.resolve({
52
+ content: selectedRepresentation.content,
53
+ mimetype: selectedRepresentation.mimetype,
54
+ lineMarker: statement.lineMarker,
55
+ });
56
+ if (resolved.status >= 400) {
57
+ if (resolved.problem !== undefined) {
58
+ return Results.assertReadResult({
59
+ ...resolved,
60
+ content: null,
61
+ channel,
62
+ });
63
+ }
64
+ if (resolved.reason === undefined) {
65
+ throw new Error(`ReadProjector: text projection returned status ${resolved.status} without Problem Details or a diagnostic`);
66
+ }
67
+ return failure(resolved.status === 416
68
+ ? "range-not-satisfiable"
69
+ : "read-resolution-failed", resolved.status, resolved.reason, { mimetype: resolved.mimetype }, {
70
+ ...(resolved.range === undefined
71
+ ? {}
72
+ : { range: resolved.range, stage: "projection" }),
73
+ });
74
+ }
75
+ const projected = { ...resolved, channel };
76
+ const producerResult = selectedRepresentation.producerResult;
77
+ return producerResult === undefined
78
+ ? projected
79
+ : Results.assertReadResult({
80
+ ...producerResult,
81
+ ...projected,
82
+ status: producerResult.status,
83
+ });
84
+ }
85
+ }
86
+ //# sourceMappingURL=read-projector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-projector.js","sourceRoot":"","sources":["../../src/content/read-projector.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,19 @@
1
- import type { LineMarker, MatcherBody } from "@plurnk/plurnk-grammar";
2
- import type { Mimetypes } from "@plurnk/plurnk-mimetypes";
3
- export interface ReadSliceResult {
4
- status: number;
1
+ import { type LineMarker, type RangeExtent, type TextRegion } from "@plurnk/plurnk-contracts";
2
+ import type { SchemeResultBase, ScopeNormalization } from "@plurnk/plurnk-schemes";
3
+ export interface ReadSliceResult extends SchemeResultBase {
5
4
  content: string | null;
6
5
  mimetype: string;
7
6
  startLine?: number | null;
8
- matches?: number;
7
+ region?: TextRegion;
9
8
  reason?: string;
9
+ range?: RangeExtent;
10
+ scopeNormalizations?: ReadonlyArray<ScopeNormalization>;
10
11
  }
11
12
  export default class ReadResolve {
12
13
  static resolve(opts: {
13
14
  content: string;
14
15
  mimetype: string;
15
16
  lineMarker: LineMarker | null;
16
- body: MatcherBody | null;
17
- mimetypes: Mimetypes | undefined;
18
17
  }): Promise<ReadSliceResult>;
19
18
  }
20
19
  //# sourceMappingURL=read-resolve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-resolve.d.ts","sourceRoot":"","sources":["../../src/content/read-resolve.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAK1D,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,CAAC,OAAO,OAAO,WAAW;IAC5B,OAAa,OAAO,CAAC,IAAI,EAAE;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;QAC9B,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;QACzB,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;KACpC,GAAG,OAAO,CAAC,eAAe,CAAC,CAiD3B;CACJ"}
1
+ {"version":3,"file":"read-resolve.d.ts","sourceRoot":"","sources":["../../src/content/read-resolve.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACvH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAInF,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,mBAAmB,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;CAC3D;AAED,MAAM,CAAC,OAAO,OAAO,WAAW;IAC5B,OAAa,OAAO,CAAC,IAAI,EAAE;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;KACjC,GAAG,OAAO,CAAC,eAAe,CAAC,CAoC3B;CACJ"}
@@ -1,68 +1,45 @@
1
- // Shared READ slice→match resolution for entry-bearing schemes (Known/Skill/
2
- // Unknown/Exec/Plurnk via `_entry-ops`), plus `Log` and `File`. `<L>` scopes,
3
- // the body matches within the scope: slice-then-match (plurnk.md slot order
4
- // `<L>?:body?`). `<L>` dispatches on source mimetype — JSON → item index
5
- // (sliceJsonItems), line-navigable → line index (sliceLines). Callers bind their
6
- // own (content, mimetype) and wrap the result (e.g. `_entry-ops` adds `channel`).
1
+ // Shared exact-target READ projection for entry-bearing schemes, File, and Log.
2
+ // READ owns text coordinates only; FIND owns every aggregate or matcher selection.
3
+ import { DEFAULT_RETRIEVAL_LIMIT } from "@plurnk/plurnk-contracts";
7
4
  import LineMarkerOps from "./line-marker.js";
8
- import Matcher from "./matcher.js";
9
5
  import MimetypeBinary from "./mimetype-binary.js";
10
6
  export default class ReadResolve {
11
7
  static async resolve(opts) {
12
- const { content, mimetype, lineMarker, body, mimetypes } = opts;
13
- let workingContent = content;
14
- let workingStart = 1;
15
- let workingMimetypeForSlice = MimetypeBinary.TEXT_PRIMITIVE_MIMETYPE;
16
- if (lineMarker !== null) {
17
- if (MimetypeBinary.isJsonMimetype(mimetype)) {
18
- const sliced = LineMarkerOps.sliceJsonItems(content, lineMarker);
19
- // A range miss states the EXTENT (run24: 24 blind 416s — the model re-guessed
20
- // ranges against a file whose size it was never told). A fact, not advice.
21
- if (sliced.status === 416)
22
- return { status: 416, content: "[ range not satisfiable — the JSON has fewer items than requested ]", mimetype: "text/markdown" };
23
- if (sliced.status !== 200)
24
- return { status: sliced.status, content: null, mimetype };
25
- workingContent = sliced.body ?? "[]";
26
- workingStart = null;
27
- workingMimetypeForSlice = "application/json";
28
- }
29
- else {
30
- const sliced = LineMarkerOps.sliceLines(content, lineMarker);
31
- if (sliced.status === 416) {
32
- const totalLines = content.length === 0 ? 0 : content.split("\n").length;
33
- return { status: 416, content: `[ range not satisfiable — entry has ${totalLines} lines ]`, mimetype: "text/markdown" };
34
- }
35
- if (sliced.status !== 200)
36
- return { status: sliced.status, content: null, mimetype };
37
- workingContent = sliced.text ?? "";
38
- workingStart = sliced.startLine ?? null;
39
- }
8
+ const { content, mimetype, lineMarker } = opts;
9
+ const marker = lineMarker ?? { marks: [1, DEFAULT_RETRIEVAL_LIMIT] };
10
+ const sliced = LineMarkerOps.sliceLines(content, marker);
11
+ if (sliced.status === 416) {
12
+ return {
13
+ status: 416,
14
+ problem: sliced.problem,
15
+ content: null,
16
+ mimetype,
17
+ reason: sliced.problem?.detail,
18
+ range: sliced.range,
19
+ };
40
20
  }
41
- if (body !== null) {
42
- if (mimetypes === undefined)
43
- return { status: 500, content: null, mimetype };
44
- const matched = await Matcher.matchAgainstContent(body, workingContent, mimetype, mimetypes, workingStart ?? 1);
45
- if (matched.status === 204)
46
- return { status: 204, content: "", mimetype: "text/markdown", startLine: null, matches: 0 };
47
- if (matched.status === 203) {
48
- // Dialect-parse-failure fallback: raw source as text/markdown; reason surfaces why.
49
- return { status: 203, content: matched.body ?? "", mimetype: matched.mimetype ?? "text/markdown", startLine: 1, reason: matched.reason };
50
- }
51
- if (matched.status !== 200)
52
- return { status: matched.status, content: null, mimetype };
53
- return { status: 200, content: matched.body ?? "", mimetype: "text/markdown", startLine: null, matches: matched.matches };
21
+ if (sliced.status !== 200) {
22
+ throw new Error(`ReadResolve: text slicing returned unexpected status ${sliced.status}`);
54
23
  }
55
- if (lineMarker !== null) {
56
- // `<L>` slice mimetype follows the source family: line-navigable → text/markdown,
57
- // JSON → application/json (structure preserved for compose, §slice-semantics-compose-pattern). Empty / `[]` → 204.
58
- const isEmptyJsonArray = workingMimetypeForSlice === "application/json" && workingContent === "[]";
59
- if (workingContent === "" || isEmptyJsonArray)
60
- return { status: 204, content: "", mimetype: workingMimetypeForSlice, startLine: null };
61
- return { status: 200, content: workingContent, mimetype: workingMimetypeForSlice, startLine: workingStart };
62
- }
63
- if (content === "")
64
- return { status: 204, content: "", mimetype, startLine: null };
65
- return { status: 200, content, mimetype, startLine: 1 };
24
+ const selectedMimetype = lineMarker === null
25
+ ? mimetype
26
+ : MimetypeBinary.TEXT_PRIMITIVE_MIMETYPE;
27
+ const selectedContent = lineMarker === null
28
+ && sliced.range !== undefined
29
+ && LineMarkerOps.coversAvailable(sliced.range)
30
+ ? content
31
+ : sliced.text ?? "";
32
+ return {
33
+ status: selectedContent === "" ? 204 : 200,
34
+ content: selectedContent,
35
+ mimetype: selectedMimetype,
36
+ startLine: selectedContent === "" ? null : sliced.startLine ?? null,
37
+ ...(sliced.region === undefined ? {} : { region: sliced.region }),
38
+ ...(sliced.range === undefined ? {} : { range: sliced.range }),
39
+ ...(sliced.scopeNormalizations === undefined
40
+ ? {}
41
+ : { scopeNormalizations: sliced.scopeNormalizations }),
42
+ };
66
43
  }
67
44
  }
68
45
  //# sourceMappingURL=read-resolve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-resolve.js","sourceRoot":"","sources":["../../src/content/read-resolve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read-resolve.js","sourceRoot":"","sources":["../../src/content/read-resolve.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,mFAAmF;AAEnF,OAAO,EAAE,uBAAuB,EAAsD,MAAM,0BAA0B,CAAC;AAEvH,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAYlD,MAAM,CAAC,OAAO,OAAO,WAAW;IAC5B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAIpB;QACG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAC/C,MAAM,MAAM,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,uBAAuB,CAAC,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACxB,OAAO;gBACH,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,IAAI;gBACb,QAAQ;gBACR,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM;gBAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;aACtB,CAAC;QACN,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,wDAAwD,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,gBAAgB,GAAG,UAAU,KAAK,IAAI;YACxC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,cAAc,CAAC,uBAAuB,CAAC;QAC7C,MAAM,eAAe,GAAG,UAAU,KAAK,IAAI;eACpC,MAAM,CAAC,KAAK,KAAK,SAAS;eAC1B,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC;YAC9C,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACxB,OAAO;YACH,MAAM,EAAE,eAAe,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;YAC1C,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,gBAAgB;YAC1B,SAAS,EAAE,eAAe,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI;YACnE,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YACjE,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAC9D,GAAG,CAAC,MAAM,CAAC,mBAAmB,KAAK,SAAS;gBACxC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAAE,CAAC;SAC7D,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,6 @@
1
+ import type { Db } from "./Db.ts";
2
+ export default class BranchReceipt {
3
+ #private;
4
+ static render(db: Db, workerId: number): Promise<string | null>;
5
+ }
6
+ //# sourceMappingURL=BranchReceipt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BranchReceipt.d.ts","sourceRoot":"","sources":["../../src/core/BranchReceipt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAYlC,MAAM,CAAC,OAAO,OAAO,aAAa;;IAU9B,OAAa,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWpE;CACJ"}
@@ -0,0 +1,24 @@
1
+ export default class BranchReceipt {
2
+ static #revisionChars() {
3
+ const raw = process.env.PLURNK_SERVICE_BRANCH_RECEIPT_REVISION_CHARS;
4
+ const value = Number(raw);
5
+ if (!Number.isSafeInteger(value) || value < 1 || value > 64) {
6
+ throw new Error(`PLURNK_SERVICE_BRANCH_RECEIPT_REVISION_CHARS must be a safe integer from 1 through 64, got ${JSON.stringify(raw)}`);
7
+ }
8
+ return value;
9
+ }
10
+ static async render(db, workerId) {
11
+ const rows = await db.branch_batch_receipt_for_worker.all({
12
+ worker_id: workerId,
13
+ });
14
+ if (rows.length === 0)
15
+ return null;
16
+ const first = rows[0];
17
+ const revisionChars = BranchReceipt.#revisionChars();
18
+ const tip = first.result_commit === null
19
+ ? ""
20
+ : ` at \`${first.result_commit.slice(0, revisionChars)}\` (${first.changed === 1 ? "changed" : "unchanged"})`;
21
+ return `Branch receipt: \`${first.branch}\` ${first.item_state}${tip} (batch ${first.batch_id} ${first.batch_state}).`;
22
+ }
23
+ }
24
+ //# sourceMappingURL=BranchReceipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BranchReceipt.js","sourceRoot":"","sources":["../../src/core/BranchReceipt.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,MAAM,CAAC,cAAc;QACjB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC;QACrE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,8FAA8F,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzI,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAM,EAAE,QAAgB;QACxC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,+BAA+B,CAAC,GAAG,CAAa;YAClE,SAAS,EAAE,QAAQ;SACtB,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,aAAa,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,KAAK,IAAI;YACpC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,SAAS,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC;QAClH,OAAO,qBAAqB,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,UAAU,GAAG,GAAG,WAAW,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC;IAC3H,CAAC;CACJ"}
@@ -0,0 +1,20 @@
1
+ import { type OperationResult } from "@plurnk/plurnk-contracts";
2
+ export interface BudgetOverflowMeasurement {
3
+ readonly usage: number;
4
+ readonly ceiling: number;
5
+ readonly deficit: number;
6
+ }
7
+ export interface BudgetOverflowPhysicalFailure {
8
+ readonly reason: string;
9
+ readonly detail: string;
10
+ readonly capacity: number | null;
11
+ readonly tokens?: number;
12
+ readonly tokenKind?: string;
13
+ readonly tokenSource?: string;
14
+ }
15
+ export default class BudgetOverflow {
16
+ static measure(usage: number, ceiling: number): BudgetOverflowMeasurement;
17
+ static result(usage: number, ceiling: number, recovery: boolean, physical?: BudgetOverflowPhysicalFailure): OperationResult;
18
+ static foldedResult(usage: number, ceiling: number): OperationResult;
19
+ }
20
+ //# sourceMappingURL=BudgetOverflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BudgetOverflow.d.ts","sourceRoot":"","sources":["../../src/core/BudgetOverflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,eAAe,EACvB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,yBAAyB;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,6BAA6B;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CACjC;AAID,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,yBAAyB,CAMxE;IAED,MAAM,CAAC,MAAM,CACT,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,EACjB,QAAQ,CAAC,EAAE,6BAA6B,GACzC,eAAe,CA8BjB;IAED,MAAM,CAAC,YAAY,CACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAChB,eAAe,CAmBjB;CACJ"}
@@ -0,0 +1,49 @@
1
+ import { Problems, Validator, } from "@plurnk/plurnk-contracts";
2
+ const formatTokens = (tokens) => tokens.toLocaleString("en-US");
3
+ export default class BudgetOverflow {
4
+ static measure(usage, ceiling) {
5
+ return {
6
+ usage,
7
+ ceiling,
8
+ deficit: Math.max(0, usage - ceiling),
9
+ };
10
+ }
11
+ static result(usage, ceiling, recovery, physical) {
12
+ const measurement = BudgetOverflow.measure(usage, ceiling);
13
+ const physicalDetail = physical === undefined
14
+ ? ""
15
+ : ` Physical recovery was not admitted: ${physical.detail}.`;
16
+ return Validator.assertOperationResult({
17
+ status: 413,
18
+ problem: Problems.create("engine:grinder", "budget-overflow", 413, `At overflow detection, Token Usage ${formatTokens(measurement.usage)} exceeds Token Ceiling ${formatTokens(measurement.ceiling)} by ${formatTokens(measurement.deficit)}. No working room remains.${physicalDetail}`, {
19
+ ...measurement,
20
+ stage: "overflow-detection",
21
+ retryable: false,
22
+ ...(physical === undefined ? {} : {
23
+ physicalAdmission: physical.reason,
24
+ physicalCapacity: physical.capacity,
25
+ ...(physical.tokens === undefined ? {} : { physicalTokens: physical.tokens }),
26
+ ...(physical.tokenKind === undefined ? {} : { physicalTokenKind: physical.tokenKind }),
27
+ ...(physical.tokenSource === undefined ? {} : { physicalTokenSource: physical.tokenSource }),
28
+ }),
29
+ ...(recovery ? {
30
+ recovery: "Restore working room before the next turn: FOLD or KILL irrelevant log items, or use smaller retrieval ranges.",
31
+ } : {}),
32
+ }, { title: "Prompt budget exceeded" }),
33
+ });
34
+ }
35
+ static foldedResult(usage, ceiling) {
36
+ const measurement = BudgetOverflow.measure(usage, ceiling);
37
+ return Validator.assertOperationResult({
38
+ status: 413,
39
+ problem: Problems.create("engine:grinder", "budget-overflow", 413, `At overflow detection, Token Usage ${formatTokens(measurement.usage)} exceeded Token Ceiling ${formatTokens(measurement.ceiling)} by ${formatTokens(measurement.deficit)}. The newest open log items were FOLDed, and the rebuilt packet now fits.`, {
40
+ ...measurement,
41
+ stage: "overflow-detection",
42
+ resolution: "newest-log-items-folded",
43
+ recovery: "Keep irrelevant log items FOLDed or KILL them, and use smaller retrieval ranges.",
44
+ retryable: false,
45
+ }, { title: "Prompt budget exceeded" }),
46
+ });
47
+ }
48
+ }
49
+ //# sourceMappingURL=BudgetOverflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BudgetOverflow.js","sourceRoot":"","sources":["../../src/core/BudgetOverflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ type MeasurePacket = (content: string) => number;
2
+ export default class BudgetReadout {
3
+ #private;
4
+ static draft(ceiling: number | null): string;
5
+ static resolve(template: string, ceiling: number, measurePacket: MeasurePacket): string;
6
+ }
7
+ export {};
8
+ //# sourceMappingURL=BudgetReadout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BudgetReadout.d.ts","sourceRoot":"","sources":["../../src/core/BudgetReadout.ts"],"names":[],"mappings":"AAWA,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,aAAa;;IAC9B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAI3C;IAID,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,MAAM,CAwCtF;CAsCJ"}
@@ -0,0 +1,79 @@
1
+ const TOKENS_FREE_PLACEHOLDER = "{{tokensFree}}";
2
+ const TOKEN_USAGE_PLACEHOLDER = "{{tokenUsage}}";
3
+ const TOKEN_PERCENT_PLACEHOLDER = "{{tokenPercent}}";
4
+ const MAX_WIDTH_PASSES = 64;
5
+ export default class BudgetReadout {
6
+ static draft(ceiling) {
7
+ if (ceiling === null)
8
+ return "";
9
+ BudgetReadout.#assertCeiling(ceiling);
10
+ return `Token Ceiling ${ceiling} · Token Usage ${TOKEN_USAGE_PLACEHOLDER} (${TOKEN_PERCENT_PLACEHOLDER}%) · Tokens Free ${TOKENS_FREE_PLACEHOLDER}`;
11
+ }
12
+ // {§tokenomics-render-weight-budget} — widths only expand, so final numeric
13
+ // substitution cannot change the measured packet length or oscillate.
14
+ static resolve(template, ceiling, measurePacket) {
15
+ BudgetReadout.#assertCeiling(ceiling);
16
+ BudgetReadout.#assertTemplate(template);
17
+ let widths = { usage: 1, percent: 1, free: 1 };
18
+ for (let pass = 0; pass < MAX_WIDTH_PASSES; pass += 1) {
19
+ const probe = BudgetReadout.#render(template, widths, {
20
+ usage: "0".repeat(widths.usage),
21
+ percent: "0".repeat(widths.percent),
22
+ free: "0".repeat(widths.free),
23
+ });
24
+ const usage = BudgetReadout.#assertWeight(measurePacket(probe));
25
+ const values = {
26
+ usage: String(usage),
27
+ percent: BudgetReadout.#percent(usage, ceiling),
28
+ free: String(Math.max(0, ceiling - usage)),
29
+ };
30
+ const expanded = {
31
+ usage: Math.max(widths.usage, values.usage.length),
32
+ percent: Math.max(widths.percent, values.percent.length),
33
+ free: Math.max(widths.free, values.free.length),
34
+ };
35
+ if (expanded.usage !== widths.usage
36
+ || expanded.percent !== widths.percent
37
+ || expanded.free !== widths.free) {
38
+ widths = expanded;
39
+ continue;
40
+ }
41
+ const content = BudgetReadout.#render(template, widths, values);
42
+ const finalWeight = BudgetReadout.#assertWeight(measurePacket(content));
43
+ if (finalWeight !== usage) {
44
+ throw new Error(`Budget readout measurement changed after fixed-width substitution: ${usage} -> ${finalWeight}`);
45
+ }
46
+ return content;
47
+ }
48
+ throw new Error(`Budget readout field widths did not converge after ${MAX_WIDTH_PASSES} passes`);
49
+ }
50
+ static #render(template, widths, values) {
51
+ return template
52
+ .replace(TOKEN_USAGE_PLACEHOLDER, values.usage.padStart(widths.usage))
53
+ .replace(TOKEN_PERCENT_PLACEHOLDER, values.percent.padStart(widths.percent))
54
+ .replace(TOKENS_FREE_PLACEHOLDER, values.free.padStart(widths.free));
55
+ }
56
+ static #percent(usage, ceiling) {
57
+ const percent = (usage / ceiling) * 100;
58
+ return usage > 0 && percent < 1 ? "<1" : String(Math.round(percent));
59
+ }
60
+ static #assertCeiling(ceiling) {
61
+ if (!Number.isSafeInteger(ceiling) || ceiling <= 0) {
62
+ throw new TypeError("Budget readout ceiling must be a positive safe integer");
63
+ }
64
+ }
65
+ static #assertWeight(weight) {
66
+ if (!Number.isSafeInteger(weight) || weight < 0) {
67
+ throw new TypeError("Budget readout packet weight must be a non-negative safe integer");
68
+ }
69
+ return weight;
70
+ }
71
+ static #assertTemplate(template) {
72
+ for (const placeholder of [TOKEN_USAGE_PLACEHOLDER, TOKEN_PERCENT_PLACEHOLDER, TOKENS_FREE_PLACEHOLDER]) {
73
+ if (template.split(placeholder).length !== 2) {
74
+ throw new TypeError(`Budget readout template must contain ${placeholder} exactly once`);
75
+ }
76
+ }
77
+ }
78
+ }
79
+ //# sourceMappingURL=BudgetReadout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BudgetReadout.js","sourceRoot":"","sources":["../../src/core/BudgetReadout.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import type { Db } from "./Db.ts";
2
- import type { LoopFlags } from "./types.ts";
3
- export type ChannelState = "static" | "active" | "closed" | "errored";
2
+ import type { LoopFlags, WriterTier } from "./types.ts";
3
+ import { type ChannelState, type SchemeResult } from "@plurnk/plurnk-schemes";
4
+ import type { Notice } from "@plurnk/plurnk-contracts";
5
+ export type { ChannelState } from "@plurnk/plurnk-schemes";
4
6
  export interface StreamCoordinate {
5
7
  loop_seq: number;
6
8
  turn_seq: number;
@@ -8,6 +10,7 @@ export interface StreamCoordinate {
8
10
  }
9
11
  export interface StreamEventPayload {
10
12
  entryId: number;
13
+ workerId: number;
11
14
  target: string;
12
15
  channel: string;
13
16
  state: ChannelState;
@@ -21,10 +24,11 @@ export type StreamEventNotify = (workspaceId: number, event: StreamEventPayload)
21
24
  export interface WakeWorkerPayload {
22
25
  workspaceId: number;
23
26
  workerId: number;
27
+ entryOwnerId: number;
24
28
  entryId: number;
25
29
  target: string;
26
30
  subscriptionId: number;
27
- closeStatus: number;
31
+ result: SchemeResult;
28
32
  scheme: string;
29
33
  summary: string;
30
34
  loop_seq?: number;
@@ -36,18 +40,35 @@ export type InjectWorkerNotify = (args: {
36
40
  workspaceId: number;
37
41
  workerId: number;
38
42
  prompt: string;
43
+ parentLoopId?: number;
39
44
  flags?: LoopFlags;
40
45
  }) => Promise<{
41
46
  action: "injected_next_turn" | "enqueued_new_loop";
42
47
  loopId: number;
43
48
  }>;
49
+ export type BranchWorkerNotify = (args: {
50
+ workspaceId: number;
51
+ parentWorkerId: number;
52
+ parentLoopId: number;
53
+ parentTurnId: number;
54
+ op: "WORK" | "FORK";
55
+ name: string;
56
+ branch: string;
57
+ prompt: string;
58
+ flags: LoopFlags;
59
+ origin: WriterTier;
60
+ }) => Promise<{
61
+ workerId: number;
62
+ loopId: number;
63
+ }>;
64
+ export type BranchCompletionGate = (workerId: number) => Promise<SchemeResult | null>;
44
65
  export type CancelWorkerNotify = (workerId: number, reason: string) => Promise<void>;
45
66
  export type CancelDescendantsNotify = (workerId: number, reason: string) => Promise<void>;
46
- export interface TelemetryEventPayload {
67
+ export interface NoticePayload {
47
68
  loopId: number;
48
- event: object;
69
+ notice: Notice;
49
70
  }
50
- export type TelemetryEventNotify = (workspaceId: number, payload: TelemetryEventPayload) => void;
71
+ export type NoticeNotify = (workspaceId: number, payload: NoticePayload) => void;
51
72
  export default class ChannelWrite {
52
73
  #private;
53
74
  static appendToChannel(db: Db, { entryId, channel, chunk, notify, coordinate, mimetype }: {
@@ -74,13 +95,14 @@ export default class ChannelWrite {
74
95
  turnScoped?: boolean;
75
96
  publishedChannel?: string | null;
76
97
  }): Promise<number>;
77
- static closeSubscription(db: Db, { subscriptionId, status }: {
98
+ static closeSubscription(db: Db, { subscriptionId, result }: {
78
99
  subscriptionId: number;
79
- status: number;
100
+ result: SchemeResult;
80
101
  }): Promise<void>;
81
- static execTerminalStatus(db: Db, { workspaceId, workerId, pathname }: {
102
+ static execTerminalStatus(db: Db, { workspaceId, workerId, scheme, pathname }: {
82
103
  workspaceId: number;
83
104
  workerId: number;
105
+ scheme: string;
84
106
  pathname: string;
85
107
  }): Promise<number | null>;
86
108
  static findActiveSubscription(db: Db, { workerId, entryId }: {