@plurnk/plurnk-service 0.44.0 → 0.46.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 (133) hide show
  1. package/.env.example +41 -24
  2. package/README.md +37 -18
  3. package/SPEC.md +34 -10
  4. package/dist/core/ChannelWrite.d.ts +4 -0
  5. package/dist/core/ChannelWrite.d.ts.map +1 -1
  6. package/dist/core/ChannelWrite.js +9 -0
  7. package/dist/core/ChannelWrite.js.map +1 -1
  8. package/dist/core/ChannelWrite.sql +69 -0
  9. package/dist/core/Engine.d.ts.map +1 -1
  10. package/dist/core/Engine.js +146 -103
  11. package/dist/core/Engine.js.map +1 -1
  12. package/dist/core/Engine.sql +307 -0
  13. package/dist/core/ExecutorRegistry.d.ts +4 -2
  14. package/dist/core/ExecutorRegistry.d.ts.map +1 -1
  15. package/dist/core/ExecutorRegistry.js +20 -5
  16. package/dist/core/ExecutorRegistry.js.map +1 -1
  17. package/dist/core/SchemeRegistry.d.ts +3 -0
  18. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  19. package/dist/core/SchemeRegistry.js +37 -0
  20. package/dist/core/SchemeRegistry.js.map +1 -1
  21. package/dist/core/fork.d.ts.map +1 -1
  22. package/dist/core/fork.js +8 -1
  23. package/dist/core/fork.js.map +1 -1
  24. package/dist/core/fork.sql +50 -0
  25. package/dist/core/packet-wire.d.ts +1 -0
  26. package/dist/core/packet-wire.d.ts.map +1 -1
  27. package/dist/core/packet-wire.js +11 -0
  28. package/dist/core/packet-wire.js.map +1 -1
  29. package/dist/core/plugin-attribution.d.ts +5 -0
  30. package/dist/core/plugin-attribution.d.ts.map +1 -0
  31. package/dist/core/plugin-attribution.js +39 -0
  32. package/dist/core/plugin-attribution.js.map +1 -0
  33. package/dist/core/run-ops.sql +16 -0
  34. package/dist/core/scheme-types.d.ts +1 -0
  35. package/dist/core/scheme-types.d.ts.map +1 -1
  36. package/dist/core/session-settings.d.ts +1 -0
  37. package/dist/core/session-settings.d.ts.map +1 -1
  38. package/dist/core/session-settings.js +2 -1
  39. package/dist/core/session-settings.js.map +1 -1
  40. package/dist/schemes/Exec.d.ts +2 -1
  41. package/dist/schemes/Exec.d.ts.map +1 -1
  42. package/dist/schemes/Exec.js +39 -22
  43. package/dist/schemes/Exec.js.map +1 -1
  44. package/dist/schemes/File.d.ts.map +1 -1
  45. package/dist/schemes/File.js +27 -3
  46. package/dist/schemes/File.js.map +1 -1
  47. package/dist/schemes/Log.sql +37 -0
  48. package/dist/schemes/_entry-crud.sql +88 -0
  49. package/dist/schemes/_entry-find.sql +31 -0
  50. package/dist/schemes/_entry-graph.sql +60 -0
  51. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  52. package/dist/schemes/_entry-manifest.js +11 -3
  53. package/dist/schemes/_entry-manifest.js.map +1 -1
  54. package/dist/schemes/_entry-ops.sql +20 -0
  55. package/dist/schemes/_entry-semantic.d.ts.map +1 -1
  56. package/dist/schemes/_entry-semantic.js +14 -7
  57. package/dist/schemes/_entry-semantic.js.map +1 -1
  58. package/dist/schemes/_entry-semantic.sql +80 -0
  59. package/dist/schemes/exec-abort.d.ts +11 -0
  60. package/dist/schemes/exec-abort.d.ts.map +1 -0
  61. package/dist/schemes/exec-abort.js +23 -0
  62. package/dist/schemes/exec-abort.js.map +1 -0
  63. package/dist/schemes/exec-env.js +1 -1
  64. package/dist/schemes/exec-env.js.map +1 -1
  65. package/dist/server/Daemon.d.ts.map +1 -1
  66. package/dist/server/Daemon.js +162 -76
  67. package/dist/server/Daemon.js.map +1 -1
  68. package/dist/server/clientTurn.sql +10 -0
  69. package/dist/server/drain.sql +92 -0
  70. package/dist/server/dsl.d.ts.map +1 -1
  71. package/dist/server/dsl.js +11 -4
  72. package/dist/server/dsl.js.map +1 -1
  73. package/dist/server/envelope.sql +75 -0
  74. package/dist/server/logEntry.sql +10 -0
  75. package/dist/server/methods/_dispatchAsClient.d.ts.map +1 -1
  76. package/dist/server/methods/_dispatchAsClient.js +11 -6
  77. package/dist/server/methods/_dispatchAsClient.js.map +1 -1
  78. package/dist/server/methods/entry_read.sql +21 -0
  79. package/dist/server/methods/log_read.sql +11 -0
  80. package/dist/server/methods/loop_run.d.ts.map +1 -1
  81. package/dist/server/methods/loop_run.js +31 -11
  82. package/dist/server/methods/loop_run.js.map +1 -1
  83. package/dist/server/methods/loop_run.sql +9 -0
  84. package/dist/server/methods/session_create.d.ts.map +1 -1
  85. package/dist/server/methods/session_create.js +10 -3
  86. package/dist/server/methods/session_create.js.map +1 -1
  87. package/dist/service.d.ts +6 -0
  88. package/dist/service.d.ts.map +1 -0
  89. package/dist/service.js +221 -0
  90. package/dist/service.js.map +1 -0
  91. package/migrations/0000-00-00.01_schema.sql +2 -2
  92. package/package.json +27 -13
  93. package/bin/plurnk-service.ts +0 -176
  94. package/dist/core/ProviderRegistry.d.ts +0 -42
  95. package/dist/core/ProviderRegistry.d.ts.map +0 -1
  96. package/dist/core/ProviderRegistry.js +0 -72
  97. package/dist/core/ProviderRegistry.js.map +0 -1
  98. package/dist/core/line-marker.d.ts +0 -23
  99. package/dist/core/line-marker.d.ts.map +0 -1
  100. package/dist/core/line-marker.js +0 -321
  101. package/dist/core/line-marker.js.map +0 -1
  102. package/dist/core/matcher.d.ts +0 -12
  103. package/dist/core/matcher.d.ts.map +0 -1
  104. package/dist/core/matcher.js +0 -72
  105. package/dist/core/matcher.js.map +0 -1
  106. package/dist/core/mimetype-binary.d.ts +0 -6
  107. package/dist/core/mimetype-binary.d.ts.map +0 -1
  108. package/dist/core/mimetype-binary.js +0 -82
  109. package/dist/core/mimetype-binary.js.map +0 -1
  110. package/dist/core/path-mimetype.d.ts +0 -3
  111. package/dist/core/path-mimetype.d.ts.map +0 -1
  112. package/dist/core/path-mimetype.js +0 -47
  113. package/dist/core/path-mimetype.js.map +0 -1
  114. package/dist/core/plugin-trust.d.ts +0 -4
  115. package/dist/core/plugin-trust.d.ts.map +0 -1
  116. package/dist/core/plugin-trust.js +0 -23
  117. package/dist/core/plugin-trust.js.map +0 -1
  118. package/dist/providers/Mock.d.ts +0 -43
  119. package/dist/providers/Mock.d.ts.map +0 -1
  120. package/dist/providers/Mock.js +0 -36
  121. package/dist/providers/Mock.js.map +0 -1
  122. package/dist/server/methods/op_hide.d.ts +0 -5
  123. package/dist/server/methods/op_hide.d.ts.map +0 -1
  124. package/dist/server/methods/op_hide.js +0 -24
  125. package/dist/server/methods/op_hide.js.map +0 -1
  126. package/dist/server/methods/op_show.d.ts +0 -5
  127. package/dist/server/methods/op_show.d.ts.map +0 -1
  128. package/dist/server/methods/op_show.js +0 -24
  129. package/dist/server/methods/op_show.js.map +0 -1
  130. package/dist/server/methods/session_set_persona.d.ts +0 -5
  131. package/dist/server/methods/session_set_persona.d.ts.map +0 -1
  132. package/dist/server/methods/session_set_persona.js +0 -29
  133. package/dist/server/methods/session_set_persona.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dsl.js","sourceRoot":"","sources":["../../src/server/dsl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dsl.js","sourceRoot":"","sources":["../../src/server/dsl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ -- Envelope lifecycle queries. SPEC §connection-lifecycle.
2
+
3
+ -- PREP: envelope_insert_session
4
+ INSERT INTO sessions (name, project_root, settings)
5
+ VALUES ($name, $project_root, $settings)
6
+ RETURNING id, name, project_root;
7
+
8
+ -- PREP: envelope_get_session
9
+ SELECT id, name, project_root FROM sessions WHERE id = $id;
10
+
11
+ -- PREP: envelope_update_session_project_root
12
+ -- Used by session.set_root (F.1). Returns the updated row so the caller can
13
+ -- refresh its ClientEnvelope copy without a second query.
14
+ UPDATE sessions SET project_root = $project_root WHERE id = $id
15
+ RETURNING id, name, project_root;
16
+
17
+ -- PREP: envelope_get_session_by_name
18
+ -- session.rename collision check — sessions.name is UNIQUE.
19
+ SELECT id FROM sessions WHERE name = $name;
20
+
21
+ -- PREP: envelope_set_session_name
22
+ -- Used by session.rename. The session name is a MUTABLE handle (vs a run's
23
+ -- immutable name, §machine-processes). Returns the updated row to refresh the
24
+ -- caller's ClientEnvelope copy.
25
+ UPDATE sessions SET name = $name WHERE id = $id
26
+ RETURNING id, name;
27
+
28
+ -- PREP: envelope_insert_run
29
+ -- origin is the run's actor (§machine-processes): 'model' (the conversation),
30
+ -- 'client' (a connection's own run), or 'plurnk' (the runtime self-hosting run).
31
+ INSERT INTO runs (session_id, name, origin)
32
+ VALUES ($session_id, $name, $origin)
33
+ RETURNING id, name, origin;
34
+
35
+ -- PREP: envelope_get_run_by_id
36
+ SELECT id, name, session_id FROM runs WHERE id = $id;
37
+
38
+ -- PREP: envelope_get_run_by_name
39
+ SELECT id, name FROM runs WHERE session_id = $session_id AND name = $name;
40
+
41
+ -- PREP: envelope_list_runs_for_session
42
+ SELECT id, name, created_at, cost_pico, origin
43
+ FROM runs
44
+ WHERE session_id = $session_id
45
+ ORDER BY created_at DESC;
46
+
47
+ -- PREP: envelope_list_session_prompts
48
+ -- #238 — a session's user prompts for client up/down history: the conversation run's
49
+ -- non-empty loop seeds, newest-first, capped. The conversation run is origin='model' +
50
+ -- parentless; spawned/forked run:// sub-runs (parent_run_id set) are excluded — their
51
+ -- seed prompts are not user input.
52
+ SELECT l.prompt
53
+ FROM loops l
54
+ JOIN runs r ON r.id = l.run_id
55
+ WHERE r.session_id = $session_id
56
+ AND r.origin = 'model'
57
+ AND r.parent_run_id IS NULL
58
+ AND length(l.prompt) > 0
59
+ ORDER BY l.id DESC
60
+ LIMIT $limit;
61
+
62
+ -- PREP: envelope_insert_client_loop
63
+ -- sequence is auto-computed: 1 + max(existing sequence in this run) so
64
+ -- multiple client connections attaching to the same run get distinct loops.
65
+ INSERT INTO loops (run_id, sequence, status, prompt)
66
+ VALUES ($run_id, COALESCE((SELECT MAX(sequence) FROM loops WHERE run_id = $run_id), 0) + 1, 102, '')
67
+ RETURNING id;
68
+
69
+ -- PREP: envelope_close_client_loop
70
+ UPDATE loops SET status = $status WHERE id = $loop_id AND status = 102;
71
+
72
+ -- PREP: envelope_list_sessions
73
+ SELECT id, name, project_root, created_at, cost_pico
74
+ FROM sessions
75
+ ORDER BY created_at DESC;
@@ -0,0 +1,10 @@
1
+ -- Log-entry hydration for wire surfacing.
2
+
3
+ -- PREP: log_entry_by_id
4
+ -- loop_seq / turn_seq are the loop+turn ordinals (the logical coordinate clients
5
+ -- render, e.g. 01/02/03) — distinct from the loop_id/turn_id DB keys (#208).
6
+ SELECT le.*, l.sequence AS loop_seq, t.sequence AS turn_seq
7
+ FROM log_entries le
8
+ JOIN loops l ON l.id = le.loop_id
9
+ JOIN turns t ON t.id = le.turn_id
10
+ WHERE le.id = $id;
@@ -1 +1 @@
1
- {"version":3,"file":"_dispatchAsClient.d.ts","sourceRoot":"","sources":["../../../src/server/methods/_dispatchAsClient.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,OAAO,gBAAgB;WACpB,QAAQ,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,sBAAsB,CAAC;CA2B1G"}
1
+ {"version":3,"file":"_dispatchAsClient.d.ts","sourceRoot":"","sources":["../../../src/server/methods/_dispatchAsClient.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,OAAO,gBAAgB;WACpB,QAAQ,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAgC1G"}
@@ -17,6 +17,12 @@ export default class DispatchAsClient {
17
17
  }
18
18
  const clientLoopId = ctx.session.clientLoopId;
19
19
  const turnId = await ClientTurn.insertClientTurn(ctx.db, clientLoopId);
20
+ // #253 — the log/entry notification(s) MUST reach the client before the RPC
21
+ // response, per the §methods sequence. The old fire-and-forget IIFE let the
22
+ // response win the race (the un-awaited fetch deferred the notify past the
23
+ // return). Collect the ids synchronously during dispatch, then fetch + notify
24
+ // — awaited — before returning, so the entry precedes the reply in dispatch order.
25
+ const entryIds = [];
20
26
  const result = await ctx.engine.dispatch({
21
27
  statement,
22
28
  sessionId,
@@ -25,13 +31,12 @@ export default class DispatchAsClient {
25
31
  turnId,
26
32
  sequence: 1,
27
33
  origin: "client",
28
- onDispatch: (logEntryId) => {
29
- void (async () => {
30
- const entry = await LogEntry.fetchLogEntry(ctx.db, logEntryId);
31
- ctx.notify({ sessionId }, "log/entry", { entry });
32
- })();
33
- },
34
+ onDispatch: (logEntryId) => { entryIds.push(logEntryId); },
34
35
  });
36
+ for (const logEntryId of entryIds) {
37
+ const entry = await LogEntry.fetchLogEntry(ctx.db, logEntryId);
38
+ ctx.notify({ sessionId }, "log/entry", { entry });
39
+ }
35
40
  return result;
36
41
  }
37
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"_dispatchAsClient.js","sourceRoot":"","sources":["../../../src/server/methods/_dispatchAsClient.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yEAAyE;AACzE,yEAAyE;AACzE,wEAAwE;AACxE,+BAA+B;AAI/B,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAOtC,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACjC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAmB,EAAE,SAA0B;QACjE,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;QACzC,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YACpC,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YACrC,SAAS;YACT,SAAS;YACT,KAAK;YACL,MAAM,EAAE,YAAY;YACpB,MAAM;YACN,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE;gBACvB,KAAK,CAAC,KAAK,IAAI,EAAE;oBACb,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;oBAC/D,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACtD,CAAC,CAAC,EAAE,CAAC;YACT,CAAC;SACJ,CAAC,CAAC;QACH,OAAO,MAAgC,CAAC;IAC5C,CAAC;CACJ"}
1
+ {"version":3,"file":"_dispatchAsClient.js","sourceRoot":"","sources":["../../../src/server/methods/_dispatchAsClient.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yEAAyE;AACzE,yEAAyE;AACzE,wEAAwE;AACxE,+BAA+B;AAI/B,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAOtC,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACjC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAmB,EAAE,SAA0B;QACjE,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;QACzC,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YACpC,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QACvE,4EAA4E;QAC5E,4EAA4E;QAC5E,2EAA2E;QAC3E,8EAA8E;QAC9E,mFAAmF;QACnF,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YACrC,SAAS;YACT,SAAS;YACT,KAAK;YACL,MAAM,EAAE,YAAY;YACpB,MAAM;YACN,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SAC7D,CAAC,CAAC;QACH,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAC/D,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,MAAgC,CAAC;IAC5C,CAAC;CACJ"}
@@ -0,0 +1,21 @@
1
+ -- entry.read RPC queries. SPEC §methods.
2
+
3
+ -- PREP: entry_read_lookup
4
+ SELECT id, scope, session_id, scheme, pathname
5
+ FROM entries
6
+ WHERE session_id = $session_id AND scheme = $scheme AND pathname = $pathname;
7
+
8
+ -- PREP: entry_read_channels
9
+ SELECT name, content, length(content) AS contentLength, mimetype, tokens, state
10
+ FROM entry_channels
11
+ WHERE entry_id = $entry_id;
12
+
13
+ -- entry.read({channel, offset}) — incremental delta read for streaming viewers
14
+ -- (#192): substr ships only content from $offset (chars — the unit contentLength
15
+ -- counts), and contentLength is the full length so the client's next offset
16
+ -- survives growth between a stream/event and this read. $offset=0 → whole channel;
17
+ -- $offset past the end → '' (caught up). SQLite substr is 1-indexed → $offset + 1.
18
+ -- PREP: entry_read_channel_slice
19
+ SELECT name, substr(content, $offset + 1) AS content, length(content) AS contentLength, mimetype, tokens, state
20
+ FROM entry_channels
21
+ WHERE entry_id = $entry_id AND name = $channel;
@@ -0,0 +1,11 @@
1
+ -- log.read RPC query. SPEC §methods.
2
+ -- Static query with IS-NULL guards on optional filters.
3
+
4
+ -- PREP: log_read_recent_ids
5
+ SELECT id FROM log_entries
6
+ WHERE run_id = $run_id
7
+ AND ($loop_id IS NULL OR loop_id = $loop_id)
8
+ AND ($turn_id IS NULL OR turn_id = $turn_id)
9
+ AND ($since_id IS NULL OR id > $since_id)
10
+ ORDER BY at DESC
11
+ LIMIT $limit;
@@ -1 +1 @@
1
- {"version":3,"file":"loop_run.d.ts","sourceRoot":"","sources":["../../../src/server/methods/loop_run.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAkCvD,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAmJlD"}
1
+ {"version":3,"file":"loop_run.d.ts","sourceRoot":"","sources":["../../../src/server/methods/loop_run.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAmCvD,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAqKlD"}
@@ -42,14 +42,33 @@ export default class LoopRunMethod {
42
42
  // #128) takes precedence over ctx.provider; absence falls back to
43
43
  // the daemon's boot-time provider.
44
44
  let provider = ctx.provider;
45
- if (p.alias !== undefined) {
45
+ if (p.model !== undefined) {
46
+ // Client-resolved provider/model (§provider-instantiation-alias-resolution). The
47
+ // CLIENT resolves its own alias env — always fresh, unlike a long-lived daemon's —
48
+ // and sends the concrete `<provider>/<model>`; the daemon instantiates it with ITS
49
+ // keys, so the daemon needs no matching alias. Same first-slash split as the env knob.
50
+ if (typeof p.model !== "string" || p.model.length === 0) {
51
+ throw new Error("loop.run: model must be a non-empty '<provider>/<model>' string");
52
+ }
53
+ const slash = p.model.indexOf("/");
54
+ if (slash <= 0)
55
+ throw new Error(`loop.run: model must be '<provider>/<model>', got '${p.model}'`);
56
+ const label = typeof p.alias === "string" && p.alias.length > 0 ? p.alias : p.model;
57
+ provider = await ProviderInstantiate.instantiateProvider({ alias: label, provider: p.model.slice(0, slash), model: p.model.slice(slash + 1) });
58
+ }
59
+ else if (p.alias !== undefined) {
46
60
  if (typeof p.alias !== "string" || p.alias.length === 0) {
47
61
  throw new Error("loop.run: alias must be a non-empty string");
48
62
  }
49
63
  const aliases = parseAliasesFromEnv();
50
64
  const target = aliases.find((a) => a.alias === p.alias.toLowerCase());
51
65
  if (target === undefined) {
52
- throw new Error(`loop.run: unknown alias '${p.alias}'; configure PLURNK_MODEL_${p.alias.toUpperCase()}=<provider>/<model>`);
66
+ // Aliases case-fold (PLURNK_MODEL_ccp === PLURNK_MODEL_CCP), so the miss is
67
+ // never casing — it's the DAEMON's environment lacking the key, typically a
68
+ // client-side shell export the running daemon never inherited. List what it
69
+ // does know so the env gap is obvious.
70
+ const known = aliases.map((a) => a.alias).join(", ") || "none";
71
+ throw new Error(`loop.run: unknown alias '${p.alias}' (the daemon knows: ${known}). Aliases case-fold, so casing isn't it — the daemon's environment declares no PLURNK_MODEL_${p.alias.toLowerCase()}. Set it where the daemon runs and restart; a client-side shell export the daemon didn't inherit is the usual cause.`);
53
72
  }
54
73
  provider = await ProviderInstantiate.instantiateProvider(target);
55
74
  }
@@ -130,26 +149,27 @@ export default class LoopRunMethod {
130
149
  turnIds: [],
131
150
  };
132
151
  }
133
- const first = await injected.firstLoopPromise;
152
+ // Model 3 accept and return immediately; the drain (already started, its
153
+ // firstLoopPromise .catch()'d in Daemon) runs the loop async. Its outcome rides
154
+ // loop/terminated; loop.run never blocks on a loop that may park indefinitely
155
+ // (SEND[202]). §run-lifecycle-wake-liveness.
134
156
  return {
135
- loopId: first.loopId,
157
+ loopId: injected.loopId,
136
158
  modelRunId,
137
- turnIds: first.turnIds,
138
- finalStatus: first.finalStatus,
139
- hitMaxTurns: first.hitMaxTurns,
140
- usage: first.usage,
141
159
  action: "enqueued_new_loop",
160
+ finalStatus: 100,
142
161
  };
143
162
  },
144
- description: "Run a model-driven loop with a prompt. Optional per-call `alias` resolves a PLURNK_MODEL_<alias> override. Optional `flags.yolo:true` enables server-side YOLO (daemon auto-accepts proposals in-process; intended for benchmarks and automation, NOT standard client UX — see client SPEC §open-fold for client-side YOLO). Returns `modelRunId` — the conversation's run; a conversation client reads it via `log.read({ runId })` for live tail and hydration (§214). Streams log/entry notifications; fires loop/terminated on completion.",
163
+ description: "Run a model-driven loop with a prompt. Optional `model` (`<provider>/<model>`, client-resolved) runs on that provider using the daemon's keys — preferred over `alias`, which resolves a PLURNK_MODEL_<alias> override in the DAEMON's env. Optional `flags.yolo:true` enables server-side YOLO (daemon auto-accepts proposals in-process; intended for benchmarks and automation, NOT standard client UX — see client SPEC §open-fold for client-side YOLO). Returns `modelRunId` — the conversation's run; a conversation client reads it via `log.read({ runId })` for live tail and hydration (§214). Streams log/entry notifications; fires loop/terminated on completion.",
145
164
  params: {
146
165
  prompt: "string — user prompt for the loop",
147
166
  maxTurns: "number? — per-loop turn request; the PLURNK_MAX_TURNS operator ceiling caps it when set (§operator-config)",
148
- alias: "string? — model alias to use for this loop (overrides the daemon's PLURNK_MODEL)",
167
+ alias: "string? — model alias resolved in the DAEMON's env (overrides PLURNK_MODEL); prefer `model` for client-resolved selection",
168
+ model: "string? — client-resolved '<provider>/<model>' to run on, instantiated with the daemon's keys; bypasses daemon alias lookup, takes precedence over `alias`",
149
169
  flags: "object? — per-loop flags. Currently accepts { yolo?: boolean }. Server YOLO; not for routine client use.",
150
170
  },
151
171
  requiresInit: true,
152
- longRunning: true,
172
+ longRunning: false,
153
173
  });
154
174
  }
155
175
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loop_run.js","sourceRoot":"","sources":["../../../src/server/methods/loop_run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop_run.js","sourceRoot":"","sources":["../../../src/server/methods/loop_run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ -- loop.run RPC queries. SPEC §rpc.
2
+
3
+ -- PREP: loop_run_next_sequence
4
+ SELECT COALESCE(MAX(sequence), 0) + 1 AS next FROM loops WHERE run_id = $run_id;
5
+
6
+ -- PREP: loop_run_insert_loop
7
+ INSERT INTO loops (run_id, sequence, status, prompt)
8
+ VALUES ($run_id, $sequence, 102, $prompt)
9
+ RETURNING id;
@@ -1 +1 @@
1
- {"version":3,"file":"session_create.d.ts","sourceRoot":"","sources":["../../../src/server/methods/session_create.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAUvD,MAAM,CAAC,OAAO,OAAO,mBAAmB;;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAoHlD"}
1
+ {"version":3,"file":"session_create.d.ts","sourceRoot":"","sources":["../../../src/server/methods/session_create.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAUvD,MAAM,CAAC,OAAO,OAAO,mBAAmB;;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CA0HlD"}
@@ -52,7 +52,7 @@ export default class SessionCreateMethod {
52
52
  name: "string? — session name (auto-generated if omitted)",
53
53
  projectRoot: "string? — absolute path to the client's workspace; null/omitted = headless mode (no disk side-effects on file ops)",
54
54
  constraints: "array? — [{effect, glob}] membership overlay seeded atomically at creation so turn-1's manifest is right with no follow-up RPC. effect: pick (admit a file git misses / the sole source when headless) | hide (drop a tracked match) | view (read-only) | repo (declare a git repo folder anywhere — its members join the manifest, addressed relative to the project root: clean under it, `..`-prefixed outside). glob: node:path glob vs workspace-relative paths (a folder for repo).",
55
- settings: "object? — client-chosen open-context, persisted per session, read at turn-0 over env. { manifestItems?: number (-1 full | 0 off | N first-N; replaces PLURNK_MANIFEST_ITEMS), mdDocs?: [{alias, content}] (unioned with server PLURNK_MD_* docs; client wins on alias collision) }",
55
+ settings: "object? — client-chosen open-context, persisted per session, read at turn-0 over env. { manifestItems?: number (-1 full | 0 off | N first-N; replaces PLURNK_MANIFEST_ITEMS), mdDocs?: [{alias, content}] (unioned with server PLURNK_MD_* docs; client wins on alias collision), autoReadAgents?: boolean (#250 — auto-READ the project AGENTS.md member into the first model turn) }",
56
56
  },
57
57
  });
58
58
  registry.registerNotification("session/created", {
@@ -101,8 +101,8 @@ export default class SessionCreateMethod {
101
101
  // most-restrictive-wins at each read-site). maxCommands min()s the env ceiling;
102
102
  // git:false denies git for the session (env AND session).
103
103
  if (r.maxCommands !== undefined) {
104
- if (typeof r.maxCommands !== "number" || !Number.isInteger(r.maxCommands) || r.maxCommands < 1) {
105
- throw new Error("session.create: settings.maxCommands must be a positive integer (a tighten-only ceiling)");
104
+ if (typeof r.maxCommands !== "number" || !Number.isInteger(r.maxCommands) || r.maxCommands < 0) {
105
+ throw new Error("session.create: settings.maxCommands must be a non-negative integer (a tighten-only ceiling; 0 = plan + conclude only, no actions)");
106
106
  }
107
107
  out.maxCommands = r.maxCommands;
108
108
  }
@@ -111,6 +111,13 @@ export default class SessionCreateMethod {
111
111
  throw new Error("session.create: settings.git must be a boolean (false denies git for the session)");
112
112
  out.git = r.git;
113
113
  }
114
+ // #250 — opt the session into auto-READing its AGENTS.md scratchpad member into the
115
+ // first model turn. The client owns on/off (and picks AGENTS.md into membership).
116
+ if (r.autoReadAgents !== undefined) {
117
+ if (typeof r.autoReadAgents !== "boolean")
118
+ throw new Error("session.create: settings.autoReadAgents must be a boolean (auto-READ the project AGENTS.md member into the first model turn)");
119
+ out.autoReadAgents = r.autoReadAgents;
120
+ }
114
121
  if (r.mdDocs !== undefined) {
115
122
  if (!Array.isArray(r.mdDocs))
116
123
  throw new Error("session.create: settings.mdDocs must be an array");
@@ -1 +1 @@
1
- {"version":3,"file":"session_create.js","sourceRoot":"","sources":["../../../src/server/methods/session_create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session_create.js","sourceRoot":"","sources":["../../../src/server/methods/session_create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ export default class Service {
3
+ #private;
4
+ static main(): Promise<void>;
5
+ }
6
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":";AAiBA,MAAM,CAAC,OAAO,OAAO,OAAO;;WAmIX,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA+DrC"}
@@ -0,0 +1,221 @@
1
+ #!/usr/bin/env node
2
+ import { parseArgs } from "node:util";
3
+ import { existsSync, mkdirSync, copyFileSync, writeFileSync } from "node:fs";
4
+ import { fileURLToPath } from "node:url";
5
+ import { dirname, resolve } from "node:path";
6
+ import { homedir } from "node:os";
7
+ import { createRequire } from "node:module";
8
+ import SqlRite from "@possumtech/sqlrite";
9
+ import Daemon from "./server/Daemon.js";
10
+ import EnvFlags from "./core/EnvFlags.js";
11
+ import ProviderInstantiate from "./core/ProviderInstantiate.js";
12
+ import { resolveActiveAlias } from "@plurnk/plurnk-providers";
13
+ // The `plurnk-service` executable: launches the daemon (start) or runs migrations.
14
+ // Not the user-facing client — that is the separate `plurnk` project.
15
+ export default class Service {
16
+ // This file's own directory holds the runtime code + its .sql (src/ in dev, dist/ in a
17
+ // published install); its parent is the package root (migrations/, requirements.md, .env.example).
18
+ static #codeDir = dirname(fileURLToPath(import.meta.url));
19
+ static #projectRoot = resolve(Service.#codeDir, "..");
20
+ static #ext = import.meta.url.endsWith(".ts") ? ".ts" : ".js";
21
+ static #homeDir = resolve(homedir(), ".plurnk");
22
+ // First-run bootstrap — run-time, NOT an install script: seed ~/.plurnk so a global
23
+ // install has a stable home for config + the DB. Idempotent (only acts when absent).
24
+ static #ensureHome() {
25
+ // Seed ONCE, on first run (the home is absent). After that the user owns ~/.plurnk —
26
+ // edits and deletions stick, no silent re-seed. `~/.plurnk/.env.example` is the cascade
27
+ // FLOOR (the visible legend); the node_modules copy is the seed + CLI-flag source only.
28
+ // Wiping the whole dir is a deliberate reset. A deleted floor stays deleted; a missing
29
+ // required knob then surfaces as a clear `missing PLURNK_X` error, not a crash.
30
+ if (existsSync(Service.#homeDir))
31
+ return;
32
+ mkdirSync(Service.#homeDir, { recursive: true });
33
+ const shipped = resolve(Service.#projectRoot, ".env.example");
34
+ if (existsSync(shipped))
35
+ copyFileSync(shipped, resolve(Service.#homeDir, ".env.example"));
36
+ writeFileSync(resolve(Service.#homeDir, ".env"), "# plurnk config — overrides the shipped defaults. e.g.\n# PLURNK_MODEL=gemma\n");
37
+ process.stderr.write(`plurnk-service: created ${Service.#homeDir} — config in ${resolve(Service.#homeDir, ".env")}\n`);
38
+ }
39
+ static #expandHome(p) {
40
+ if (p === "~")
41
+ return homedir();
42
+ return p.startsWith("~/") ? resolve(homedir(), p.slice(2)) : p;
43
+ }
44
+ // The node_modules holding the service's plugin deps (exec/scheme/mimetype), resolved
45
+ // package-relative so a global install finds them regardless of run-CWD. Falls back to CWD.
46
+ static #pluginsNodeModules() {
47
+ try {
48
+ const execs = createRequire(import.meta.url).resolve("@plurnk/plurnk-execs/package.json");
49
+ return resolve(dirname(execs), "..", "..");
50
+ }
51
+ catch {
52
+ return resolve(process.cwd(), "node_modules");
53
+ }
54
+ }
55
+ static #die(code, message) {
56
+ process.stderr.write(`${message}\n`);
57
+ process.exit(code);
58
+ }
59
+ static #loadEnv(path, required) {
60
+ if (existsSync(path)) {
61
+ try {
62
+ process.loadEnvFile(path);
63
+ }
64
+ catch (cause) {
65
+ Service.#die(64, `failed to load ${path}: ${cause instanceof Error ? cause.message : String(cause)}`);
66
+ }
67
+ }
68
+ else if (required) {
69
+ Service.#die(64, `${path} does not exist`);
70
+ }
71
+ }
72
+ // node-style env-file flags: --env-file=<path> (required) / --env-file-if-exists=<path>
73
+ // (skip if missing), repeatable, in command-line order. node only loads pre-script files;
74
+ // a published `plurnk-service --env-file=…` needs this post-script loader.
75
+ static #envFileArgs() {
76
+ return process.argv.flatMap((a) => {
77
+ if (a.startsWith("--env-file-if-exists="))
78
+ return [{ path: a.slice(a.indexOf("=") + 1), required: false }];
79
+ if (a.startsWith("--env-file="))
80
+ return [{ path: a.slice(a.indexOf("=") + 1), required: true }];
81
+ return [];
82
+ });
83
+ }
84
+ static #requireEnv(name) {
85
+ const value = process.env[name];
86
+ if (value === undefined || value.length === 0)
87
+ Service.#die(78, `missing required env ${name} (declare it in .env.example)`);
88
+ return value;
89
+ }
90
+ static #sqliteKnob(name) {
91
+ const raw = process.env[name];
92
+ if (raw === undefined || raw.trim() === "")
93
+ return undefined;
94
+ const n = Number(raw);
95
+ if (!Number.isInteger(n))
96
+ Service.#die(78, `${name} must be an integer, got ${JSON.stringify(raw)}`);
97
+ return n;
98
+ }
99
+ static async #openDb(dbPath) {
100
+ const tuning = {};
101
+ for (const [env, opt] of [
102
+ ["PLURNK_SQLITE_TIMEOUT", "timeout"],
103
+ ["PLURNK_SQLITE_CACHE_SIZE", "cacheSize"],
104
+ ["PLURNK_SQLITE_MMAP_SIZE", "mmapSize"],
105
+ ["PLURNK_SQLITE_MAX_PAGE_COUNT", "maxPageCount"],
106
+ ]) {
107
+ const v = Service.#sqliteKnob(env);
108
+ if (v !== undefined)
109
+ tuning[opt] = v;
110
+ }
111
+ mkdirSync(dirname(dbPath), { recursive: true });
112
+ const db = await SqlRite.open({
113
+ path: dbPath,
114
+ dir: [resolve(Service.#projectRoot, "migrations"), Service.#codeDir],
115
+ functions: [resolve(Service.#codeDir, `schemes/cosine${Service.#ext}`)],
116
+ ...tuning,
117
+ });
118
+ return db;
119
+ }
120
+ static async #migrate() {
121
+ const dbPath = Service.#expandHome(Service.#requireEnv("PLURNK_DB_PATH"));
122
+ const db = await Service.#openDb(dbPath);
123
+ try {
124
+ process.stdout.write(`migrated: ${dbPath}\n`);
125
+ }
126
+ finally {
127
+ await db.close();
128
+ }
129
+ }
130
+ static async #start() {
131
+ const dbPath = Service.#expandHome(Service.#requireEnv("PLURNK_DB_PATH"));
132
+ const host = Service.#requireEnv("PLURNK_HOST");
133
+ const port = Number(Service.#requireEnv("PLURNK_PORT"));
134
+ const db = await Service.#openDb(dbPath);
135
+ const alias = resolveActiveAlias();
136
+ const provider = alias === null ? null : await ProviderInstantiate.loadActiveProvider();
137
+ const daemon = new Daemon({ db, provider, nodeModulesPath: Service.#pluginsNodeModules() });
138
+ const addr = await daemon.start({ host, port });
139
+ if (await daemon.mimetypes.embedderInfo() === null) {
140
+ process.stderr.write("plurnk-service: embedder inactive — semantic ~query falls back to FTS keyword ranking. Install @plurnk/plurnk-mimetypes-embeddings for vector search, or see README.md#semantic-search\n");
141
+ }
142
+ if (alias === null) {
143
+ process.stderr.write(`plurnk-service: no model configured — set PLURNK_MODEL in ${resolve(Service.#homeDir, ".env")} (e.g. PLURNK_MODEL=gemma). Bring your own provider; the hosted default isn't live yet.\n`);
144
+ }
145
+ const aliasStr = alias === null ? "no model" : `${alias.alias}=${alias.provider}/${alias.model}`;
146
+ process.stdout.write(`plurnk-service ws://${addr.host}:${addr.port} db=${dbPath} ${aliasStr}\n`);
147
+ const shutdown = async () => { await daemon.stop(); await db.close(); process.exit(0); };
148
+ process.on("SIGINT", shutdown);
149
+ process.on("SIGTERM", shutdown);
150
+ }
151
+ static async main() {
152
+ if (!process.argv.includes("--help") && !process.argv.includes("-h"))
153
+ Service.#ensureHome();
154
+ // Env cascade — first write wins (loadEnvFile is set-if-unset), so load highest first.
155
+ // Precedence high→low: CLI --flags > shell env > --env-file/--config > ./.env >
156
+ // ~/.plurnk/.env > ~/.plurnk/.env.example > package .env.example (the floor).
157
+ for (const { path: envFile, required } of Service.#envFileArgs())
158
+ Service.#loadEnv(envFile, required);
159
+ const configFlagIndex = process.argv.findIndex((a) => a === "--config" || a.startsWith("--config="));
160
+ const configFile = (() => {
161
+ if (configFlagIndex === -1)
162
+ return null;
163
+ const arg = process.argv[configFlagIndex];
164
+ if (arg.includes("="))
165
+ return arg.slice(arg.indexOf("=") + 1);
166
+ return process.argv[configFlagIndex + 1] ?? null;
167
+ })();
168
+ if (configFile !== null)
169
+ Service.#loadEnv(configFile, true);
170
+ Service.#loadEnv(".env", false);
171
+ Service.#loadEnv(resolve(Service.#homeDir, ".env"), false);
172
+ Service.#loadEnv(resolve(Service.#homeDir, ".env.example"), false); // the cascade floor (NOT the node_modules copy)
173
+ const flagDescriptors = await EnvFlags.parseEnvExample(resolve(Service.#projectRoot, ".env.example"));
174
+ const flagOptions = {};
175
+ for (const f of flagDescriptors) {
176
+ flagOptions[f.flagName.replace(/^--/, "")] = { type: "string" };
177
+ }
178
+ const usage = `usage: plurnk-service [options] [migrate]
179
+
180
+ ${EnvFlags.formatFlagsHelp(flagDescriptors)}
181
+
182
+ --env-file=<path> layer env from <path> (repeatable; errors if missing)
183
+ --env-file-if-exists=<path> layer env from <path> if present (repeatable)
184
+ --config=<path> layer additional env from <path>
185
+ -h, --help show this help
186
+ `;
187
+ const { positionals, values } = parseArgs({
188
+ allowPositionals: true,
189
+ strict: false,
190
+ options: { help: { type: "boolean", short: "h" }, config: { type: "string" }, ...flagOptions },
191
+ });
192
+ for (const f of flagDescriptors) {
193
+ const key = f.flagName.replace(/^--/, "");
194
+ const v = values[key];
195
+ if (typeof v === "string")
196
+ process.env[f.envName] = v;
197
+ }
198
+ if (values.help) {
199
+ process.stdout.write(usage);
200
+ process.exit(0);
201
+ }
202
+ const dispatch = { migrate: Service.#migrate, start: Service.#start };
203
+ const subcommand = typeof positionals[0] === "string" ? positionals[0] : "start";
204
+ const handler = dispatch[subcommand];
205
+ if (handler === undefined)
206
+ Service.#die(64, `unknown subcommand: ${subcommand}\n\n${usage}`);
207
+ if (positionals.length > 1)
208
+ Service.#die(64, `unexpected arguments: ${positionals.slice(1).join(" ")}`);
209
+ try {
210
+ await handler();
211
+ }
212
+ catch (cause) {
213
+ process.stderr.write(`${subcommand}: ${cause instanceof Error ? cause.message : String(cause)}\n`);
214
+ if (cause instanceof Error && cause.cause)
215
+ process.stderr.write(` cause: ${cause.cause instanceof Error ? cause.cause.message : String(cause.cause)}\n`);
216
+ process.exit(1);
217
+ }
218
+ }
219
+ }
220
+ await Service.main();
221
+ //# sourceMappingURL=service.js.map