@plurnk/plurnk-service 1.0.4 → 1.0.6

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 (215) hide show
  1. package/.env.defaults +55 -31
  2. package/INSTALL.md +3 -3
  3. package/README.md +4 -4
  4. package/SPEC.md +205 -193
  5. package/dist/Paths.js +1 -1
  6. package/dist/Paths.js.map +1 -1
  7. package/dist/core/ChannelWrite.d.ts +18 -18
  8. package/dist/core/ChannelWrite.d.ts.map +1 -1
  9. package/dist/core/ChannelWrite.js +17 -17
  10. package/dist/core/ChannelWrite.js.map +1 -1
  11. package/dist/core/ChannelWrite.sql +11 -11
  12. package/dist/core/Dispatcher.d.ts +11 -16
  13. package/dist/core/Dispatcher.d.ts.map +1 -1
  14. package/dist/core/Dispatcher.js +122 -125
  15. package/dist/core/Dispatcher.js.map +1 -1
  16. package/dist/core/Engine.d.ts +20 -23
  17. package/dist/core/Engine.d.ts.map +1 -1
  18. package/dist/core/Engine.js +213 -210
  19. package/dist/core/Engine.js.map +1 -1
  20. package/dist/core/Engine.sql +108 -130
  21. package/dist/core/PacketBuilder.d.ts +10 -11
  22. package/dist/core/PacketBuilder.d.ts.map +1 -1
  23. package/dist/core/PacketBuilder.js +204 -128
  24. package/dist/core/PacketBuilder.js.map +1 -1
  25. package/dist/core/ProposalLifecycle.d.ts +8 -8
  26. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  27. package/dist/core/ProposalLifecycle.js +10 -10
  28. package/dist/core/ProposalLifecycle.js.map +1 -1
  29. package/dist/core/ProviderInstantiate.d.ts +1 -0
  30. package/dist/core/ProviderInstantiate.d.ts.map +1 -1
  31. package/dist/core/ProviderInstantiate.js +9 -3
  32. package/dist/core/ProviderInstantiate.js.map +1 -1
  33. package/dist/core/SchemeRegistry.d.ts +4 -1
  34. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  35. package/dist/core/SchemeRegistry.js +18 -9
  36. package/dist/core/SchemeRegistry.js.map +1 -1
  37. package/dist/core/TelemetryChannel.d.ts +5 -5
  38. package/dist/core/TelemetryChannel.d.ts.map +1 -1
  39. package/dist/core/TelemetryChannel.js +9 -9
  40. package/dist/core/TelemetryChannel.js.map +1 -1
  41. package/dist/core/caps/CapsResolve.js +2 -2
  42. package/dist/core/caps/CapsResolve.js.map +1 -1
  43. package/dist/core/caps/DbNotifyCaps.js +2 -2
  44. package/dist/core/caps/DbNotifyCaps.js.map +1 -1
  45. package/dist/core/caps/DbSubscriptionCaps.js +7 -7
  46. package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
  47. package/dist/core/caps/SchemeCtxImpl.d.ts +2 -2
  48. package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
  49. package/dist/core/caps/SchemeCtxImpl.js +4 -4
  50. package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
  51. package/dist/core/content-hash.d.ts +2 -0
  52. package/dist/core/content-hash.d.ts.map +1 -0
  53. package/dist/core/content-hash.js +6 -0
  54. package/dist/core/content-hash.js.map +1 -0
  55. package/dist/core/fork.d.ts +1 -1
  56. package/dist/core/fork.d.ts.map +1 -1
  57. package/dist/core/fork.js +31 -26
  58. package/dist/core/fork.js.map +1 -1
  59. package/dist/core/fork.sql +41 -32
  60. package/dist/core/git-env.d.ts.map +1 -1
  61. package/dist/core/git-env.js +23 -7
  62. package/dist/core/git-env.js.map +1 -1
  63. package/dist/core/git-iso.d.ts +9 -0
  64. package/dist/core/git-iso.d.ts.map +1 -0
  65. package/dist/core/git-iso.js +227 -0
  66. package/dist/core/git-iso.js.map +1 -0
  67. package/dist/core/git-membership.d.ts +2 -2
  68. package/dist/core/git-membership.d.ts.map +1 -1
  69. package/dist/core/git-membership.js +70 -50
  70. package/dist/core/git-membership.js.map +1 -1
  71. package/dist/core/git-state.d.ts +1 -1
  72. package/dist/core/git-state.d.ts.map +1 -1
  73. package/dist/core/git-state.js +21 -11
  74. package/dist/core/git-state.js.map +1 -1
  75. package/dist/core/packet-wire.d.ts.map +1 -1
  76. package/dist/core/packet-wire.js +81 -22
  77. package/dist/core/packet-wire.js.map +1 -1
  78. package/dist/core/plurnk-uri.d.ts +2 -2
  79. package/dist/core/plurnk-uri.d.ts.map +1 -1
  80. package/dist/core/plurnk-uri.js +19 -12
  81. package/dist/core/plurnk-uri.js.map +1 -1
  82. package/dist/core/run-ops.sql +26 -26
  83. package/dist/core/scheme-types.d.ts +6 -11
  84. package/dist/core/scheme-types.d.ts.map +1 -1
  85. package/dist/core/search-gate.js +0 -0
  86. package/dist/core/search-gate.js.map +1 -1
  87. package/dist/core/token-ruler.d.ts +2 -0
  88. package/dist/core/token-ruler.d.ts.map +1 -0
  89. package/dist/core/token-ruler.js +18 -0
  90. package/dist/core/token-ruler.js.map +1 -0
  91. package/dist/core/worker-cap.d.ts +8 -0
  92. package/dist/core/worker-cap.d.ts.map +1 -0
  93. package/dist/core/worker-cap.js +20 -0
  94. package/dist/core/worker-cap.js.map +1 -0
  95. package/dist/core/{session-settings.d.ts → workspace-settings.d.ts} +5 -5
  96. package/dist/core/workspace-settings.d.ts.map +1 -0
  97. package/dist/core/{session-settings.js → workspace-settings.js} +13 -13
  98. package/dist/core/workspace-settings.js.map +1 -0
  99. package/dist/digest/Digest.d.ts +3 -3
  100. package/dist/digest/Digest.d.ts.map +1 -1
  101. package/dist/digest/Digest.js +79 -73
  102. package/dist/digest/Digest.js.map +1 -1
  103. package/dist/digest/digest.sql +18 -18
  104. package/dist/schemes/Exec.d.ts +9 -2
  105. package/dist/schemes/Exec.d.ts.map +1 -1
  106. package/dist/schemes/Exec.js +121 -68
  107. package/dist/schemes/Exec.js.map +1 -1
  108. package/dist/schemes/ExecOutputScheme.js +3 -3
  109. package/dist/schemes/ExecOutputScheme.js.map +1 -1
  110. package/dist/schemes/File.js +23 -23
  111. package/dist/schemes/File.js.map +1 -1
  112. package/dist/schemes/Known.js +5 -5
  113. package/dist/schemes/Known.js.map +1 -1
  114. package/dist/schemes/Log.d.ts.map +1 -1
  115. package/dist/schemes/Log.js +63 -14
  116. package/dist/schemes/Log.js.map +1 -1
  117. package/dist/schemes/Log.sql +49 -8
  118. package/dist/schemes/Plurnk.js +5 -5
  119. package/dist/schemes/Plurnk.js.map +1 -1
  120. package/dist/schemes/Skill.js +5 -5
  121. package/dist/schemes/Skill.js.map +1 -1
  122. package/dist/schemes/Unknown.js +5 -5
  123. package/dist/schemes/Unknown.js.map +1 -1
  124. package/dist/schemes/{Run.d.ts → Worker.d.ts} +2 -2
  125. package/dist/schemes/Worker.d.ts.map +1 -0
  126. package/dist/schemes/{Run.js → Worker.js} +67 -67
  127. package/dist/schemes/Worker.js.map +1 -0
  128. package/dist/schemes/_entry-crud.js +11 -11
  129. package/dist/schemes/_entry-crud.js.map +1 -1
  130. package/dist/schemes/_entry-crud.sql +29 -29
  131. package/dist/schemes/_entry-find.d.ts +2 -1
  132. package/dist/schemes/_entry-find.d.ts.map +1 -1
  133. package/dist/schemes/_entry-find.js +31 -19
  134. package/dist/schemes/_entry-find.js.map +1 -1
  135. package/dist/schemes/_entry-find.sql +9 -9
  136. package/dist/schemes/_entry-graph.d.ts +2 -2
  137. package/dist/schemes/_entry-graph.d.ts.map +1 -1
  138. package/dist/schemes/_entry-graph.js +18 -18
  139. package/dist/schemes/_entry-graph.js.map +1 -1
  140. package/dist/schemes/_entry-graph.sql +8 -8
  141. package/dist/schemes/_entry-manifest.d.ts +1 -1
  142. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  143. package/dist/schemes/_entry-manifest.js +74 -50
  144. package/dist/schemes/_entry-manifest.js.map +1 -1
  145. package/dist/schemes/_entry-ops.d.ts +4 -4
  146. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  147. package/dist/schemes/_entry-ops.js +25 -25
  148. package/dist/schemes/_entry-ops.js.map +1 -1
  149. package/dist/schemes/_entry-ops.sql +9 -9
  150. package/dist/schemes/_entry-semantic.d.ts +2 -1
  151. package/dist/schemes/_entry-semantic.d.ts.map +1 -1
  152. package/dist/schemes/_entry-semantic.js +23 -4
  153. package/dist/schemes/_entry-semantic.js.map +1 -1
  154. package/dist/schemes/_entry-semantic.sql +18 -4
  155. package/dist/schemes/_entry-send.d.ts +1 -1
  156. package/dist/schemes/_entry-send.d.ts.map +1 -1
  157. package/dist/schemes/_entry-send.js +6 -6
  158. package/dist/schemes/_entry-send.js.map +1 -1
  159. package/dist/schemes/exec-abort.js +1 -1
  160. package/dist/schemes/exec-abort.js.map +1 -1
  161. package/dist/server/Daemon.d.ts +50 -48
  162. package/dist/server/Daemon.d.ts.map +1 -1
  163. package/dist/server/Daemon.js +307 -297
  164. package/dist/server/Daemon.js.map +1 -1
  165. package/dist/server/client-input.js +20 -20
  166. package/dist/server/client-input.js.map +1 -1
  167. package/dist/server/dispatch-as-plurnk.d.ts +1 -1
  168. package/dist/server/dispatch-as-plurnk.d.ts.map +1 -1
  169. package/dist/server/dispatch-as-plurnk.js +7 -7
  170. package/dist/server/dispatch-as-plurnk.js.map +1 -1
  171. package/dist/server/drain.sql +27 -27
  172. package/dist/server/envelope.d.ts +20 -20
  173. package/dist/server/envelope.d.ts.map +1 -1
  174. package/dist/server/envelope.js +86 -86
  175. package/dist/server/envelope.js.map +1 -1
  176. package/dist/server/envelope.sql +39 -39
  177. package/dist/server/logEntry.d.ts +1 -1
  178. package/dist/server/logEntry.d.ts.map +1 -1
  179. package/dist/server/logEntry.js +1 -1
  180. package/dist/server/logEntry.js.map +1 -1
  181. package/dist/server/loop-model.d.ts +3 -0
  182. package/dist/server/loop-model.d.ts.map +1 -0
  183. package/dist/server/loop-model.js +26 -0
  184. package/dist/server/loop-model.js.map +1 -0
  185. package/dist/server/loopDocs.d.ts +1 -1
  186. package/dist/server/loopDocs.d.ts.map +1 -1
  187. package/dist/server/loopDocs.js +6 -6
  188. package/dist/server/loopDocs.js.map +1 -1
  189. package/dist/server/seam-entry-read.sql +2 -2
  190. package/dist/server/seam-log-read.sql +3 -3
  191. package/dist/server/seam-loop.sql +3 -3
  192. package/dist/server/seam-proposal-list.sql +4 -4
  193. package/dist/server/yolo.js +2 -2
  194. package/dist/server/yolo.js.map +1 -1
  195. package/dist/service.d.ts.map +1 -1
  196. package/dist/service.js +21 -6
  197. package/dist/service.js.map +1 -1
  198. package/migrations/0000-00-00.01_schema.sql +84 -85
  199. package/package.json +17 -14
  200. package/dist/core/TokenGauge.d.ts +0 -16
  201. package/dist/core/TokenGauge.d.ts.map +0 -1
  202. package/dist/core/TokenGauge.js +0 -58
  203. package/dist/core/TokenGauge.js.map +0 -1
  204. package/dist/core/run-cap.d.ts +0 -8
  205. package/dist/core/run-cap.d.ts.map +0 -1
  206. package/dist/core/run-cap.js +0 -20
  207. package/dist/core/run-cap.js.map +0 -1
  208. package/dist/core/search-prefetch.d.ts +0 -17
  209. package/dist/core/search-prefetch.d.ts.map +0 -1
  210. package/dist/core/search-prefetch.js +0 -164
  211. package/dist/core/search-prefetch.js.map +0 -1
  212. package/dist/core/session-settings.d.ts.map +0 -1
  213. package/dist/core/session-settings.js.map +0 -1
  214. package/dist/schemes/Run.d.ts.map +0 -1
  215. package/dist/schemes/Run.js.map +0 -1
@@ -1,171 +1,171 @@
1
1
  // Envelope lifecycle helpers for client connections. SPEC §connection-lifecycle.
2
2
  //
3
- // Every connected client gets a (session, run, client-loop) envelope. Either
4
- // the client picks the session explicitly (session.create / session.attach)
3
+ // Every connected client gets a (workspace, run, client-loop) envelope. Either
4
+ // the client picks the workspace explicitly (workspace.create / workspace.attach)
5
5
  // or the daemon auto-creates one on first requiresInit RPC. In both cases
6
- // the daemon opens a NEW run within the session and a NEW client loop within
7
- // that run; the client loop closes on disconnect.
6
+ // the daemon opens a NEW run within the workspace and a NEW client loop within
7
+ // that worker; the client loop closes on disconnect.
8
8
  import GitMembership from "../core/git-membership.js";
9
9
  export default class Envelope {
10
10
  // Run names reserved for non-client actors: a client must not create OR
11
- // attach to a run under a reserved name (origin-impersonation — `plurnk`
11
+ // attach to a worker under a reserved name (origin-impersonation — `plurnk`
12
12
  // is the runtime actor, §authority-terms/§actor-boundary). Checked case-insensitively, before
13
13
  // lookup, so a client can neither forge nor hijack one (SPEC §methods).
14
- static RESERVED_RUN_NAMES = new Set(["plurnk"]); // §methods-run-name-reserved
15
- // Grammar 0.5.0 (#10): Session and Run carry user-renameable string names.
16
- // Defaults are `session-{unixtime}` and `run-{unixtime}`; random suffix avoids
14
+ static RESERVED_RUN_NAMES = new Set(["plurnk"]); // §methods-worker-name-reserved
15
+ // Grammar 0.5.0 (#10): Workspace and Run carry user-renameable string names.
16
+ // Defaults are `workspace-{unixtime}` and `run-{unixtime}`; random suffix avoids
17
17
  // collisions when two creations land in the same second.
18
18
  static #tsName(prefix) {
19
19
  const ts = Math.floor(Date.now() / 1000);
20
20
  const rand = Math.floor(Math.random() * 0xFFFFFF).toString(36).padStart(4, "0");
21
21
  return `${prefix}-${ts}-${rand}`;
22
22
  }
23
- static generateSessionName() {
24
- return Envelope.#tsName("session");
23
+ static generateWorkspaceName() {
24
+ return Envelope.#tsName("workspace");
25
25
  }
26
- static generateRunName() {
27
- return Envelope.#tsName("run");
26
+ static generateWorkerName() {
27
+ return Envelope.#tsName("worker");
28
28
  }
29
29
  static async createClientEnvelope(db, opts = {}) {
30
- const name = opts.name ?? Envelope.#tsName(opts.prefix ?? "session");
30
+ const name = opts.name ?? Envelope.#tsName(opts.prefix ?? "workspace");
31
31
  const projectRoot = opts.projectRoot ?? null;
32
- const session = await db.envelope_insert_session.get({ name, project_root: projectRoot, settings: opts.settings ?? "{}" });
33
- if (session === undefined)
34
- throw new Error("createClientEnvelope: session insert returned no row");
32
+ const workspace = await db.envelope_insert_workspace.get({ name, project_root: projectRoot, settings: opts.settings ?? "{}" });
33
+ if (workspace === undefined)
34
+ throw new Error("createClientEnvelope: workspace insert returned no row");
35
35
  // SPEC §membership D4 — establish git-ls-files membership at workspace setup so
36
36
  // tracked files are members before the first op. No-op when projectRoot is
37
37
  // null (headless) or not a git working tree.
38
- await GitMembership.resolveGitMembership(db, session.id, undefined);
39
- const runName = Envelope.generateRunName();
40
- const run = await db.envelope_insert_run.get({ session_id: session.id, name: runName, origin: "client" });
38
+ await GitMembership.resolveGitMembership(db, workspace.id, undefined);
39
+ const workerName = Envelope.generateWorkerName();
40
+ const run = await db.envelope_insert_worker.get({ workspace_id: workspace.id, name: workerName, origin: "client" });
41
41
  if (run === undefined)
42
42
  throw new Error("createClientEnvelope: run insert returned no row");
43
43
  return {
44
- sessionId: session.id, sessionName: session.name,
45
- projectRoot: session.project_root,
46
- runId: run.id, runName: run.name,
47
- modelRunId: null,
44
+ workspaceId: workspace.id, workspaceName: workspace.name,
45
+ projectRoot: workspace.project_root,
46
+ workerId: run.id, workerName: run.name,
47
+ modelWorkerId: null,
48
48
  clientLoopId: null,
49
49
  };
50
50
  }
51
- // Resolve the run inside a session. Three modes:
52
- // - opts.runId given: lookup by id, verify session ownership (else throw).
53
- // - opts.runName given: lookup by (sessionId, name); reuse if found, create otherwise.
51
+ // Resolve the worker inside a workspace. Three modes:
52
+ // - opts.workerId given: lookup by id, verify workspace ownership (else throw).
53
+ // - opts.workerName given: lookup by (workspaceId, name); reuse if found, create otherwise.
54
54
  // - neither: create a new run with an auto-generated name (current behavior).
55
- // `runId` and `runName` are alternatives — passing both throws (use one).
56
- static async #resolveRun(db, sessionId, opts) {
57
- if (opts.runId !== undefined && opts.runName !== undefined) {
58
- throw new Error("attachToSession: pass runId OR runName, not both");
55
+ // `workerId` and `workerName` are alternatives — passing both throws (use one).
56
+ static async #resolveWorker(db, workspaceId, opts) {
57
+ if (opts.workerId !== undefined && opts.workerName !== undefined) {
58
+ throw new Error("attachToWorkspace: pass workerId OR workerName, not both");
59
59
  }
60
- if (opts.runId !== undefined) {
61
- const existing = await db.envelope_get_run_by_id.get({ id: opts.runId });
60
+ if (opts.workerId !== undefined) {
61
+ const existing = await db.envelope_get_worker_by_id.get({ id: opts.workerId });
62
62
  if (existing === undefined)
63
- throw new Error(`run ${opts.runId} not found`);
64
- if (existing.session_id !== sessionId)
65
- throw new Error(`run ${opts.runId} belongs to session ${existing.session_id}, not ${sessionId}`);
63
+ throw new Error(`run ${opts.workerId} not found`);
64
+ if (existing.workspace_id !== workspaceId)
65
+ throw new Error(`run ${opts.workerId} belongs to workspace ${existing.workspace_id}, not ${workspaceId}`);
66
66
  return { id: existing.id, name: existing.name };
67
67
  }
68
- if (opts.runName !== undefined) {
69
- if (Envelope.RESERVED_RUN_NAMES.has(opts.runName.toLowerCase())) {
70
- throw new Error(`run name "${opts.runName}" is reserved for a non-client actor`);
68
+ if (opts.workerName !== undefined) {
69
+ if (Envelope.RESERVED_RUN_NAMES.has(opts.workerName.toLowerCase())) {
70
+ throw new Error(`worker name "${opts.workerName}" is reserved for a non-client actor`);
71
71
  }
72
- const existing = await db.envelope_get_run_by_name.get({ session_id: sessionId, name: opts.runName });
72
+ const existing = await db.envelope_get_worker_by_name.get({ workspace_id: workspaceId, name: opts.workerName });
73
73
  if (existing !== undefined)
74
74
  return existing;
75
- const created = await db.envelope_insert_run.get({ session_id: sessionId, name: opts.runName, origin: "client" });
75
+ const created = await db.envelope_insert_worker.get({ workspace_id: workspaceId, name: opts.workerName, origin: "client" });
76
76
  if (created === undefined)
77
- throw new Error("resolveRun: run insert returned no row");
77
+ throw new Error("resolveWorker: run insert returned no row");
78
78
  return created;
79
79
  }
80
- const created = await db.envelope_insert_run.get({ session_id: sessionId, name: Envelope.generateRunName(), origin: "client" });
80
+ const created = await db.envelope_insert_worker.get({ workspace_id: workspaceId, name: Envelope.generateWorkerName(), origin: "client" });
81
81
  if (created === undefined)
82
- throw new Error("resolveRun: run insert returned no row");
82
+ throw new Error("resolveWorker: run insert returned no row");
83
83
  return created;
84
84
  }
85
- static async attachToSession(db, sessionId, opts = {}) {
86
- const session = await db.envelope_get_session.get({ id: sessionId });
87
- if (session === undefined)
88
- throw new Error(`session ${sessionId} not found`);
89
- const run = await Envelope.#resolveRun(db, session.id, opts);
85
+ static async attachToWorkspace(db, workspaceId, opts = {}) {
86
+ const workspace = await db.envelope_get_workspace.get({ id: workspaceId });
87
+ if (workspace === undefined)
88
+ throw new Error(`workspace ${workspaceId} not found`);
89
+ const run = await Envelope.#resolveWorker(db, workspace.id, opts);
90
90
  return {
91
- sessionId: session.id, sessionName: session.name,
92
- projectRoot: session.project_root,
93
- runId: run.id, runName: run.name,
94
- modelRunId: null,
91
+ workspaceId: workspace.id, workspaceName: workspace.name,
92
+ projectRoot: workspace.project_root,
93
+ workerId: run.id, workerName: run.name,
94
+ modelWorkerId: null,
95
95
  clientLoopId: null,
96
96
  };
97
97
  }
98
98
  // Lazy client-loop allocator. Called from dispatchAsClient on the first
99
99
  // client-origin op for this connection; subsequent ops reuse the same
100
100
  // loop until the connection closes.
101
- static async ensureClientLoop(db, runId) {
102
- const loop = await db.envelope_insert_client_loop.get({ run_id: runId });
101
+ static async ensureClientLoop(db, workerId) {
102
+ const loop = await db.envelope_insert_client_loop.get({ worker_id: workerId });
103
103
  if (loop === undefined)
104
104
  throw new Error("ensureClientLoop: loop insert returned no row");
105
105
  return loop.id;
106
106
  }
107
- // Lazy model-run allocator (§connection-lifecycle, §machine-processes — the client writes to its own run).
107
+ // Lazy model-run allocator (§connection-lifecycle, §machine-processes — the client writes to its own worker).
108
108
  // The model's conversation lives in its OWN run, distinct from the connection's
109
109
  // (client) run, so the packet — rendered from the model's run — never carries
110
110
  // the client's op.*. Created on the first loop.run; reused for the connection.
111
- // #366 — a FRESH conversation over the same world (§machine-processes: two runs are two
111
+ // #366 — a FRESH conversation over the same world (§machine-processes: two workers are two
112
112
  // conversations about one curated workspace): a named, empty-log, model-origin ROOT run.
113
- // Distinct from ensureModelRun (the stable default conversation) and forkRun (copies history).
114
- static async createModelRun(db, sessionId, name) {
115
- const run = await db.envelope_insert_run.get({ session_id: sessionId, name: name ?? Envelope.#tsName("model"), origin: "model" });
113
+ // Distinct from ensureModelWorker (the stable default conversation) and forkWorker (copies history).
114
+ static async createModelWorker(db, workspaceId, name) {
115
+ const run = await db.envelope_insert_worker.get({ workspace_id: workspaceId, name: name ?? Envelope.#tsName("model"), origin: "model" });
116
116
  if (run === undefined)
117
- throw new Error("createModelRun: run insert returned no row");
117
+ throw new Error("createModelWorker: run insert returned no row");
118
118
  return run;
119
119
  }
120
- static async ensureModelRun(db, sessionId) {
121
- // #371 — ensure means FIND-FIRST (the WS connection's per-session cache used to hide the
120
+ static async ensureModelWorker(db, workspaceId) {
121
+ // #371 — ensure means FIND-FIRST (the WS connection's per-workspace cache used to hide the
122
122
  // insert-only bug; the seam has no connection state, so idempotence lives HERE): reuse the
123
- // session's canonical conversation run — the earliest model-origin root (forks/workers
124
- // inherit origin and are excluded by parent_run_id). #366 is the explicit fresh-run door.
125
- const existing = await db.envelope_get_model_run.get({ session_id: sessionId });
123
+ // workspace's canonical conversation worker — the earliest model-origin root (forks/workers
124
+ // inherit origin and are excluded by parent_worker_id). #366 is the explicit fresh-run door.
125
+ const existing = await db.envelope_get_model_worker.get({ workspace_id: workspaceId });
126
126
  if (existing !== undefined)
127
127
  return existing.id;
128
- const run = await db.envelope_insert_run.get({ session_id: sessionId, name: Envelope.#tsName("model"), origin: "model" });
128
+ const run = await db.envelope_insert_worker.get({ workspace_id: workspaceId, name: Envelope.#tsName("model"), origin: "model" });
129
129
  if (run === undefined)
130
- throw new Error("ensureModelRun: run insert returned no row");
130
+ throw new Error("ensureModelWorker: run insert returned no row");
131
131
  return run.id;
132
132
  }
133
- // Self-hosting keystone (§actor-boundary): the session's reserved `plurnk` run, where the
133
+ // Self-hosting keystone (§actor-boundary): the workspace's reserved `plurnk` run, where the
134
134
  // runtime acts as an ordinary actor (doc materialization today; fs/git work
135
- // later). One per session, reused; its log is the runtime's own — invisible
136
- // to other runs except through the shared session filesystem.
137
- static async ensurePlurnkRun(db, sessionId) {
138
- const existing = await db.envelope_get_run_by_name.get({ session_id: sessionId, name: "plurnk" });
135
+ // later). One per workspace, reused; its log is the runtime's own — invisible
136
+ // to other workers except through the shared workspace filesystem.
137
+ static async ensurePlurnkWorker(db, workspaceId) {
138
+ const existing = await db.envelope_get_worker_by_name.get({ workspace_id: workspaceId, name: "plurnk" });
139
139
  if (existing !== undefined)
140
140
  return existing.id;
141
- const run = await db.envelope_insert_run.get({ session_id: sessionId, name: "plurnk", origin: "plurnk" });
141
+ const run = await db.envelope_insert_worker.get({ workspace_id: workspaceId, name: "plurnk", origin: "plurnk" });
142
142
  if (run === undefined)
143
- throw new Error("ensurePlurnkRun: run insert returned no row");
143
+ throw new Error("ensurePlurnkWorker: run insert returned no row");
144
144
  return run.id;
145
145
  }
146
- static async listRunsForSession(db, sessionId) {
147
- return await db.envelope_list_runs_for_session.all({ session_id: sessionId });
146
+ static async listWorkersForWorkspace(db, workspaceId) {
147
+ return await db.envelope_list_workers_for_workspace.all({ workspace_id: workspaceId });
148
148
  }
149
- // #238 — a session's prior user prompts, newest-first, capped. The conversation run's
149
+ // #238 — a workspace's prior user prompts, newest-first, capped. The conversation worker's
150
150
  // loop seeds (engine_get_loop_prompt is the per-loop read); exposed directly so a
151
151
  // client seeds up/down history without log archaeology.
152
- static async listPromptsForSession(db, sessionId, limit) {
153
- const rows = await db.envelope_list_session_prompts.all({ session_id: sessionId, limit });
152
+ static async listPromptsForWorkspace(db, workspaceId, limit) {
153
+ const rows = await db.envelope_list_workspace_prompts.all({ workspace_id: workspaceId, limit });
154
154
  return rows.map((r) => r.prompt);
155
155
  }
156
156
  static async closeClientLoop(db, loopId, status) {
157
157
  await db.envelope_close_client_loop.run({ status, loop_id: loopId });
158
158
  }
159
- static async listSessions(db) {
160
- return await db.envelope_list_sessions.all();
159
+ static async listWorkspaces(db) {
160
+ return await db.envelope_list_workspaces.all();
161
161
  }
162
- // session.rename — the session name is a mutable handle (vs a run's immutable
163
- // name, §machine-processes). Mutates sessions.name only; the UNIQUE constraint is
162
+ // workspace.rename — the workspace name is a mutable handle (vs a worker's immutable
163
+ // name, §machine-processes). Mutates workspaces.name only; the UNIQUE constraint is
164
164
  // the real guard against collision (the handler pre-checks for a clean error).
165
- static async updateSessionName(db, sessionId, name) {
166
- const row = await db.envelope_set_session_name.get({ id: sessionId, name });
165
+ static async updateWorkspaceName(db, workspaceId, name) {
166
+ const row = await db.envelope_set_workspace_name.get({ id: workspaceId, name });
167
167
  if (row === undefined)
168
- throw new Error(`session ${sessionId} not found`);
168
+ throw new Error(`workspace ${workspaceId} not found`);
169
169
  return row.name;
170
170
  }
171
171
  }
@@ -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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"}
@@ -1,76 +1,76 @@
1
1
  -- Envelope lifecycle queries. SPEC §connection-lifecycle.
2
2
 
3
- -- PREP: envelope_insert_session
4
- INSERT INTO sessions (name, project_root, settings)
3
+ -- PREP: envelope_insert_workspace
4
+ INSERT INTO workspaces (name, project_root, settings)
5
5
  VALUES ($name, $project_root, $settings)
6
6
  RETURNING id, name, project_root;
7
7
 
8
- -- PREP: envelope_get_session
9
- SELECT id, name, project_root FROM sessions WHERE id = $id;
8
+ -- PREP: envelope_get_workspace
9
+ SELECT id, name, project_root FROM workspaces WHERE id = $id;
10
10
 
11
11
 
12
- -- PREP: envelope_get_session_by_name
13
- -- session.rename collision check — sessions.name is UNIQUE.
14
- SELECT id FROM sessions WHERE name = $name;
12
+ -- PREP: envelope_get_workspace_by_name
13
+ -- workspace.rename collision check — workspaces.name is UNIQUE.
14
+ SELECT id FROM workspaces WHERE name = $name;
15
15
 
16
- -- PREP: envelope_set_session_name
17
- -- Used by session.rename. The session name is a MUTABLE handle (vs a run's
16
+ -- PREP: envelope_set_workspace_name
17
+ -- Used by workspace.rename. The workspace name is a MUTABLE handle (vs a worker's
18
18
  -- immutable name, §machine-processes). Returns the updated row to refresh the
19
19
  -- caller's ClientEnvelope copy.
20
- UPDATE sessions SET name = $name WHERE id = $id
20
+ UPDATE workspaces SET name = $name WHERE id = $id
21
21
  RETURNING id, name;
22
22
 
23
- -- PREP: envelope_insert_run
24
- -- origin is the run's actor (§machine-processes): 'model' (the conversation),
25
- -- 'client' (a connection's own run), or 'plurnk' (the runtime self-hosting run).
26
- INSERT INTO runs (session_id, name, origin)
27
- VALUES ($session_id, $name, $origin)
23
+ -- PREP: envelope_insert_worker
24
+ -- origin is the worker's actor (§machine-processes): 'model' (the conversation),
25
+ -- 'client' (a connection's own worker), or 'plurnk' (the runtime self-hosting worker).
26
+ INSERT INTO workers (workspace_id, name, origin)
27
+ VALUES ($workspace_id, $name, $origin)
28
28
  RETURNING id, name, origin;
29
29
 
30
- -- PREP: envelope_get_run_by_id
31
- SELECT id, name, session_id, origin FROM runs WHERE id = $id;
30
+ -- PREP: envelope_get_worker_by_id
31
+ SELECT id, name, workspace_id, origin FROM workers WHERE id = $id;
32
32
 
33
- -- PREP: envelope_get_run_by_name
34
- SELECT id, name FROM runs WHERE session_id = $session_id AND name = $name;
33
+ -- PREP: envelope_get_worker_by_name
34
+ SELECT id, name FROM workers WHERE workspace_id = $workspace_id AND name = $name;
35
35
 
36
- -- PREP: envelope_list_runs_for_session
36
+ -- PREP: envelope_list_workers_for_workspace
37
37
  SELECT id, name, created_at, cost_pico, origin
38
- FROM runs
39
- WHERE session_id = $session_id
38
+ FROM workers
39
+ WHERE workspace_id = $workspace_id
40
40
  ORDER BY created_at DESC;
41
41
 
42
- -- PREP: envelope_list_session_prompts
43
- -- #238 — a session's user prompts for client up/down history: the conversation run's
44
- -- non-empty loop seeds, newest-first, capped. The conversation run is origin='model' +
45
- -- parentless; spawned/forked run:// sub-runs (parent_run_id set) are excluded — their
42
+ -- PREP: envelope_list_workspace_prompts
43
+ -- #238 — a workspace's user prompts for client up/down history: the conversation worker's
44
+ -- non-empty loop seeds, newest-first, capped. The conversation worker is origin='model' +
45
+ -- parentless; spawned/forked worker:// sub-runs (parent_worker_id set) are excluded — their
46
46
  -- seed prompts are not user input.
47
47
  SELECT l.prompt
48
48
  FROM loops l
49
- JOIN runs r ON r.id = l.run_id
50
- WHERE r.session_id = $session_id
49
+ JOIN workers r ON r.id = l.worker_id
50
+ WHERE r.workspace_id = $workspace_id
51
51
  AND r.origin = 'model'
52
- AND r.parent_run_id IS NULL
52
+ AND r.parent_worker_id IS NULL
53
53
  AND length(l.prompt) > 0
54
54
  ORDER BY l.id DESC
55
55
  LIMIT $limit;
56
56
 
57
57
  -- PREP: envelope_insert_client_loop
58
- -- sequence is auto-computed: 1 + max(existing sequence in this run) so
58
+ -- sequence is auto-computed: 1 + max(existing sequence in this worker) so
59
59
  -- multiple client connections attaching to the same run get distinct loops.
60
- INSERT INTO loops (run_id, sequence, status, prompt)
61
- VALUES ($run_id, COALESCE((SELECT MAX(sequence) FROM loops WHERE run_id = $run_id), 0) + 1, 102, '')
60
+ INSERT INTO loops (worker_id, sequence, status, prompt)
61
+ VALUES ($worker_id, COALESCE((SELECT MAX(sequence) FROM loops WHERE worker_id = $worker_id), 0) + 1, 102, '')
62
62
  RETURNING id;
63
63
 
64
64
  -- PREP: envelope_close_client_loop
65
65
  UPDATE loops SET status = $status WHERE id = $loop_id AND status = 102;
66
66
 
67
- -- PREP: envelope_list_sessions
67
+ -- PREP: envelope_list_workspaces
68
68
  SELECT id, name, project_root, created_at, cost_pico
69
- FROM sessions
69
+ FROM workspaces
70
70
  ORDER BY created_at DESC;
71
71
 
72
- -- PREP: envelope_get_model_run
73
- -- #371 — the session's canonical model CONVERSATION run: the earliest model-origin ROOT run
74
- -- (parent_run_id NULL excludes forks and spawned workers, which inherit origin='model').
75
- -- ensureModelRun finds this first; only a session with none mints one.
76
- SELECT id FROM runs WHERE session_id = $session_id AND origin = 'model' AND parent_run_id IS NULL ORDER BY id LIMIT 1;
72
+ -- PREP: envelope_get_model_worker
73
+ -- #371 — the workspace's canonical model CONVERSATION run: the earliest model-origin ROOT run
74
+ -- (parent_worker_id NULL excludes forks and spawned workers, which inherit origin='model').
75
+ -- ensureModelWorker finds this first; only a workspace with none mints one.
76
+ SELECT id FROM workers WHERE workspace_id = $workspace_id AND origin = 'model' AND parent_worker_id IS NULL ORDER BY id LIMIT 1;
@@ -1,7 +1,7 @@
1
1
  import type { Db } from "../core/Db.ts";
2
2
  export type LogEntryWire = {
3
3
  id: number;
4
- run_id: number;
4
+ worker_id: number;
5
5
  loop_id: number;
6
6
  loop_seq: number;
7
7
  turn_id: number;
@@ -1 +1 @@
1
- {"version":3,"file":"logEntry.d.ts","sourceRoot":"","sources":["../../src/server/logEntry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,eAAe,CAAC;AAMpD,MAAM,MAAM,YAAY,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,QAAQ;;IASzB,OAAa,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAgCpE;CACJ"}
1
+ {"version":3,"file":"logEntry.d.ts","sourceRoot":"","sources":["../../src/server/logEntry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,eAAe,CAAC;AAMpD,MAAM,MAAM,YAAY,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,QAAQ;;IASzB,OAAa,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAgCpE;CACJ"}
@@ -17,7 +17,7 @@ export default class LogEntry {
17
17
  throw new Error(`log_entries row ${id} not found`);
18
18
  return {
19
19
  id: row.id,
20
- run_id: row.run_id,
20
+ worker_id: row.worker_id,
21
21
  loop_id: row.loop_id,
22
22
  loop_seq: row.loop_seq,
23
23
  turn_id: row.turn_id,
@@ -1 +1 @@
1
- {"version":3,"file":"logEntry.js","sourceRoot":"","sources":["../../src/server/logEntry.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,8DAA8D;AAC9D,yCAAyC;AAsCzC,MAAM,CAAC,OAAO,OAAO,QAAQ;IACzB,MAAM,CAAC,gBAAgB,CAAC,CAAU;QAC9B,uFAAuF;QACvF,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;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAM,EAAE,EAAU;QACzC,MAAM,GAAG,GAAG,MAAO,EAAE,CAAC,eAA8B,CAAC,GAAG,CAA0B,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1F,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;QAC1E,OAAO;YACH,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,MAAM,EAAE,GAAG,CAAC,MAAgB;YAC5B,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,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,MAAM,EAAE,GAAG,CAAC,MAAgB;YAC5B,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,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;YAC7C,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;SAC/B,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"logEntry.js","sourceRoot":"","sources":["../../src/server/logEntry.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,8DAA8D;AAC9D,yCAAyC;AAsCzC,MAAM,CAAC,OAAO,OAAO,QAAQ;IACzB,MAAM,CAAC,gBAAgB,CAAC,CAAU;QAC9B,uFAAuF;QACvF,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;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAM,EAAE,EAAU;QACzC,MAAM,GAAG,GAAG,MAAO,EAAE,CAAC,eAA8B,CAAC,GAAG,CAA0B,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1F,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;QAC1E,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,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,MAAM,EAAE,GAAG,CAAC,MAAgB;YAC5B,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,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;YAC7C,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;SAC/B,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,3 @@
1
+ import type { ProviderAlias } from "@plurnk/plurnk-providers";
2
+ export declare const resolveLoopAlias: (alias: string | undefined, model: string | undefined, declared: readonly ProviderAlias[]) => ProviderAlias | null;
3
+ //# sourceMappingURL=loop-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-model.d.ts","sourceRoot":"","sources":["../../src/server/loop-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAU9D,eAAO,MAAM,gBAAgB,UAClB,MAAM,GAAG,SAAS,SAClB,MAAM,GAAG,SAAS,YACf,SAAS,aAAa,EAAE,KACnC,aAAa,GAAG,IAclB,CAAC"}
@@ -0,0 +1,26 @@
1
+ // #414 — per-loop model selection: resolve a runLoop call's optional (alias, model) to the
2
+ // ProviderAlias to instantiate, or null for "use the boot default". PURE (no env read, no
3
+ // construction) so the precedence + parse contract is hermetically testable; the Daemon wraps it
4
+ // with ProviderInstantiate + the #provider fallback.
5
+ //
6
+ // Precedence: `model` (client-resolved `<provider>/<model>`, #90) wins over a named `alias`,
7
+ // matching how the legacy WS loop.run treated the pair. A malformed model spec or an undeclared
8
+ // alias throws legibly — the daemon must never silently run the wrong model.
9
+ export const resolveLoopAlias = (alias, model, declared) => {
10
+ if (typeof model === "string" && model.length > 0) {
11
+ const slash = model.indexOf("/");
12
+ if (slash <= 0)
13
+ throw new Error(`runLoop: model must be '<provider>/<model>' (got '${model}')`);
14
+ // A client-resolved spec is alias-independent (#90): the provider's own env carries the
15
+ // base URL, so the synthetic alias name is cosmetic (reuse the given alias if present).
16
+ return { alias: alias ?? model, provider: model.slice(0, slash), model: model.slice(slash + 1) };
17
+ }
18
+ if (typeof alias === "string" && alias.length > 0) {
19
+ const resolved = declared.find((a) => a.alias === alias.toLowerCase());
20
+ if (resolved === undefined)
21
+ throw new Error(`runLoop: alias '${alias}' is not declared (set PLURNK_MODEL_${alias}=<provider>/<model>)`);
22
+ return resolved;
23
+ }
24
+ return null; // neither → the daemon's boot default
25
+ };
26
+ //# sourceMappingURL=loop-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-model.js","sourceRoot":"","sources":["../../src/server/loop-model.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,0FAA0F;AAC1F,iGAAiG;AACjG,qDAAqD;AACrD,EAAE;AACF,6FAA6F;AAC7F,gGAAgG;AAChG,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC5B,KAAyB,EACzB,KAAyB,EACzB,QAAkC,EACd,EAAE;IACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,KAAK,IAAI,CAAC,CAAC;QAChG,wFAAwF;QACxF,wFAAwF;QACxF,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;IACrG,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACvE,IAAI,QAAQ,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,uCAAuC,KAAK,sBAAsB,CAAC,CAAC;QACxI,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC,CAAE,sCAAsC;AACxD,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type Engine from "../core/Engine.ts";
2
2
  import type { Db } from "../core/Db.ts";
3
3
  export default class LoopDocs {
4
- static materialize(engine: Engine, db: Db, sessionId: number): Promise<void>;
4
+ static materialize(engine: Engine, db: Db, workspaceId: number): Promise<void>;
5
5
  }
6
6
  //# sourceMappingURL=loopDocs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loopDocs.d.ts","sourceRoot":"","sources":["../../src/server/loopDocs.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAKxC,MAAM,CAAC,OAAO,OAAO,QAAQ;IACzB,OAAa,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAejF;CACJ"}
1
+ {"version":3,"file":"loopDocs.d.ts","sourceRoot":"","sources":["../../src/server/loopDocs.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAKxC,MAAM,CAAC,OAAO,OAAO,QAAQ;IACzB,OAAa,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAenF;CACJ"}
@@ -1,14 +1,14 @@
1
- import SessionSettings from "../core/session-settings.js";
1
+ import WorkspaceSettings from "../core/workspace-settings.js";
2
2
  import DispatchAsPlurnk from "./dispatch-as-plurnk.js";
3
3
  export default class LoopDocs {
4
- static async materialize(engine, db, sessionId) {
5
- const { mdDocs } = await SessionSettings.read(db, sessionId);
6
- const docStmts = (await SessionSettings.resolveDocs(mdDocs)).map((doc) => ({
4
+ static async materialize(engine, db, workspaceId) {
5
+ const { mdDocs } = await WorkspaceSettings.read(db, workspaceId);
6
+ const docStmts = (await WorkspaceSettings.resolveDocs(mdDocs)).map((doc) => ({
7
7
  op: "EDIT", suffix: "", signal: null,
8
8
  target: { kind: "url", raw: `plurnk:///${doc.entryName}`, scheme: "plurnk", username: null, password: null, hostname: null, port: null, pathname: `/${doc.entryName}`, params: {}, fragment: null },
9
9
  lineMarker: null, body: doc.content, position: { line: 1, column: 1 },
10
10
  }));
11
- for (const { name, content } of await engine.docEntries(sessionId)) {
11
+ for (const { name, content } of await engine.docEntries(workspaceId)) {
12
12
  docStmts.push({
13
13
  op: "EDIT", suffix: "", signal: null,
14
14
  target: { kind: "url", raw: `plurnk://docs/${name}.md`, scheme: "plurnk", username: null, password: null, hostname: "docs", port: null, pathname: `/${name}.md`, params: {}, fragment: null },
@@ -16,7 +16,7 @@ export default class LoopDocs {
16
16
  });
17
17
  }
18
18
  if (docStmts.length > 0)
19
- await DispatchAsPlurnk.dispatch(engine, db, sessionId, docStmts);
19
+ await DispatchAsPlurnk.dispatch(engine, db, workspaceId, docStmts);
20
20
  }
21
21
  }
22
22
  //# sourceMappingURL=loopDocs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loopDocs.js","sourceRoot":"","sources":["../../src/server/loopDocs.ts"],"names":[],"mappings":"AASA,OAAO,eAAe,MAAM,6BAA6B,CAAC;AAC1D,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,QAAQ;IACzB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,EAAM,EAAE,SAAiB;QAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAoB,CAAC,MAAM,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxF,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI;YACpC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YACnM,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;SACxE,CAAC,CAAC,CAAC;QACJ,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACjE,QAAQ,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI;gBACpC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,iBAAiB,IAAI,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC7L,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;aACpE,CAAC,CAAC;QACP,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,QAA6B,CAAC,CAAC;IACnH,CAAC;CACJ"}
1
+ {"version":3,"file":"loopDocs.js","sourceRoot":"","sources":["../../src/server/loopDocs.ts"],"names":[],"mappings":"AASA,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAC9D,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,QAAQ;IACzB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,EAAM,EAAE,WAAmB;QAChE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAoB,CAAC,MAAM,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC1F,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI;YACpC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YACnM,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;SACxE,CAAC,CAAC,CAAC;QACJ,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACnE,QAAQ,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI;gBACpC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,iBAAiB,IAAI,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC7L,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;aACpE,CAAC,CAAC;QACP,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,QAA6B,CAAC,CAAC;IACrH,CAAC;CACJ"}
@@ -1,9 +1,9 @@
1
1
  -- entry.read RPC queries. SPEC §methods.
2
2
 
3
3
  -- PREP: entry_read_lookup
4
- SELECT id, scope, session_id, scheme, pathname
4
+ SELECT id, scope, workspace_id, scheme, pathname
5
5
  FROM entries
6
- WHERE session_id = $session_id AND scheme = $scheme AND pathname = $pathname;
6
+ WHERE workspace_id = $workspace_id AND scheme = $scheme AND pathname = $pathname;
7
7
 
8
8
  -- PREP: entry_read_channels
9
9
  SELECT name, content, length(content) AS contentLength, mimetype, tokens, state
@@ -2,15 +2,15 @@
2
2
  -- Static query with IS-NULL guards on optional filters. The loops/turns joins
3
3
  -- resolve the DISPLAY coordinate (loop_seq/turn_seq/op-sequence) so a client can
4
4
  -- target one entry by its `L/T/S` coordinate (plurnk-service#271) instead of
5
- -- fetching a run and matching client-side. INNER JOINs are safe: log_entries
6
- -- carries run_id/loop_id/turn_id NOT NULL, so no row is dropped; the coordinate
5
+ -- fetching a worker and matching client-side. INNER JOINs are safe: log_entries
6
+ -- carries worker_id/loop_id/turn_id NOT NULL, so no row is dropped; the coordinate
7
7
  -- guards are inert when their param is NULL (identical to the id-only filters).
8
8
 
9
9
  -- PREP: log_read_recent_ids
10
10
  SELECT le.id FROM log_entries le
11
11
  JOIN turns t ON t.id = le.turn_id
12
12
  JOIN loops l ON l.id = t.loop_id
13
- WHERE le.run_id = $run_id
13
+ WHERE le.worker_id = $worker_id
14
14
  AND ($loop_id IS NULL OR le.loop_id = $loop_id)
15
15
  AND ($turn_id IS NULL OR le.turn_id = $turn_id)
16
16
  AND ($since_id IS NULL OR le.id > $since_id)
@@ -1,9 +1,9 @@
1
1
  -- loop.run RPC queries. SPEC §rpc.
2
2
 
3
3
  -- PREP: loop_run_next_sequence
4
- SELECT COALESCE(MAX(sequence), 0) + 1 AS next FROM loops WHERE run_id = $run_id;
4
+ SELECT COALESCE(MAX(sequence), 0) + 1 AS next FROM loops WHERE worker_id = $worker_id;
5
5
 
6
6
  -- PREP: loop_run_insert_loop
7
- INSERT INTO loops (run_id, sequence, status, prompt)
8
- VALUES ($run_id, $sequence, 102, $prompt)
7
+ INSERT INTO loops (worker_id, sequence, status, prompt)
8
+ VALUES ($worker_id, $sequence, 102, $prompt)
9
9
  RETURNING id;