@plurnk/plurnk-service 1.29.0 → 3.0.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 (385) hide show
  1. package/.env.defaults +14 -33
  2. package/INSTALL.md +68 -17
  3. package/README.md +9 -7
  4. package/SPEC.md +503 -741
  5. package/dist/build-info.json +1 -1
  6. package/dist/content/body-preview.d.ts.map +1 -1
  7. package/dist/content/body-preview.js +11 -2
  8. package/dist/content/body-preview.js.map +1 -1
  9. package/dist/content/edit-receipt.d.ts +1 -1
  10. package/dist/content/edit-receipt.d.ts.map +1 -1
  11. package/dist/content/edit-receipt.js +1 -1
  12. package/dist/content/edit-receipt.js.map +1 -1
  13. package/dist/content/line-marker.js +1 -1
  14. package/dist/content/line-marker.js.map +1 -1
  15. package/dist/content/path-mimetype.js +1 -1
  16. package/dist/content/path-mimetype.js.map +1 -1
  17. package/dist/content/read-projector.d.ts.map +1 -1
  18. package/dist/content/read-projector.js +3 -12
  19. package/dist/content/read-projector.js.map +1 -1
  20. package/dist/core/AdministrativeLoop.d.ts +1 -1
  21. package/dist/core/AdministrativeLoop.d.ts.map +1 -1
  22. package/dist/core/AdministrativeLoop.js +2 -6
  23. package/dist/core/AdministrativeLoop.js.map +1 -1
  24. package/dist/core/AdmittedTurnExecutor.d.ts +4 -3
  25. package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
  26. package/dist/core/AdmittedTurnExecutor.js +19 -17
  27. package/dist/core/AdmittedTurnExecutor.js.map +1 -1
  28. package/dist/core/BareBatchRunner.d.ts +2 -2
  29. package/dist/core/BareBatchRunner.d.ts.map +1 -1
  30. package/dist/core/BareBatchRunner.js.map +1 -1
  31. package/dist/core/BudgetReadout.d.ts +1 -0
  32. package/dist/core/BudgetReadout.d.ts.map +1 -1
  33. package/dist/core/BudgetReadout.js +12 -0
  34. package/dist/core/BudgetReadout.js.map +1 -1
  35. package/dist/core/CapabilityPolicies.d.ts +2 -4
  36. package/dist/core/CapabilityPolicies.d.ts.map +1 -1
  37. package/dist/core/CapabilityPolicies.js +3 -23
  38. package/dist/core/CapabilityPolicies.js.map +1 -1
  39. package/dist/core/CapabilityResolver.d.ts +9 -2
  40. package/dist/core/CapabilityResolver.d.ts.map +1 -1
  41. package/dist/core/CapabilityResolver.js +34 -5
  42. package/dist/core/CapabilityResolver.js.map +1 -1
  43. package/dist/core/ChannelWrite.d.ts +0 -2
  44. package/dist/core/ChannelWrite.d.ts.map +1 -1
  45. package/dist/core/ChannelWrite.js.map +1 -1
  46. package/dist/core/ClientInteractions.d.ts +3 -2
  47. package/dist/core/ClientInteractions.d.ts.map +1 -1
  48. package/dist/core/ClientInteractions.js +21 -12
  49. package/dist/core/ClientInteractions.js.map +1 -1
  50. package/dist/core/ClientInteractions.sql +8 -2
  51. package/dist/core/CoreSchemeServices.d.ts +1 -0
  52. package/dist/core/CoreSchemeServices.d.ts.map +1 -1
  53. package/dist/core/CoreSchemeServices.js +1 -0
  54. package/dist/core/CoreSchemeServices.js.map +1 -1
  55. package/dist/core/DataStatementRunner.js +1 -1
  56. package/dist/core/DataStatementRunner.js.map +1 -1
  57. package/dist/core/Dispatcher.d.ts +3 -2
  58. package/dist/core/Dispatcher.d.ts.map +1 -1
  59. package/dist/core/Dispatcher.js +15 -21
  60. package/dist/core/Dispatcher.js.map +1 -1
  61. package/dist/core/Engine.d.ts +2 -2
  62. package/dist/core/Engine.d.ts.map +1 -1
  63. package/dist/core/Engine.js +4 -3
  64. package/dist/core/Engine.js.map +1 -1
  65. package/dist/core/EnvFlags.d.ts.map +1 -1
  66. package/dist/core/EnvFlags.js +4 -3
  67. package/dist/core/EnvFlags.js.map +1 -1
  68. package/dist/core/ExecutorRegistry.d.ts +3 -17
  69. package/dist/core/ExecutorRegistry.d.ts.map +1 -1
  70. package/dist/core/ExecutorRegistry.js +6 -6
  71. package/dist/core/ExecutorRegistry.js.map +1 -1
  72. package/dist/core/FabricatedLog.js +1 -1
  73. package/dist/core/FabricatedLog.js.map +1 -1
  74. package/dist/core/HostPaths.d.ts +2 -1
  75. package/dist/core/HostPaths.d.ts.map +1 -1
  76. package/dist/core/HostPaths.js +14 -2
  77. package/dist/core/HostPaths.js.map +1 -1
  78. package/dist/core/KillHandler.js +1 -1
  79. package/dist/core/KillHandler.js.map +1 -1
  80. package/dist/core/LogVisibility.d.ts.map +1 -1
  81. package/dist/core/LogVisibility.js +8 -17
  82. package/dist/core/LogVisibility.js.map +1 -1
  83. package/dist/core/LoopDriver.d.ts.map +1 -1
  84. package/dist/core/LoopDriver.js +4 -6
  85. package/dist/core/LoopDriver.js.map +1 -1
  86. package/dist/core/LoopLifecycle.d.ts.map +1 -1
  87. package/dist/core/LoopLifecycle.js +4 -9
  88. package/dist/core/LoopLifecycle.js.map +1 -1
  89. package/dist/core/LoopLifecycle.sql +6 -6
  90. package/dist/core/OperatorConfig.d.ts +1 -0
  91. package/dist/core/OperatorConfig.d.ts.map +1 -1
  92. package/dist/core/OperatorConfig.js +10 -2
  93. package/dist/core/OperatorConfig.js.map +1 -1
  94. package/dist/core/PacketBuilder.d.ts +5 -7
  95. package/dist/core/PacketBuilder.d.ts.map +1 -1
  96. package/dist/core/PacketBuilder.js +49 -119
  97. package/dist/core/PacketBuilder.js.map +1 -1
  98. package/dist/core/PacketBuilder.sql +15 -0
  99. package/dist/core/ProposalLifecycle.d.ts +1 -1
  100. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  101. package/dist/core/ProposalLifecycle.js +18 -20
  102. package/dist/core/ProposalLifecycle.js.map +1 -1
  103. package/dist/core/ProposalPolicies.d.ts +6 -0
  104. package/dist/core/ProposalPolicies.d.ts.map +1 -0
  105. package/dist/core/ProposalPolicies.js +28 -0
  106. package/dist/core/ProposalPolicies.js.map +1 -0
  107. package/dist/core/ProviderInstantiate.d.ts.map +1 -1
  108. package/dist/core/ProviderInstantiate.js +3 -4
  109. package/dist/core/ProviderInstantiate.js.map +1 -1
  110. package/dist/core/ResourceSelector.js +2 -2
  111. package/dist/core/ResourceSelector.js.map +1 -1
  112. package/dist/core/ResourceTransfers.js +3 -3
  113. package/dist/core/ResourceTransfers.js.map +1 -1
  114. package/dist/core/RuntimeWorker.sql +1 -2
  115. package/dist/core/SchemeRegistry.d.ts +5 -4
  116. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  117. package/dist/core/SchemeRegistry.js +11 -12
  118. package/dist/core/SchemeRegistry.js.map +1 -1
  119. package/dist/core/ToolInputSchema.d.ts +1 -0
  120. package/dist/core/ToolInputSchema.d.ts.map +1 -1
  121. package/dist/core/ToolInputSchema.js +8 -2
  122. package/dist/core/ToolInputSchema.js.map +1 -1
  123. package/dist/core/ToolResources.d.ts +1 -0
  124. package/dist/core/ToolResources.d.ts.map +1 -1
  125. package/dist/core/ToolResources.js +12 -6
  126. package/dist/core/ToolResources.js.map +1 -1
  127. package/dist/core/Turn.js +1 -1
  128. package/dist/core/Turn.js.map +1 -1
  129. package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
  130. package/dist/core/TurnDispositionHandler.js +1 -7
  131. package/dist/core/TurnDispositionHandler.js.map +1 -1
  132. package/dist/core/TurnMaterialization.js +1 -1
  133. package/dist/core/TurnMaterialization.js.map +1 -1
  134. package/dist/core/TurnOps.d.ts +1 -1
  135. package/dist/core/TurnOps.d.ts.map +1 -1
  136. package/dist/core/TurnOps.js +4 -12
  137. package/dist/core/TurnOps.js.map +1 -1
  138. package/dist/core/TurnRunner.d.ts +1 -2
  139. package/dist/core/TurnRunner.d.ts.map +1 -1
  140. package/dist/core/TurnRunner.js +85 -81
  141. package/dist/core/TurnRunner.js.map +1 -1
  142. package/dist/core/WorkerControlHandler.d.ts.map +1 -1
  143. package/dist/core/WorkerControlHandler.js +1 -8
  144. package/dist/core/WorkerControlHandler.js.map +1 -1
  145. package/dist/core/WorkerName.d.ts +1 -0
  146. package/dist/core/WorkerName.d.ts.map +1 -1
  147. package/dist/core/WorkerName.js +2 -0
  148. package/dist/core/WorkerName.js.map +1 -1
  149. package/dist/core/WorkerName.sql +2 -2
  150. package/dist/core/WorkerOwners.d.ts +13 -0
  151. package/dist/core/WorkerOwners.d.ts.map +1 -0
  152. package/dist/core/WorkerOwners.js +44 -0
  153. package/dist/core/WorkerOwners.js.map +1 -0
  154. package/dist/core/WorkerOwners.sql +55 -0
  155. package/dist/core/caps/DbNotifyCaps.js +2 -2
  156. package/dist/core/caps/DbNotifyCaps.js.map +1 -1
  157. package/dist/core/caps/DbProjectionCaps.js +1 -1
  158. package/dist/core/caps/DbProjectionCaps.js.map +1 -1
  159. package/dist/core/env-catalog.d.ts +3 -0
  160. package/dist/core/env-catalog.d.ts.map +1 -1
  161. package/dist/core/env-catalog.js +44 -9
  162. package/dist/core/env-catalog.js.map +1 -1
  163. package/dist/core/env-defaults.d.ts +2 -1
  164. package/dist/core/env-defaults.d.ts.map +1 -1
  165. package/dist/core/env-defaults.js +17 -9
  166. package/dist/core/env-defaults.js.map +1 -1
  167. package/dist/core/fork.sql +3 -4
  168. package/dist/core/packet-inject.js +0 -2
  169. package/dist/core/packet-inject.js.map +1 -1
  170. package/dist/core/packet-wire.d.ts +2 -11
  171. package/dist/core/packet-wire.d.ts.map +1 -1
  172. package/dist/core/packet-wire.js +31 -111
  173. package/dist/core/packet-wire.js.map +1 -1
  174. package/dist/core/plurnk-uri.d.ts +1 -1
  175. package/dist/core/plurnk-uri.d.ts.map +1 -1
  176. package/dist/core/plurnk-uri.js +4 -4
  177. package/dist/core/plurnk-uri.js.map +1 -1
  178. package/dist/core/scheme-types.d.ts +2 -1
  179. package/dist/core/scheme-types.d.ts.map +1 -1
  180. package/dist/core/types.d.ts +0 -1
  181. package/dist/core/types.d.ts.map +1 -1
  182. package/dist/core/unregistered-scheme.d.ts +1 -3
  183. package/dist/core/unregistered-scheme.d.ts.map +1 -1
  184. package/dist/core/unregistered-scheme.js +3 -11
  185. package/dist/core/unregistered-scheme.js.map +1 -1
  186. package/dist/evidence/EvidenceReader.d.ts +14 -0
  187. package/dist/evidence/EvidenceReader.d.ts.map +1 -0
  188. package/dist/evidence/EvidenceReader.js +137 -0
  189. package/dist/evidence/EvidenceReader.js.map +1 -0
  190. package/dist/{digest → evidence}/digest.sql +1 -2
  191. package/dist/schemes/EffectPolicy.d.ts.map +1 -1
  192. package/dist/schemes/EffectPolicy.js +1 -10
  193. package/dist/schemes/EffectPolicy.js.map +1 -1
  194. package/dist/schemes/Exec.d.ts.map +1 -1
  195. package/dist/schemes/Exec.js +19 -26
  196. package/dist/schemes/Exec.js.map +1 -1
  197. package/dist/schemes/ExecOutputScheme.d.ts +1 -1
  198. package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
  199. package/dist/schemes/File.d.ts.map +1 -1
  200. package/dist/schemes/File.js +11 -17
  201. package/dist/schemes/File.js.map +1 -1
  202. package/dist/schemes/Log.d.ts.map +1 -1
  203. package/dist/schemes/Log.js +14 -11
  204. package/dist/schemes/Log.js.map +1 -1
  205. package/dist/schemes/QuestionTool.d.ts.map +1 -1
  206. package/dist/schemes/QuestionTool.js +1 -3
  207. package/dist/schemes/QuestionTool.js.map +1 -1
  208. package/dist/schemes/{Skill.d.ts → ResourceTreeScheme.d.ts} +5 -6
  209. package/dist/schemes/ResourceTreeScheme.d.ts.map +1 -0
  210. package/dist/schemes/{Skill.js → ResourceTreeScheme.js} +63 -43
  211. package/dist/schemes/ResourceTreeScheme.js.map +1 -0
  212. package/dist/schemes/Worker.d.ts.map +1 -1
  213. package/dist/schemes/Worker.js +7 -9
  214. package/dist/schemes/Worker.js.map +1 -1
  215. package/dist/schemes/_entry-crud.sql +1 -1
  216. package/dist/schemes/_entry-find.js +2 -2
  217. package/dist/schemes/_entry-find.js.map +1 -1
  218. package/dist/schemes/_entry-find.sql +1 -1
  219. package/dist/schemes/_entry-fts.d.ts.map +1 -1
  220. package/dist/schemes/_entry-fts.js +3 -9
  221. package/dist/schemes/_entry-fts.js.map +1 -1
  222. package/dist/schemes/_entry-manifest.js +1 -1
  223. package/dist/schemes/_entry-manifest.js.map +1 -1
  224. package/dist/schemes/_entry-ops.js +1 -1
  225. package/dist/schemes/_entry-ops.js.map +1 -1
  226. package/dist/server/AgentRoots.d.ts +2 -1
  227. package/dist/server/AgentRoots.d.ts.map +1 -1
  228. package/dist/server/AgentRoots.js +13 -10
  229. package/dist/server/AgentRoots.js.map +1 -1
  230. package/dist/server/ConfigurationDiagnostics.d.ts +5 -3
  231. package/dist/server/ConfigurationDiagnostics.d.ts.map +1 -1
  232. package/dist/server/ConfigurationDiagnostics.js +24 -8
  233. package/dist/server/ConfigurationDiagnostics.js.map +1 -1
  234. package/dist/server/Daemon.d.ts +25 -16
  235. package/dist/server/Daemon.d.ts.map +1 -1
  236. package/dist/server/Daemon.js +137 -96
  237. package/dist/server/Daemon.js.map +1 -1
  238. package/dist/server/DrainSupervisor.d.ts +1 -4
  239. package/dist/server/DrainSupervisor.d.ts.map +1 -1
  240. package/dist/server/DrainSupervisor.js +1 -11
  241. package/dist/server/DrainSupervisor.js.map +1 -1
  242. package/dist/server/EnvFunctionality.d.ts +3 -5
  243. package/dist/server/EnvFunctionality.d.ts.map +1 -1
  244. package/dist/server/EnvFunctionality.js +5 -7
  245. package/dist/server/EnvFunctionality.js.map +1 -1
  246. package/dist/server/Functionality.d.ts +3 -2
  247. package/dist/server/Functionality.d.ts.map +1 -1
  248. package/dist/server/Functionality.js +43 -14
  249. package/dist/server/Functionality.js.map +1 -1
  250. package/dist/server/FunctionalityManager.d.ts +3 -4
  251. package/dist/server/FunctionalityManager.d.ts.map +1 -1
  252. package/dist/server/FunctionalityManager.js +17 -9
  253. package/dist/server/FunctionalityManager.js.map +1 -1
  254. package/dist/server/HttpListener.d.ts +2 -0
  255. package/dist/server/HttpListener.d.ts.map +1 -1
  256. package/dist/server/HttpListener.js +23 -9
  257. package/dist/server/HttpListener.js.map +1 -1
  258. package/dist/server/MembersFunctionality.d.ts +2 -5
  259. package/dist/server/MembersFunctionality.d.ts.map +1 -1
  260. package/dist/server/MembersFunctionality.js +5 -3
  261. package/dist/server/MembersFunctionality.js.map +1 -1
  262. package/dist/server/ModuleHost.d.ts +33 -0
  263. package/dist/server/ModuleHost.d.ts.map +1 -0
  264. package/dist/server/ModuleHost.js +2 -0
  265. package/dist/server/ModuleHost.js.map +1 -0
  266. package/dist/server/PlurnkSkill.d.ts.map +1 -1
  267. package/dist/server/PlurnkSkill.js +54 -6
  268. package/dist/server/PlurnkSkill.js.map +1 -1
  269. package/dist/server/ServiceModules.d.ts +0 -2
  270. package/dist/server/ServiceModules.d.ts.map +1 -1
  271. package/dist/server/ServiceModules.js +5 -9
  272. package/dist/server/ServiceModules.js.map +1 -1
  273. package/dist/server/WorkspacePlugins.d.ts +2 -11
  274. package/dist/server/WorkspacePlugins.d.ts.map +1 -1
  275. package/dist/server/WorkspacePlugins.js.map +1 -1
  276. package/dist/server/WorkspaceResidency.d.ts +2 -1
  277. package/dist/server/WorkspaceResidency.d.ts.map +1 -1
  278. package/dist/server/WorkspaceStorage.d.ts.map +1 -1
  279. package/dist/server/WorkspaceStorage.js +7 -4
  280. package/dist/server/WorkspaceStorage.js.map +1 -1
  281. package/dist/server/client-input.d.ts +1 -2
  282. package/dist/server/client-input.d.ts.map +1 -1
  283. package/dist/server/client-input.js +2 -13
  284. package/dist/server/client-input.js.map +1 -1
  285. package/dist/server/dispatch-as-plurnk.js +1 -1
  286. package/dist/server/dispatch-as-plurnk.js.map +1 -1
  287. package/dist/server/drain.sql +6 -6
  288. package/dist/server/envelope.d.ts +2 -1
  289. package/dist/server/envelope.d.ts.map +1 -1
  290. package/dist/server/envelope.js +7 -17
  291. package/dist/server/envelope.js.map +1 -1
  292. package/dist/server/envelope.sql +5 -5
  293. package/dist/server/module-discovery.d.ts +11 -3
  294. package/dist/server/module-discovery.d.ts.map +1 -1
  295. package/dist/server/module-discovery.js +32 -18
  296. package/dist/server/module-discovery.js.map +1 -1
  297. package/dist/server/seam-proposal-list.sql +6 -4
  298. package/dist/service.d.ts.map +1 -1
  299. package/dist/service.js +58 -65
  300. package/dist/service.js.map +1 -1
  301. package/migrations/003_loops.sql +2 -2
  302. package/migrations/006_log.sql +1 -1
  303. package/migrations/016_selection_statements.sql +44 -0
  304. package/migrations/017_skills_module.sql +6 -0
  305. package/migrations/018_worker_owners.sql +102 -0
  306. package/migrations/019_interactive_owners.sql +6 -0
  307. package/migrations/020_log_projection.sql +143 -0
  308. package/package.json +71 -76
  309. package/dist/core/EmissionHead.d.ts +0 -8
  310. package/dist/core/EmissionHead.d.ts.map +0 -1
  311. package/dist/core/EmissionHead.js +0 -29
  312. package/dist/core/EmissionHead.js.map +0 -1
  313. package/dist/core/LegacyHome.d.ts +0 -10
  314. package/dist/core/LegacyHome.d.ts.map +0 -1
  315. package/dist/core/LegacyHome.js +0 -170
  316. package/dist/core/LegacyHome.js.map +0 -1
  317. package/dist/core/LoopPolicies.d.ts +0 -7
  318. package/dist/core/LoopPolicies.d.ts.map +0 -1
  319. package/dist/core/LoopPolicies.js +0 -42
  320. package/dist/core/LoopPolicies.js.map +0 -1
  321. package/dist/core/LoopPolicyReader.d.ts +0 -7
  322. package/dist/core/LoopPolicyReader.d.ts.map +0 -1
  323. package/dist/core/LoopPolicyReader.js +0 -33
  324. package/dist/core/LoopPolicyReader.js.map +0 -1
  325. package/dist/core/LoopPolicyReader.sql +0 -6
  326. package/dist/core/operation-target-groups.d.ts +0 -3
  327. package/dist/core/operation-target-groups.d.ts.map +0 -1
  328. package/dist/core/operation-target-groups.js +0 -77
  329. package/dist/core/operation-target-groups.js.map +0 -1
  330. package/dist/digest/Digest.d.ts +0 -10
  331. package/dist/digest/Digest.d.ts.map +0 -1
  332. package/dist/digest/Digest.js +0 -252
  333. package/dist/digest/Digest.js.map +0 -1
  334. package/dist/digest/DigestEvidence.d.ts +0 -11
  335. package/dist/digest/DigestEvidence.d.ts.map +0 -1
  336. package/dist/digest/DigestEvidence.js +0 -66
  337. package/dist/digest/DigestEvidence.js.map +0 -1
  338. package/dist/digest/DigestRender.d.ts +0 -18
  339. package/dist/digest/DigestRender.d.ts.map +0 -1
  340. package/dist/digest/DigestRender.js +0 -1044
  341. package/dist/digest/DigestRender.js.map +0 -1
  342. package/dist/digest/DigestRequiem.d.ts +0 -13
  343. package/dist/digest/DigestRequiem.d.ts.map +0 -1
  344. package/dist/digest/DigestRequiem.js +0 -337
  345. package/dist/digest/DigestRequiem.js.map +0 -1
  346. package/dist/digest/digest-db.d.ts +0 -3
  347. package/dist/digest/digest-db.d.ts.map +0 -1
  348. package/dist/digest/digest-db.js +0 -68
  349. package/dist/digest/digest-db.js.map +0 -1
  350. package/dist/digest/digest-paths.d.ts +0 -6
  351. package/dist/digest/digest-paths.d.ts.map +0 -1
  352. package/dist/digest/digest-paths.js +0 -14
  353. package/dist/digest/digest-paths.js.map +0 -1
  354. package/dist/digest/digest-rows.d.ts +0 -346
  355. package/dist/digest/digest-rows.d.ts.map +0 -1
  356. package/dist/digest/digest-rows.js +0 -2
  357. package/dist/digest/digest-rows.js.map +0 -1
  358. package/dist/index.d.ts +0 -15
  359. package/dist/index.d.ts.map +0 -1
  360. package/dist/index.js +0 -23
  361. package/dist/index.js.map +0 -1
  362. package/dist/schemes/Skill.d.ts.map +0 -1
  363. package/dist/schemes/Skill.js.map +0 -1
  364. package/dist/server/DaemonModule.d.ts +0 -101
  365. package/dist/server/DaemonModule.d.ts.map +0 -1
  366. package/dist/server/DaemonModule.js +0 -2
  367. package/dist/server/DaemonModule.js.map +0 -1
  368. package/dist/server/SkillSource.d.ts +0 -37
  369. package/dist/server/SkillSource.d.ts.map +0 -1
  370. package/dist/server/SkillSource.js +0 -267
  371. package/dist/server/SkillSource.js.map +0 -1
  372. package/dist/server/SkillsFunctionality.d.ts +0 -45
  373. package/dist/server/SkillsFunctionality.d.ts.map +0 -1
  374. package/dist/server/SkillsFunctionality.js +0 -405
  375. package/dist/server/SkillsFunctionality.js.map +0 -1
  376. package/dist/server/skills-problems.d.ts +0 -8
  377. package/dist/server/skills-problems.d.ts.map +0 -1
  378. package/dist/server/skills-problems.js +0 -18
  379. package/dist/server/skills-problems.js.map +0 -1
  380. package/dist/share/Share.d.ts +0 -15
  381. package/dist/share/Share.d.ts.map +0 -1
  382. package/dist/share/Share.js +0 -106
  383. package/dist/share/Share.js.map +0 -1
  384. package/dist/share/share.sql +0 -6
  385. package/docs/skills.md +0 -73
@@ -0,0 +1,143 @@
1
+ -- MIGRATE: 20 log projection
2
+ -- {§worker-wait-timing} A WAIT receipt's `waiting` is the accepted maximum in non-negative seconds;
3
+ -- a receipt without one carries no bound. The attrs guard is redeclared around this one rewrite.
4
+ DROP TRIGGER IF EXISTS log_entries_immutable_attrs;
5
+
6
+ UPDATE log_entries
7
+ SET attrs = json_remove(attrs, '$.waiting')
8
+ WHERE op = 'WAIT' AND json_extract(attrs, '$.waiting') = -1;
9
+
10
+ CREATE TRIGGER log_entries_immutable_attrs
11
+ BEFORE UPDATE OF attrs ON log_entries
12
+ WHEN COALESCE((
13
+ json_type(OLD.attrs, '$.__plurnk_curation') = 'object'
14
+ AND NEW.attrs = json_remove(OLD.attrs, '$.__plurnk_curation')
15
+ ), 0) = 0
16
+ BEGIN
17
+ SELECT RAISE(ABORT, 'log_entries attrs are immutable outside curation payload removal');
18
+ END;
19
+
20
+ -- {§log-history-projection} A projection row is its event's membership and folded intervals.
21
+ -- No foreign key points at log_entry_projections, so the table is rebuilt with those columns
22
+ -- ({§db-migrations}). The view that reads it and the process triggers that name it would be
23
+ -- re-resolved by the RENAME while the table is absent, so they are dropped first: the view is
24
+ -- redeclared below and the processes on the next open ({§db-process-triggers}).
25
+ CREATE TABLE log_entry_projections_rebuilt (
26
+ log_entry_id INTEGER NOT NULL PRIMARY KEY,
27
+ active INTEGER NOT NULL DEFAULT 1 CHECK (active IN (0, 1)),
28
+ folded TEXT NOT NULL DEFAULT '[]'
29
+ CHECK (json_valid(folded) AND json_type(folded) = 'array'),
30
+ FOREIGN KEY (log_entry_id) REFERENCES log_entries(id) ON DELETE CASCADE
31
+ ) STRICT, WITHOUT ROWID;
32
+
33
+ INSERT INTO log_entry_projections_rebuilt (log_entry_id, active, folded)
34
+ SELECT log_entry_id, active, folded FROM log_entry_projections;
35
+
36
+ DROP VIEW IF EXISTS active_log_entries;
37
+ DROP TRIGGER IF EXISTS log_entries_initialize_projection;
38
+ DROP TRIGGER IF EXISTS log_entries_apply_curation;
39
+ DROP TRIGGER IF EXISTS workers_fork_copies_history;
40
+ DROP TRIGGER IF EXISTS log_output_admission_immutable;
41
+ DROP TRIGGER IF EXISTS log_output_admission_owner;
42
+ DROP TABLE log_entry_projections;
43
+ ALTER TABLE log_entry_projections_rebuilt RENAME TO log_entry_projections;
44
+
45
+ -- A folded interval is an inclusive [start,end] pair. Ranges are positive,
46
+ -- sorted, disjoint, and non-adjacent; -1 is the final open-ended endpoint.
47
+ -- Canonical intervals make visibility equality and curation effects exact.
48
+ CREATE TRIGGER log_entry_projections_folded_valid_insert
49
+ BEFORE INSERT ON log_entry_projections
50
+ WHEN EXISTS (
51
+ SELECT 1
52
+ FROM json_each(NEW.folded) range
53
+ WHERE range.type != 'array'
54
+ OR json_array_length(range.value) != 2
55
+ OR COALESCE(json_type(range.value, '$[0]'), '') != 'integer'
56
+ OR COALESCE(json_type(range.value, '$[1]'), '') != 'integer'
57
+ OR json_extract(range.value, '$[0]') < 1
58
+ OR (
59
+ json_extract(range.value, '$[1]') != -1
60
+ AND json_extract(range.value, '$[1]') < json_extract(range.value, '$[0]')
61
+ )
62
+ OR EXISTS (
63
+ SELECT 1
64
+ FROM json_each(NEW.folded) previous
65
+ WHERE previous.key = range.key - 1
66
+ AND (
67
+ json_extract(previous.value, '$[1]') = -1
68
+ OR json_extract(range.value, '$[0]') <= json_extract(previous.value, '$[1]') + 1
69
+ )
70
+ )
71
+ )
72
+ BEGIN
73
+ SELECT RAISE(ABORT, 'log entry projection folded ranges are invalid');
74
+ END;
75
+
76
+ CREATE TRIGGER log_entry_projections_folded_valid_update
77
+ BEFORE UPDATE OF folded ON log_entry_projections
78
+ WHEN EXISTS (
79
+ SELECT 1
80
+ FROM json_each(NEW.folded) range
81
+ WHERE range.type != 'array'
82
+ OR json_array_length(range.value) != 2
83
+ OR COALESCE(json_type(range.value, '$[0]'), '') != 'integer'
84
+ OR COALESCE(json_type(range.value, '$[1]'), '') != 'integer'
85
+ OR json_extract(range.value, '$[0]') < 1
86
+ OR (
87
+ json_extract(range.value, '$[1]') != -1
88
+ AND json_extract(range.value, '$[1]') < json_extract(range.value, '$[0]')
89
+ )
90
+ OR EXISTS (
91
+ SELECT 1
92
+ FROM json_each(NEW.folded) previous
93
+ WHERE previous.key = range.key - 1
94
+ AND (
95
+ json_extract(previous.value, '$[1]') = -1
96
+ OR json_extract(range.value, '$[0]') <= json_extract(previous.value, '$[1]') + 1
97
+ )
98
+ )
99
+ )
100
+ BEGIN
101
+ SELECT RAISE(ABORT, 'log entry projection folded ranges are invalid');
102
+ END;
103
+
104
+ CREATE TRIGGER log_entry_projections_kill_terminal
105
+ BEFORE UPDATE OF active ON log_entry_projections
106
+ WHEN OLD.active = 0 AND NEW.active != 0
107
+ BEGIN
108
+ SELECT RAISE(ABORT, 'a killed log entry cannot re-enter the active projection');
109
+ END;
110
+
111
+ CREATE TRIGGER log_entry_projections_delete_with_event_only
112
+ BEFORE DELETE ON log_entry_projections
113
+ WHEN EXISTS (SELECT 1 FROM log_entries WHERE id = OLD.log_entry_id)
114
+ BEGIN
115
+ SELECT RAISE(ABORT, 'a durable log event must retain its projection');
116
+ END;
117
+
118
+ -- {§emission-row} An emission is curated whole: its projection is retired, never trimmed.
119
+ CREATE TRIGGER log_entry_projections_emission_whole
120
+ BEFORE UPDATE OF folded ON log_entry_projections
121
+ WHEN json(NEW.folded) != json('[]')
122
+ AND EXISTS (
123
+ SELECT 1 FROM log_entries
124
+ WHERE id = NEW.log_entry_id AND json_extract(attrs, '$.kind') = 'emission'
125
+ )
126
+ BEGIN
127
+ SELECT RAISE(ABORT, 'an emission row is curated whole');
128
+ END;
129
+
130
+ -- The ordinary operation surface reads this view. Forensic and lifecycle
131
+ -- machinery names log_entries directly and therefore retains complete history.
132
+ CREATE VIEW active_log_entries AS
133
+ SELECT le.id, le.version, le.worker_id, le.loop_id, le.turn_id, le.sequence,
134
+ le.at, le.origin, le.source, le.ambient_event_id, le.inherited_history,
135
+ le.deep_hash, le.model_call_id, le.subscription_publication_id,
136
+ le.op, le.signal, le.scheme, le.username, le.password,
137
+ le.hostname, le.port, le.pathname, le.query, le.fragment, le.lineMarker,
138
+ le.tx, le.mimetype_tx,
139
+ le.rx, le.mimetype_rx, le.status_rx, le.weight,
140
+ le.state, le.outcome, le.attrs, le.initial_folded, projection.folded
141
+ FROM log_entries le
142
+ JOIN log_entry_projections projection ON projection.log_entry_id = le.id
143
+ WHERE projection.active = 1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plurnk/plurnk-service",
3
- "version": "1.29.0",
3
+ "version": "3.0.0",
4
4
  "description": "Plurnk agent runtime — the server / engine / core. Implements the @plurnk/plurnk-contracts contract.",
5
5
  "keywords": [
6
6
  "plurnk",
@@ -17,23 +17,15 @@
17
17
  "node": ">=26"
18
18
  },
19
19
  "exports": {
20
- ".": {
21
- "types": "./dist/index.d.ts",
22
- "default": "./dist/index.js"
23
- },
24
- "./digest": {
25
- "types": "./dist/digest/Digest.d.ts",
26
- "default": "./dist/digest/Digest.js"
27
- },
28
- "./share": {
29
- "types": "./dist/share/Share.d.ts",
30
- "default": "./dist/share/Share.js"
31
- },
32
20
  "./launch": {
33
21
  "types": "./dist/launch/Launch.d.ts",
34
22
  "default": "./dist/launch/Launch.js"
35
23
  },
36
- "./package.json": "./package.json"
24
+ "./package.json": "./package.json",
25
+ "./evidence": {
26
+ "types": "./dist/evidence/EvidenceReader.d.ts",
27
+ "default": "./dist/evidence/EvidenceReader.js"
28
+ }
37
29
  },
38
30
  "bin": {
39
31
  "plurnk-service": "dist/service.js"
@@ -95,68 +87,70 @@
95
87
  "@opentelemetry/resources": "^2.11.0",
96
88
  "@opentelemetry/sdk-metrics": "^2.11.0",
97
89
  "@opentelemetry/sdk-trace-base": "^2.11.0",
98
- "@plurnk/plurnk-a2a": "1.29.0",
99
- "@plurnk/plurnk-agui": "1.29.0",
100
- "@plurnk/plurnk-contracts": "1.29.0",
101
- "@plurnk/plurnk-parser": "1.29.0",
102
- "@plurnk/plurnk-schedule": "1.29.0",
103
- "@plurnk/plurnk-execs": "1.29.0",
104
- "@plurnk/plurnk-execs-common": "1.29.0",
105
- "@plurnk/plurnk-execs-jq": "1.29.0",
106
- "@plurnk/plurnk-execs-sqlite": "1.29.0",
107
- "@plurnk/plurnk-hooks": "1.29.0",
108
- "@plurnk/plurnk-mcp": "1.29.0",
109
- "@plurnk/plurnk-meta": "1.29.0",
110
- "@plurnk/plurnk-agent-plugins": "1.29.0",
111
- "@plurnk/plurnk-agent-skills": "1.29.0",
112
- "@plurnk/plurnk-mimetypes": "1.29.0",
113
- "@plurnk/plurnk-mimetypes-application-ipynb": "1.29.0",
114
- "@plurnk/plurnk-mimetypes-application-json": "1.29.0",
115
- "@plurnk/plurnk-mimetypes-application-jsonl": "1.29.0",
116
- "@plurnk/plurnk-mimetypes-application-xml": "1.29.0",
117
- "@plurnk/plurnk-mimetypes-grammar-bash": "1.16.2",
118
- "@plurnk/plurnk-mimetypes-grammar-c": "1.16.2",
119
- "@plurnk/plurnk-mimetypes-grammar-cpp": "1.16.2",
120
- "@plurnk/plurnk-mimetypes-grammar-css": "1.16.2",
121
- "@plurnk/plurnk-mimetypes-grammar-dart": "1.16.2",
122
- "@plurnk/plurnk-mimetypes-grammar-elixir": "1.16.2",
123
- "@plurnk/plurnk-mimetypes-grammar-go": "1.16.2",
124
- "@plurnk/plurnk-mimetypes-grammar-haskell": "1.16.2",
125
- "@plurnk/plurnk-mimetypes-grammar-java": "1.16.2",
126
- "@plurnk/plurnk-mimetypes-grammar-javascript": "1.16.2",
127
- "@plurnk/plurnk-mimetypes-grammar-julia": "1.16.2",
128
- "@plurnk/plurnk-mimetypes-grammar-kotlin": "1.16.2",
129
- "@plurnk/plurnk-mimetypes-grammar-lua": "1.16.2",
130
- "@plurnk/plurnk-mimetypes-grammar-make": "1.16.2",
131
- "@plurnk/plurnk-mimetypes-grammar-ocaml": "1.16.2",
132
- "@plurnk/plurnk-mimetypes-grammar-odin": "1.16.2",
133
- "@plurnk/plurnk-mimetypes-grammar-php": "1.16.2",
134
- "@plurnk/plurnk-mimetypes-grammar-python": "1.16.2",
135
- "@plurnk/plurnk-mimetypes-grammar-ruby": "1.16.2",
136
- "@plurnk/plurnk-mimetypes-grammar-rust": "1.16.2",
137
- "@plurnk/plurnk-mimetypes-grammar-scala": "1.16.2",
138
- "@plurnk/plurnk-mimetypes-grammar-toml": "1.16.2",
139
- "@plurnk/plurnk-mimetypes-grammar-tsx": "1.16.2",
140
- "@plurnk/plurnk-mimetypes-grammar-typescript": "1.16.2",
141
- "@plurnk/plurnk-mimetypes-grammar-yaml": "1.16.2",
142
- "@plurnk/plurnk-mimetypes-grammar-zig": "1.16.2",
143
- "@plurnk/plurnk-mimetypes-application-pdf": "1.29.0",
144
- "@plurnk/plurnk-mimetypes-image": "1.29.0",
145
- "@plurnk/plurnk-mimetypes-audio": "1.29.0",
146
- "@plurnk/plurnk-mimetypes-text-csv": "1.29.0",
147
- "@plurnk/plurnk-mimetypes-text-diff": "1.29.0",
148
- "@plurnk/plurnk-mimetypes-text-dotenv": "1.29.0",
149
- "@plurnk/plurnk-mimetypes-text-html": "1.29.0",
150
- "@plurnk/plurnk-mimetypes-text-ini": "1.29.0",
151
- "@plurnk/plurnk-mimetypes-text-markdown": "1.29.0",
152
- "@plurnk/plurnk-mimetypes-text-plain": "1.29.0",
153
- "@plurnk/plurnk-models": "1.29.0",
154
- "@plurnk/plurnk-providers": "1.29.0",
155
- "@plurnk/plurnk-schemes": "1.29.0",
156
- "@plurnk/plurnk-schemes-http": "1.29.0",
157
- "@plurnk/plurnk-tavily-plugin": "^1.25.0",
90
+ "@plurnk/plurnk-a2a": "3.0.0",
91
+ "@plurnk/plurnk-agui": "3.0.0",
92
+ "@plurnk/plurnk-contracts": "3.0.1",
93
+ "@plurnk/plurnk-parser": "3.0.1",
94
+ "@plurnk/plurnk-schedule": "3.0.0",
95
+ "@plurnk/plurnk-skills": "3.0.0",
96
+ "@plurnk/plurnk-execs": "3.0.0",
97
+ "@plurnk/plurnk-execs-common": "2.0.1",
98
+ "@plurnk/plurnk-execs-jq": "2.0.1",
99
+ "@plurnk/plurnk-execs-sqlite": "2.0.1",
100
+ "@plurnk/plurnk-hooks": "2.0.1",
101
+ "@plurnk/plurnk-mcp": "3.0.0",
102
+ "@plurnk/plurnk-meta": "2.0.2",
103
+ "@plurnk/plurnk-agent-plugins": "2.0.0",
104
+ "@plurnk/plurnk-agent-skills": "2.0.1",
105
+ "@plurnk/plurnk-mimetypes": "3.0.0",
106
+ "@plurnk/plurnk-mimetypes-application-ipynb": "2.0.1",
107
+ "@plurnk/plurnk-mimetypes-application-json": "2.0.1",
108
+ "@plurnk/plurnk-mimetypes-application-jsonl": "2.0.1",
109
+ "@plurnk/plurnk-mimetypes-application-xml": "2.0.1",
110
+ "@plurnk/plurnk-mimetypes-grammar-bash": "2.0.0",
111
+ "@plurnk/plurnk-mimetypes-grammar-c": "2.0.0",
112
+ "@plurnk/plurnk-mimetypes-grammar-cpp": "2.0.0",
113
+ "@plurnk/plurnk-mimetypes-grammar-css": "2.0.0",
114
+ "@plurnk/plurnk-mimetypes-grammar-dart": "2.0.0",
115
+ "@plurnk/plurnk-mimetypes-grammar-elixir": "2.0.0",
116
+ "@plurnk/plurnk-mimetypes-grammar-go": "2.0.0",
117
+ "@plurnk/plurnk-mimetypes-grammar-haskell": "2.0.0",
118
+ "@plurnk/plurnk-mimetypes-grammar-java": "2.0.0",
119
+ "@plurnk/plurnk-mimetypes-grammar-javascript": "2.0.0",
120
+ "@plurnk/plurnk-mimetypes-grammar-julia": "2.0.0",
121
+ "@plurnk/plurnk-mimetypes-grammar-kotlin": "2.0.0",
122
+ "@plurnk/plurnk-mimetypes-grammar-lua": "2.0.0",
123
+ "@plurnk/plurnk-mimetypes-grammar-make": "2.0.0",
124
+ "@plurnk/plurnk-mimetypes-grammar-ocaml": "2.0.0",
125
+ "@plurnk/plurnk-mimetypes-grammar-odin": "2.0.0",
126
+ "@plurnk/plurnk-mimetypes-grammar-php": "2.0.0",
127
+ "@plurnk/plurnk-mimetypes-grammar-python": "2.0.0",
128
+ "@plurnk/plurnk-mimetypes-grammar-ruby": "2.0.0",
129
+ "@plurnk/plurnk-mimetypes-grammar-rust": "2.0.0",
130
+ "@plurnk/plurnk-mimetypes-grammar-scala": "2.0.0",
131
+ "@plurnk/plurnk-mimetypes-grammar-toml": "2.0.0",
132
+ "@plurnk/plurnk-mimetypes-grammar-tsx": "2.0.0",
133
+ "@plurnk/plurnk-mimetypes-grammar-typescript": "2.0.0",
134
+ "@plurnk/plurnk-mimetypes-grammar-yaml": "2.0.0",
135
+ "@plurnk/plurnk-mimetypes-grammar-zig": "2.0.0",
136
+ "@plurnk/plurnk-mimetypes-application-pdf": "2.0.1",
137
+ "@plurnk/plurnk-mimetypes-image": "2.0.1",
138
+ "@plurnk/plurnk-mimetypes-audio": "2.0.1",
139
+ "@plurnk/plurnk-mimetypes-text-csv": "2.0.1",
140
+ "@plurnk/plurnk-mimetypes-text-diff": "2.0.1",
141
+ "@plurnk/plurnk-mimetypes-text-dotenv": "2.0.1",
142
+ "@plurnk/plurnk-mimetypes-text-html": "2.0.1",
143
+ "@plurnk/plurnk-mimetypes-text-ini": "2.0.1",
144
+ "@plurnk/plurnk-mimetypes-text-markdown": "2.0.1",
145
+ "@plurnk/plurnk-mimetypes-text-plain": "2.0.1",
146
+ "@plurnk/plurnk-models": "3.0.0",
147
+ "@plurnk/plurnk-modules": "3.0.0",
148
+ "@plurnk/plurnk-providers": "3.0.0",
149
+ "@plurnk/plurnk-schemes": "3.0.0",
150
+ "@plurnk/plurnk-schemes-http": "2.0.1",
158
151
  "@possumtech/sqlrite": "^6.5.3",
159
- "diff": "^9.0.0"
152
+ "diff": "^9.0.0",
153
+ "@plurnk/plurnk-digest": "3.0.0"
160
154
  },
161
155
  "devDependencies": {
162
156
  "@a2a-js/sdk": "1.3.0",
@@ -173,5 +167,6 @@
173
167
  "type": "git",
174
168
  "url": "git+https://github.com/plurnk/plurnk-service.git",
175
169
  "directory": "plurnk-core"
176
- }
170
+ },
171
+ "gitHead": "9a63339d5a4db00f767a55407e0117190fa55f39"
177
172
  }
@@ -1,8 +0,0 @@
1
- export declare const EMISSION_HEAD_WEIGHT = 100;
2
- export default class EmissionHead {
3
- static cut(body: string): {
4
- head: string;
5
- cut: boolean;
6
- };
7
- }
8
- //# sourceMappingURL=EmissionHead.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EmissionHead.d.ts","sourceRoot":"","sources":["../../src/core/EmissionHead.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,MAAM,CAAC,OAAO,OAAO,YAAY;IAE7B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,CAevD;CACJ"}
@@ -1,29 +0,0 @@
1
- import { TextCoordinates } from "@plurnk/plurnk-mimetypes";
2
- import { contentWeight } from "./content-weight.js";
3
- // {§emission-row} — the one automatic cut left under {§context-fit}: an emission row shows its head,
4
- // about a hundred tokens of curation weight — enough to recognise the turn, never enough to matter to
5
- // the budget. A format rule, not a lever anyone would turn, so it lives here and not on the panel.
6
- export const EMISSION_HEAD_WEIGHT = 100;
7
- export default class EmissionHead {
8
- // Whole lines while they fit the head; a first line longer than the head is cut inside itself.
9
- static cut(body) {
10
- if (contentWeight(body) <= EMISSION_HEAD_WEIGHT)
11
- return { head: body, cut: false };
12
- let end = 0;
13
- for (const line of TextCoordinates.logicalLines(body)) {
14
- if (contentWeight(body.slice(0, line.end)) > EMISSION_HEAD_WEIGHT)
15
- break;
16
- end = line.end;
17
- }
18
- if (end === 0) {
19
- for (const codePoint of body) {
20
- const next = end + codePoint.length;
21
- if (contentWeight(body.slice(0, next)) > EMISSION_HEAD_WEIGHT)
22
- break;
23
- end = next;
24
- }
25
- }
26
- return { head: body.slice(0, end), cut: true };
27
- }
28
- }
29
- //# sourceMappingURL=EmissionHead.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EmissionHead.js","sourceRoot":"","sources":["../../src/core/EmissionHead.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,qGAAqG;AACrG,sGAAsG;AACtG,mGAAmG;AACnG,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,+FAA+F;IAC/F,MAAM,CAAC,GAAG,CAAC,IAAY;QACnB,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,oBAAoB;YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QACnF,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,oBAAoB;gBAAE,MAAM;YACzE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACnB,CAAC;QACD,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACZ,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;gBACpC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,oBAAoB;oBAAE,MAAM;gBACrE,GAAG,GAAG,IAAI,CAAC;YACf,CAAC;QACL,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACnD,CAAC;CACJ"}
@@ -1,10 +0,0 @@
1
- import type HostPaths from "./HostPaths.ts";
2
- export interface LegacyMigrationMove {
3
- readonly source: string;
4
- readonly destination: string;
5
- }
6
- export default class LegacyHome {
7
- static assertCanonical(paths: HostPaths): Promise<void>;
8
- static migrate(paths: HostPaths): Promise<readonly LegacyMigrationMove[]>;
9
- }
10
- //# sourceMappingURL=LegacyHome.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LegacyHome.d.ts","sourceRoot":"","sources":["../../src/core/LegacyHome.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AA0C5C,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAChC;AAID,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,OAAa,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAU5D;IAED,OAAa,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAmG9E;CACJ"}
@@ -1,170 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { createReadStream } from "node:fs";
3
- import { constants } from "node:fs";
4
- import { access, chmod, copyFile, lstat, mkdir, readdir, rmdir, stat, unlink, } from "node:fs/promises";
5
- import { join } from "node:path";
6
- import DaemonLock from "../server/DaemonLock.js";
7
- const CONFIG_MEMBERS = new Map([
8
- [".env", ".env"],
9
- ["AGENTS.md", "AGENTS.md"],
10
- ]);
11
- const DATA_MEMBERS = new Map([
12
- ["plurnk.db", "plurnk.db"],
13
- ["plurnk.db-wal", "plurnk.db-wal"],
14
- ["plurnk.db-shm", "plurnk.db-shm"],
15
- ]);
16
- const GENERATED_MEMBERS = new Set([".env.defaults", ".env.example", "INSTALL.md"]);
17
- const LOCK_MEMBER = "plurnk.db.lock";
18
- const exists = async (path) => access(path, constants.F_OK)
19
- .then(() => true)
20
- .catch(() => false);
21
- const hashFile = async (path) => {
22
- const hash = createHash("sha256");
23
- for await (const chunk of createReadStream(path))
24
- hash.update(chunk);
25
- return hash.digest("hex");
26
- };
27
- const copyVerified = async (source, destination) => {
28
- const sourceStat = await stat(source);
29
- let created = false;
30
- try {
31
- await copyFile(source, destination, constants.COPYFILE_EXCL);
32
- created = true;
33
- await chmod(destination, sourceStat.mode & 0o777);
34
- const [sourceHash, destinationHash] = await Promise.all([hashFile(source), hashFile(destination)]);
35
- if (sourceHash !== destinationHash) {
36
- throw new Error(`copy verification failed: ${source} -> ${destination}`);
37
- }
38
- }
39
- catch (cause) {
40
- if (created)
41
- await unlink(destination).catch(() => { });
42
- throw cause;
43
- }
44
- };
45
- // {§legacy-home-transition} — the only reader of the retired mixed home. It is
46
- // an explicit one-way operation, not a compatibility path used by the daemon.
47
- export default class LegacyHome {
48
- static async assertCanonical(paths) {
49
- if (!await exists(paths.legacyDir))
50
- return;
51
- const canonical = await Promise.all([exists(paths.configDir), exists(paths.dataDir)]);
52
- if (canonical.some(Boolean)) {
53
- throw new Error(`legacy ${paths.legacyDir} and canonical Plurnk paths both exist; `
54
- + "resolve the conflict without guessing, then run plurnk-service paths migrate");
55
- }
56
- throw new Error(`legacy Plurnk home found at ${paths.legacyDir}; run plurnk-service paths migrate`);
57
- }
58
- static async migrate(paths) {
59
- if (!await exists(paths.legacyDir))
60
- return [];
61
- const legacyStat = await lstat(paths.legacyDir);
62
- if (!legacyStat.isDirectory())
63
- throw new Error(`legacy Plurnk home is not a directory: ${paths.legacyDir}`);
64
- const entries = await readdir(paths.legacyDir, { withFileTypes: true });
65
- const known = new Set([
66
- ...CONFIG_MEMBERS.keys(),
67
- ...DATA_MEMBERS.keys(),
68
- ...GENERATED_MEMBERS,
69
- LOCK_MEMBER,
70
- ]);
71
- const unknown = entries.filter((entry) => !known.has(entry.name)).map((entry) => entry.name).sort();
72
- if (unknown.length > 0) {
73
- throw new Error(`legacy Plurnk home contains unknown member(s): ${unknown.join(", ")}`);
74
- }
75
- const nonFiles = entries
76
- .filter((entry) => !entry.isFile())
77
- .map((entry) => entry.name)
78
- .sort();
79
- if (nonFiles.length > 0) {
80
- throw new Error(`legacy Plurnk member(s) are not regular files: ${nonFiles.join(", ")}`);
81
- }
82
- const existingDestinations = (await Promise.all([
83
- paths.configDir,
84
- paths.dataDir,
85
- ].map(async (path) => await exists(path) ? path : null))).filter((path) => path !== null);
86
- if (existingDestinations.length > 0) {
87
- throw new Error(`canonical Plurnk destination(s) already exist: ${existingDestinations.join(", ")}`);
88
- }
89
- const names = new Set(entries.map((entry) => entry.name));
90
- const hasDatabaseState = [...DATA_MEMBERS.keys(), LOCK_MEMBER].some((name) => names.has(name));
91
- const lock = hasDatabaseState ? await DaemonLock.acquire(join(paths.legacyDir, "plurnk.db")) : null;
92
- const moves = [
93
- ...[...CONFIG_MEMBERS].flatMap(([sourceName, destinationName]) => names.has(sourceName) ? [{
94
- source: join(paths.legacyDir, sourceName),
95
- destination: join(paths.configDir, destinationName),
96
- }] : []),
97
- ...[...DATA_MEMBERS].flatMap(([sourceName, destinationName]) => names.has(sourceName) ? [{
98
- source: join(paths.legacyDir, sourceName),
99
- destination: join(paths.dataDir, destinationName),
100
- }] : []),
101
- ];
102
- const createdDirectories = [];
103
- const copied = [];
104
- let commitStarted = false;
105
- try {
106
- if ([...CONFIG_MEMBERS.keys()].some((name) => names.has(name))) {
107
- await mkdir(paths.configDir, { recursive: true, mode: 0o700 });
108
- createdDirectories.push(paths.configDir);
109
- }
110
- if ([...DATA_MEMBERS.keys()].some((name) => names.has(name))) {
111
- await mkdir(paths.dataDir, { recursive: true, mode: 0o700 });
112
- createdDirectories.push(paths.dataDir);
113
- }
114
- // Always copy first, including on one filesystem. Every source stays
115
- // authoritative until every destination has passed byte verification.
116
- for (const { source, destination } of moves) {
117
- await copyVerified(source, destination);
118
- copied.push(destination);
119
- }
120
- for (const { destination } of moves) {
121
- if (!await exists(destination))
122
- throw new Error(`migration destination verification failed: ${destination}`);
123
- }
124
- for (const sourceName of GENERATED_MEMBERS) {
125
- if (names.has(sourceName))
126
- await unlink(join(paths.legacyDir, sourceName));
127
- }
128
- commitStarted = true;
129
- for (const { source } of moves)
130
- await unlink(source);
131
- }
132
- catch (cause) {
133
- if (!commitStarted) {
134
- const rollbackErrors = [];
135
- for (const destination of copied.toReversed()) {
136
- try {
137
- await unlink(destination);
138
- }
139
- catch (rollbackCause) {
140
- if (rollbackCause.code !== "ENOENT")
141
- rollbackErrors.push(rollbackCause);
142
- }
143
- }
144
- for (const directory of createdDirectories.toReversed()) {
145
- try {
146
- await rmdir(directory);
147
- }
148
- catch (rollbackCause) {
149
- if (rollbackCause.code !== "ENOENT")
150
- rollbackErrors.push(rollbackCause);
151
- }
152
- }
153
- if (rollbackErrors.length > 0) {
154
- throw new AggregateError([cause, ...rollbackErrors], "legacy path migration failed and rollback was incomplete");
155
- }
156
- }
157
- throw cause;
158
- }
159
- finally {
160
- await lock?.release();
161
- }
162
- const survivors = await readdir(paths.legacyDir);
163
- if (survivors.length > 0) {
164
- throw new Error(`legacy Plurnk home was not emptied: ${survivors.join(", ")}`);
165
- }
166
- await rmdir(paths.legacyDir);
167
- return moves;
168
- }
169
- }
170
- //# sourceMappingURL=LegacyHome.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LegacyHome.js","sourceRoot":"","sources":["../../src/core/LegacyHome.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { type LoopPolicy, type LoopPolicyRequest } from "@plurnk/plurnk-contracts";
2
- export default class LoopPolicies {
3
- #private;
4
- static compose(stated: LoopPolicyRequest): LoopPolicy;
5
- static validateConfiguration(): void;
6
- }
7
- //# sourceMappingURL=LoopPolicies.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoopPolicies.d.ts","sourceRoot":"","sources":["../../src/core/LoopPolicies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOjH,MAAM,CAAC,OAAO,OAAO,YAAY;;IAI7B,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,UAAU,CAuBpD;IAGD,MAAM,CAAC,qBAAqB,IAAI,IAAI,CAInC;CAOJ"}
@@ -1,42 +0,0 @@
1
- import { PROPOSAL_POLICIES, Validator } from "@plurnk/plurnk-contracts";
2
- import { ConfigurationError, Knob } from "@plurnk/plurnk-meta";
3
- import Results, { OperationFailureError } from "./results.js";
4
- // {§loop-policy-composition} — a loop's policy is what its creator stated over what the panel
5
- // says, composed once, where the loop is persisted. Every panel state is lawful: attendance picks
6
- // which disposition knob answers, so only a creator's own statement can contradict itself.
7
- export default class LoopPolicies {
8
- // Nobody is present to review in an unattended loop, so review is not a choice there.
9
- static #UNATTENDED = PROPOSAL_POLICIES.filter((policy) => policy !== "review");
10
- static compose(stated) {
11
- let policy;
12
- try {
13
- const attended = stated.attended ?? Knob.flag("PLURNK_SERVICE_ATTENDED");
14
- policy = { proposals: stated.proposals ?? LoopPolicies.#proposals(attended), attended };
15
- }
16
- catch (cause) {
17
- if (!(cause instanceof ConfigurationError))
18
- throw cause;
19
- throw new OperationFailureError(Results.configurationFailure(cause), { cause });
20
- }
21
- if (Validator.validateLoopPolicy(policy).valid)
22
- return policy;
23
- throw new OperationFailureError(Results.failure("daemon:input", "loop-policy-invalid", 400, "An unattended loop cannot hold a proposal for review: nobody is present to answer.", {}, {
24
- field: "policy",
25
- stage: "loop-policy-composition",
26
- recovery: "State proposals accept or reject, or attend the loop.",
27
- retryable: false,
28
- }));
29
- }
30
- // Startup diagnoses invalid defaults; explicit valid policy remains usable.
31
- static validateConfiguration() {
32
- Knob.flag("PLURNK_SERVICE_ATTENDED");
33
- LoopPolicies.#proposals(true);
34
- LoopPolicies.#proposals(false);
35
- }
36
- static #proposals(attended) {
37
- return attended
38
- ? Knob.choice("PLURNK_SERVICE_PROPOSALS", PROPOSAL_POLICIES)
39
- : Knob.choice("PLURNK_SERVICE_UNATTENDED_PROPOSALS", LoopPolicies.#UNATTENDED);
40
- }
41
- }
42
- //# sourceMappingURL=LoopPolicies.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoopPolicies.js","sourceRoot":"","sources":["../../src/core/LoopPolicies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAA2C,MAAM,0BAA0B,CAAC;AACjH,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,OAAO,EAAE,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE9D,8FAA8F;AAC9F,kGAAkG;AAClG,2FAA2F;AAC3F,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,sFAAsF;IACtF,MAAM,CAAU,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAExF,MAAM,CAAC,OAAO,CAAC,MAAyB;QACpC,IAAI,MAAkB,CAAC;QACvB,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACzE,MAAM,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,KAAK,YAAY,kBAAkB,CAAC;gBAAE,MAAM,KAAK,CAAC;YACxD,MAAM,IAAI,qBAAqB,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,KAAK;YAAE,OAAO,MAAM,CAAC;QAC9D,MAAM,IAAI,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAC3C,cAAc,EACd,qBAAqB,EACrB,GAAG,EACH,oFAAoF,EACpF,EAAE,EACF;YACI,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,yBAAyB;YAChC,QAAQ,EAAE,uDAAuD;YACjE,SAAS,EAAE,KAAK;SACnB,CACJ,CAAC,CAAC;IACP,CAAC;IAED,4EAA4E;IAC5E,MAAM,CAAC,qBAAqB;QACxB,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACrC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,QAAiB;QAC/B,OAAO,QAAQ;YACX,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,iBAAiB,CAAC;YAC5D,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,qCAAqC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACvF,CAAC;CACJ"}