@plurnk/plurnk-service 0.44.0 → 0.45.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 (116) hide show
  1. package/.env.example +27 -23
  2. package/README.md +37 -18
  3. package/SPEC.md +31 -7
  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 +108 -71
  11. package/dist/core/Engine.js.map +1 -1
  12. package/dist/core/Engine.sql +291 -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 +14 -4
  16. package/dist/core/ExecutorRegistry.js.map +1 -1
  17. package/dist/core/SchemeRegistry.d.ts +1 -0
  18. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  19. package/dist/core/SchemeRegistry.js +6 -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/plugin-attribution.d.ts +5 -0
  26. package/dist/core/plugin-attribution.d.ts.map +1 -0
  27. package/dist/core/plugin-attribution.js +39 -0
  28. package/dist/core/plugin-attribution.js.map +1 -0
  29. package/dist/core/run-ops.sql +16 -0
  30. package/dist/core/session-settings.d.ts +1 -0
  31. package/dist/core/session-settings.d.ts.map +1 -1
  32. package/dist/core/session-settings.js +2 -1
  33. package/dist/core/session-settings.js.map +1 -1
  34. package/dist/schemes/Exec.d.ts +1 -0
  35. package/dist/schemes/Exec.d.ts.map +1 -1
  36. package/dist/schemes/Exec.js +17 -5
  37. package/dist/schemes/Exec.js.map +1 -1
  38. package/dist/schemes/File.d.ts.map +1 -1
  39. package/dist/schemes/File.js +27 -3
  40. package/dist/schemes/File.js.map +1 -1
  41. package/dist/schemes/Log.sql +37 -0
  42. package/dist/schemes/_entry-crud.sql +88 -0
  43. package/dist/schemes/_entry-find.sql +31 -0
  44. package/dist/schemes/_entry-graph.sql +60 -0
  45. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  46. package/dist/schemes/_entry-manifest.js +4 -1
  47. package/dist/schemes/_entry-manifest.js.map +1 -1
  48. package/dist/schemes/_entry-ops.sql +20 -0
  49. package/dist/schemes/_entry-semantic.sql +64 -0
  50. package/dist/schemes/exec-env.js +1 -1
  51. package/dist/schemes/exec-env.js.map +1 -1
  52. package/dist/server/Daemon.d.ts.map +1 -1
  53. package/dist/server/Daemon.js +103 -37
  54. package/dist/server/Daemon.js.map +1 -1
  55. package/dist/server/clientTurn.sql +10 -0
  56. package/dist/server/drain.sql +82 -0
  57. package/dist/server/dsl.d.ts.map +1 -1
  58. package/dist/server/dsl.js +11 -4
  59. package/dist/server/dsl.js.map +1 -1
  60. package/dist/server/envelope.sql +75 -0
  61. package/dist/server/logEntry.sql +10 -0
  62. package/dist/server/methods/_dispatchAsClient.d.ts.map +1 -1
  63. package/dist/server/methods/_dispatchAsClient.js +11 -6
  64. package/dist/server/methods/_dispatchAsClient.js.map +1 -1
  65. package/dist/server/methods/entry_read.sql +21 -0
  66. package/dist/server/methods/log_read.sql +11 -0
  67. package/dist/server/methods/loop_run.sql +9 -0
  68. package/dist/server/methods/session_create.d.ts.map +1 -1
  69. package/dist/server/methods/session_create.js +10 -3
  70. package/dist/server/methods/session_create.js.map +1 -1
  71. package/dist/service.d.ts +6 -0
  72. package/dist/service.d.ts.map +1 -0
  73. package/dist/service.js +221 -0
  74. package/dist/service.js.map +1 -0
  75. package/package.json +28 -14
  76. package/bin/plurnk-service.ts +0 -176
  77. package/dist/core/ProviderRegistry.d.ts +0 -42
  78. package/dist/core/ProviderRegistry.d.ts.map +0 -1
  79. package/dist/core/ProviderRegistry.js +0 -72
  80. package/dist/core/ProviderRegistry.js.map +0 -1
  81. package/dist/core/line-marker.d.ts +0 -23
  82. package/dist/core/line-marker.d.ts.map +0 -1
  83. package/dist/core/line-marker.js +0 -321
  84. package/dist/core/line-marker.js.map +0 -1
  85. package/dist/core/matcher.d.ts +0 -12
  86. package/dist/core/matcher.d.ts.map +0 -1
  87. package/dist/core/matcher.js +0 -72
  88. package/dist/core/matcher.js.map +0 -1
  89. package/dist/core/mimetype-binary.d.ts +0 -6
  90. package/dist/core/mimetype-binary.d.ts.map +0 -1
  91. package/dist/core/mimetype-binary.js +0 -82
  92. package/dist/core/mimetype-binary.js.map +0 -1
  93. package/dist/core/path-mimetype.d.ts +0 -3
  94. package/dist/core/path-mimetype.d.ts.map +0 -1
  95. package/dist/core/path-mimetype.js +0 -47
  96. package/dist/core/path-mimetype.js.map +0 -1
  97. package/dist/core/plugin-trust.d.ts +0 -4
  98. package/dist/core/plugin-trust.d.ts.map +0 -1
  99. package/dist/core/plugin-trust.js +0 -23
  100. package/dist/core/plugin-trust.js.map +0 -1
  101. package/dist/providers/Mock.d.ts +0 -43
  102. package/dist/providers/Mock.d.ts.map +0 -1
  103. package/dist/providers/Mock.js +0 -36
  104. package/dist/providers/Mock.js.map +0 -1
  105. package/dist/server/methods/op_hide.d.ts +0 -5
  106. package/dist/server/methods/op_hide.d.ts.map +0 -1
  107. package/dist/server/methods/op_hide.js +0 -24
  108. package/dist/server/methods/op_hide.js.map +0 -1
  109. package/dist/server/methods/op_show.d.ts +0 -5
  110. package/dist/server/methods/op_show.d.ts.map +0 -1
  111. package/dist/server/methods/op_show.js +0 -24
  112. package/dist/server/methods/op_show.js.map +0 -1
  113. package/dist/server/methods/session_set_persona.d.ts +0 -5
  114. package/dist/server/methods/session_set_persona.d.ts.map +0 -1
  115. package/dist/server/methods/session_set_persona.js +0 -29
  116. package/dist/server/methods/session_set_persona.js.map +0 -1
@@ -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;
@@ -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 search (FIND) is degraded. Install @plurnk/plurnk-mimetypes-embeddings, 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plurnk/plurnk-service",
3
- "version": "0.44.0",
3
+ "version": "0.45.0",
4
4
  "description": "Plurnk agent runtime — the server / engine / core. Implements the @plurnk/plurnk-grammar contract.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -15,11 +15,10 @@
15
15
  "./package.json": "./package.json"
16
16
  },
17
17
  "bin": {
18
- "plurnk-service": "./bin/plurnk-service.ts"
18
+ "plurnk-service": "./dist/service.js"
19
19
  },
20
20
  "files": [
21
21
  ".env.example",
22
- "bin/plurnk-service.ts",
23
22
  "dist/**/*",
24
23
  "migrations/**/*.sql",
25
24
  "requirements.md",
@@ -30,39 +29,54 @@
30
29
  "access": "public"
31
30
  },
32
31
  "scripts": {
33
- "start": "node bin/plurnk-service.ts",
32
+ "start": "node src/service.ts",
34
33
  "test:lint": "tsc --noEmit",
35
34
  "test:unit": "node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --test --test-timeout=30000 src/**/*.test.ts",
36
35
  "test:intg": "npm run test:clean-tmp && PLURNK_MANIFEST_ITEMS=0 node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --test --test-timeout=30000 test/intg/*.test.ts",
37
- "test:live": "npm run test:clean-tmp && node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --test --test-concurrency=1 test/live/*.test.ts",
38
- "test:demo": "npm run test:clean-tmp && node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --test --test-concurrency=1 test/demo/*.test.ts",
36
+ "test:live": "npm run test:clean-tmp && node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --test --test-force-exit --test-concurrency=1 test/live/*.test.ts",
37
+ "test:demo": "npm run test:clean-tmp && node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --test --test-force-exit --test-concurrency=1 test/demo/*.test.ts",
39
38
  "test:all": "npm run test:lint && npm run test:unit && npm run test:intg && npm run test:demo",
40
39
  "test:digest": "node bin/digest.ts",
41
40
  "test:clean-tmp": "rm -rf test/intg/.tmp",
42
41
  "dev:digest": "node bin/digest.ts",
42
+ "build:clean": "rm -rf dist",
43
43
  "build:dist": "tsc -p tsconfig.build.json",
44
- "build": "npm run build:dist",
44
+ "build:sql": "node scripts/copy-sql.mjs",
45
+ "build": "npm run build:clean && npm run build:dist && npm run build:sql",
46
+ "build:global:install": "npm run build && npm install -g .",
47
+ "build:global:uninstall": "npm uninstall -g @plurnk/plurnk-service",
48
+ "build:local:install": "node scripts/install-sandbox.mjs install",
49
+ "build:local:uninstall": "node scripts/install-sandbox.mjs uninstall",
50
+ "test:installation": "node scripts/test-installation.mjs",
45
51
  "prepare": "npm run build"
46
52
  },
47
53
  "dependencies": {
48
54
  "@plurnk/plurnk-execs": "0.4.11",
49
55
  "@plurnk/plurnk-execs-all": "0.1.5",
50
- "@plurnk/plurnk-grammar": "0.68.0",
51
- "@plurnk/plurnk-mimetypes": "0.15.20",
52
- "@plurnk/plurnk-mimetypes-all": "0.5.0",
53
- "@plurnk/plurnk-mimetypes-embeddings": "0.2.0",
54
- "@plurnk/plurnk-providers": "0.12.0",
56
+ "@plurnk/plurnk-grammar": "0.73.0",
57
+ "@plurnk/plurnk-mimetypes": "0.15.21",
58
+ "@plurnk/plurnk-mimetypes-all": "0.5.1",
59
+ "@plurnk/plurnk-providers": "0.13.0",
55
60
  "@plurnk/plurnk-providers-all": "0.8.0",
56
- "@plurnk/plurnk-schemes": "0.25.0",
57
- "@plurnk/plurnk-schemes-all": "0.1.6",
61
+ "@plurnk/plurnk-schemes": "0.28.0",
62
+ "@plurnk/plurnk-schemes-all": "0.1.11",
58
63
  "@possumtech/sqlrite": "5.2.0",
59
64
  "diff": "^9.0.0",
60
65
  "ws": "^8.20.1"
61
66
  },
62
67
  "devDependencies": {
68
+ "@plurnk/plurnk-mimetypes-embeddings": "0.3.0",
63
69
  "@types/diff": "^7.0.2",
64
70
  "@types/node": "^25.8.0",
65
71
  "@types/ws": "^8.18.1",
66
72
  "typescript": "^6.0.3"
73
+ },
74
+ "peerDependencies": {
75
+ "@plurnk/plurnk-mimetypes-embeddings": "0.3.0"
76
+ },
77
+ "peerDependenciesMeta": {
78
+ "@plurnk/plurnk-mimetypes-embeddings": {
79
+ "optional": true
80
+ }
67
81
  }
68
82
  }