@plurnk/plurnk-service 3.3.0 → 4.1.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 (309) hide show
  1. package/.env.defaults +4 -4
  2. package/INSTALL.md +6 -0
  3. package/README.md +2 -2
  4. package/SPEC.md +408 -179
  5. package/dist/build-info.json +1 -1
  6. package/dist/completions/_plurnk-service +1 -1
  7. package/dist/completions/plurnk-service.bash +1 -1
  8. package/dist/completions/plurnk-service.fish +2 -0
  9. package/dist/content/read-projector.js +1 -1
  10. package/dist/content/read-projector.js.map +1 -1
  11. package/dist/core/AdministrativeLoop.d.ts +1 -1
  12. package/dist/core/AdministrativeLoop.d.ts.map +1 -1
  13. package/dist/core/AdministrativeLoop.js +4 -1
  14. package/dist/core/AdministrativeLoop.js.map +1 -1
  15. package/dist/core/AdmittedTurnExecutor.d.ts +3 -1
  16. package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
  17. package/dist/core/AdmittedTurnExecutor.js +12 -0
  18. package/dist/core/AdmittedTurnExecutor.js.map +1 -1
  19. package/dist/core/BareBatchRunner.js +2 -1
  20. package/dist/core/BareBatchRunner.js.map +1 -1
  21. package/dist/core/ChannelWrite.d.ts +10 -0
  22. package/dist/core/ChannelWrite.d.ts.map +1 -1
  23. package/dist/core/ChannelWrite.js +10 -0
  24. package/dist/core/ChannelWrite.js.map +1 -1
  25. package/dist/core/ChannelWrite.sql +14 -2
  26. package/dist/core/ClientInteractions.d.ts.map +1 -1
  27. package/dist/core/ClientInteractions.js +2 -1
  28. package/dist/core/ClientInteractions.js.map +1 -1
  29. package/dist/core/CoreSchemeServices.d.ts.map +1 -1
  30. package/dist/core/CoreSchemeServices.js +5 -0
  31. package/dist/core/CoreSchemeServices.js.map +1 -1
  32. package/dist/core/DataStatementRunner.js +4 -6
  33. package/dist/core/DataStatementRunner.js.map +1 -1
  34. package/dist/core/Dispatcher.d.ts +4 -7
  35. package/dist/core/Dispatcher.d.ts.map +1 -1
  36. package/dist/core/Dispatcher.js +48 -68
  37. package/dist/core/Dispatcher.js.map +1 -1
  38. package/dist/core/Dispatcher.sql +2 -2
  39. package/dist/core/EditMutations.js +1 -0
  40. package/dist/core/EditMutations.js.map +1 -1
  41. package/dist/core/Engine.d.ts +8 -14
  42. package/dist/core/Engine.d.ts.map +1 -1
  43. package/dist/core/Engine.js +22 -24
  44. package/dist/core/Engine.js.map +1 -1
  45. package/dist/core/Engine.sql +6 -6
  46. package/dist/core/ExecutorRegistry.d.ts +0 -5
  47. package/dist/core/ExecutorRegistry.d.ts.map +1 -1
  48. package/dist/core/ExecutorRegistry.js +10 -18
  49. package/dist/core/ExecutorRegistry.js.map +1 -1
  50. package/dist/core/FileAddress.js +1 -1
  51. package/dist/core/FileAddress.js.map +1 -1
  52. package/dist/core/FilePublication.js +10 -74
  53. package/dist/core/FilePublication.js.map +1 -1
  54. package/dist/core/FileSnapshot.js +36 -100
  55. package/dist/core/FileSnapshot.js.map +1 -1
  56. package/dist/core/HostPaths.d.ts +1 -0
  57. package/dist/core/HostPaths.d.ts.map +1 -1
  58. package/dist/core/HostPaths.js +11 -1
  59. package/dist/core/HostPaths.js.map +1 -1
  60. package/dist/core/KillHandler.js +3 -1
  61. package/dist/core/KillHandler.js.map +1 -1
  62. package/dist/core/LiveSubscription.js +1 -1
  63. package/dist/core/LiveSubscription.js.map +1 -1
  64. package/dist/core/LogBody.js +1 -1
  65. package/dist/core/LogBody.js.map +1 -1
  66. package/dist/core/LogWriter.d.ts +4 -2
  67. package/dist/core/LogWriter.d.ts.map +1 -1
  68. package/dist/core/LogWriter.js +8 -4
  69. package/dist/core/LogWriter.js.map +1 -1
  70. package/dist/core/LoopDriver.d.ts +3 -3
  71. package/dist/core/LoopDriver.d.ts.map +1 -1
  72. package/dist/core/LoopDriver.js +15 -13
  73. package/dist/core/LoopDriver.js.map +1 -1
  74. package/dist/core/LoopLifecycle.d.ts +5 -0
  75. package/dist/core/LoopLifecycle.d.ts.map +1 -1
  76. package/dist/core/LoopLifecycle.js +14 -1
  77. package/dist/core/LoopLifecycle.js.map +1 -1
  78. package/dist/core/LoopLifecycle.sql +8 -0
  79. package/dist/core/MembershipMaterialization.js +2 -2
  80. package/dist/core/MembershipMaterialization.js.map +1 -1
  81. package/dist/core/MessageResources.d.ts +3 -0
  82. package/dist/core/MessageResources.d.ts.map +1 -1
  83. package/dist/core/MessageResources.js +15 -1
  84. package/dist/core/MessageResources.js.map +1 -1
  85. package/dist/core/OperationHistory.d.ts +18 -0
  86. package/dist/core/OperationHistory.d.ts.map +1 -0
  87. package/dist/core/OperationHistory.js +55 -0
  88. package/dist/core/OperationHistory.js.map +1 -0
  89. package/dist/core/OperatorConfig.d.ts +1 -2
  90. package/dist/core/OperatorConfig.d.ts.map +1 -1
  91. package/dist/core/OperatorConfig.js +26 -92
  92. package/dist/core/OperatorConfig.js.map +1 -1
  93. package/dist/core/PacketBuilder.d.ts.map +1 -1
  94. package/dist/core/PacketBuilder.js +22 -56
  95. package/dist/core/PacketBuilder.js.map +1 -1
  96. package/dist/core/PacketBuilder.sql +7 -8
  97. package/dist/core/ProblemLog.d.ts +1 -0
  98. package/dist/core/ProblemLog.d.ts.map +1 -1
  99. package/dist/core/ProblemLog.js +2 -2
  100. package/dist/core/ProblemLog.js.map +1 -1
  101. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  102. package/dist/core/ProposalLifecycle.js +13 -8
  103. package/dist/core/ProposalLifecycle.js.map +1 -1
  104. package/dist/core/ProposalPolicies.d.ts +4 -1
  105. package/dist/core/ProposalPolicies.d.ts.map +1 -1
  106. package/dist/core/ProposalPolicies.js +5 -2
  107. package/dist/core/ProposalPolicies.js.map +1 -1
  108. package/dist/core/ResourceMutations.js +2 -0
  109. package/dist/core/ResourceMutations.js.map +1 -1
  110. package/dist/core/ResourceSelector.js +1 -1
  111. package/dist/core/ResourceSelector.js.map +1 -1
  112. package/dist/core/SchemeRegistry.js +1 -1
  113. package/dist/core/SchemeRegistry.js.map +1 -1
  114. package/dist/core/ServiceHelp.js +1 -1
  115. package/dist/core/ServiceHelp.js.map +1 -1
  116. package/dist/core/ServiceTeardown.js +9 -12
  117. package/dist/core/ServiceTeardown.js.map +1 -1
  118. package/dist/core/StrikeRail.d.ts +2 -1
  119. package/dist/core/StrikeRail.d.ts.map +1 -1
  120. package/dist/core/StrikeRail.js +11 -6
  121. package/dist/core/StrikeRail.js.map +1 -1
  122. package/dist/core/TerminalResult.js +1 -1
  123. package/dist/core/TerminalResult.js.map +1 -1
  124. package/dist/core/TurnDispositionHandler.js +3 -2
  125. package/dist/core/TurnDispositionHandler.js.map +1 -1
  126. package/dist/core/TurnMaterialization.js +6 -4
  127. package/dist/core/TurnMaterialization.js.map +1 -1
  128. package/dist/core/TurnMaterialization.sql +1 -1
  129. package/dist/core/TurnOps.d.ts +0 -3
  130. package/dist/core/TurnOps.d.ts.map +1 -1
  131. package/dist/core/TurnOps.js +1 -27
  132. package/dist/core/TurnOps.js.map +1 -1
  133. package/dist/core/TurnRunner.d.ts +4 -2
  134. package/dist/core/TurnRunner.d.ts.map +1 -1
  135. package/dist/core/TurnRunner.js +61 -61
  136. package/dist/core/TurnRunner.js.map +1 -1
  137. package/dist/core/WorkerControlHandler.d.ts +2 -0
  138. package/dist/core/WorkerControlHandler.d.ts.map +1 -1
  139. package/dist/core/WorkerControlHandler.js +48 -16
  140. package/dist/core/WorkerControlHandler.js.map +1 -1
  141. package/dist/core/WorkerName.d.ts +0 -4
  142. package/dist/core/WorkerName.d.ts.map +1 -1
  143. package/dist/core/WorkerName.js +5 -30
  144. package/dist/core/WorkerName.js.map +1 -1
  145. package/dist/core/WorkerName.sql +4 -20
  146. package/dist/core/WorkerOwners.d.ts +1 -0
  147. package/dist/core/WorkerOwners.d.ts.map +1 -1
  148. package/dist/core/WorkerOwners.js +6 -0
  149. package/dist/core/WorkerOwners.js.map +1 -1
  150. package/dist/core/WorkerOwners.sql +7 -0
  151. package/dist/core/WorkspaceGate.d.ts +3 -1
  152. package/dist/core/WorkspaceGate.d.ts.map +1 -1
  153. package/dist/core/WorkspaceGate.js +59 -10
  154. package/dist/core/WorkspaceGate.js.map +1 -1
  155. package/dist/core/caps/SchemeCtxImpl.d.ts +2 -0
  156. package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
  157. package/dist/core/caps/SchemeCtxImpl.js +12 -0
  158. package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
  159. package/dist/core/env-catalog.js +1 -1
  160. package/dist/core/env-catalog.js.map +1 -1
  161. package/dist/core/fork.js +1 -1
  162. package/dist/core/fork.js.map +1 -1
  163. package/dist/core/fork.sql +5 -4
  164. package/dist/core/mutation-types.js +4 -1
  165. package/dist/core/mutation-types.js.map +1 -1
  166. package/dist/core/namespace.js +1 -1
  167. package/dist/core/namespace.js.map +1 -1
  168. package/dist/core/packet-wire.d.ts +7 -5
  169. package/dist/core/packet-wire.d.ts.map +1 -1
  170. package/dist/core/packet-wire.js +38 -20
  171. package/dist/core/packet-wire.js.map +1 -1
  172. package/dist/core/scheme-types.d.ts +4 -0
  173. package/dist/core/scheme-types.d.ts.map +1 -1
  174. package/dist/core/turn-signals.d.ts +4 -0
  175. package/dist/core/turn-signals.d.ts.map +1 -1
  176. package/dist/core/turn-signals.js +1 -0
  177. package/dist/core/turn-signals.js.map +1 -1
  178. package/dist/core/workspace-settings.js +1 -1
  179. package/dist/core/workspace-settings.js.map +1 -1
  180. package/dist/evidence/EvidenceReader.js +5 -5
  181. package/dist/evidence/EvidenceReader.js.map +1 -1
  182. package/dist/man/plurnk-service.1 +27 -6
  183. package/dist/schemes/Env.d.ts +7 -3
  184. package/dist/schemes/Env.d.ts.map +1 -1
  185. package/dist/schemes/Env.js +12 -6
  186. package/dist/schemes/Env.js.map +1 -1
  187. package/dist/schemes/Exec.d.ts.map +1 -1
  188. package/dist/schemes/Exec.js +33 -25
  189. package/dist/schemes/Exec.js.map +1 -1
  190. package/dist/schemes/ExecOutputScheme.js +3 -3
  191. package/dist/schemes/ExecOutputScheme.js.map +1 -1
  192. package/dist/schemes/ExecutionInput.js +1 -1
  193. package/dist/schemes/ExecutionInput.js.map +1 -1
  194. package/dist/schemes/File.js +15 -18
  195. package/dist/schemes/File.js.map +1 -1
  196. package/dist/schemes/Log.d.ts.map +1 -1
  197. package/dist/schemes/Log.js +21 -36
  198. package/dist/schemes/Log.js.map +1 -1
  199. package/dist/schemes/Log.sql +0 -9
  200. package/dist/schemes/ResourceTreeScheme.js +2 -5
  201. package/dist/schemes/ResourceTreeScheme.js.map +1 -1
  202. package/dist/schemes/TurnSource.js +1 -1
  203. package/dist/schemes/TurnSource.js.map +1 -1
  204. package/dist/schemes/Worker.d.ts.map +1 -1
  205. package/dist/schemes/Worker.js +10 -3
  206. package/dist/schemes/Worker.js.map +1 -1
  207. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  208. package/dist/schemes/_entry-crud.js +2 -4
  209. package/dist/schemes/_entry-crud.js.map +1 -1
  210. package/dist/schemes/_entry-crud.sql +5 -3
  211. package/dist/schemes/_entry-find.js +3 -3
  212. package/dist/schemes/_entry-find.js.map +1 -1
  213. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  214. package/dist/schemes/_entry-manifest.js +3 -3
  215. package/dist/schemes/_entry-manifest.js.map +1 -1
  216. package/dist/schemes/_entry-manifest.sql +2 -0
  217. package/dist/schemes/_entry-ops.js +1 -1
  218. package/dist/schemes/_entry-ops.js.map +1 -1
  219. package/dist/schemes/_entry-send.js +1 -1
  220. package/dist/schemes/_entry-send.js.map +1 -1
  221. package/dist/server/ClientReads.d.ts +1 -0
  222. package/dist/server/ClientReads.d.ts.map +1 -1
  223. package/dist/server/ClientReads.js +7 -2
  224. package/dist/server/ClientReads.js.map +1 -1
  225. package/dist/server/Credentials.d.ts +48 -0
  226. package/dist/server/Credentials.d.ts.map +1 -0
  227. package/dist/server/Credentials.js +203 -0
  228. package/dist/server/Credentials.js.map +1 -0
  229. package/dist/server/Daemon.d.ts +40 -41
  230. package/dist/server/Daemon.d.ts.map +1 -1
  231. package/dist/server/Daemon.js +272 -206
  232. package/dist/server/Daemon.js.map +1 -1
  233. package/dist/server/DrainSupervisor.d.ts +5 -2
  234. package/dist/server/DrainSupervisor.d.ts.map +1 -1
  235. package/dist/server/DrainSupervisor.js +27 -31
  236. package/dist/server/DrainSupervisor.js.map +1 -1
  237. package/dist/server/EnvFunctionality.d.ts.map +1 -1
  238. package/dist/server/EnvFunctionality.js +2 -1
  239. package/dist/server/EnvFunctionality.js.map +1 -1
  240. package/dist/server/Functionality.d.ts +4 -2
  241. package/dist/server/Functionality.d.ts.map +1 -1
  242. package/dist/server/Functionality.js +110 -51
  243. package/dist/server/Functionality.js.map +1 -1
  244. package/dist/server/FunctionalityManager.js +1 -1
  245. package/dist/server/FunctionalityManager.js.map +1 -1
  246. package/dist/server/HttpListener.d.ts +1 -1
  247. package/dist/server/HttpListener.d.ts.map +1 -1
  248. package/dist/server/HttpListener.js.map +1 -1
  249. package/dist/server/MembersFunctionality.d.ts.map +1 -1
  250. package/dist/server/MembersFunctionality.js +4 -2
  251. package/dist/server/MembersFunctionality.js.map +1 -1
  252. package/dist/server/ModuleHost.d.ts +2 -1
  253. package/dist/server/ModuleHost.d.ts.map +1 -1
  254. package/dist/server/PlurnkSkill.js +4 -7
  255. package/dist/server/PlurnkSkill.js.map +1 -1
  256. package/dist/server/Rollback.js +1 -1
  257. package/dist/server/Rollback.js.map +1 -1
  258. package/dist/server/WorkerModelResolver.js +1 -0
  259. package/dist/server/WorkerModelResolver.js.map +1 -1
  260. package/dist/server/WorkerReferences.d.ts +14 -0
  261. package/dist/server/WorkerReferences.d.ts.map +1 -0
  262. package/dist/server/WorkerReferences.js +24 -0
  263. package/dist/server/WorkerReferences.js.map +1 -0
  264. package/dist/server/WorkerReferences.sql +31 -0
  265. package/dist/server/WorkspaceCapabilities.d.ts +2 -0
  266. package/dist/server/WorkspaceCapabilities.d.ts.map +1 -1
  267. package/dist/server/WorkspaceCapabilities.js +35 -18
  268. package/dist/server/WorkspaceCapabilities.js.map +1 -1
  269. package/dist/server/WorkspacePlugins.js +1 -0
  270. package/dist/server/WorkspacePlugins.js.map +1 -1
  271. package/dist/server/WorkspaceResidency.d.ts +3 -1
  272. package/dist/server/WorkspaceResidency.d.ts.map +1 -1
  273. package/dist/server/WorkspaceResidency.js +12 -5
  274. package/dist/server/WorkspaceResidency.js.map +1 -1
  275. package/dist/server/client-input.d.ts +2 -0
  276. package/dist/server/client-input.d.ts.map +1 -1
  277. package/dist/server/client-input.js +28 -0
  278. package/dist/server/client-input.js.map +1 -1
  279. package/dist/server/drain.sql +37 -40
  280. package/dist/server/envelope.d.ts +5 -9
  281. package/dist/server/envelope.d.ts.map +1 -1
  282. package/dist/server/envelope.js +21 -84
  283. package/dist/server/envelope.js.map +1 -1
  284. package/dist/server/envelope.sql +17 -17
  285. package/dist/server/lifecycle-recovery.sql +5 -15
  286. package/dist/server/logEntry.d.ts.map +1 -1
  287. package/dist/server/logEntry.js +6 -0
  288. package/dist/server/logEntry.js.map +1 -1
  289. package/dist/server/logEntry.sql +94 -6
  290. package/dist/server/module-discovery.d.ts +1 -1
  291. package/dist/server/module-discovery.d.ts.map +1 -1
  292. package/dist/server/module-discovery.js +1 -0
  293. package/dist/server/module-discovery.js.map +1 -1
  294. package/dist/server/seam-loop.sql +15 -7
  295. package/dist/server/seam-proposal-list.sql +10 -4
  296. package/dist/service.d.ts.map +1 -1
  297. package/dist/service.js +7 -1
  298. package/dist/service.js.map +1 -1
  299. package/docs/members.md +6 -4
  300. package/migrations/002_workers.sql +2 -2
  301. package/migrations/006_log.sql +1 -1
  302. package/migrations/018_worker_owners.sql +1 -1
  303. package/migrations/029_default_worker.sql +9 -0
  304. package/migrations/030_client_workers.sql +105 -0
  305. package/migrations/031_message_openers.sql +83 -0
  306. package/migrations/032_worker_references.sql +29 -0
  307. package/package.json +23 -22
  308. package/plurnk.nginx.conf +71 -0
  309. package/plurnk.service +2 -0
@@ -1,10 +1,10 @@
1
1
  // Envelope lifecycle helpers for module clients. SPEC {§connection-lifecycle}.
2
2
  //
3
3
  // A client-interface module receives this value from an explicit workspace create
4
- // or attach call. Core creates or selects the client worker but retains no transport
5
- // binding; each dispatched client action allocates and settles its own administrative loop.
4
+ // or attach call. Binding a workspace mints nothing and retains no transport binding;
5
+ // each client operation allocates and settles its own administrative loop in the runtime worker.
6
6
  import AdministrativeLoop from "../core/AdministrativeLoop.js";
7
- import { randomBytes } from "node:crypto";
7
+ import crypto from "node:crypto";
8
8
  import GitMembership from "../core/git-membership.js";
9
9
  import Results, { OperationFailureError } from "../core/results.js";
10
10
  import LoopLifecycle from "../core/LoopLifecycle.js";
@@ -21,7 +21,11 @@ export default class Envelope {
21
21
  // a name says nothing about where the workspace came from.
22
22
  static AUTO_NAME_ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
23
23
  static generateWorkspaceName() {
24
- return Array.from(randomBytes(5), (byte) => Envelope.AUTO_NAME_ALPHABET[byte % 62]).join("");
24
+ let name;
25
+ do {
26
+ name = Array.from({ length: 5 }, () => Envelope.AUTO_NAME_ALPHABET[crypto.randomInt(Envelope.AUTO_NAME_ALPHABET.length)]).join("");
27
+ } while (!/[A-Za-z]/u.test(name));
28
+ return name;
25
29
  }
26
30
  static async createClientEnvelope(db, opts = {}) {
27
31
  const projectRoot = opts.projectRoot ?? null;
@@ -42,98 +46,31 @@ export default class Envelope {
42
46
  // tracked files are members before the first op. No-op when projectRoot is
43
47
  // null (headless) or not a git working tree.
44
48
  await GitMembership.resolveGitMembership(db, workspace.id, undefined);
45
- const worker = await WorkerName.claimAuto(db, {
46
- workspaceId: workspace.id,
47
- origin: "client",
48
- });
49
- return {
50
- workspaceId: workspace.id, workspaceName: workspace.name,
51
- projectRoot: workspace.project_root,
52
- workerId: worker.id, workerName: worker.name,
53
- };
49
+ return { workspaceId: workspace.id, workspaceName: workspace.name, projectRoot: workspace.project_root };
54
50
  }
55
- // Resolve the worker inside a workspace. Three modes:
56
- // - opts.workerId given: lookup by id, verify workspace ownership (else throw).
57
- // - opts.workerName given: lookup by (workspaceId, name); reuse if found, create otherwise.
58
- // - neither: create a new worker with an auto-generated name (current behavior).
59
- // `workerId` and `workerName` are alternatives — passing both throws (use one).
60
- static async #resolveWorker(db, workspaceId, opts) {
61
- if (opts.workerId !== undefined && opts.workerName !== undefined) {
62
- throw envelopeFailure("daemon:worker", "worker-selector-conflict", 400, "Workspace attachment received both a worker ID and worker name.", {
63
- workerId: opts.workerId,
64
- workerName: opts.workerName,
65
- recovery: "Select the worker by either ID or name.",
66
- retryable: false,
67
- });
68
- }
69
- if (opts.workerId !== undefined) {
70
- const existing = await db.envelope_get_worker_by_id.get({ id: opts.workerId });
71
- if (existing === undefined) {
72
- throw envelopeFailure("daemon:worker", "worker-not-found", 404, `Worker ${opts.workerId} does not exist.`, { workerId: opts.workerId });
73
- }
74
- if (existing.workspace_id !== workspaceId) {
75
- throw envelopeFailure("daemon:worker", "workspace-mismatch", 409, `Worker ${opts.workerId} does not belong to workspace ${workspaceId}.`, {
76
- workerId: opts.workerId,
77
- workspaceId,
78
- actualWorkspaceId: existing.workspace_id,
79
- retryable: false,
80
- });
81
- }
82
- return { id: existing.id, name: existing.name };
83
- }
84
- if (opts.workerName !== undefined) {
85
- const workerName = WorkerName.assert(opts.workerName); // {§worker-name-minting}
86
- const existing = await db.envelope_get_worker_by_name.get({ workspace_id: workspaceId, name: workerName });
87
- if (existing !== undefined)
88
- return existing;
89
- const created = await db.envelope_insert_worker.get({ workspace_id: workspaceId, name: workerName, origin: "client" });
90
- if (created === undefined)
91
- throw new Error("resolveWorker: worker insert returned no row");
92
- return created;
93
- }
94
- return await WorkerName.claimAuto(db, {
95
- workspaceId,
96
- origin: "client",
97
- });
98
- }
99
- static async attachToWorkspace(db, workspaceId, opts = {}) {
51
+ static async attachToWorkspace(db, workspaceId) {
100
52
  const workspace = await db.envelope_get_workspace.get({ id: workspaceId });
101
53
  if (workspace === undefined) {
102
54
  throw envelopeFailure("daemon:workspace", "workspace-not-found", 404, `Workspace ${workspaceId} does not exist.`, { workspaceId });
103
55
  }
104
- const worker = await Envelope.#resolveWorker(db, workspace.id, opts);
105
- return {
106
- workspaceId: workspace.id, workspaceName: workspace.name,
107
- projectRoot: workspace.project_root,
108
- workerId: worker.id, workerName: worker.name,
109
- };
56
+ return { workspaceId: workspace.id, workspaceName: workspace.name, projectRoot: workspace.project_root };
110
57
  }
111
- // Client action loop allocator. One action allocates one administrative
112
- // loop; its statements become ordered turns and settlement closes the loop.
113
- static async ensureClientLoop(db, workerId) {
114
- return (await AdministrativeLoop.open(db, workerId)).id;
58
+ // Client operation loop allocator. One operation allocates one administrative loop, opened by its
59
+ // actor ({§actor-boundary-client-operations}); its statements become ordered turns and settlement closes it.
60
+ static async ensureClientLoop(db, workerId, actor) {
61
+ return (await AdministrativeLoop.open(db, workerId, actor)).id;
115
62
  }
116
- // Lazy model-worker allocator ({§connection-lifecycle}, {§machine-processes} — the client writes to its own worker).
117
- // The model's conversation lives in its own worker, distinct from the client's
118
- // client worker, so the packet — rendered from the model worker — never carries
119
- // the client's dispatched actions. The module resolves and retains the binding.
120
- // {§methods-conversation-worker}: a fresh conversation is a named, empty-log,
121
- // model-origin worker, distinct from the stable default and from a history-copying fork.
63
+ // Model-worker allocator ({§machine-processes}). A person's client operations journal in the runtime
64
+ // worker, never here, so the packet, rendered from the model worker, never carries them
65
+ // ({§connection-lifecycle}). The module resolves and retains the binding.
66
+ // {§methods-worker-create}: a fresh worker is a named, empty-log, model-origin worker,
67
+ // distinct from a history-copying fork.
122
68
  static async createModelWorker(db, workspaceId, name, parentWorkerId, owner) {
123
69
  const options = { workspaceId, parentWorkerId, owner, origin: "model" };
124
70
  return name === undefined
125
71
  ? WorkerName.claimAuto(db, options)
126
72
  : WorkerName.claimNamed(db, name, options);
127
73
  }
128
- static async ensureModelWorker(db, workspaceId) {
129
- // {§methods-model-worker}: idempotence lives at the seam, not in a client's
130
- // connection cache. The durable role, not root ordering or a name parse,
131
- // distinguishes this default from arbitrary fresh conversations.
132
- const worker = await WorkerName.ensureDefaultConversation(db, {
133
- workspaceId,
134
- });
135
- return worker.id;
136
- }
137
74
  static async listWorkersForWorkspace(db, workspaceId, query = {}) {
138
75
  const filterParent = Object.hasOwn(query, "parentWorkerId");
139
76
  const rows = await db.envelope_list_workers_for_workspace.all({
@@ -144,7 +81,7 @@ export default class Envelope {
144
81
  });
145
82
  return rows.map(projectWorkerRow);
146
83
  }
147
- // {§methods-workspace-prompts}: expose root-conversation loop seeds directly,
84
+ // {§methods-workspace-prompts}: expose root-worker loop seeds directly,
148
85
  // without forcing clients to reconstruct prompt history from log rows.
149
86
  static async listPromptsForWorkspace(db, workspaceId, limit, workerId) {
150
87
  const rows = await db.envelope_list_workspace_prompts.all({ workspace_id: workspaceId, limit, worker_id: workerId });
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/server/envelope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/server/envelope.ts"],"names":[],"mappings":"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"}
@@ -26,21 +26,14 @@ WHERE id = $id
26
26
  )
27
27
  RETURNING id, name;
28
28
 
29
- -- PREP: envelope_insert_worker
30
- -- origin is the worker's actor ({§machine-processes}): 'model' (the conversation),
31
- -- 'client' (a connection's own worker), or '_plurnk' (the runtime self-hosting worker).
32
- INSERT INTO workers (workspace_id, name, origin)
33
- VALUES ($workspace_id, $name, $origin)
34
- RETURNING id, name, origin;
35
-
36
29
  -- {§application-worker-observation}: kind is minted lineage (fork boundary → fork, other child →
37
- -- work, root → conversation); loop observations feed the shared lifecycle selector in TS.
30
+ -- work, no parent → root); loop observations feed the shared lifecycle selector in TS.
38
31
  -- PREP: envelope_get_worker_by_id
39
32
  SELECT id, name, workspace_id, created_at, origin, owner,
40
33
  parent_worker_id AS parentWorkerId,
41
34
  CASE WHEN fork_event_boundary IS NOT NULL THEN 'fork'
42
35
  WHEN parent_worker_id IS NOT NULL THEN 'work'
43
- ELSE 'conversation' END AS kind,
36
+ ELSE 'root' END AS kind,
44
37
  (SELECT json_group_array(json_object('status', l.status, 'sequence', l.sequence, 'terminatedAt', l.terminated_at))
45
38
  FROM work_loops l WHERE l.worker_id = workers.id) AS loopObservations
46
39
  FROM workers
@@ -51,7 +44,7 @@ SELECT id, name, workspace_id, created_at, origin, owner,
51
44
  parent_worker_id AS parentWorkerId,
52
45
  CASE WHEN fork_event_boundary IS NOT NULL THEN 'fork'
53
46
  WHEN parent_worker_id IS NOT NULL THEN 'work'
54
- ELSE 'conversation' END AS kind,
47
+ ELSE 'root' END AS kind,
55
48
  (SELECT json_group_array(json_object('status', l.status, 'sequence', l.sequence, 'terminatedAt', l.terminated_at))
56
49
  FROM work_loops l WHERE l.worker_id = workers.id) AS loopObservations
57
50
  FROM workers
@@ -61,7 +54,7 @@ WHERE workspace_id = $workspace_id AND name = $name;
61
54
  SELECT id, name, created_at, origin, owner, parent_worker_id AS parentWorkerId,
62
55
  CASE WHEN fork_event_boundary IS NOT NULL THEN 'fork'
63
56
  WHEN parent_worker_id IS NOT NULL THEN 'work'
64
- ELSE 'conversation' END AS kind,
57
+ ELSE 'root' END AS kind,
65
58
  (SELECT json_group_array(json_object('status', l.status, 'sequence', l.sequence, 'terminatedAt', l.terminated_at))
66
59
  FROM work_loops l WHERE l.worker_id = workers.id) AS loopObservations
67
60
  FROM workers
@@ -120,7 +113,7 @@ WHERE id = $id
120
113
  -- {§methods-workspace-prompts}: nonempty loop seeds a client addressed to a model worker,
121
114
  -- newest-first, optionally one worker's. Authorship is the seed message's address: a worker-issued
122
115
  -- seed (WORK, FORK, SEND to a worker) carries none, so the model's own task prompts are not history
123
- -- whichever worker they seeded, and a human prompt at a forked conversation is.
116
+ -- whichever worker they seeded, and a human prompt at a forked worker is.
124
117
  SELECT l.prompt
125
118
  FROM loops l
126
119
  JOIN workers r ON r.id = l.worker_id
@@ -133,13 +126,20 @@ ORDER BY l.id DESC
133
126
  LIMIT $limit;
134
127
 
135
128
  -- PREP: envelope_insert_client_loop
136
- -- sequence is auto-computed: 1 + max(existing sequence in this worker) so
137
- -- multiple client connections attaching to the same worker get distinct loops.
138
- -- An administrative loop runs no model turns, so no turn ceiling governs it (-1).
139
- INSERT INTO loops (worker_id, sequence, status, prompt, max_turns)
140
- VALUES ($worker_id, COALESCE((SELECT MAX(sequence) FROM loops WHERE worker_id = $worker_id), 0) + 1, 102, '', -1)
129
+ -- sequence is auto-computed: 1 + max(existing sequence in this worker) so concurrent
130
+ -- operations in one worker get distinct loops. An administrative loop runs no model turns,
131
+ -- so no turn ceiling governs it (-1); its prompt source is the actor that opened it, if any.
132
+ INSERT INTO loops (worker_id, sequence, status, prompt, prompt_source, max_turns)
133
+ VALUES ($worker_id, COALESCE((SELECT MAX(sequence) FROM loops WHERE worker_id = $worker_id), 0) + 1, 102, '', $prompt_source, -1)
141
134
  RETURNING id, sequence;
142
135
 
136
+ -- PREP: envelope_client_operation_person
137
+ -- {§actor-boundary-client-operations} The person a client operation speaks for: the prompt source of a
138
+ -- runtime-worker loop. The daemon's own loops there name none.
139
+ SELECT l.prompt_source AS person
140
+ FROM loops l JOIN workers w ON w.id = l.worker_id
141
+ WHERE l.id = $loop_id AND w.origin = '_plurnk' AND l.prompt_source IS NOT NULL;
142
+
143
143
  -- PREP: envelope_close_client_loop
144
144
  UPDATE loops
145
145
  SET status = $status,
@@ -1,8 +1,7 @@
1
- -- Process-bound lifecycle recovery. These statements run once at daemon boot,
2
- -- before client transports open. Each is idempotent so a crash during recovery
3
- -- can be followed by the same sequence.
1
+ -- Process-bound lifecycle recovery, before client transports open or drains resume.
2
+ -- {§worker-lifecycle-restart-recovery}: database settlement is one idempotent transaction.
4
3
 
5
- -- PREP: recovery_fail_active_loops
4
+ -- TX: recovery_settle_process_owners
6
5
  -- 102 is a claim held by a process-local drain. After restart that owner is gone;
7
6
  -- replaying its provider turn could duplicate effects whose commit boundary is unknown.
8
7
  UPDATE loops
@@ -19,7 +18,6 @@ SET status = 500,
19
18
  )
20
19
  WHERE status = 102;
21
20
 
22
- -- PREP: recovery_settle_open_provider_requests
23
21
  -- A physical request identity was opened immediately before I/O, so a crash can
24
22
  -- leave its outcome and provider evidence unknowable. Preserve the occurrence
25
23
  -- and settle that uncertainty explicitly before closing its logical attempt.
@@ -32,7 +30,6 @@ SET state = 'settled',
32
30
  WHERE state = 'pending'
33
31
  ;
34
32
 
35
- -- PREP: recovery_fail_open_model_calls
36
33
  -- The process-local model-call owner vanished. Physical requests have already
37
34
  -- been settled above, preserving unknown evidence without fabricating zero use.
38
35
  INSERT INTO model_call_observation (id, failure)
@@ -48,7 +45,6 @@ SELECT mc.id, json_object(
48
45
  FROM model_calls mc
49
46
  WHERE (SELECT state FROM inference_calls WHERE id = mc.id) = 'pending';
50
47
 
51
- -- PREP: recovery_fail_open_turns
52
48
  -- Every open turn has lost its process-local producer, including a narrow crash
53
49
  -- window after its loop parked or queued. Provider evidence settles first; then
54
50
  -- the producer-neutral lifecycle closes every unfinished container without
@@ -58,7 +54,6 @@ SET status = 500,
58
54
  completed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
59
55
  WHERE completed_at IS NULL;
60
56
 
61
- -- PREP: recovery_fail_ownerless_proposals
62
57
  -- {§worker-lifecycle-restart-recovery} Every proposed row depended on a
63
58
  -- process-local resolution waiter. At boot that owner is necessarily gone, so
64
59
  -- terminalize the occurrence before {§proposal-list} can open to clients.
@@ -91,16 +86,13 @@ SET state = 'failed',
91
86
  deep_hash = NULL
92
87
  WHERE state = 'proposed';
93
88
 
94
- -- PREP: recovery_remove_ownerless_client_interactions
95
89
  -- The durable request can be re-presented only while its exact process-local
96
90
  -- awaiting owner exists. No response was recorded, so recovery removes the
97
91
  -- orphan instead of fabricating a cancellation or replaying its operation.
98
92
  DELETE FROM client_interactions;
99
93
 
100
- -- PREP: recovery_error_orphan_subscription_channels
101
94
  -- Every open subscription belonged to a callable in the prior process. Mark its
102
- -- active content terminal before closing the durable row, so an interruption
103
- -- between these statements remains recoverable on the next boot.
95
+ -- active content terminal before closing the durable row.
104
96
  UPDATE entry_channels
105
97
  SET state = 'errored'
106
98
  WHERE state = 'active'
@@ -108,7 +100,6 @@ WHERE state = 'active'
108
100
  SELECT entry_id FROM subscriptions WHERE closed_at IS NULL
109
101
  );
110
102
 
111
- -- PREP: recovery_fail_orphan_subscriptions
112
103
  UPDATE subscriptions
113
104
  SET closed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now'),
114
105
  close_status = 500,
@@ -124,7 +115,6 @@ SET closed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now'),
124
115
  channel_results = '{}'
125
116
  WHERE closed_at IS NULL;
126
117
 
127
- -- PREP: recovery_resume_unblocked_parks
128
118
  -- {§loop-wake-identity}: a persisted completion beats a future observation. Otherwise
129
119
  -- only a now-empty join wakes here; observation ownership is restored below
130
120
  -- through the same scheduler used after a live park.
@@ -134,7 +124,7 @@ SET status = 100,
134
124
  WHERE status = 202
135
125
  AND (observed_wake_revision < (SELECT wake_revision FROM workers WHERE id = loops.worker_id)
136
126
  OR EXISTS (SELECT 1 FROM loop_obligations held WHERE held.loop_id = loops.id
137
- AND held.streams = 0 AND held.workers = 0));
127
+ AND held.streams = 0 AND held.workers = 0 AND held.messages = 0));
138
128
 
139
129
  -- PREP: recovery_orphan_message_sources
140
130
  -- {§message-loop-containment}: finish an absent or partially staged orphan
@@ -1 +1 @@
1
- {"version":3,"file":"logEntry.d.ts","sourceRoot":"","sources":["../../src/server/logEntry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,CAAC,OAAO,OAAO,QAAQ;;IAWzB,OAAa,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAIpE;IAGD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAgCtD;CACJ"}
1
+ {"version":3,"file":"logEntry.d.ts","sourceRoot":"","sources":["../../src/server/logEntry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,CAAC,OAAO,OAAO,QAAQ;;IAWzB,OAAa,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAIpE;IAGD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAsCtD;CACJ"}
@@ -49,7 +49,13 @@ export default class LogEntry {
49
49
  status_rx: row.status_rx,
50
50
  weight: row.weight,
51
51
  attrs: LogEntry.#parseJsonOrNull(row.attrs),
52
+ state: row.state,
52
53
  ...(typeof row.reasoning === "string" ? { reasoning: row.reasoning } : {}),
54
+ ...(typeof row.reasoning === "string" && typeof row.reasoning_model_call_id === "number"
55
+ ? { reasoning_model_call_id: row.reasoning_model_call_id, reasoning_request_sequence: row.reasoning_request_sequence }
56
+ : {}),
57
+ ...(typeof row.invocation === "string" ? { invocation: row.invocation } : {}),
58
+ ...(typeof row.answering === "string" ? { answering: row.answering } : {}),
53
59
  };
54
60
  }
55
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logEntry.js","sourceRoot":"","sources":["../../src/server/logEntry.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,6DAA6D;AAC7D,yCAAyC;AAMzC,MAAM,CAAC,OAAO,OAAO,QAAQ;IACzB,MAAM,CAAC,gBAAgB,CAAC,CAAU;QAC9B,kEAAkE;QAClE,uCAAuC;QACvC,kFAAkF;QAClF,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QAC3D,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAGD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAM,EAAE,EAAU;QACzC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,GAAG,CAA0B,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1E,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,8EAA8E;IAC9E,MAAM,CAAC,IAAI,CAAC,GAA4B;QACpC,OAAO;YACH,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,SAAS,EAAE,GAAG,CAAC,SAAmB;YAClC,OAAO,EAAE,GAAG,CAAC,OAAiB;YAC9B,QAAQ,EAAE,GAAG,CAAC,QAAkB;YAChC,OAAO,EAAE,GAAG,CAAC,OAAiB;YAC9B,QAAQ,EAAE,GAAG,CAAC,QAAkB;YAChC,QAAQ,EAAE,GAAG,CAAC,QAAkB;YAChC,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,MAAM,EAAE,GAAG,CAAC,MAAgB;YAC5B,MAAM,EAAE,GAAG,CAAC,MAAuB;YACnC,EAAE,EAAE,GAAG,CAAC,EAAmB;YAC3B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;YAC7C,MAAM,EAAE,GAAG,CAAC,MAAuB;YACnC,QAAQ,EAAE,GAAG,CAAC,QAAyB;YACvC,QAAQ,EAAE,GAAG,CAAC,QAAyB;YACvC,QAAQ,EAAE,GAAG,CAAC,QAAyB;YACvC,IAAI,EAAE,GAAG,CAAC,IAAqB;YAC/B,QAAQ,EAAE,GAAG,CAAC,QAAyB;YACvC,KAAK,EAAE,GAAG,CAAC,KAAsB;YACjC,QAAQ,EAAE,GAAG,CAAC,QAAyB;YACvC,UAAU,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;YACrD,EAAE,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,WAAW,EAAE,GAAG,CAAC,WAAqB;YACtC,EAAE,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,WAAW,EAAE,GAAG,CAAC,WAAqB;YACtC,SAAS,EAAE,GAAG,CAAC,SAAmB;YAClC,MAAM,EAAE,GAAG,CAAC,MAAgB;YAC5B,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3C,GAAG,CAAC,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7E,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"logEntry.js","sourceRoot":"","sources":["../../src/server/logEntry.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- -- Log-entry hydration for wire surfacing.
1
+ -- Log-entry hydration for wire surfacing. {§methods-readable-reasoning}: a turn's admitted readable
2
+ -- reasoning rides its first model operation row, derived from the packet, never stored on a row.
2
3
 
3
4
  -- PREP: log_entry_by_id
4
5
  -- loop_seq / turn_seq are the loop+turn ordinals (the logical coordinate clients
@@ -6,11 +7,54 @@
6
7
  SELECT le.*, l.sequence AS loop_seq, t.sequence AS turn_seq,
7
8
  CASE
8
9
  WHEN le.origin = 'model'
9
- AND le.op IN ('SEND', 'KILL', 'NOTE', 'WAIT')
10
+ AND le.op IS NOT NULL
11
+ AND le.sequence = (SELECT MIN(f.sequence) FROM log_entries f
12
+ WHERE f.turn_id = le.turn_id AND f.origin = 'model' AND f.op IS NOT NULL)
10
13
  AND json_type(t.packet, '$.assistant.reasoning') = 'text'
11
14
  AND length(json_extract(t.packet, '$.assistant.reasoning')) > 0
12
15
  THEN json_extract(t.packet, '$.assistant.reasoning')
13
- END AS reasoning
16
+ END AS reasoning,
17
+ -- {§methods-readable-reasoning} The request that streamed it: the turn's accepted model call and that
18
+ -- call's response request. History a FORK inherited names none.
19
+ CASE WHEN le.origin = 'model' AND le.op IS NOT NULL THEN
20
+ (SELECT s.model_call_id FROM turn_sources s WHERE s.turn_id = le.turn_id AND s.kind = 'ops' AND s.sequence = 0)
21
+ END AS reasoning_model_call_id,
22
+ CASE WHEN le.origin = 'model' AND le.op IS NOT NULL THEN
23
+ (SELECT MAX(pr.sequence) FROM turn_sources s
24
+ JOIN provider_requests pr ON pr.inference_call_id = s.model_call_id
25
+ WHERE s.turn_id = le.turn_id AND s.kind = 'ops' AND s.sequence = 0 AND pr.outcome = 'response')
26
+ END AS reasoning_request_sequence,
27
+ -- {§methods-invocation} The operation whose obligation this row discharges: a stream observation's execution,
28
+ -- as its subscription recorded it; or the operation that sent the message a child's conclusion or a completion
29
+ -- reply answers, when that operation is this log's.
30
+ COALESCE(
31
+ (SELECT s.source FROM subscription_publications sp JOIN subscriptions s ON s.id = sp.subscription_id
32
+ WHERE sp.id = le.subscription_publication_id),
33
+ (SELECT printf('log:///%d/%d/%d/%s', sender.sequence, opened.sequence, o.sequence, o.op)
34
+ FROM ambient_events ae
35
+ JOIN loop_messages m
36
+ ON (ae.kind = 'loop_termination' AND m.loop_id = ae.source_record_id AND m.ordinal = 1)
37
+ OR (ae.kind = 'reply' AND m.id IN (SELECT c.message_id FROM message_completions c WHERE c.response_id = ae.source_record_id))
38
+ JOIN turns opened ON opened.id = m.opened_turn_id
39
+ JOIN loops sender ON sender.id = opened.loop_id
40
+ JOIN log_entries o ON o.turn_id = m.opened_turn_id AND o.sequence = m.opened_sequence
41
+ WHERE ae.id = le.ambient_event_id AND (sender.worker_id = le.worker_id OR le.inherited_history = 1)
42
+ LIMIT 1)
43
+ ) AS invocation,
44
+ -- {§methods-answering} The operation of this log that sent the message a reply answers, whether the reply
45
+ -- completes the message or reports progress.
46
+ (SELECT printf('log:///%d/%d/%d/%s', sender.sequence, opened.sequence, o.sequence, o.op)
47
+ FROM ambient_events ae
48
+ JOIN log_responses r ON r.id = ae.source_record_id
49
+ JOIN json_each(r.rx, '$.answers') answer
50
+ JOIN message_sources ms ON ms.path = answer.value AND ms.workspace_id = (SELECT w.workspace_id FROM workers w WHERE w.id = le.worker_id)
51
+ JOIN loop_messages m ON m.id = ms.id
52
+ JOIN turns opened ON opened.id = m.opened_turn_id
53
+ JOIN loops sender ON sender.id = opened.loop_id
54
+ JOIN log_entries o ON o.turn_id = m.opened_turn_id AND o.sequence = m.opened_sequence
55
+ WHERE ae.id = le.ambient_event_id AND ae.kind = 'reply'
56
+ AND (sender.worker_id = le.worker_id OR le.inherited_history = 1)
57
+ LIMIT 1) AS answering
14
58
  FROM log_entries le
15
59
  JOIN loops l ON l.id = le.loop_id
16
60
  JOIN turns t ON t.id = le.turn_id
@@ -22,11 +66,54 @@ WHERE le.id = $id;
22
66
  SELECT le.*, l.sequence AS loop_seq, t.sequence AS turn_seq,
23
67
  CASE
24
68
  WHEN le.origin = 'model'
25
- AND le.op IN ('SEND', 'KILL', 'NOTE', 'WAIT')
69
+ AND le.op IS NOT NULL
70
+ AND le.sequence = (SELECT MIN(f.sequence) FROM log_entries f
71
+ WHERE f.turn_id = le.turn_id AND f.origin = 'model' AND f.op IS NOT NULL)
26
72
  AND json_type(t.packet, '$.assistant.reasoning') = 'text'
27
73
  AND length(json_extract(t.packet, '$.assistant.reasoning')) > 0
28
74
  THEN json_extract(t.packet, '$.assistant.reasoning')
29
- END AS reasoning
75
+ END AS reasoning,
76
+ -- {§methods-readable-reasoning} The request that streamed it: the turn's accepted model call and that
77
+ -- call's response request. History a FORK inherited names none.
78
+ CASE WHEN le.origin = 'model' AND le.op IS NOT NULL THEN
79
+ (SELECT s.model_call_id FROM turn_sources s WHERE s.turn_id = le.turn_id AND s.kind = 'ops' AND s.sequence = 0)
80
+ END AS reasoning_model_call_id,
81
+ CASE WHEN le.origin = 'model' AND le.op IS NOT NULL THEN
82
+ (SELECT MAX(pr.sequence) FROM turn_sources s
83
+ JOIN provider_requests pr ON pr.inference_call_id = s.model_call_id
84
+ WHERE s.turn_id = le.turn_id AND s.kind = 'ops' AND s.sequence = 0 AND pr.outcome = 'response')
85
+ END AS reasoning_request_sequence,
86
+ -- {§methods-invocation} The operation whose obligation this row discharges: a stream observation's execution,
87
+ -- as its subscription recorded it; or the operation that sent the message a child's conclusion or a completion
88
+ -- reply answers, when that operation is this log's.
89
+ COALESCE(
90
+ (SELECT s.source FROM subscription_publications sp JOIN subscriptions s ON s.id = sp.subscription_id
91
+ WHERE sp.id = le.subscription_publication_id),
92
+ (SELECT printf('log:///%d/%d/%d/%s', sender.sequence, opened.sequence, o.sequence, o.op)
93
+ FROM ambient_events ae
94
+ JOIN loop_messages m
95
+ ON (ae.kind = 'loop_termination' AND m.loop_id = ae.source_record_id AND m.ordinal = 1)
96
+ OR (ae.kind = 'reply' AND m.id IN (SELECT c.message_id FROM message_completions c WHERE c.response_id = ae.source_record_id))
97
+ JOIN turns opened ON opened.id = m.opened_turn_id
98
+ JOIN loops sender ON sender.id = opened.loop_id
99
+ JOIN log_entries o ON o.turn_id = m.opened_turn_id AND o.sequence = m.opened_sequence
100
+ WHERE ae.id = le.ambient_event_id AND (sender.worker_id = le.worker_id OR le.inherited_history = 1)
101
+ LIMIT 1)
102
+ ) AS invocation,
103
+ -- {§methods-answering} The operation of this log that sent the message a reply answers, whether the reply
104
+ -- completes the message or reports progress.
105
+ (SELECT printf('log:///%d/%d/%d/%s', sender.sequence, opened.sequence, o.sequence, o.op)
106
+ FROM ambient_events ae
107
+ JOIN log_responses r ON r.id = ae.source_record_id
108
+ JOIN json_each(r.rx, '$.answers') answer
109
+ JOIN message_sources ms ON ms.path = answer.value AND ms.workspace_id = (SELECT w.workspace_id FROM workers w WHERE w.id = le.worker_id)
110
+ JOIN loop_messages m ON m.id = ms.id
111
+ JOIN turns opened ON opened.id = m.opened_turn_id
112
+ JOIN loops sender ON sender.id = opened.loop_id
113
+ JOIN log_entries o ON o.turn_id = m.opened_turn_id AND o.sequence = m.opened_sequence
114
+ WHERE ae.id = le.ambient_event_id AND ae.kind = 'reply'
115
+ AND (sender.worker_id = le.worker_id OR le.inherited_history = 1)
116
+ LIMIT 1) AS answering
30
117
  FROM log_entries le
31
118
  JOIN loops l ON l.id = le.loop_id
32
119
  JOIN turns t ON t.id = le.turn_id
@@ -34,8 +121,9 @@ WHERE le.worker_id = $worker_id
34
121
  AND ($loop_id IS NULL OR le.loop_id = $loop_id)
35
122
  AND ($turn_id IS NULL OR le.turn_id = $turn_id)
36
123
  AND ($since_id IS NULL OR le.id > $since_id)
124
+ AND ($before_id IS NULL OR le.id < $before_id)
37
125
  AND ($loop_seq IS NULL OR l.sequence = $loop_seq)
38
126
  AND ($turn_seq IS NULL OR t.sequence = $turn_seq)
39
127
  AND ($sequence IS NULL OR le.sequence = $sequence)
40
- ORDER BY le.at DESC
128
+ ORDER BY le.id DESC
41
129
  LIMIT $limit;
@@ -1,9 +1,9 @@
1
1
  import { ConfigurationError } from "@plurnk/plurnk-meta";
2
2
  import type { PluginReport } from "@plurnk/plurnk-agent-plugins";
3
- import type { ApplicationPort } from "@plurnk/plurnk-contracts";
4
3
  import type { DaemonModule } from "@plurnk/plurnk-modules";
5
4
  import type { HostSetupSeam } from "./ModuleHost.ts";
6
5
  import HostPaths from "../core/HostPaths.ts";
6
+ import type { ApplicationPort } from "@plurnk/plurnk-contracts/port";
7
7
  export declare const discoverDaemonModules: (options?: {
8
8
  cwd?: string;
9
9
  hostPaths?: HostPaths;
@@ -1 +1 @@
1
- {"version":3,"file":"module-discovery.d.ts","sourceRoot":"","sources":["../../src/server/module-discovery.ts"],"names":[],"mappings":"AAGA,OAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,SAAS,MAAM,sBAAsB,CAAC;AA4D7C,eAAO,MAAM,qBAAqB,aACrB;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,KACvI,OAAO,CAAC;IAEP,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3H,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAG1C,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAC;CAC/G,CA8DA,CAAC"}
1
+ {"version":3,"file":"module-discovery.d.ts","sourceRoot":"","sources":["../../src/server/module-discovery.ts"],"names":[],"mappings":"AAGA,OAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAG7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AA0DrE,eAAO,MAAM,qBAAqB,aACrB;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,KACvI,OAAO,CAAC;IAEP,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3H,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAG1C,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAC;CAC/G,CA8DA,CAAC"}
@@ -10,6 +10,7 @@ import { createRequire } from "node:module";
10
10
  import { basename, join } from "node:path";
11
11
  import { pathToFileURL } from "node:url";
12
12
  import Meta, { ConfigurationError } from "@plurnk/plurnk-meta";
13
+ import HostPaths from "../core/HostPaths.js";
13
14
  import PluginSources from "./PluginSources.js";
14
15
  import EnvDefaults from "../core/env-defaults.js";
15
16
  const assertDaemonModule = (value, packageName, source) => {
@@ -1 +1 @@
1
- {"version":3,"file":"module-discovery.js","sourceRoot":"","sources":["../../src/server/module-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-discovery.js","sourceRoot":"","sources":["../../src/server/module-discovery.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,22 @@
1
1
  -- ApplicationPort runLoop queries. SPEC {§methods-loop-run}.
2
2
 
3
3
  -- PREP: application_list_worker_loops
4
- -- {§methods-worker-loops}: durable lifecycle projection for exterior adapters.
5
- SELECT id, worker_id AS workerId, sequence, status, prompt,
6
- prompt_source AS promptSource, terminated_at AS terminatedAt,
7
- terminal_result AS terminalResult, wait_poll_at AS waitUntil,
4
+ -- {§methods-worker-loops}: durable lifecycle projection for exterior adapters. {§worker-obligations}: a loop is
5
+ -- opened by its first message's operation, named in the sender's own log.
6
+ SELECT loops.id, loops.worker_id AS workerId, loops.sequence, loops.status, loops.prompt,
7
+ loops.prompt_source AS promptSource, loops.claimed_at AS claimedAt, loops.terminated_at AS terminatedAt,
8
+ loops.terminal_result AS terminalResult, loops.wait_poll_at AS waitUntil,
8
9
  (SELECT COUNT(*)
9
10
  FROM turns
10
11
  WHERE turns.loop_id = loops.id
11
- AND turns.packet IS NOT NULL) AS packetCount
12
+ AND turns.packet IS NOT NULL) AS packetCount,
13
+ sender.worker_id AS invocationWorkerId,
14
+ CASE WHEN o.id IS NULL THEN NULL
15
+ ELSE printf('log:///%d/%d/%d/%s', sender.sequence, opened.sequence, o.sequence, o.op) END AS invocation
12
16
  FROM work_loops AS loops
13
- WHERE worker_id = $worker_id
14
- ORDER BY sequence;
17
+ LEFT JOIN loop_messages first ON first.loop_id = loops.id AND first.ordinal = 1
18
+ LEFT JOIN turns opened ON opened.id = first.opened_turn_id
19
+ LEFT JOIN loops sender ON sender.id = opened.loop_id
20
+ LEFT JOIN log_entries o ON o.turn_id = first.opened_turn_id AND o.sequence = first.opened_sequence
21
+ WHERE loops.worker_id = $worker_id
22
+ ORDER BY loops.sequence;