@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
@@ -0,0 +1,147 @@
1
+ import { Validator } from "@plurnk/plurnk-contracts";
2
+ const own = (value, key) => Object.hasOwn(value, key);
3
+ // {§packet-stored-shape} — the one type and validation boundary for the
4
+ // optional model-exchange record stored on a Turn.
5
+ export default class StoredPacket {
6
+ static admit(request, assistant, assistantRaw) {
7
+ const packet = StoredPacket.assert({
8
+ ...request,
9
+ assistant,
10
+ assistantRaw: assistantRaw ?? null,
11
+ }, "admitted packet");
12
+ if (!StoredPacket.isAdmitted(packet))
13
+ throw new Error("admitted packet lost its response fields");
14
+ return packet;
15
+ }
16
+ static stringify(packet) {
17
+ const value = StoredPacket.assert(packet, "packet write");
18
+ const encoded = JSON.stringify(value);
19
+ if (encoded === undefined)
20
+ throw new TypeError("packet write is not JSON-serializable");
21
+ StoredPacket.parse(encoded, "packet write");
22
+ return encoded;
23
+ }
24
+ static parse(raw, subject = "stored packet") {
25
+ if (raw === null)
26
+ return null;
27
+ let value;
28
+ try {
29
+ value = JSON.parse(raw);
30
+ }
31
+ catch (cause) {
32
+ throw new Error(`${subject} contains invalid JSON`, { cause });
33
+ }
34
+ try {
35
+ return StoredPacket.assert(value, subject);
36
+ }
37
+ catch (cause) {
38
+ throw new Error(`${subject} has an invalid packet shape`, { cause });
39
+ }
40
+ }
41
+ static isAdmitted(packet) {
42
+ return own(packet, "assistant");
43
+ }
44
+ static assert(value, subject = "packet") {
45
+ const packet = StoredPacket.#record(value, subject);
46
+ StoredPacket.#keys(packet, ["tokens", "sections", "attributions"], ["tokens", "sections", "attributions", "assistant", "assistantRaw"], subject);
47
+ StoredPacket.#nonnegativeInteger(packet.tokens, `${subject}.tokens`);
48
+ if (!Array.isArray(packet.sections))
49
+ throw new TypeError(`${subject}.sections must be an array`);
50
+ const sections = packet.sections.map((section, index) => StoredPacket.#section(section, `${subject}.sections[${index}]`));
51
+ const attributions = StoredPacket.#attributions(packet.attributions, `${subject}.attributions`);
52
+ const hasAssistant = own(packet, "assistant");
53
+ const hasAssistantRaw = own(packet, "assistantRaw");
54
+ if (hasAssistant !== hasAssistantRaw) {
55
+ throw new TypeError(`${subject}.assistant and ${subject}.assistantRaw must be present together`);
56
+ }
57
+ if (!hasAssistant)
58
+ return { tokens: packet.tokens, sections, attributions };
59
+ if (packet.assistantRaw === undefined)
60
+ throw new TypeError(`${subject}.assistantRaw must be a JSON value`);
61
+ return {
62
+ tokens: packet.tokens,
63
+ sections,
64
+ attributions,
65
+ assistant: StoredPacket.#assistant(packet.assistant, `${subject}.assistant`),
66
+ assistantRaw: packet.assistantRaw,
67
+ };
68
+ }
69
+ static #assistant(value, subject) {
70
+ const assistant = StoredPacket.#record(value, subject);
71
+ StoredPacket.#keys(assistant, ["content", "ops", "reasoning"], ["content", "ops", "reasoning"], subject);
72
+ if (typeof assistant.content !== "string")
73
+ throw new TypeError(`${subject}.content must be a string`);
74
+ if (!Array.isArray(assistant.ops))
75
+ throw new TypeError(`${subject}.ops must be an array`);
76
+ if (assistant.reasoning !== null && typeof assistant.reasoning !== "string") {
77
+ throw new TypeError(`${subject}.reasoning must be a string or null`);
78
+ }
79
+ const ops = assistant.ops.map((op, index) => {
80
+ const result = Validator.validatePlurnkStatement(op);
81
+ if (!result.valid) {
82
+ throw new TypeError(`${subject}.ops[${index}] is not a PlurnkStatement: ${JSON.stringify(result.errors)}`);
83
+ }
84
+ return op;
85
+ });
86
+ return { content: assistant.content, ops, reasoning: assistant.reasoning };
87
+ }
88
+ static #section(value, subject) {
89
+ const section = StoredPacket.#record(value, subject);
90
+ StoredPacket.#keys(section, ["name", "slot", "header", "content", "tokens"], ["name", "slot", "header", "content", "tokens"], subject);
91
+ if (typeof section.name !== "string" || section.name.length === 0) {
92
+ throw new TypeError(`${subject}.name must be a non-empty string`);
93
+ }
94
+ if (section.slot !== "system" && section.slot !== "user") {
95
+ throw new TypeError(`${subject}.slot must be system or user`);
96
+ }
97
+ if (section.header !== null && typeof section.header !== "string") {
98
+ throw new TypeError(`${subject}.header must be a string or null`);
99
+ }
100
+ if (typeof section.content !== "string")
101
+ throw new TypeError(`${subject}.content must be a string`);
102
+ StoredPacket.#nonnegativeInteger(section.tokens, `${subject}.tokens`);
103
+ return {
104
+ name: section.name,
105
+ slot: section.slot,
106
+ header: section.header,
107
+ content: section.content,
108
+ tokens: section.tokens,
109
+ };
110
+ }
111
+ static #attributions(value, subject) {
112
+ if (!Array.isArray(value))
113
+ throw new TypeError(`${subject} must be an array`);
114
+ const tags = value.map((tag, index) => {
115
+ if (typeof tag !== "string" || tag.length === 0) {
116
+ throw new TypeError(`${subject}[${index}] must be a non-empty string`);
117
+ }
118
+ return tag;
119
+ });
120
+ const canonical = [...new Set(tags)].toSorted();
121
+ if (canonical.length !== tags.length || canonical.some((tag, index) => tag !== tags[index])) {
122
+ throw new TypeError(`${subject} must be deduplicated and sorted`);
123
+ }
124
+ return tags;
125
+ }
126
+ static #record(value, subject) {
127
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
128
+ throw new TypeError(`${subject} must be an object`);
129
+ }
130
+ return value;
131
+ }
132
+ static #keys(value, required, allowed, subject) {
133
+ for (const key of required) {
134
+ if (!own(value, key))
135
+ throw new TypeError(`${subject}.${key} is required`);
136
+ }
137
+ const extras = Object.keys(value).filter((key) => !allowed.includes(key));
138
+ if (extras.length > 0)
139
+ throw new TypeError(`${subject} has unknown fields: ${extras.join(", ")}`);
140
+ }
141
+ static #nonnegativeInteger(value, subject) {
142
+ if (!Number.isSafeInteger(value) || value < 0) {
143
+ throw new TypeError(`${subject} must be a non-negative safe integer`);
144
+ }
145
+ }
146
+ }
147
+ //# sourceMappingURL=StoredPacket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StoredPacket.js","sourceRoot":"","sources":["../../src/core/StoredPacket.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { PlurnkStatement } from "@plurnk/plurnk-grammar";
1
+ import type { PlurnkStatement } from "@plurnk/plurnk-contracts";
2
2
  export default class StrikeRail {
3
3
  #private;
4
4
  static fingerprintTurn(ops: ReadonlyArray<PlurnkStatement>): string;
@@ -13,7 +13,6 @@ export default class StrikeRail {
13
13
  assess(loopId: number, turn: {
14
14
  fingerprint: string;
15
15
  statuses: ReadonlyArray<number>;
16
- noOps: boolean;
17
16
  budgetStruck: boolean;
18
17
  steerStruck: boolean;
19
18
  minCycles: number;
@@ -1 +1 @@
1
- {"version":3,"file":"StrikeRail.d.ts","sourceRoot":"","sources":["../../src/core/StrikeRail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,wBAAwB,CAAC;AA8E1E,MAAM,CAAC,OAAO,OAAO,UAAU;;IAG3B,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,MAAM,CAElE;IAMD,MAAM,CAAC,WAAW,CACd,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACvB;QAAE,QAAQ,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAe1E;IAYD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE7B;IAUD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC;QACf,YAAY,EAAE,OAAO,CAAC;QACtB,WAAW,EAAE,OAAO,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;KACtB,GAAG;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAA;KAAE,CA4BxD;IAED,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3B;CACJ"}
1
+ {"version":3,"file":"StrikeRail.d.ts","sourceRoot":"","sources":["../../src/core/StrikeRail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,0BAA0B,CAAC;AAqE5E,MAAM,CAAC,OAAO,OAAO,UAAU;;IAG3B,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,MAAM,CAElE;IAKD,MAAM,CAAC,WAAW,CACd,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACvB;QAAE,QAAQ,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAe1E;IAWD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE7B;IAID,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAChC,YAAY,EAAE,OAAO,CAAC;QACtB,WAAW,EAAE,OAAO,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;KACtB,GAAG;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAA;KAAE,CAkBxD;IAED,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3B;CACJ"}
@@ -1,17 +1,13 @@
1
- // Rail #38: action-entry statuses that DON'T accumulate strikes. Model adapted
2
- // to a finding (not_found, op_not_supported); no penalty. Rummy parallel:
3
- // SOFT_FAILURE_OUTCOMES = {"not_found", "unparsed"}.
4
- // Exploratory misses are not failures: probing a path that doesn't exist (404), a line
1
+ import { renderTarget } from "./plurnk-uri.js";
2
+ // Action-entry statuses that do not accumulate strikes. Exploratory misses are
3
+ // not failures: probing a path that doesn't exist (404), a line
5
4
  // range that doesn't exist (416), or a capability a scheme lacks (501) is how discovery
6
5
  // works — striking them prices caution into the motions we most want (range-reads ARE
7
6
  // the surgical behavior under budget pressure). One simple set, evenly applied.
8
- // 409 (premature-terminate refusal) is SOFT here: whether it strikes is decided by steerStruck
9
- // (Engine sets it true for a stream/child refusal — discarding live work IS serious — and false
10
- // for a retrievals-only refusal, which teaches without striking, §send-premature-terminate/#346).
11
- // Counting the raw 409 status ALSO would double-strike the stream/child case and WRONGLY strike
12
- // the retrieval-only case (a cloud atomic-turn model repeating read+conclude struck out 500 on
13
- // firefast despite the ruling). The cycle detector remains the backstop for a genuinely-spinning
14
- // model (508 loop-detected — the honest signal, not a 500 failure).
7
+ // 409 is SOFT here because Engine accounts for a refused final disposition
8
+ // through steerStruck ({§engine-rails}). Counting that raw status as well would
9
+ // double-count one ruling; other 409 outcomes remain soft. The cycle detector
10
+ // remains an independent backstop.
15
11
  const SOFT_FAILURE_STATUSES = new Set([404, 409, 416, 501]);
16
12
  // Per-op fingerprint: op verb + target URI, plus an op-specific discriminator
17
13
  // where the activity isn't fully captured by target alone:
@@ -58,31 +54,25 @@ const fingerprintOp = (stmt) => {
58
54
  return `${stmt.op}|(no-path)`;
59
55
  }
60
56
  const base = path.kind === "url"
61
- ? `${stmt.op}|${path.scheme}://${path.pathname}`
57
+ ? `${stmt.op}|${renderTarget(path)}`
62
58
  : `${stmt.op}|local:${path.raw}`;
63
59
  if (stmt.op === "FIND" || stmt.op === "READ" || stmt.op === "OPEN" || stmt.op === "FOLD") {
64
60
  return `${base}${matcherDiscriminator()}`;
65
61
  }
66
62
  return base;
67
63
  };
68
- // Rails #38 (strikes) + #39 (cycle detection): the per-loop failure-streak
69
- // accounting that decides abandonment. Strike accounting is engine-internal
70
- // bookkeeping. Per rummy precedent (plugins/error/error.js#verdict) and SPEC
71
- // §telemetry policy: model sees errors that happened (parse_error,
72
- // action_failure), never the engine's accounting about them (strike counts,
73
- // cycle detection, sudden-death threshold). Surfacing internal state to the
74
- // model creates a gamification surface — model optimizes for engine metrics
75
- // rather than task progress.
64
+ // {§engine-rails} — one per-loop rail owns the consecutive strike streak and
65
+ // cycle history. The model sees admitted operation and engine-rail failures,
66
+ // never this private accounting.
76
67
  export default class StrikeRail {
77
68
  // Per-turn fingerprint: sorted set of per-op fingerprints, joined. Order
78
69
  // within a turn doesn't matter — we want the SET of activities.
79
70
  static fingerprintTurn(ops) {
80
71
  return ops.map(fingerprintOp).toSorted().join(",");
81
72
  }
82
- // Rail #39 cycle detector. For each candidate period k in [1, maxCyclePeriod],
73
+ // {§engine-rails} cycle detector. For each candidate period k in [1, maxCyclePeriod],
83
74
  // check whether the last k*minCycles entries form minCycles repetitions of the
84
- // same length-k pattern. O(maxCyclePeriod × minCycles × max k) ≈ tiny. Rummy
85
- // parallel: src/plugins/error/error.js detectCycle.
75
+ // same length-k pattern. O(maxCyclePeriod × minCycles × max k) ≈ tiny.
86
76
  static detectCycle(history, minCycles, maxCyclePeriod) {
87
77
  for (let k = 1; k <= maxCyclePeriod; k++) {
88
78
  const needed = k * minCycles;
@@ -104,47 +94,28 @@ export default class StrikeRail {
104
94
  }
105
95
  return { detected: false };
106
96
  }
107
- // Rail #38 strike state per loop. `streak` = consecutive struck turns;
108
- // resets on a clean turn. `turnErrors` is bumped by per-turn rails (cycle
109
- // detection #39, grinder, steer) — read and reset at end of each turn.
110
- // `history` holds per-turn fingerprints for rail #39 cycle detection.
97
+ // {§engine-rails} strike state per loop. `streak` resets on a clean turn;
98
+ // `history` holds consecutive turn fingerprints for cycle detection.
111
99
  #state = new Map();
112
100
  // The loop's CURRENT strike streak — the same figure the 500-threshold compares. Rides
113
- // generate({strikes}) as first-party outbound metadata (Plurnk-Strikes, #313): the hosted
114
- // router's escalation signal. NEVER model-facing (§engine-rails — a surfaced count is a
101
+ // generate({strikes}) as first-party outbound metadata (Plurnk-Strikes,
102
+ // {§strikes-first-party-metadata}): the hosted
103
+ // router's escalation signal. NEVER model-facing ({§engine-rails} — a surfaced count is a
115
104
  // metric to game); the packet does not carry it.
116
105
  streak(loopId) {
117
106
  return this.#state.get(loopId)?.streak ?? 0;
118
107
  }
119
- // Per-turn strike accounting, run by runLoop after every turn. Three
120
- // sources strike a turn:
121
- // 1. recordedFailed — any action-entry at hard failure status
122
- // (>= 400 and not in SOFT_FAILURE_STATUSES).
123
- // 2. noOps — the turn emitted no ops at all (per #41).
124
- // 3. turnErrors — bumped by per-turn rails (#39 cycle, grinder, steer).
125
- // Struck → streak++; clean → streak = 0. Threshold → thresholdCrossed,
126
- // and runLoop owns the abandonment.
108
+ // Per-turn strike accounting, run by runLoop after every admitted turn.
109
+ // {§engine-rails} owns the complete source list and threshold semantics.
127
110
  assess(loopId, turn) {
128
- // Rail #39: cycle detection. Push this turn's fingerprint to
129
- // history, scan for repetition patterns. Detection bumps
130
- // turnErrors so the strike system handles abandonment
131
- // naturally — same internal-only role rummy gave it
132
- // (plugins/error/error.js#verdict). Intentionally NOT a
133
- // model-facing telemetry kind: model sees the strike pile-up
134
- // (which IS the actionable signal); cycle is the engine's
135
- // reason for treating the turn as a failure, not its own alert.
136
- const state = this.#state.get(loopId) ?? { streak: 0, turnErrors: 0, history: [] };
111
+ // {§engine-rails}: cycle detection. Push this turn's fingerprint to
112
+ // history and scan for repetition patterns. Detection is intentionally
113
+ // not a model-facing notice; it is private engine accounting.
114
+ const state = this.#state.get(loopId) ?? { streak: 0, history: [] };
137
115
  state.history.push(turn.fingerprint);
138
116
  const cycle = StrikeRail.detectCycle(state.history, turn.minCycles, turn.maxCyclePeriod);
139
- if (cycle.detected)
140
- state.turnErrors++;
141
- // SPEC §grinder: a non-soft grinder fire counts toward the strike streak.
142
- if (turn.budgetStruck)
143
- state.turnErrors++; // a grinder fire bumps the strike streak — §grinder-strike-coupling
144
- if (turn.steerStruck)
145
- state.turnErrors++; // idle / premature-terminate steer struck — §send the terminal contract
146
117
  const recordedFailed = turn.statuses.some((s) => s >= 400 && !SOFT_FAILURE_STATUSES.has(s));
147
- const struck = turn.noOps || recordedFailed || state.turnErrors > 0;
118
+ const struck = recordedFailed || turn.budgetStruck || turn.steerStruck || cycle.detected;
148
119
  let thresholdCrossed = false;
149
120
  if (struck) {
150
121
  state.streak++;
@@ -154,7 +125,6 @@ export default class StrikeRail {
154
125
  else {
155
126
  state.streak = 0;
156
127
  }
157
- state.turnErrors = 0;
158
128
  this.#state.set(loopId, state);
159
129
  return { cycleDetected: cycle.detected, thresholdCrossed };
160
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StrikeRail.js","sourceRoot":"","sources":["../../src/core/StrikeRail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StrikeRail.js","sourceRoot":"","sources":["../../src/core/StrikeRail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ParsedPath } from "@plurnk/plurnk-contracts";
2
+ import type { SchemeResultBase } from "@plurnk/plurnk-schemes";
3
+ type WorkerControlOperation = "WORK" | "FORK" | "SEND" | "READ" | "KILL";
4
+ type WorkerControlAddressResolution = {
5
+ readonly ok: true;
6
+ readonly authority: string;
7
+ } | {
8
+ readonly ok: false;
9
+ readonly result: SchemeResultBase;
10
+ };
11
+ export default class WorkerControlAddress {
12
+ #private;
13
+ static render(authority: string): string;
14
+ static resolve(target: ParsedPath | null, operation: WorkerControlOperation): WorkerControlAddressResolution;
15
+ }
16
+ export {};
17
+ //# sourceMappingURL=WorkerControlAddress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerControlAddress.d.ts","sourceRoot":"","sources":["../../src/core/WorkerControlAddress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,KAAK,sBAAsB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzE,KAAK,8BAA8B,GAC7B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAIhE,MAAM,CAAC,OAAO,OAAO,oBAAoB;;IACrC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvC;IAED,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,SAAS,EAAE,sBAAsB,GAAG,8BAA8B,CAkB3G;CAuBJ"}
@@ -0,0 +1,44 @@
1
+ import Results from "./results.js";
2
+ // {§worker-control-addressing} Generic URI parsing remains permissive, but a
3
+ // worker-as-actor address is exactly an authority with no other URI component.
4
+ export default class WorkerControlAddress {
5
+ static render(authority) {
6
+ return `worker://${authority}`;
7
+ }
8
+ static resolve(target, operation) {
9
+ const authority = WorkerControlAddress.#authorityOf(target);
10
+ if (authority !== null)
11
+ return { ok: true, authority };
12
+ return {
13
+ ok: false,
14
+ result: Results.failure("scheme:worker", "control-address-invalid", 400, `${operation} requires an authority-only worker:// control address.`, {}, {
15
+ operation,
16
+ recovery: "Provide one worker authority and remove every other URI component.",
17
+ retryable: false,
18
+ }),
19
+ };
20
+ }
21
+ static #authorityOf(target) {
22
+ if (target === null || target.kind !== "url" || target.scheme !== "worker")
23
+ return null;
24
+ const authority = target.hostname;
25
+ if (authority === null || authority.length === 0)
26
+ return null;
27
+ if (target.username !== null
28
+ || target.password !== null
29
+ || target.port !== null
30
+ || target.pathname !== ""
31
+ || target.query !== null
32
+ || target.fragment !== null
33
+ || target.headers !== undefined)
34
+ return null;
35
+ // Parsed fields cannot distinguish an absent empty fragment from `#`,
36
+ // and WHATWG may normalize dot paths. The preserved spelling closes
37
+ // both gaps without constraining the generic parser.
38
+ const delimiter = target.raw.indexOf("://");
39
+ if (delimiter === -1 || target.raw.slice(0, delimiter).toLowerCase() !== "worker")
40
+ return null;
41
+ return target.raw.slice(delimiter + 3) === authority ? authority : null;
42
+ }
43
+ }
44
+ //# sourceMappingURL=WorkerControlAddress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerControlAddress.js","sourceRoot":"","sources":["../../src/core/WorkerControlAddress.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,cAAc,CAAC;AAQnC,6EAA6E;AAC7E,+EAA+E;AAC/E,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACrC,MAAM,CAAC,MAAM,CAAC,SAAiB;QAC3B,OAAO,YAAY,SAAS,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,MAAyB,EAAE,SAAiC;QACvE,MAAM,SAAS,GAAG,oBAAoB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACvD,OAAO;YACH,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,OAAO,CAAC,OAAO,CACnB,eAAe,EACf,yBAAyB,EACzB,GAAG,EACH,GAAG,SAAS,wDAAwD,EACpE,EAAE,EACF;gBACI,SAAS;gBACT,QAAQ,EAAE,oEAAoE;gBAC9E,SAAS,EAAE,KAAK;aACnB,CACJ;SACJ,CAAC;IACN,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,MAAyB;QACzC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACxF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QAClC,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9D,IACI,MAAM,CAAC,QAAQ,KAAK,IAAI;eACrB,MAAM,CAAC,QAAQ,KAAK,IAAI;eACxB,MAAM,CAAC,IAAI,KAAK,IAAI;eACpB,MAAM,CAAC,QAAQ,KAAK,EAAE;eACtB,MAAM,CAAC,KAAK,KAAK,IAAI;eACrB,MAAM,CAAC,QAAQ,KAAK,IAAI;eACxB,MAAM,CAAC,OAAO,KAAK,SAAS;YACjC,OAAO,IAAI,CAAC;QAEd,sEAAsE;QACtE,oEAAoE;QACpE,qDAAqD;QACrD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC/F,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,CAAC;CACJ"}
@@ -0,0 +1,31 @@
1
+ import type { Db } from "./Db.ts";
2
+ export type WorkerNameRejection = "invalid" | "reserved";
3
+ export type WorkerOrigin = "model" | "client" | "plurnk";
4
+ export interface WorkerNameClaim {
5
+ id: number;
6
+ name: string;
7
+ }
8
+ interface AutoWorkerOptions {
9
+ workspaceId: number;
10
+ prefix: string;
11
+ qualifier?: string;
12
+ parentWorkerId?: number;
13
+ origin: WorkerOrigin;
14
+ }
15
+ export declare class WorkerNameError extends Error {
16
+ readonly workerName: string;
17
+ readonly rejection: WorkerNameRejection;
18
+ readonly code: "name-invalid" | "name-reserved";
19
+ readonly recovery: string;
20
+ constructor(workerName: string, rejection: WorkerNameRejection);
21
+ }
22
+ export default class WorkerName {
23
+ #private;
24
+ static rejection(workerName: string): WorkerNameRejection | null;
25
+ static assert(workerName: string): string;
26
+ static ordinal(prefix: string, ordinal: number, qualifier?: string): string;
27
+ static claimAuto(db: Db, options: AutoWorkerOptions): Promise<WorkerNameClaim>;
28
+ static ensureDefaultConversation(db: Db, options: Omit<AutoWorkerOptions, "parentWorkerId" | "qualifier" | "origin">): Promise<WorkerNameClaim>;
29
+ }
30
+ export {};
31
+ //# sourceMappingURL=WorkerName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerName.d.ts","sourceRoot":"","sources":["../../src/core/WorkerName.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,UAAU,CAAC;AACzD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,iBAAiB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;CACxB;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,YAAY,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAY7D;CACJ;AAID,MAAM,CAAC,OAAO,OAAO,UAAU;;IAG3B,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAG/D;IAED,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAIxC;IAID,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAU1E;IA4CD,OAAa,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAEnF;IAID,OAAa,yBAAyB,CAClC,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,WAAW,GAAG,QAAQ,CAAC,GAC5E,OAAO,CAAC,eAAe,CAAC,CAI1B;CACJ"}
@@ -0,0 +1,95 @@
1
+ import { RESERVED_AUTHORITIES, WORKER_NAME } from "@plurnk/plurnk-contracts";
2
+ export class WorkerNameError extends Error {
3
+ workerName;
4
+ rejection;
5
+ code;
6
+ recovery;
7
+ constructor(workerName, rejection) {
8
+ const reserved = rejection === "reserved";
9
+ super(reserved
10
+ ? `Worker name '${workerName}' is reserved.`
11
+ : `Worker name '${workerName}' must match the lowercase DNS-label contract.`);
12
+ this.name = "WorkerNameError";
13
+ this.workerName = workerName;
14
+ this.rejection = rejection;
15
+ this.code = reserved ? "name-reserved" : "name-invalid";
16
+ this.recovery = reserved
17
+ ? "Choose another worker name."
18
+ : "Choose a lowercase DNS-label worker name.";
19
+ }
20
+ }
21
+ // {§worker-name-minting} Model/client minting only; internal reserved actors and
22
+ // generic URI ingestion have their own contracts.
23
+ export default class WorkerName {
24
+ static #RESERVED = new Set([...RESERVED_AUTHORITIES, "~"]);
25
+ static rejection(workerName) {
26
+ if (WorkerName.#RESERVED.has(workerName.toLowerCase()))
27
+ return "reserved";
28
+ return WORKER_NAME.test(workerName) ? null : "invalid";
29
+ }
30
+ static assert(workerName) {
31
+ const rejection = WorkerName.rejection(workerName);
32
+ if (rejection !== null)
33
+ throw new WorkerNameError(workerName, rejection);
34
+ return workerName;
35
+ }
36
+ // Preserve the semantic suffix and shorten only the inherited prefix until
37
+ // the contracts predicate admits the generated ordinal. {§worker-auto-name}
38
+ static ordinal(prefix, ordinal, qualifier) {
39
+ if (!Number.isSafeInteger(ordinal) || ordinal < 1) {
40
+ throw new Error(`Worker ordinal must be a positive safe integer; received ${ordinal}.`);
41
+ }
42
+ const suffix = `${qualifier === undefined ? "" : `-${qualifier}`}-${ordinal}`;
43
+ for (let length = prefix.length; length > 0; length--) {
44
+ const candidate = `${prefix.slice(0, length)}${suffix}`;
45
+ if (WorkerName.rejection(candidate) === null)
46
+ return candidate;
47
+ }
48
+ throw new Error(`Worker ordinal suffix '${suffix}' leaves no mintable name prefix.`);
49
+ }
50
+ static async #defaultConversation(db, workspaceId) {
51
+ return await db.worker_name_get_default_conversation.get({
52
+ workspace_id: workspaceId,
53
+ });
54
+ }
55
+ static async #claimAuto(db, options, defaultConversation) {
56
+ const { workspaceId, prefix, qualifier, parentWorkerId, origin } = options;
57
+ const namePrefix = `${prefix}${qualifier === undefined ? "" : `-${qualifier}`}-%`;
58
+ const count = await db.worker_name_count.get({
59
+ workspace_id: workspaceId,
60
+ name_prefix: namePrefix,
61
+ });
62
+ let ordinal = (count?.n ?? 0) + 1;
63
+ while (true) {
64
+ const claimed = await db.worker_name_claim.get({
65
+ workspace_id: workspaceId,
66
+ name: WorkerName.ordinal(prefix, ordinal, qualifier),
67
+ parent_worker_id: parentWorkerId ?? null,
68
+ origin,
69
+ default_conversation: defaultConversation ? 1 : 0,
70
+ });
71
+ if (claimed !== undefined)
72
+ return claimed;
73
+ if (defaultConversation) {
74
+ const existing = await WorkerName.#defaultConversation(db, workspaceId);
75
+ if (existing !== undefined)
76
+ return existing;
77
+ }
78
+ ordinal++;
79
+ }
80
+ }
81
+ // A generated name is not minted until this atomic claim creates its worker.
82
+ // Competing allocators retry only after losing the claim. {§worker-auto-name}
83
+ static async claimAuto(db, options) {
84
+ return await WorkerName.#claimAuto(db, options, false);
85
+ }
86
+ // The stable default conversation is both an auto-name allocation and the
87
+ // workspace's one durable default role; both predicates share one write.
88
+ static async ensureDefaultConversation(db, options) {
89
+ const existing = await WorkerName.#defaultConversation(db, options.workspaceId);
90
+ if (existing !== undefined)
91
+ return existing;
92
+ return await WorkerName.#claimAuto(db, { ...options, origin: "model" }, true);
93
+ }
94
+ }
95
+ //# sourceMappingURL=WorkerName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerName.js","sourceRoot":"","sources":["../../src/core/WorkerName.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAmB7E,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC7B,UAAU,CAAS;IACnB,SAAS,CAAsB;IAC/B,IAAI,CAAmC;IACvC,QAAQ,CAAS;IAE1B,YAAY,UAAkB,EAAE,SAA8B;QAC1D,MAAM,QAAQ,GAAG,SAAS,KAAK,UAAU,CAAC;QAC1C,KAAK,CAAC,QAAQ;YACV,CAAC,CAAC,gBAAgB,UAAU,gBAAgB;YAC5C,CAAC,CAAC,gBAAgB,UAAU,gDAAgD,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;QACxD,IAAI,CAAC,QAAQ,GAAG,QAAQ;YACpB,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,2CAA2C,CAAC;IACtD,CAAC;CACJ;AAED,iFAAiF;AACjF,kDAAkD;AAClD,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,MAAM,CAAU,SAAS,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;IAE5E,MAAM,CAAC,SAAS,CAAC,UAAkB;QAC/B,IAAI,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO,UAAU,CAAC;QAC1E,OAAO,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,UAAkB;QAC5B,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,SAAS,KAAK,IAAI;YAAE,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACzE,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,2EAA2E;IAC3E,4EAA4E;IAC5E,MAAM,CAAC,OAAO,CAAC,MAAc,EAAE,OAAe,EAAE,SAAkB;QAC9D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,4DAA4D,OAAO,GAAG,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,IAAI,OAAO,EAAE,CAAC;QAC9E,KAAK,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;YACxD,IAAI,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,OAAO,SAAS,CAAC;QACnE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,mCAAmC,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAC7B,EAAM,EACN,WAAmB;QAEnB,OAAO,MAAM,EAAE,CAAC,oCAAoC,CAAC,GAAG,CAAkB;YACtE,YAAY,EAAE,WAAW;SAC5B,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,UAAU,CACnB,EAAM,EACN,OAA0B,EAC1B,mBAA4B;QAE5B,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC3E,MAAM,UAAU,GAAG,GAAG,MAAM,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,IAAI,CAAC;QAClF,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAgB;YACxD,YAAY,EAAE,WAAW;YACzB,WAAW,EAAE,UAAU;SAC1B,CAAC,CAAC;QACH,IAAI,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAElC,OAAO,IAAI,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAkB;gBAC5D,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;gBACpD,gBAAgB,EAAE,cAAc,IAAI,IAAI;gBACxC,MAAM;gBACN,oBAAoB,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACpD,CAAC,CAAC;YACH,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC;YAE1C,IAAI,mBAAmB,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,oBAAoB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;gBACxE,IAAI,QAAQ,KAAK,SAAS;oBAAE,OAAO,QAAQ,CAAC;YAChD,CAAC;YACD,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,8EAA8E;IAC9E,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAM,EAAE,OAA0B;QACrD,OAAO,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAClC,EAAM,EACN,OAA2E;QAE3E,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,oBAAoB,CAAC,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QAChF,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC5C,OAAO,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IAClF,CAAC;CACJ"}
@@ -0,0 +1,36 @@
1
+ -- Automatic worker allocation. SPEC {§worker-auto-name}.
2
+
3
+ -- PREP: worker_name_count
4
+ -- A starting hint only. The atomic claim below remains authoritative because
5
+ -- explicit names and concurrent allocators can occupy any candidate.
6
+ SELECT COUNT(*) AS n
7
+ FROM workers
8
+ WHERE workspace_id = $workspace_id AND name LIKE $name_prefix;
9
+
10
+ -- PREP: worker_name_claim
11
+ -- Claiming the literal and creating its worker are one SQLite write statement.
12
+ -- The default-conversation predicate is enabled only by
13
+ -- ensureDefaultConversation; ordinary allocation passes 0 and competes solely
14
+ -- on the generated literal.
15
+ INSERT INTO workers (workspace_id, name, parent_worker_id, origin, default_conversation)
16
+ SELECT $workspace_id, $name, $parent_worker_id, $origin, $default_conversation
17
+ WHERE NOT EXISTS (
18
+ SELECT 1
19
+ FROM workers
20
+ WHERE workspace_id = $workspace_id AND name = $name
21
+ )
22
+ AND (
23
+ $default_conversation = 0 OR NOT EXISTS (
24
+ SELECT 1
25
+ FROM workers
26
+ WHERE workspace_id = $workspace_id
27
+ AND default_conversation = 1
28
+ )
29
+ )
30
+ RETURNING id, name;
31
+
32
+ -- PREP: worker_name_get_default_conversation
33
+ SELECT id, name
34
+ FROM workers
35
+ WHERE workspace_id = $workspace_id
36
+ AND default_conversation = 1;
@@ -0,0 +1,14 @@
1
+ type Release = () => void;
2
+ export interface WorkspaceExclusive {
3
+ readonly acquired: Promise<void>;
4
+ setRoot(workerId: number | null): void;
5
+ release(): void;
6
+ }
7
+ export default class WorkspaceGate {
8
+ #private;
9
+ constructor(isDescendant: (workerId: number, rootWorkerId: number) => Promise<boolean>);
10
+ acquireTurn(workspaceId: number, workerId: number): Promise<Release>;
11
+ requestExclusive(workspaceId: number): WorkspaceExclusive;
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=WorkspaceGate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceGate.d.ts","sourceRoot":"","sources":["../../src/core/WorkspaceGate.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG,MAAM,IAAI,CAAC;AAuB1B,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACvC,OAAO,IAAI,IAAI,CAAC;CACnB;AAMD,MAAM,CAAC,OAAO,OAAO,aAAa;;IAI9B,YAAY,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAErF;IAED,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMnE;IAED,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,CA8CxD;CAqFJ"}