@plurnk/plurnk-service 4.1.0 → 4.3.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 (452) hide show
  1. package/.env.defaults +3 -0
  2. package/INSTALL.md +7 -2
  3. package/README.md +3 -1
  4. package/SPEC.md +1996 -1370
  5. package/dist/build-info.d.ts.map +1 -1
  6. package/dist/build-info.js +25 -3
  7. package/dist/build-info.js.map +1 -1
  8. package/dist/build-info.json +1 -1
  9. package/dist/completions/_plurnk-service +2 -2
  10. package/dist/completions/plurnk-service.bash +2 -2
  11. package/dist/completions/plurnk-service.fish +2 -0
  12. package/dist/content/body-preview.js.map +1 -1
  13. package/dist/content/byte-view.d.ts.map +1 -1
  14. package/dist/content/byte-view.js +3 -2
  15. package/dist/content/byte-view.js.map +1 -1
  16. package/dist/content/edit-collision.d.ts +2 -1
  17. package/dist/content/edit-collision.d.ts.map +1 -1
  18. package/dist/content/edit-collision.js.map +1 -1
  19. package/dist/content/edit-receipt.d.ts.map +1 -1
  20. package/dist/content/edit-receipt.js +28 -23
  21. package/dist/content/edit-receipt.js.map +1 -1
  22. package/dist/content/edited-span.js +1 -1
  23. package/dist/content/edited-span.js.map +1 -1
  24. package/dist/content/line-anchors.d.ts +3 -2
  25. package/dist/content/line-anchors.d.ts.map +1 -1
  26. package/dist/content/line-anchors.js +33 -19
  27. package/dist/content/line-anchors.js.map +1 -1
  28. package/dist/content/line-selection.js.map +1 -1
  29. package/dist/content/pattern-edits.js +1 -1
  30. package/dist/content/pattern-edits.js.map +1 -1
  31. package/dist/content/read-projector.d.ts +1 -1
  32. package/dist/content/read-projector.d.ts.map +1 -1
  33. package/dist/content/read-projector.js +10 -8
  34. package/dist/content/read-projector.js.map +1 -1
  35. package/dist/content/read-resolve.d.ts.map +1 -1
  36. package/dist/content/read-resolve.js +6 -5
  37. package/dist/content/read-resolve.js.map +1 -1
  38. package/dist/core/AdmittedTurnExecutor.d.ts +4 -4
  39. package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
  40. package/dist/core/AdmittedTurnExecutor.js +20 -18
  41. package/dist/core/AdmittedTurnExecutor.js.map +1 -1
  42. package/dist/core/AmbientMembers.d.ts +18 -0
  43. package/dist/core/AmbientMembers.d.ts.map +1 -0
  44. package/dist/core/AmbientMembers.js +84 -0
  45. package/dist/core/AmbientMembers.js.map +1 -0
  46. package/dist/core/BareBatchRunner.d.ts +1 -1
  47. package/dist/core/BareBatchRunner.d.ts.map +1 -1
  48. package/dist/core/BareBatchRunner.js +2 -2
  49. package/dist/core/BareBatchRunner.js.map +1 -1
  50. package/dist/core/CapabilityPolicies.js.map +1 -1
  51. package/dist/core/CapabilityResolver.d.ts +1 -2
  52. package/dist/core/CapabilityResolver.d.ts.map +1 -1
  53. package/dist/core/CapabilityResolver.js +11 -7
  54. package/dist/core/CapabilityResolver.js.map +1 -1
  55. package/dist/core/ChannelWrite.d.ts +2 -2
  56. package/dist/core/ChannelWrite.d.ts.map +1 -1
  57. package/dist/core/ChannelWrite.js.map +1 -1
  58. package/dist/core/ChannelWrite.sql +27 -0
  59. package/dist/core/ClientInteractions.js.map +1 -1
  60. package/dist/core/ContextFit.js +1 -1
  61. package/dist/core/ContextFit.js.map +1 -1
  62. package/dist/core/CoreSchemeServices.d.ts.map +1 -1
  63. package/dist/core/CoreSchemeServices.js +6 -4
  64. package/dist/core/CoreSchemeServices.js.map +1 -1
  65. package/dist/core/DataStatementRunner.d.ts.map +1 -1
  66. package/dist/core/DataStatementRunner.js +24 -15
  67. package/dist/core/DataStatementRunner.js.map +1 -1
  68. package/dist/core/Dispatcher.d.ts +29 -5
  69. package/dist/core/Dispatcher.d.ts.map +1 -1
  70. package/dist/core/Dispatcher.js +242 -132
  71. package/dist/core/Dispatcher.js.map +1 -1
  72. package/dist/core/EditMutations.d.ts.map +1 -1
  73. package/dist/core/EditMutations.js +12 -6
  74. package/dist/core/EditMutations.js.map +1 -1
  75. package/dist/core/EditSequence.js.map +1 -1
  76. package/dist/core/Engine.d.ts +12 -6
  77. package/dist/core/Engine.d.ts.map +1 -1
  78. package/dist/core/Engine.js +29 -7
  79. package/dist/core/Engine.js.map +1 -1
  80. package/dist/core/ExecutionOutputs.js.map +1 -1
  81. package/dist/core/ExecutorRegistry.d.ts +1 -2
  82. package/dist/core/ExecutorRegistry.d.ts.map +1 -1
  83. package/dist/core/ExecutorRegistry.js +2 -2
  84. package/dist/core/ExecutorRegistry.js.map +1 -1
  85. package/dist/core/FileAddress.d.ts +1 -0
  86. package/dist/core/FileAddress.d.ts.map +1 -1
  87. package/dist/core/FileAddress.js +8 -1
  88. package/dist/core/FileAddress.js.map +1 -1
  89. package/dist/core/FilePublication.d.ts.map +1 -1
  90. package/dist/core/FilePublication.js +6 -3
  91. package/dist/core/FilePublication.js.map +1 -1
  92. package/dist/core/FileSnapshot.d.ts.map +1 -1
  93. package/dist/core/FileSnapshot.js +8 -5
  94. package/dist/core/FileSnapshot.js.map +1 -1
  95. package/dist/core/KillHandler.d.ts.map +1 -1
  96. package/dist/core/KillHandler.js +7 -0
  97. package/dist/core/KillHandler.js.map +1 -1
  98. package/dist/core/LiveSubscription.d.ts +1 -0
  99. package/dist/core/LiveSubscription.d.ts.map +1 -1
  100. package/dist/core/LiveSubscription.js +3 -2
  101. package/dist/core/LiveSubscription.js.map +1 -1
  102. package/dist/core/LiveSubscriptions.d.ts +4 -1
  103. package/dist/core/LiveSubscriptions.d.ts.map +1 -1
  104. package/dist/core/LiveSubscriptions.js +42 -1
  105. package/dist/core/LiveSubscriptions.js.map +1 -1
  106. package/dist/core/LogBody.d.ts.map +1 -1
  107. package/dist/core/LogBody.js +22 -19
  108. package/dist/core/LogBody.js.map +1 -1
  109. package/dist/core/LogVisibility.d.ts +1 -1
  110. package/dist/core/LogVisibility.d.ts.map +1 -1
  111. package/dist/core/LogVisibility.js +4 -6
  112. package/dist/core/LogVisibility.js.map +1 -1
  113. package/dist/core/LogWriter.d.ts.map +1 -1
  114. package/dist/core/LogWriter.js +6 -9
  115. package/dist/core/LogWriter.js.map +1 -1
  116. package/dist/core/LoopDriver.d.ts +4 -4
  117. package/dist/core/LoopDriver.d.ts.map +1 -1
  118. package/dist/core/LoopDriver.js +4 -5
  119. package/dist/core/LoopDriver.js.map +1 -1
  120. package/dist/core/LoopLifecycle.d.ts +2 -0
  121. package/dist/core/LoopLifecycle.d.ts.map +1 -1
  122. package/dist/core/LoopLifecycle.js +13 -3
  123. package/dist/core/LoopLifecycle.js.map +1 -1
  124. package/dist/core/LoopLifecycle.sql +4 -4
  125. package/dist/core/LoopOutcome.d.ts.map +1 -1
  126. package/dist/core/LoopOutcome.js +2 -2
  127. package/dist/core/LoopOutcome.js.map +1 -1
  128. package/dist/core/MembershipMaterialization.d.ts.map +1 -1
  129. package/dist/core/MembershipMaterialization.js +29 -29
  130. package/dist/core/MembershipMaterialization.js.map +1 -1
  131. package/dist/core/MessageResources.d.ts +5 -1
  132. package/dist/core/MessageResources.d.ts.map +1 -1
  133. package/dist/core/MessageResources.js +12 -0
  134. package/dist/core/MessageResources.js.map +1 -1
  135. package/dist/core/MessageResources.sql +8 -0
  136. package/dist/core/MutationEffects.d.ts +1 -0
  137. package/dist/core/MutationEffects.d.ts.map +1 -1
  138. package/dist/core/MutationEffects.js +14 -10
  139. package/dist/core/MutationEffects.js.map +1 -1
  140. package/dist/core/OperationHistory.d.ts.map +1 -1
  141. package/dist/core/OperationHistory.js +4 -3
  142. package/dist/core/OperationHistory.js.map +1 -1
  143. package/dist/core/OperatorConfig.d.ts.map +1 -1
  144. package/dist/core/OperatorConfig.js +3 -2
  145. package/dist/core/OperatorConfig.js.map +1 -1
  146. package/dist/core/PacketBuilder.d.ts +1 -1
  147. package/dist/core/PacketBuilder.d.ts.map +1 -1
  148. package/dist/core/PacketBuilder.js +7 -5
  149. package/dist/core/PacketBuilder.js.map +1 -1
  150. package/dist/core/ProblemLog.d.ts +2 -5
  151. package/dist/core/ProblemLog.d.ts.map +1 -1
  152. package/dist/core/ProblemLog.js +2 -3
  153. package/dist/core/ProblemLog.js.map +1 -1
  154. package/dist/core/ProposalLifecycle.d.ts +12 -11
  155. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  156. package/dist/core/ProposalLifecycle.js +92 -84
  157. package/dist/core/ProposalLifecycle.js.map +1 -1
  158. package/dist/core/ReasoningEvent.d.ts +2 -0
  159. package/dist/core/ReasoningEvent.d.ts.map +1 -1
  160. package/dist/core/ReplyMetadata.d.ts.map +1 -1
  161. package/dist/core/ReplyMetadata.js +4 -3
  162. package/dist/core/ReplyMetadata.js.map +1 -1
  163. package/dist/core/ResourceBindings.d.ts +2 -2
  164. package/dist/core/ResourceBindings.d.ts.map +1 -1
  165. package/dist/core/ResourceBindings.js.map +1 -1
  166. package/dist/core/ResourceMutations.d.ts +1 -1
  167. package/dist/core/ResourceMutations.d.ts.map +1 -1
  168. package/dist/core/ResourceMutations.js +1 -2
  169. package/dist/core/ResourceMutations.js.map +1 -1
  170. package/dist/core/ResourceSelector.js +2 -2
  171. package/dist/core/ResourceSelector.js.map +1 -1
  172. package/dist/core/ResourceTransfers.d.ts.map +1 -1
  173. package/dist/core/ResourceTransfers.js +162 -120
  174. package/dist/core/ResourceTransfers.js.map +1 -1
  175. package/dist/core/SchemeRegistry.d.ts +6 -5
  176. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  177. package/dist/core/SchemeRegistry.js +32 -26
  178. package/dist/core/SchemeRegistry.js.map +1 -1
  179. package/dist/core/ServiceHelp.d.ts.map +1 -1
  180. package/dist/core/ServiceHelp.js +2 -1
  181. package/dist/core/ServiceHelp.js.map +1 -1
  182. package/dist/core/StoredPacket.d.ts.map +1 -1
  183. package/dist/core/StoredPacket.js +26 -19
  184. package/dist/core/StoredPacket.js.map +1 -1
  185. package/dist/core/StrikeRail.d.ts +1 -2
  186. package/dist/core/StrikeRail.d.ts.map +1 -1
  187. package/dist/core/StrikeRail.js +4 -4
  188. package/dist/core/StrikeRail.js.map +1 -1
  189. package/dist/core/TerminalResult.d.ts +0 -2
  190. package/dist/core/TerminalResult.d.ts.map +1 -1
  191. package/dist/core/TerminalResult.js +0 -18
  192. package/dist/core/TerminalResult.js.map +1 -1
  193. package/dist/core/ToolInputSchema.d.ts.map +1 -1
  194. package/dist/core/ToolInputSchema.js +2 -2
  195. package/dist/core/ToolInputSchema.js.map +1 -1
  196. package/dist/core/ToolResources.d.ts +1 -0
  197. package/dist/core/ToolResources.d.ts.map +1 -1
  198. package/dist/core/ToolResources.js +7 -6
  199. package/dist/core/ToolResources.js.map +1 -1
  200. package/dist/core/TurnDispositionHandler.d.ts +1 -1
  201. package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
  202. package/dist/core/TurnDispositionHandler.js +0 -1
  203. package/dist/core/TurnDispositionHandler.js.map +1 -1
  204. package/dist/core/TurnMaterialization.d.ts.map +1 -1
  205. package/dist/core/TurnMaterialization.js +3 -2
  206. package/dist/core/TurnMaterialization.js.map +1 -1
  207. package/dist/core/TurnRunner.d.ts +13 -12
  208. package/dist/core/TurnRunner.d.ts.map +1 -1
  209. package/dist/core/TurnRunner.js +197 -173
  210. package/dist/core/TurnRunner.js.map +1 -1
  211. package/dist/core/TurnRunner.sql +3 -3
  212. package/dist/core/WorkerOwners.js.map +1 -1
  213. package/dist/core/caps/DbEntryCaps.js.map +1 -1
  214. package/dist/core/caps/DbMessageCaps.d.ts +3 -3
  215. package/dist/core/caps/DbMessageCaps.d.ts.map +1 -1
  216. package/dist/core/caps/DbProjectionCaps.js +1 -1
  217. package/dist/core/caps/DbProjectionCaps.js.map +1 -1
  218. package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
  219. package/dist/core/caps/DbSubscriptionCaps.js +1 -0
  220. package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
  221. package/dist/core/caps/SchemeCtxImpl.d.ts +1 -0
  222. package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
  223. package/dist/core/caps/SchemeCtxImpl.js +10 -1
  224. package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
  225. package/dist/core/env-catalog.js.map +1 -1
  226. package/dist/core/env-defaults.d.ts.map +1 -1
  227. package/dist/core/env-defaults.js +5 -3
  228. package/dist/core/env-defaults.js.map +1 -1
  229. package/dist/core/file-creation-policy.d.ts.map +1 -1
  230. package/dist/core/file-creation-policy.js +2 -1
  231. package/dist/core/file-creation-policy.js.map +1 -1
  232. package/dist/core/file-materialization.d.ts.map +1 -1
  233. package/dist/core/file-materialization.js +9 -11
  234. package/dist/core/file-materialization.js.map +1 -1
  235. package/dist/core/git-env.d.ts +1 -0
  236. package/dist/core/git-env.d.ts.map +1 -1
  237. package/dist/core/git-env.js +34 -3
  238. package/dist/core/git-env.js.map +1 -1
  239. package/dist/core/git-membership.d.ts +8 -0
  240. package/dist/core/git-membership.d.ts.map +1 -1
  241. package/dist/core/git-membership.js +107 -21
  242. package/dist/core/git-membership.js.map +1 -1
  243. package/dist/core/git-state.d.ts.map +1 -1
  244. package/dist/core/git-state.js +1 -0
  245. package/dist/core/git-state.js.map +1 -1
  246. package/dist/core/notifications.d.ts +5 -0
  247. package/dist/core/notifications.d.ts.map +1 -1
  248. package/dist/core/packet-wire.d.ts +26 -21
  249. package/dist/core/packet-wire.d.ts.map +1 -1
  250. package/dist/core/packet-wire.js +150 -112
  251. package/dist/core/packet-wire.js.map +1 -1
  252. package/dist/core/plurnk-uri.d.ts +1 -1
  253. package/dist/core/plurnk-uri.d.ts.map +1 -1
  254. package/dist/core/plurnk-uri.js +6 -5
  255. package/dist/core/plurnk-uri.js.map +1 -1
  256. package/dist/core/results.d.ts +9 -4
  257. package/dist/core/results.d.ts.map +1 -1
  258. package/dist/core/results.js +14 -1
  259. package/dist/core/results.js.map +1 -1
  260. package/dist/core/runtime-floor.d.ts +8 -0
  261. package/dist/core/runtime-floor.d.ts.map +1 -0
  262. package/dist/core/runtime-floor.js +40 -0
  263. package/dist/core/runtime-floor.js.map +1 -0
  264. package/dist/core/runtime-guard.d.ts +2 -0
  265. package/dist/core/runtime-guard.d.ts.map +1 -0
  266. package/dist/core/runtime-guard.js +5 -0
  267. package/dist/core/runtime-guard.js.map +1 -0
  268. package/dist/core/scheme-types.d.ts +20 -0
  269. package/dist/core/scheme-types.d.ts.map +1 -1
  270. package/dist/core/sqlite-synchronous.d.ts +1 -1
  271. package/dist/core/sqlite-synchronous.d.ts.map +1 -1
  272. package/dist/core/sqlite-synchronous.js.map +1 -1
  273. package/dist/core/statement-primary.d.ts +2 -2
  274. package/dist/core/statement-primary.d.ts.map +1 -1
  275. package/dist/core/statement-primary.js.map +1 -1
  276. package/dist/core/workspace-settings.js +1 -1
  277. package/dist/core/workspace-settings.js.map +1 -1
  278. package/dist/evidence/EvidenceReader.d.ts.map +1 -1
  279. package/dist/evidence/EvidenceReader.js +20 -6
  280. package/dist/evidence/EvidenceReader.js.map +1 -1
  281. package/dist/launch/Launch.d.ts +1 -0
  282. package/dist/launch/Launch.d.ts.map +1 -1
  283. package/dist/launch/Launch.js +28 -12
  284. package/dist/launch/Launch.js.map +1 -1
  285. package/dist/man/plurnk-service.1 +12 -2
  286. package/dist/schemes/EffectPolicy.js +1 -1
  287. package/dist/schemes/EffectPolicy.js.map +1 -1
  288. package/dist/schemes/Env.d.ts +1 -1
  289. package/dist/schemes/Env.d.ts.map +1 -1
  290. package/dist/schemes/Env.js +7 -1
  291. package/dist/schemes/Env.js.map +1 -1
  292. package/dist/schemes/Exec.d.ts +10 -12
  293. package/dist/schemes/Exec.d.ts.map +1 -1
  294. package/dist/schemes/Exec.js +337 -437
  295. package/dist/schemes/Exec.js.map +1 -1
  296. package/dist/schemes/ExecOutputScheme.d.ts +4 -6
  297. package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
  298. package/dist/schemes/ExecOutputScheme.js +17 -17
  299. package/dist/schemes/ExecOutputScheme.js.map +1 -1
  300. package/dist/schemes/ExecScheduler.d.ts.map +1 -1
  301. package/dist/schemes/ExecScheduler.js +1 -2
  302. package/dist/schemes/ExecScheduler.js.map +1 -1
  303. package/dist/schemes/ExecutionInput.js +3 -3
  304. package/dist/schemes/ExecutionInput.js.map +1 -1
  305. package/dist/schemes/File.d.ts +3 -18
  306. package/dist/schemes/File.d.ts.map +1 -1
  307. package/dist/schemes/File.js +148 -84
  308. package/dist/schemes/File.js.map +1 -1
  309. package/dist/schemes/Log.d.ts.map +1 -1
  310. package/dist/schemes/Log.js +193 -161
  311. package/dist/schemes/Log.js.map +1 -1
  312. package/dist/schemes/QuestionTool.d.ts.map +1 -1
  313. package/dist/schemes/QuestionTool.js +6 -8
  314. package/dist/schemes/QuestionTool.js.map +1 -1
  315. package/dist/schemes/ResourceTreeScheme.d.ts.map +1 -1
  316. package/dist/schemes/ResourceTreeScheme.js +2 -2
  317. package/dist/schemes/ResourceTreeScheme.js.map +1 -1
  318. package/dist/schemes/TurnSource.js +3 -3
  319. package/dist/schemes/TurnSource.js.map +1 -1
  320. package/dist/schemes/Worker.js.map +1 -1
  321. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  322. package/dist/schemes/_entry-crud.js +4 -2
  323. package/dist/schemes/_entry-crud.js.map +1 -1
  324. package/dist/schemes/_entry-find.d.ts +2 -1
  325. package/dist/schemes/_entry-find.d.ts.map +1 -1
  326. package/dist/schemes/_entry-find.js +241 -130
  327. package/dist/schemes/_entry-find.js.map +1 -1
  328. package/dist/schemes/_entry-manifest.js +1 -1
  329. package/dist/schemes/_entry-manifest.js.map +1 -1
  330. package/dist/schemes/_entry-ops.js.map +1 -1
  331. package/dist/schemes/_search-index.js.map +1 -1
  332. package/dist/schemes/exec-entry-sink.d.ts +30 -0
  333. package/dist/schemes/exec-entry-sink.d.ts.map +1 -0
  334. package/dist/schemes/exec-entry-sink.js +238 -0
  335. package/dist/schemes/exec-entry-sink.js.map +1 -0
  336. package/dist/schemes/exec-lifetime.d.ts.map +1 -1
  337. package/dist/schemes/exec-lifetime.js +5 -2
  338. package/dist/schemes/exec-lifetime.js.map +1 -1
  339. package/dist/server/ClientOperations.d.ts +45 -0
  340. package/dist/server/ClientOperations.d.ts.map +1 -0
  341. package/dist/server/ClientOperations.js +192 -0
  342. package/dist/server/ClientOperations.js.map +1 -0
  343. package/dist/server/ClientReads.d.ts +13 -5
  344. package/dist/server/ClientReads.d.ts.map +1 -1
  345. package/dist/server/ClientReads.js +108 -21
  346. package/dist/server/ClientReads.js.map +1 -1
  347. package/dist/server/Credentials.js +2 -2
  348. package/dist/server/Credentials.js.map +1 -1
  349. package/dist/server/Daemon.d.ts +40 -28
  350. package/dist/server/Daemon.d.ts.map +1 -1
  351. package/dist/server/Daemon.js +263 -839
  352. package/dist/server/Daemon.js.map +1 -1
  353. package/dist/server/DaemonLock.d.ts +2 -0
  354. package/dist/server/DaemonLock.d.ts.map +1 -1
  355. package/dist/server/DaemonLock.js +10 -1
  356. package/dist/server/DaemonLock.js.map +1 -1
  357. package/dist/server/DaemonModules.d.ts +39 -0
  358. package/dist/server/DaemonModules.d.ts.map +1 -0
  359. package/dist/server/DaemonModules.js +219 -0
  360. package/dist/server/DaemonModules.js.map +1 -0
  361. package/dist/server/DrainSupervisor.d.ts +4 -2
  362. package/dist/server/DrainSupervisor.d.ts.map +1 -1
  363. package/dist/server/DrainSupervisor.js +318 -290
  364. package/dist/server/DrainSupervisor.js.map +1 -1
  365. package/dist/server/EnvFunctionality.d.ts +10 -7
  366. package/dist/server/EnvFunctionality.d.ts.map +1 -1
  367. package/dist/server/EnvFunctionality.js +7 -5
  368. package/dist/server/EnvFunctionality.js.map +1 -1
  369. package/dist/server/Functionality.d.ts +4 -5
  370. package/dist/server/Functionality.d.ts.map +1 -1
  371. package/dist/server/Functionality.js +24 -15
  372. package/dist/server/Functionality.js.map +1 -1
  373. package/dist/server/HttpListener.d.ts.map +1 -1
  374. package/dist/server/HttpListener.js +28 -8
  375. package/dist/server/HttpListener.js.map +1 -1
  376. package/dist/server/MembersFunctionality.d.ts +19 -7
  377. package/dist/server/MembersFunctionality.d.ts.map +1 -1
  378. package/dist/server/MembersFunctionality.js +37 -17
  379. package/dist/server/MembersFunctionality.js.map +1 -1
  380. package/dist/server/MessageDelivery.d.ts +43 -0
  381. package/dist/server/MessageDelivery.d.ts.map +1 -0
  382. package/dist/server/MessageDelivery.js +186 -0
  383. package/dist/server/MessageDelivery.js.map +1 -0
  384. package/dist/server/ModuleHost.d.ts +3 -3
  385. package/dist/server/ModuleHost.d.ts.map +1 -1
  386. package/dist/server/Places.d.ts +19 -0
  387. package/dist/server/Places.d.ts.map +1 -0
  388. package/dist/server/Places.js +76 -0
  389. package/dist/server/Places.js.map +1 -0
  390. package/dist/server/PluginSources.d.ts.map +1 -1
  391. package/dist/server/PluginSources.js +2 -1
  392. package/dist/server/PluginSources.js.map +1 -1
  393. package/dist/server/PlurnkSkill.d.ts.map +1 -1
  394. package/dist/server/PlurnkSkill.js +5 -4
  395. package/dist/server/PlurnkSkill.js.map +1 -1
  396. package/dist/server/Rollback.d.ts.map +1 -1
  397. package/dist/server/Rollback.js +2 -1
  398. package/dist/server/Rollback.js.map +1 -1
  399. package/dist/server/WorkerModels.d.ts +83 -0
  400. package/dist/server/WorkerModels.d.ts.map +1 -0
  401. package/dist/server/WorkerModels.js +500 -0
  402. package/dist/server/WorkerModels.js.map +1 -0
  403. package/dist/server/WorkerOverview.d.ts +22 -0
  404. package/dist/server/WorkerOverview.d.ts.map +1 -0
  405. package/dist/server/WorkerOverview.js +42 -0
  406. package/dist/server/WorkerOverview.js.map +1 -0
  407. package/dist/server/WorkspacePlugins.d.ts +1 -1
  408. package/dist/server/WorkspacePlugins.d.ts.map +1 -1
  409. package/dist/server/WorkspacePlugins.js +0 -1
  410. package/dist/server/WorkspacePlugins.js.map +1 -1
  411. package/dist/server/WorkspaceResidency.d.ts +3 -3
  412. package/dist/server/WorkspaceResidency.d.ts.map +1 -1
  413. package/dist/server/WorkspaceResidency.js.map +1 -1
  414. package/dist/server/client-input.d.ts +2 -2
  415. package/dist/server/client-input.d.ts.map +1 -1
  416. package/dist/server/client-input.js +19 -12
  417. package/dist/server/client-input.js.map +1 -1
  418. package/dist/server/envelope.d.ts +4 -1
  419. package/dist/server/envelope.d.ts.map +1 -1
  420. package/dist/server/envelope.js +7 -3
  421. package/dist/server/envelope.js.map +1 -1
  422. package/dist/server/envelope.sql +10 -6
  423. package/dist/server/logEntry.d.ts +38 -1
  424. package/dist/server/logEntry.d.ts.map +1 -1
  425. package/dist/server/logEntry.js +9 -9
  426. package/dist/server/logEntry.js.map +1 -1
  427. package/dist/server/logEntry.sql +4 -2
  428. package/dist/server/loopDocs.d.ts.map +1 -1
  429. package/dist/server/loopDocs.js +11 -2
  430. package/dist/server/loopDocs.js.map +1 -1
  431. package/dist/server/module-discovery.d.ts +2 -3
  432. package/dist/server/module-discovery.d.ts.map +1 -1
  433. package/dist/server/module-discovery.js +6 -6
  434. package/dist/server/module-discovery.js.map +1 -1
  435. package/dist/server/places.sql +83 -0
  436. package/dist/server/seam-loop.sql +8 -0
  437. package/dist/server/worker-overview.sql +50 -0
  438. package/dist/service.d.ts +1 -0
  439. package/dist/service.d.ts.map +1 -1
  440. package/dist/service.js +35 -9
  441. package/dist/service.js.map +1 -1
  442. package/docs/members.md +31 -33
  443. package/migrations/033_hidden_places.sql +10 -0
  444. package/package.json +48 -57
  445. package/dist/observe/init.d.ts +0 -8
  446. package/dist/observe/init.d.ts.map +0 -1
  447. package/dist/observe/init.js +0 -163
  448. package/dist/observe/init.js.map +0 -1
  449. package/dist/server/WorkerModelResolver.d.ts +0 -20
  450. package/dist/server/WorkerModelResolver.d.ts.map +0 -1
  451. package/dist/server/WorkerModelResolver.js +0 -200
  452. package/dist/server/WorkerModelResolver.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TurnRunner.d.ts","sourceRoot":"","sources":["../../src/core/TurnRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TurnRunner.d.ts","sourceRoot":"","sources":["../../src/core/TurnRunner.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
+ import StoredPacket, {} from "./StoredPacket.js";
1
2
  import NativeContent from "./NativeContent.js";
2
3
  import { PlurnkParser, parsePath } from "@plurnk/plurnk-parser";
3
- import { PathSyntax, PlurnkParseError, UNKNOWN_POSITION } from "@plurnk/plurnk-contracts";
4
+ import { PathSyntax, PlurnkParseError, UNKNOWN_POSITION, Validator } from "@plurnk/plurnk-contracts";
4
5
  import WorkerOwners from "./WorkerOwners.js";
5
6
  import { setTimeout as delay } from "node:timers/promises";
6
- import { aggregateProviderAccounting } from "@plurnk/plurnk-providers";
7
+ import { aggregateProviderAccounting, ProviderError, scopeEnvToAlias, } from "@plurnk/plurnk-providers";
7
8
  const comparePosition = (a, b) => a.line - b.line || a.column - b.column;
8
- import { Mimetypes } from "@plurnk/plurnk-mimetypes";
9
9
  import FabricatedLog from "./FabricatedLog.js";
10
10
  import Meta, { Knob } from "@plurnk/plurnk-meta";
11
11
  import GitMembership from "./git-membership.js";
@@ -14,7 +14,6 @@ import GitState, {} from "./git-state.js";
14
14
  import WorkspaceSettings from "./workspace-settings.js";
15
15
  import { generatedPathname } from "./plurnk-uri.js";
16
16
  import { contentWeight } from "./content-weight.js";
17
- import LiveSubscriptions from "./LiveSubscriptions.js";
18
17
  import { readFile } from "node:fs/promises";
19
18
  import { resolve as resolvePath } from "node:path";
20
19
  import { homedir } from "node:os";
@@ -31,16 +30,9 @@ import PacketWire from "./packet-wire.js";
31
30
  import { RECEIPT_RESERVE, reserved } from "./ContextFit.js";
32
31
  import Results, { OperationFailureError } from "./results.js";
33
32
  import Turn, {} from "./Turn.js";
34
- // TurnRunner owns one inference cycle and any initialization turn
35
- // that precedes provider admission; Engine retains the surrounding loop
36
- // lifecycle and public facade.
37
- import NoticeChannel from "./NoticeChannel.js";
38
33
  import ProviderRecovery from "./ProviderRecovery.js";
39
- import ProblemLog from "./ProblemLog.js";
40
- import StrikeRail, {} from "./StrikeRail.js";
41
- import PacketBuilder, {} from "./PacketBuilder.js";
42
- import StoredPacket, {} from "./StoredPacket.js";
43
- import Dispatcher from "./Dispatcher.js";
34
+ import {} from "./StrikeRail.js";
35
+ import {} from "./PacketBuilder.js";
44
36
  import { observed, observedSync } from "../observe/spans.js";
45
37
  import { genAiRequestName, genAiRequestOptions, settleGenAiResponse } from "../observe/genai.js";
46
38
  import { PROVIDER_CALLS, recordCounter } from "../observe/metrics.js";
@@ -65,7 +57,7 @@ const workerCatalogTarget = (namespace) => {
65
57
  };
66
58
  };
67
59
  const assertOpenPaths = (value, source) => {
68
- if (!Array.isArray(value) || value.some((path) => typeof path !== "string" || path.length === 0)) {
60
+ if (!Array.isArray(value) || !value.every((path) => typeof path === "string" && path.length > 0)) {
69
61
  throw new TypeError(`${source}: expected an array of non-empty strings`);
70
62
  }
71
63
  return value;
@@ -93,11 +85,11 @@ const readFilesItems = () => {
93
85
  return null;
94
86
  return normalizeFilesItems(Number.parseInt(raw, 10));
95
87
  };
96
- import { ProviderError, scopeEnvToAlias } from "@plurnk/plurnk-providers";
88
+ // Provider contract owned by @plurnk/plurnk-providers; engine is the consumer.
97
89
  import ProviderInstantiate from "./ProviderInstantiate.js";
98
90
  import TurnMaterialization from "./TurnMaterialization.js";
99
91
  import BareBatchRunner from "./BareBatchRunner.js";
100
- import { ENGINE_PROBLEMS, TURN_STATUS_IMPLICIT_CONTINUE, outputAllowance } from "./turn-signals.js";
92
+ import { TURN_STATUS_IMPLICIT_CONTINUE, outputAllowance } from "./turn-signals.js";
101
93
  import AdmittedTurnExecutor from "./AdmittedTurnExecutor.js";
102
94
  // {§context-wall} — the window's one terminal: the packet cannot fit the model's window even as receipts.
103
95
  const WINDOW_OVERFLOW_DETAIL = "Context window overflow: the packet cannot fit the model's window even as receipts.";
@@ -106,24 +98,23 @@ const windowOverflowFailure = (overflow) => Results.failure("engine:context", "w
106
98
  // {§context-over-budget-row} — the row is the mandate; the gauge is the one home for the numbers
107
99
  // ({§context-gauge}), which the row's own charge would otherwise put out of agreement.
108
100
  const OVER_BUDGET_DETAIL = "Context exceeds budget. YOU MUST ONLY KILL, MOVE or NOTE this turn.";
109
- // {§worker-initialization-entry} — the two NOTEs that open and close the initialization surveys, labelled
110
- // as the card's own first and last NOTE examples are.
101
+ // {§worker-initialization-entry} — the two NOTEs that open and close the initialization surveys, both
102
+ // labelled as the card's own plan example is: the worker's plan in steps, then its next step.
111
103
  const INITIALIZATION_NOTE = {
112
104
  op: "NOTE", aside: "plan", metadata: null, target: null, lineMarker: null,
113
- body: [
114
- "1. Survey the tooling, documentation, extended context, and project root: what exists decides what can be done.",
115
- "2. Read the Open Message and restate what it asks for and what will show it is done.",
116
- "3. Do the work, saving all new plans, findings, and decisions in NOTEs for later turns.",
117
- ].join("\n"),
105
+ body: ["1. Survey the environment.", "2. Evaluate and react to the Open Message."].join("\n"),
118
106
  position: UNKNOWN_POSITION,
119
107
  };
120
- const INITIALIZATION_NEXT_NOTE = {
121
- op: "NOTE", aside: "next", metadata: null, target: null, lineMarker: null,
122
- body: "Read and resolve the Open Message.", position: UNKNOWN_POSITION,
108
+ const INITIALIZATION_CLOSING_NOTE = {
109
+ op: "NOTE", aside: "plan", metadata: null, target: null, lineMarker: null,
110
+ body: "Evaluate and react to the Open Message.", position: UNKNOWN_POSITION,
123
111
  };
112
+ // {§continued-without-note} — said once, in the next packet, of a continuing turn that carried no NOTE.
113
+ const CONTINUED_WITHOUT_NOTE = "The turn continued without a NOTE.";
124
114
  // {§notice-directive} — what each notice of the model's own output asks of it: MUST where the card says MUST
125
115
  // or the output was refused, SHOULD where a near-miss was accepted.
126
116
  const DIRECTIVE = Object.freeze({
117
+ note: "YOU MUST persist all new facts, ideas, and plans in NOTEs on every turn.",
127
118
  emission: "YOU MUST ONLY emit fenced operation batches; with the parameters, pattern, and terse aside on the fenced operation line.",
128
119
  advisory: "YOU SHOULD write the canonical form.",
129
120
  output: "YOU SHOULD emit fewer or shorter operations per turn.",
@@ -165,7 +156,6 @@ export default class TurnRunner {
165
156
  #weighContent;
166
157
  #notices;
167
158
  #problems;
168
- #strikes;
169
159
  #packets;
170
160
  #dispatcher;
171
161
  #liveSubscriptions;
@@ -177,19 +167,19 @@ export default class TurnRunner {
177
167
  #warmWorkspace;
178
168
  #dispatch;
179
169
  #resolveWorkerProviderIdentity;
170
+ #loopGauge;
180
171
  // {§operator-grammar} — one read per path per daemon; the file is the operator's and static.
181
172
  #grammarCache = new Map();
182
173
  #materialization;
183
174
  #bareBatch;
184
175
  #admitted;
185
- constructor({ db, schemes, mimetypes, weigh, notices, problems, strikes, packets, dispatcher, liveSubscriptions, notify, executors, loopSignal, interactions, warmWorkspace, dispatch, resolveWorkerProviderIdentity, }) {
176
+ constructor({ db, schemes, mimetypes, weigh, notices, problems, packets, dispatcher, liveSubscriptions, notify, executors, loopSignal, interactions, warmWorkspace, dispatch, resolveWorkerProviderIdentity, loopGauge, }) {
186
177
  this.#db = db;
187
178
  this.#schemes = schemes;
188
179
  this.#mimetypes = mimetypes;
189
180
  this.#weighContent = weigh;
190
181
  this.#notices = notices;
191
182
  this.#problems = problems;
192
- this.#strikes = strikes;
193
183
  this.#packets = packets;
194
184
  this.#dispatcher = dispatcher;
195
185
  this.#liveSubscriptions = liveSubscriptions;
@@ -201,6 +191,7 @@ export default class TurnRunner {
201
191
  this.#warmWorkspace = warmWorkspace;
202
192
  this.#dispatch = dispatch;
203
193
  this.#resolveWorkerProviderIdentity = resolveWorkerProviderIdentity;
194
+ this.#loopGauge = loopGauge;
204
195
  this.#materialization = new TurnMaterialization({ db: this.#db, weighContent: this.#weighContent, mimetypes: this.#mimetypes });
205
196
  this.#bareBatch = new BareBatchRunner({ db: this.#db, providerAttributions: this.#providerAttributions.bind(this), providerFailure: TurnRunner.#providerFailure });
206
197
  this.#admitted = new AdmittedTurnExecutor({ db: this.#db, schemes: this.#schemes, notices: this.#notices, problems: this.#problems, dispatcher: this.#dispatcher, bareBatch: this.#bareBatch });
@@ -212,10 +203,14 @@ export default class TurnRunner {
212
203
  const packetCount = await this.#db.engine_loop_packet_count.get({ loop_id: args.loopId });
213
204
  if (packetCount === undefined)
214
205
  throw new Error(`loop ${args.loopId}: packet count row missing`);
206
+ // {§tokenomics-client-gauge} The turn's inference is recorded: its packet and its call are the gauge now.
207
+ const gauge = await this.#loopGauge(args.loopId);
215
208
  this.#notify.loopPacketNotify(args.workspaceId, {
216
209
  workerId: args.workerId,
217
210
  loopId: args.loopId,
211
+ loopSeq: packetCount.sequence,
218
212
  packetCount: packetCount.count,
213
+ gauge,
219
214
  });
220
215
  }
221
216
  // {§operator-grammar} — the operator's grammar text for this provider, or undefined when
@@ -414,28 +409,26 @@ export default class TurnRunner {
414
409
  const initializationStatements = [];
415
410
  // {§worker-initialization-entry} — the worker's first turn is the worked
416
411
  // example itself: the actual orienting operations.
417
- // {§turn0-agents-stunt} — the project AGENTS.md (materialized by LoopDocs as
418
- // worker:///_plurnk/AGENTS.md) gets one foisted READ on the worker's first
419
- // loop, so local repo guidance is visible turn-0 content. Global policy
420
- // stays in the system prompt; nothing else is force-read.
412
+ // {§turn0-agents-stunt} {§turn0-local-instructions} — the project AGENTS.md, then its AGENTS.local.md (materialized
413
+ // by LoopDocs under worker:///_plurnk/), each get one foisted READ on the worker's first loop, so local repo
414
+ // guidance is visible turn-0 content. Global policy stays in the system prompt; nothing else is force-read.
421
415
  if (initializationTurn !== null) {
422
- const agentsEntry = await this.#db.crud_find_workspace_entry.get({
423
- workspace_id: workspaceId,
424
- scheme: "worker",
425
- authority: "",
426
- pathname: generatedPathname("/AGENTS.md"),
427
- });
428
- if (agentsEntry !== undefined) {
429
- const agentsTarget = {
430
- kind: "url", raw: "worker:///_plurnk/AGENTS.md", scheme: "worker",
416
+ for (const name of ["/AGENTS.md", "/AGENTS.local.md"]) {
417
+ const pathname = generatedPathname(name);
418
+ const entry = await this.#db.crud_find_workspace_entry.get({
419
+ workspace_id: workspaceId, scheme: "worker", authority: "", pathname,
420
+ });
421
+ if (entry === undefined)
422
+ continue;
423
+ const target = {
424
+ kind: "url", raw: `worker://${pathname}`, scheme: "worker",
431
425
  username: null, password: null, hostname: null, port: null,
432
- pathname: generatedPathname("/AGENTS.md"), query: null, fragment: null,
426
+ pathname, query: null, fragment: null,
433
427
  };
434
- const agentsRead = {
435
- op: "READ", aside: null, target: agentsTarget,
428
+ initializationStatements.push({
429
+ op: "READ", aside: null, target,
436
430
  metadata: null, lineMarker: null, matcher: null, body: null, position: UNKNOWN_POSITION,
437
- };
438
- initializationStatements.push(agentsRead);
431
+ });
439
432
  }
440
433
  }
441
434
  return {
@@ -510,7 +503,17 @@ export default class TurnRunner {
510
503
  // {§emission-row} — a `_plurnk` turn has receipts, never a fabricated assistant emission.
511
504
  // {§message-arrival} — the message reaches the model as an inbound SEND in the first
512
505
  // model turn; initialization does not READ it a second time.
513
- const admittedInitializationStatements = initializationStatements.filter((statement) => this.#capabilities.allowsAcross(statement, workspaceId, initializationPolicies));
506
+ const admittedInitializationStatements = [];
507
+ for (const statement of initializationStatements) {
508
+ if (!this.#capabilities.allowsAcross(statement, workspaceId, initializationPolicies))
509
+ continue;
510
+ // {§actor-boundary-catalog-preview} — a survey that would select nothing is left out of the program.
511
+ if (statement.op === "FIND" && !await this.#dispatcher.selects(statement, {
512
+ workspaceId, workerId, loopId, turnId: initializationTurn.id, origin: "_plurnk",
513
+ }))
514
+ continue;
515
+ admittedInitializationStatements.push(statement);
516
+ }
514
517
  if (admittedInitializationStatements.length === 0) {
515
518
  // Nothing to survey (the preview off, no project guidance): the turn opens and completes empty.
516
519
  await Turn.complete(this.#db, initializationTurn.id, 200);
@@ -519,7 +522,7 @@ export default class TurnRunner {
519
522
  // {§worker-initialization-entry} — the example turn shows the NOTE practice the card teaches:
520
523
  // when the surveys run, one NOTE opens them and one closes them.
521
524
  const programStatements = admittedInitializationStatements.some((statement) => statement.op === "FIND")
522
- ? [INITIALIZATION_NOTE, ...admittedInitializationStatements, INITIALIZATION_NEXT_NOTE]
525
+ ? [INITIALIZATION_NOTE, ...admittedInitializationStatements, INITIALIZATION_CLOSING_NOTE]
523
526
  : admittedInitializationStatements;
524
527
  const program = TurnOps.renderInternal(programStatements);
525
528
  const admitted = PlurnkParser.parseStatements(program).items.flatMap((item) => item.kind === "statement" ? [item.statement] : []);
@@ -550,18 +553,11 @@ export default class TurnRunner {
550
553
  // {§actor-boundary-catalog-preview} — the opening surveys, each admitted only when
551
554
  // its scheme is registered for the workspace. A positive filesItems caps the
552
555
  // project rows.
553
- async #catalogSurveys({ workspaceId }, { workerName, initializationPolicies, loopSequence }, filesItems) {
556
+ async #catalogSurveys({ workspaceId }, { workerName, initializationPolicies }, filesItems) {
554
557
  const catalogSchemes = await this.#db.engine_scheme_catalog_summary.all({ workspace_id: workspaceId });
555
558
  const fileItems = catalogSchemes.find(({ scheme }) => scheme === "file")?.shallow_items ?? 0;
556
559
  const fileCap = filesItems > 0 && fileItems > 0 ? Math.min(filesItems, fileItems) : null;
557
560
  const surveys = [
558
- {
559
- // Trial (#1073): the survey reads its own program, so the log carries one program verbatim
560
- // and shows that every ops:// turn is readable.
561
- op: "READ", aside: "this program",
562
- target: { kind: "url", raw: `ops://${workerName}/${loopSequence}/1`, scheme: "ops", username: null, password: null, hostname: workerName, port: null, pathname: `/${loopSequence}/1`, query: null, fragment: null },
563
- metadata: null, lineMarker: null, matcher: null, body: null, position: UNKNOWN_POSITION,
564
- },
565
561
  {
566
562
  op: "FIND", aside: null,
567
563
  target: { kind: "url", raw: "skill://*/SKILL.md", scheme: "skill", username: null, password: null, hostname: "*", port: null, pathname: "/SKILL.md", query: null, fragment: null },
@@ -910,9 +906,8 @@ export default class TurnRunner {
910
906
  attempts.railGrammar = await this.#operatorGrammar(provider);
911
907
  attempts.wellFormed = await this.#bodyChecks(workspaceId);
912
908
  const attemptLimit = readEmissionAttempts();
913
- const strikeStreak = await this.#strikes.streak(loopId);
914
909
  for (let attempt = 1; attempt <= attemptLimit;) {
915
- const verdict = await this.#issueProviderCall(args, request, attempts, attempt, strikeStreak);
910
+ const verdict = await this.#issueProviderCall(args, request, attempts, attempt);
916
911
  if (verdict === "admitted")
917
912
  break;
918
913
  if (verdict === "rejected")
@@ -963,7 +958,7 @@ export default class TurnRunner {
963
958
  // under the reasoning observer, and its classification. {§provider-recovery}
964
959
  // re-issues the same emission attempt; the parser's admission is the one verdict
965
960
  // on a completed exchange.
966
- async #issueProviderCall(args, request, attempts, attempt, strikeStreak) {
961
+ async #issueProviderCall(args, request, attempts, attempt) {
967
962
  const { provider, workspaceId, workerId, loopId } = args;
968
963
  // A recovery re-issue does not consume a grammar-emission attempt. Every
969
964
  // logical provider call still receives its own durable sequence and accounting.
@@ -993,10 +988,10 @@ export default class TurnRunner {
993
988
  }
994
989
  attempts.attemptId = attemptRow.id;
995
990
  attempts.callInFlight = true;
996
- const reasoning = this.#reasoningObserver(args, request.turnId, modelCall);
991
+ const reasoning = this.#reasoningObserver(args, request, modelCall);
997
992
  let completedResponse;
998
993
  try {
999
- completedResponse = await this.#generate(args, request, attempts, modelCall, reasoning, strikeStreak);
994
+ completedResponse = await this.#generate(args, request, attempts, modelCall, reasoning);
1000
995
  }
1001
996
  catch (error) {
1002
997
  if (error instanceof ProviderError
@@ -1034,7 +1029,7 @@ export default class TurnRunner {
1034
1029
  // {§notifications-reasoning-event} — only the parent emission is observed;
1035
1030
  // BARE has no observer on its isolated calls. Reasoning deltas cite the physical
1036
1031
  // request they stream in; a new request or the call's end closes the open span.
1037
- #reasoningObserver({ workspaceId, workerId, loopId }, turnId, modelCall) {
1032
+ #reasoningObserver({ workspaceId, workerId, loopId }, { turnId, loopSeq, seq: turnSeq }, modelCall) {
1038
1033
  let reasoningStarted = false;
1039
1034
  let reasoningRequestSequence = 0;
1040
1035
  const end = () => {
@@ -1044,6 +1039,8 @@ export default class TurnRunner {
1044
1039
  workerId,
1045
1040
  loopId,
1046
1041
  turnId,
1042
+ loopSeq,
1043
+ turnSeq,
1047
1044
  modelCallId: modelCall.id,
1048
1045
  requestSequence: reasoningRequestSequence,
1049
1046
  phase: "end",
@@ -1068,6 +1065,8 @@ export default class TurnRunner {
1068
1065
  workerId,
1069
1066
  loopId,
1070
1067
  turnId,
1068
+ loopSeq,
1069
+ turnSeq,
1071
1070
  modelCallId: modelCall.id,
1072
1071
  requestSequence: reasoningRequestSequence,
1073
1072
  phase: "start",
@@ -1077,6 +1076,8 @@ export default class TurnRunner {
1077
1076
  workerId,
1078
1077
  loopId,
1079
1078
  turnId,
1079
+ loopSeq,
1080
+ turnSeq,
1080
1081
  modelCallId: modelCall.id,
1081
1082
  requestSequence: reasoningRequestSequence,
1082
1083
  phase: "content",
@@ -1088,7 +1089,7 @@ export default class TurnRunner {
1088
1089
  // The exchange under its GenAI span: the packet's observations are recorded, the
1089
1090
  // provider generates against the wire request, and the call's accounting is
1090
1091
  // asserted whether it resolved or failed.
1091
- async #generate({ provider, workspaceId }, request, attempts, modelCall, reasoning, strikeStreak) {
1092
+ async #generate({ provider, workspaceId }, request, attempts, modelCall, reasoning) {
1092
1093
  return await observed(// {§observability-boundary}
1093
1094
  genAiRequestName(provider.model), { model: provider.model, attempt: attempts.modelCallSequence }, async (span) => {
1094
1095
  try {
@@ -1253,10 +1254,11 @@ export default class TurnRunner {
1253
1254
  if (capacityFailure) {
1254
1255
  return turnResult(request, recorded.result.status, { capacityHardStop: true, capacityFailure: recorded.result, emissionAttempts });
1255
1256
  }
1256
- if (err instanceof ProviderError && err.kind === "invalid_response") {
1257
- // {§engine-rails} Contract Strikes: the provider violated its response
1258
- // contract. The failure is durable and the turn is complete; the strike
1259
- // rail — never an instant loop death — rules whether the streak ends it.
1257
+ if (err instanceof ProviderError && (err.kind === "invalid_response" || err.kind === "generation_failed")) {
1258
+ // {§engine-rails} Contract Strikes: the provider violated its response contract, or
1259
+ // ended generation with an error ({§provider-generation-failed}). The failure is durable
1260
+ // and the turn is complete; the strike rail — never an instant loop death — rules whether
1261
+ // the streak ends it.
1260
1262
  return turnResult(request, recorded.result.status, {
1261
1263
  outcomes: [{ op: null, status: recorded.result.status, problemType: recorded.result.problem?.type ?? null }],
1262
1264
  fingerprint: `provider-contract-violation:${turnId}`,
@@ -1409,7 +1411,7 @@ export default class TurnRunner {
1409
1411
  model: callMetadata.model,
1410
1412
  // Opaque provider metadata plus the grammar transport key.
1411
1413
  // {§meta-passthrough}, {§operator-grammar}
1412
- meta: JSON.stringify({ ...(response.meta ?? {}), ...(railKeys ?? {}) }),
1414
+ meta: JSON.stringify({ ...response.meta, ...railKeys }),
1413
1415
  },
1414
1416
  });
1415
1417
  }
@@ -1454,6 +1456,16 @@ export default class TurnRunner {
1454
1456
  onDispatch,
1455
1457
  onSettled,
1456
1458
  });
1459
+ // {§continued-without-note} — a turn the loop continues past or parks on, having carried no NOTE
1460
+ // forward in its program or from its reasoning, is told so in the next packet, in the card's own
1461
+ // words. An empty turn has its own no-operation row instead.
1462
+ const ops = split.packetAssistant.ops;
1463
+ if ((executed.status === 102 || executed.status === 202) && ops.length > 0
1464
+ && !ops.some((statement) => "op" in statement && statement.op === "NOTE")) {
1465
+ this.#notices.push(workspaceId, workerId, loopId, {
1466
+ source: "engine:turn", kind: "continued_without_note", level: "warn", directive: DIRECTIVE.note, message: CONTINUED_WITHOUT_NOTE,
1467
+ });
1468
+ }
1457
1469
  return turnResult(request, executed.status, {
1458
1470
  outcomes: executed.outcomes,
1459
1471
  progressed: executed.progressed,
@@ -1512,111 +1524,14 @@ export default class TurnRunner {
1512
1524
  }
1513
1525
  #splitResponse(response, executors = [], wellFormed) {
1514
1526
  const { assistant } = response;
1515
- const preParsedOps = assistant.ops;
1516
- const ops = [];
1517
- const parseErrors = [];
1518
- let contentStatementCount = 0;
1519
- let hasUnparsedTail = false;
1520
- let operationOmitted = false;
1521
- const parseNotices = [];
1522
- const fabrications = [];
1523
- const outside = [];
1524
- if (preParsedOps !== undefined) {
1525
- ops.push(...preParsedOps);
1526
- contentStatementCount = preParsedOps.length;
1527
- }
1528
- else {
1529
- // {§observability-boundary} — the parse is observed without its input;
1530
- // only the resulting statement count is attributable.
1531
- const parsed = observedSync("contracts.parse", {}, (span) => {
1532
- // {§executor-heading}: explicit invocations parse without registration; available names
1533
- // also admit slotless headings. Dispatch resolves the then-current workspace registry.
1534
- const result = PlurnkParser.parse(assistant.content, { executors, ...(wellFormed === undefined ? {} : { wellFormed }) });
1535
- span.setAttribute("statements", result.items.filter((item) => item.kind === "statement").length);
1536
- return result;
1537
- });
1538
- // {§outside-text}: beside a fenced operation, the text between two operations is one NOTE at its
1539
- // position, annotation the model wrote without its fence; a turn that fenced no operation keeps
1540
- // its text as its outside source and stays an empty turn ({§empty-turn}). Echoed emission
1541
- // headings are announcements, not annotation, and are dropped ({§fabricated-log-entry}).
1542
- const fenced = parsed.items.filter((item) => item.kind === "statement").length;
1543
- let span = null;
1544
- const flushSpan = () => {
1545
- if (span === null)
1546
- return;
1547
- const body = span.body.join("\n\n");
1548
- if (body.length > 0) {
1549
- if (fenced > 0) {
1550
- ops.push({ op: "NOTE", aside: null, metadata: null, target: null, lineMarker: null, body, position: span.position });
1551
- contentStatementCount += 1;
1552
- }
1553
- else
1554
- outside.push(body);
1555
- }
1556
- span = null;
1527
+ // A scripted provider's pre-parsed statements, each proven against the statement schema.
1528
+ const preParsedOps = "ops" in assistant && Array.isArray(assistant.ops) ? assistant.ops.map((op) => Validator.assertPlurnkStatement(op)) : undefined;
1529
+ const { ops, contentStatementCount, parseErrors, parseNotices, fabrications, outside, hasUnparsedTail, operationOmitted } = preParsedOps === undefined
1530
+ ? TurnRunner.#parseContent(assistant.content, executors, wellFormed)
1531
+ : {
1532
+ ops: [...preParsedOps], contentStatementCount: preParsedOps.length, parseErrors: [], parseNotices: [], fabrications: [],
1533
+ outside: [], hasUnparsedTail: false, operationOmitted: false,
1557
1534
  };
1558
- for (const item of parsed.items) {
1559
- if (item.kind !== "text")
1560
- flushSpan();
1561
- if (item.kind === "statement") {
1562
- ops.push(item.statement);
1563
- contentStatementCount += 1;
1564
- }
1565
- else if (item.kind === "text") {
1566
- // {§fabricated-log-entry}: a log-entry heading in outside text rejects the attempt.
1567
- const fabricated = FabricatedLog.find(item.content);
1568
- if (fabricated !== null) {
1569
- fabrications.push({ message: FabricatedLog.message(fabricated.heading), line: item.position.line + fabricated.line, column: 1, source: "harness" });
1570
- continue;
1571
- }
1572
- const body = FabricatedLog.stripEchoes(item.content);
1573
- if (body.length === 0)
1574
- continue;
1575
- span ??= { body: [], position: item.position };
1576
- span.body.push(body);
1577
- }
1578
- else if (item.kind === "error") {
1579
- const err = item.error;
1580
- if (err instanceof PlurnkParseError) {
1581
- operationOmitted ||= err.operationOmitted;
1582
- if (err.severity === "warning") {
1583
- parseNotices.push({
1584
- source: "grammar",
1585
- kind: "parse_advisory",
1586
- level: "warn",
1587
- directive: DIRECTIVE.advisory,
1588
- message: err.message,
1589
- position: {
1590
- type: "content-offset",
1591
- line: err.line,
1592
- column: err.column,
1593
- },
1594
- parserSource: err.source,
1595
- });
1596
- }
1597
- else {
1598
- parseErrors.push({ message: err.message, line: err.line, column: err.column, source: err.source,
1599
- ...(err.recovery === undefined ? {} : { recovery: err.recovery }),
1600
- ...(item.attempt === undefined ? {} : { attempt: item.attempt }) });
1601
- }
1602
- }
1603
- else {
1604
- const msg = err?.message ?? "parse error";
1605
- parseErrors.push({ message: msg, line: 0, column: 0, source: "parser" });
1606
- }
1607
- }
1608
- }
1609
- flushSpan();
1610
- // {§unparsed-tail-boundary} — the lexer's one boundary fact: from `unparsedTail.from` on,
1611
- // nothing was read. The statements that closed before it are ordinary facts and run; the
1612
- // loss itself is one more hard diagnostic, a failed row the model sees. An emission that
1613
- // lost its boundary before any statement closed has nothing admissible and is resampled.
1614
- const tail = parsed.unparsedTail;
1615
- if (tail !== undefined) {
1616
- hasUnparsedTail = true;
1617
- parseErrors.push({ message: tail.reason, line: tail.from.line, column: tail.from.column, source: "grammar" });
1618
- }
1619
- }
1620
1535
  const reasoning = assistant.reasoning ?? null;
1621
1536
  const reasoningOps = reasoning === null ? [] : PlurnkParser.parseReasoningOperations(reasoning, (warning) => {
1622
1537
  parseNotices.push({
@@ -1665,6 +1580,115 @@ export default class TurnRunner {
1665
1580
  emissionStatements,
1666
1581
  };
1667
1582
  }
1583
+ // {§outside-text} {§fabricated-log-entry} {§unparsed-tail-boundary} An emission's content parsed into its
1584
+ // statements and what sat beside them: outside text as NOTEs or the empty turn's source, a fabricated log
1585
+ // heading as the rejection it is, each parse error by its severity, and the lexer's one boundary fact.
1586
+ static #parseContent(content, executors, wellFormed) {
1587
+ const ops = [];
1588
+ const parseErrors = [];
1589
+ let contentStatementCount = 0;
1590
+ let hasUnparsedTail = false;
1591
+ let operationOmitted = false;
1592
+ const parseNotices = [];
1593
+ const fabrications = [];
1594
+ const outside = [];
1595
+ // {§observability-boundary} — the parse is observed without its input;
1596
+ // only the resulting statement count is attributable.
1597
+ const parsed = observedSync("contracts.parse", {}, (span) => {
1598
+ // {§executor-heading}: explicit invocations parse without registration; available names
1599
+ // also admit slotless headings. Dispatch resolves the then-current workspace registry.
1600
+ const result = PlurnkParser.parse(content, { executors, ...(wellFormed === undefined ? {} : { wellFormed }) });
1601
+ span.setAttribute("statements", result.items.filter((item) => item.kind === "statement").length);
1602
+ return result;
1603
+ });
1604
+ // {§outside-text}: beside a fenced operation, the text between two operations is one NOTE at its
1605
+ // position, annotation the model wrote without its fence; a turn that fenced no operation keeps
1606
+ // its text as its outside source and stays an empty turn ({§empty-turn}). Echoed emission
1607
+ // headings are announcements, not annotation, and are dropped ({§fabricated-log-entry}).
1608
+ const fenced = parsed.items.filter((item) => item.kind === "statement").length;
1609
+ let span = null;
1610
+ const flushSpan = () => {
1611
+ if (span === null)
1612
+ return;
1613
+ const body = span.body.join("\n\n");
1614
+ if (body.length > 0) {
1615
+ if (fenced > 0) {
1616
+ ops.push({ op: "NOTE", aside: null, metadata: null, target: null, lineMarker: null, body, position: span.position });
1617
+ contentStatementCount += 1;
1618
+ }
1619
+ else
1620
+ outside.push(body);
1621
+ }
1622
+ span = null;
1623
+ };
1624
+ for (const item of parsed.items) {
1625
+ if (item.kind !== "text")
1626
+ flushSpan();
1627
+ if (item.kind === "statement") {
1628
+ ops.push(item.statement);
1629
+ contentStatementCount += 1;
1630
+ }
1631
+ else if (item.kind === "text") {
1632
+ // {§fabricated-log-entry}: a log-entry heading in outside text rejects the attempt.
1633
+ const fabricated = FabricatedLog.find(item.content);
1634
+ if (fabricated !== null) {
1635
+ fabrications.push({ message: FabricatedLog.message(fabricated.heading), line: item.position.line + fabricated.line, column: 1, source: "harness" });
1636
+ continue;
1637
+ }
1638
+ const body = FabricatedLog.stripEchoes(item.content);
1639
+ if (body.length === 0)
1640
+ continue;
1641
+ span ??= { body: [], position: item.position };
1642
+ span.body.push(body);
1643
+ }
1644
+ else if (item.kind === "error") {
1645
+ operationOmitted ||= TurnRunner.#admitParseError(item, parseErrors, parseNotices);
1646
+ }
1647
+ }
1648
+ flushSpan();
1649
+ // {§unparsed-tail-boundary} — the lexer's one boundary fact: from `unparsedTail.from` on,
1650
+ // nothing was read. The statements that closed before it are ordinary facts and run; the
1651
+ // loss itself is one more hard diagnostic, a failed row the model sees. An emission that
1652
+ // lost its boundary before any statement closed has nothing admissible and is resampled.
1653
+ const tail = parsed.unparsedTail;
1654
+ if (tail !== undefined) {
1655
+ hasUnparsedTail = true;
1656
+ parseErrors.push({ message: tail.reason, line: tail.from.line, column: tail.from.column, source: "grammar" });
1657
+ }
1658
+ return { ops, contentStatementCount, parseErrors, parseNotices, fabrications, outside, hasUnparsedTail, operationOmitted };
1659
+ }
1660
+ // One parse error by its severity: an advisory is a grammar Notice beside the turn; an error is a diagnostic
1661
+ // the model sees, with its recovery and the attempt it came from. Returns whether an operation was omitted.
1662
+ static #admitParseError(item, parseErrors, parseNotices) {
1663
+ const err = item.error;
1664
+ if (err instanceof PlurnkParseError) {
1665
+ if (err.severity === "warning") {
1666
+ parseNotices.push({
1667
+ source: "grammar",
1668
+ kind: "parse_advisory",
1669
+ level: "warn",
1670
+ directive: DIRECTIVE.advisory,
1671
+ message: err.message,
1672
+ position: {
1673
+ type: "content-offset",
1674
+ line: err.line,
1675
+ column: err.column,
1676
+ },
1677
+ parserSource: err.source,
1678
+ });
1679
+ }
1680
+ else {
1681
+ parseErrors.push({ message: err.message, line: err.line, column: err.column, source: err.source,
1682
+ ...(err.recovery === undefined ? {} : { recovery: err.recovery }),
1683
+ ...(item.attempt === undefined ? {} : { attempt: item.attempt }) });
1684
+ }
1685
+ }
1686
+ else {
1687
+ const msg = err?.message ?? "parse error";
1688
+ parseErrors.push({ message: msg, line: 0, column: 0, source: "parser" });
1689
+ }
1690
+ return err instanceof PlurnkParseError && err.operationOmitted;
1691
+ }
1668
1692
  // #note12 — extension reference docs are materialized beneath
1669
1693
  // worker:///_plurnk/plurnk/ by LoopDocs.
1670
1694
  // {§exec-lifetime} — a `"turn"` lifetime: abort the worker's open turn-scoped streams via their