@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.
- package/.env.example +41 -24
- package/README.md +37 -18
- package/SPEC.md +34 -10
- package/dist/core/ChannelWrite.d.ts +4 -0
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +9 -0
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +69 -0
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +146 -103
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +307 -0
- package/dist/core/ExecutorRegistry.d.ts +4 -2
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +20 -5
- package/dist/core/ExecutorRegistry.js.map +1 -1
- package/dist/core/SchemeRegistry.d.ts +3 -0
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +37 -0
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/fork.d.ts.map +1 -1
- package/dist/core/fork.js +8 -1
- package/dist/core/fork.js.map +1 -1
- package/dist/core/fork.sql +50 -0
- package/dist/core/packet-wire.d.ts +1 -0
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +11 -0
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/plugin-attribution.d.ts +5 -0
- package/dist/core/plugin-attribution.d.ts.map +1 -0
- package/dist/core/plugin-attribution.js +39 -0
- package/dist/core/plugin-attribution.js.map +1 -0
- package/dist/core/run-ops.sql +16 -0
- package/dist/core/scheme-types.d.ts +1 -0
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/session-settings.d.ts +1 -0
- package/dist/core/session-settings.d.ts.map +1 -1
- package/dist/core/session-settings.js +2 -1
- package/dist/core/session-settings.js.map +1 -1
- package/dist/schemes/Exec.d.ts +2 -1
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +39 -22
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +27 -3
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.sql +37 -0
- package/dist/schemes/_entry-crud.sql +88 -0
- package/dist/schemes/_entry-find.sql +31 -0
- package/dist/schemes/_entry-graph.sql +60 -0
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +11 -3
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.sql +20 -0
- package/dist/schemes/_entry-semantic.d.ts.map +1 -1
- package/dist/schemes/_entry-semantic.js +14 -7
- package/dist/schemes/_entry-semantic.js.map +1 -1
- package/dist/schemes/_entry-semantic.sql +80 -0
- package/dist/schemes/exec-abort.d.ts +11 -0
- package/dist/schemes/exec-abort.d.ts.map +1 -0
- package/dist/schemes/exec-abort.js +23 -0
- package/dist/schemes/exec-abort.js.map +1 -0
- package/dist/schemes/exec-env.js +1 -1
- package/dist/schemes/exec-env.js.map +1 -1
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +162 -76
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/clientTurn.sql +10 -0
- package/dist/server/drain.sql +92 -0
- package/dist/server/dsl.d.ts.map +1 -1
- package/dist/server/dsl.js +11 -4
- package/dist/server/dsl.js.map +1 -1
- package/dist/server/envelope.sql +75 -0
- package/dist/server/logEntry.sql +10 -0
- package/dist/server/methods/_dispatchAsClient.d.ts.map +1 -1
- package/dist/server/methods/_dispatchAsClient.js +11 -6
- package/dist/server/methods/_dispatchAsClient.js.map +1 -1
- package/dist/server/methods/entry_read.sql +21 -0
- package/dist/server/methods/log_read.sql +11 -0
- package/dist/server/methods/loop_run.d.ts.map +1 -1
- package/dist/server/methods/loop_run.js +31 -11
- package/dist/server/methods/loop_run.js.map +1 -1
- package/dist/server/methods/loop_run.sql +9 -0
- package/dist/server/methods/session_create.d.ts.map +1 -1
- package/dist/server/methods/session_create.js +10 -3
- package/dist/server/methods/session_create.js.map +1 -1
- package/dist/service.d.ts +6 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +221 -0
- package/dist/service.js.map +1 -0
- package/migrations/0000-00-00.01_schema.sql +2 -2
- package/package.json +27 -13
- package/bin/plurnk-service.ts +0 -176
- package/dist/core/ProviderRegistry.d.ts +0 -42
- package/dist/core/ProviderRegistry.d.ts.map +0 -1
- package/dist/core/ProviderRegistry.js +0 -72
- package/dist/core/ProviderRegistry.js.map +0 -1
- package/dist/core/line-marker.d.ts +0 -23
- package/dist/core/line-marker.d.ts.map +0 -1
- package/dist/core/line-marker.js +0 -321
- package/dist/core/line-marker.js.map +0 -1
- package/dist/core/matcher.d.ts +0 -12
- package/dist/core/matcher.d.ts.map +0 -1
- package/dist/core/matcher.js +0 -72
- package/dist/core/matcher.js.map +0 -1
- package/dist/core/mimetype-binary.d.ts +0 -6
- package/dist/core/mimetype-binary.d.ts.map +0 -1
- package/dist/core/mimetype-binary.js +0 -82
- package/dist/core/mimetype-binary.js.map +0 -1
- package/dist/core/path-mimetype.d.ts +0 -3
- package/dist/core/path-mimetype.d.ts.map +0 -1
- package/dist/core/path-mimetype.js +0 -47
- package/dist/core/path-mimetype.js.map +0 -1
- package/dist/core/plugin-trust.d.ts +0 -4
- package/dist/core/plugin-trust.d.ts.map +0 -1
- package/dist/core/plugin-trust.js +0 -23
- package/dist/core/plugin-trust.js.map +0 -1
- package/dist/providers/Mock.d.ts +0 -43
- package/dist/providers/Mock.d.ts.map +0 -1
- package/dist/providers/Mock.js +0 -36
- package/dist/providers/Mock.js.map +0 -1
- package/dist/server/methods/op_hide.d.ts +0 -5
- package/dist/server/methods/op_hide.d.ts.map +0 -1
- package/dist/server/methods/op_hide.js +0 -24
- package/dist/server/methods/op_hide.js.map +0 -1
- package/dist/server/methods/op_show.d.ts +0 -5
- package/dist/server/methods/op_show.d.ts.map +0 -1
- package/dist/server/methods/op_show.js +0 -24
- package/dist/server/methods/op_show.js.map +0 -1
- package/dist/server/methods/session_set_persona.d.ts +0 -5
- package/dist/server/methods/session_set_persona.d.ts.map +0 -1
- package/dist/server/methods/session_set_persona.js +0 -29
- package/dist/server/methods/session_set_persona.js.map +0 -1
package/dist/server/dsl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsl.js","sourceRoot":"","sources":["../../src/server/dsl.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,sEAAsE;AACtE,iEAAiE;AACjE,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,8BAA8B;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAoCpD,MAAM,CAAC,OAAO,OAAO,GAAG;IACpB,0EAA0E;IAC1E,0DAA0D;IAC1D,MAAM,CAAC,aAAa;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAA0B;QACzC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACvD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,EAA0B;QAC/C,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC/C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACpD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,KAAK,GAAG,CAAC;QACzD,OAAO,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAwB;QACvC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QAClC,OAAO,IAAI,IAAI,GAAG,CAAC;IACvB,CAAC;IAED,yEAAyE;IACzE,uEAAuE;IACvE,4CAA4C;IAC5C,MAAM,CAAC,aAAa,CAAC,EACjB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAQ/C;QACG,OAAO,KAAK,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,IAAI,IAAI,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IACpF,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,IAAY;QACpC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;
|
|
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;
|
|
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;
|
|
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;
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
|
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
|
|
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:
|
|
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":"AAAA,qEAAqE;AACrE,0EAA0E;AAC1E,qDAAqD;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,mBAAmB,MAAM,mCAAmC,CAAC;AACpE,OAAO,eAAe,MAAM,gCAAgC,CAAC;AAC7D,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;
|
|
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;
|
|
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 <
|
|
105
|
-
throw new Error("session.create: settings.maxCommands must be a
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,aAAa,MAAM,8BAA8B,CAAC;AAEzD,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1F,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAwB;QACpC,yFAAyF;QACzF,gGAAgG;QAChG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE;YACtC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;gBAC3B,MAAM,CAAC,GAAG,MAAmG,CAAC;gBAC9G,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC;gBAC1C,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;oBACvB,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC9D,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;oBACtF,CAAC;oBACD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;wBAC3B,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;oBAC5E,CAAC;gBACL,CAAC;gBACD,oEAAoE;gBACpE,wEAAwE;gBACxE,0DAA0D;gBAC1D,MAAM,WAAW,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBACzE,0EAA0E;gBAC1E,2EAA2E;gBAC3E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAChE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACtG,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC;wBACzC,MAAO,GAAG,CAAC,EAAE,CAAC,8BAA6C,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;oBACtH,CAAC;oBACD,MAAM,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBACpF,CAAC;gBACD,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC5B,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE;oBACjC,EAAE,EAAE,QAAQ,CAAC,SAAS;oBACtB,IAAI,EAAE,QAAQ,CAAC,WAAW;oBAC1B,WAAW,EAAE,QAAQ,CAAC,WAAW;iBACpC,CAAC,CAAC;gBACH,OAAO;oBACH,EAAE,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW;oBAClD,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO;oBAChD,WAAW,EAAE,QAAQ,CAAC,WAAW;iBACpC,CAAC;YACN,CAAC;YACD,WAAW,EAAE,mHAAmH;YAChI,MAAM,EAAE;gBACJ,IAAI,EAAE,oDAAoD;gBAC1D,WAAW,EAAE,oHAAoH;gBACjI,WAAW,EAAE,2dAA2d;gBACxe,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"session_create.js","sourceRoot":"","sources":["../../../src/server/methods/session_create.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
package/dist/service.js
ADDED
|
@@ -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
|