@plurnk/plurnk-service 1.0.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.defaults +208 -0
- package/INSTALL.md +69 -0
- package/LICENSE +21 -0
- package/README.md +46 -0
- package/SPEC.md +1511 -0
- package/dist/Paths.d.ts +13 -0
- package/dist/Paths.d.ts.map +1 -0
- package/dist/Paths.js +60 -0
- package/dist/Paths.js.map +1 -0
- package/dist/content/edited-span.d.ts +2 -0
- package/dist/content/edited-span.d.ts.map +1 -0
- package/dist/content/edited-span.js +33 -0
- package/dist/content/edited-span.js.map +1 -0
- package/dist/content/index.d.ts +10 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +11 -0
- package/dist/content/index.js.map +1 -0
- package/dist/content/line-marker.d.ts +15 -0
- package/dist/content/line-marker.d.ts.map +1 -0
- package/dist/content/line-marker.js +21 -0
- package/dist/content/line-marker.js.map +1 -0
- package/dist/content/matcher.d.ts +44 -0
- package/dist/content/matcher.d.ts.map +1 -0
- package/dist/content/matcher.js +126 -0
- package/dist/content/matcher.js.map +1 -0
- package/dist/content/mimetype-binary.d.ts +8 -0
- package/dist/content/mimetype-binary.d.ts.map +1 -0
- package/dist/content/mimetype-binary.js +17 -0
- package/dist/content/mimetype-binary.js.map +1 -0
- package/dist/content/path-mimetype.d.ts +5 -0
- package/dist/content/path-mimetype.d.ts.map +1 -0
- package/dist/content/path-mimetype.js +15 -0
- package/dist/content/path-mimetype.js.map +1 -0
- package/dist/content/read-resolve.d.ts +20 -0
- package/dist/content/read-resolve.d.ts.map +1 -0
- package/dist/content/read-resolve.js +68 -0
- package/dist/content/read-resolve.js.map +1 -0
- package/dist/core/ChannelWrite.d.ts +100 -0
- package/dist/core/ChannelWrite.d.ts.map +1 -0
- package/dist/core/ChannelWrite.js +112 -0
- package/dist/core/ChannelWrite.js.map +1 -0
- package/dist/core/ChannelWrite.sql +84 -0
- package/dist/core/Db.d.ts +14 -0
- package/dist/core/Db.d.ts.map +1 -0
- package/dist/core/Db.js +7 -0
- package/dist/core/Db.js.map +1 -0
- package/dist/core/Dispatcher.d.ts +67 -0
- package/dist/core/Dispatcher.d.ts.map +1 -0
- package/dist/core/Dispatcher.js +1021 -0
- package/dist/core/Dispatcher.js.map +1 -0
- package/dist/core/Engine.d.ts +113 -0
- package/dist/core/Engine.d.ts.map +1 -0
- package/dist/core/Engine.js +1410 -0
- package/dist/core/Engine.js.map +1 -0
- package/dist/core/Engine.sql +538 -0
- package/dist/core/EnvFlags.d.ts +13 -0
- package/dist/core/EnvFlags.d.ts.map +1 -0
- package/dist/core/EnvFlags.js +84 -0
- package/dist/core/EnvFlags.js.map +1 -0
- package/dist/core/ExecutorRegistry.d.ts +45 -0
- package/dist/core/ExecutorRegistry.d.ts.map +1 -0
- package/dist/core/ExecutorRegistry.js +128 -0
- package/dist/core/ExecutorRegistry.js.map +1 -0
- package/dist/core/PacketBuilder.d.ts +67 -0
- package/dist/core/PacketBuilder.d.ts.map +1 -0
- package/dist/core/PacketBuilder.js +524 -0
- package/dist/core/PacketBuilder.js.map +1 -0
- package/dist/core/PluginLoader.d.ts +17 -0
- package/dist/core/PluginLoader.d.ts.map +1 -0
- package/dist/core/PluginLoader.js +97 -0
- package/dist/core/PluginLoader.js.map +1 -0
- package/dist/core/ProposalLifecycle.d.ts +59 -0
- package/dist/core/ProposalLifecycle.d.ts.map +1 -0
- package/dist/core/ProposalLifecycle.js +215 -0
- package/dist/core/ProposalLifecycle.js.map +1 -0
- package/dist/core/ProviderInstantiate.d.ts +9 -0
- package/dist/core/ProviderInstantiate.d.ts.map +1 -0
- package/dist/core/ProviderInstantiate.js +156 -0
- package/dist/core/ProviderInstantiate.js.map +1 -0
- package/dist/core/SchemeRegistry.d.ts +26 -0
- package/dist/core/SchemeRegistry.d.ts.map +1 -0
- package/dist/core/SchemeRegistry.js +205 -0
- package/dist/core/SchemeRegistry.js.map +1 -0
- package/dist/core/StrikeRail.d.ts +28 -0
- package/dist/core/StrikeRail.d.ts.map +1 -0
- package/dist/core/StrikeRail.js +165 -0
- package/dist/core/StrikeRail.js.map +1 -0
- package/dist/core/TelemetryChannel.d.ts +37 -0
- package/dist/core/TelemetryChannel.d.ts.map +1 -0
- package/dist/core/TelemetryChannel.js +77 -0
- package/dist/core/TelemetryChannel.js.map +1 -0
- package/dist/core/TokenGauge.d.ts +16 -0
- package/dist/core/TokenGauge.d.ts.map +1 -0
- package/dist/core/TokenGauge.js +58 -0
- package/dist/core/TokenGauge.js.map +1 -0
- package/dist/core/caps/CapsResolve.d.ts +5 -0
- package/dist/core/caps/CapsResolve.d.ts.map +1 -0
- package/dist/core/caps/CapsResolve.js +13 -0
- package/dist/core/caps/CapsResolve.js.map +1 -0
- package/dist/core/caps/DbChannelCaps.d.ts +16 -0
- package/dist/core/caps/DbChannelCaps.d.ts.map +1 -0
- package/dist/core/caps/DbChannelCaps.js +41 -0
- package/dist/core/caps/DbChannelCaps.js.map +1 -0
- package/dist/core/caps/DbEntryCaps.d.ts +19 -0
- package/dist/core/caps/DbEntryCaps.d.ts.map +1 -0
- package/dist/core/caps/DbEntryCaps.js +28 -0
- package/dist/core/caps/DbEntryCaps.js.map +1 -0
- package/dist/core/caps/DbNotifyCaps.d.ts +8 -0
- package/dist/core/caps/DbNotifyCaps.d.ts.map +1 -0
- package/dist/core/caps/DbNotifyCaps.js +35 -0
- package/dist/core/caps/DbNotifyCaps.js.map +1 -0
- package/dist/core/caps/DbSubscriptionCaps.d.ts +10 -0
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -0
- package/dist/core/caps/DbSubscriptionCaps.js +86 -0
- package/dist/core/caps/DbSubscriptionCaps.js.map +1 -0
- package/dist/core/caps/DbTagCaps.d.ts +17 -0
- package/dist/core/caps/DbTagCaps.d.ts.map +1 -0
- package/dist/core/caps/DbTagCaps.js +37 -0
- package/dist/core/caps/DbTagCaps.js.map +1 -0
- package/dist/core/caps/SchemeCtxImpl.d.ts +18 -0
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -0
- package/dist/core/caps/SchemeCtxImpl.js +42 -0
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -0
- package/dist/core/env-defaults.d.ts +19 -0
- package/dist/core/env-defaults.d.ts.map +1 -0
- package/dist/core/env-defaults.js +89 -0
- package/dist/core/env-defaults.js.map +1 -0
- package/dist/core/fork.d.ts +6 -0
- package/dist/core/fork.d.ts.map +1 -0
- package/dist/core/fork.js +84 -0
- package/dist/core/fork.js.map +1 -0
- package/dist/core/fork.sql +85 -0
- package/dist/core/git-membership.d.ts +23 -0
- package/dist/core/git-membership.d.ts.map +1 -0
- package/dist/core/git-membership.js +366 -0
- package/dist/core/git-membership.js.map +1 -0
- package/dist/core/git-state.d.ts +15 -0
- package/dist/core/git-state.d.ts.map +1 -0
- package/dist/core/git-state.js +67 -0
- package/dist/core/git-state.js.map +1 -0
- package/dist/core/packet-inject.d.ts +5 -0
- package/dist/core/packet-inject.d.ts.map +1 -0
- package/dist/core/packet-inject.js +48 -0
- package/dist/core/packet-inject.js.map +1 -0
- package/dist/core/packet-wire.d.ts +46 -0
- package/dist/core/packet-wire.d.ts.map +1 -0
- package/dist/core/packet-wire.js +453 -0
- package/dist/core/packet-wire.js.map +1 -0
- package/dist/core/path-decode.d.ts +2 -0
- package/dist/core/path-decode.d.ts.map +1 -0
- package/dist/core/path-decode.js +8 -0
- package/dist/core/path-decode.js.map +1 -0
- 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/plurnk-uri.d.ts +7 -0
- package/dist/core/plurnk-uri.d.ts.map +1 -0
- package/dist/core/plurnk-uri.js +52 -0
- package/dist/core/plurnk-uri.js.map +1 -0
- package/dist/core/resolveForLoop.d.ts +5 -0
- package/dist/core/resolveForLoop.d.ts.map +1 -0
- package/dist/core/resolveForLoop.js +12 -0
- package/dist/core/resolveForLoop.js.map +1 -0
- package/dist/core/results.d.ts +12 -0
- package/dist/core/results.d.ts.map +1 -0
- package/dist/core/results.js +27 -0
- package/dist/core/results.js.map +1 -0
- package/dist/core/run-cap.d.ts +8 -0
- package/dist/core/run-cap.d.ts.map +1 -0
- package/dist/core/run-cap.js +20 -0
- package/dist/core/run-cap.js.map +1 -0
- package/dist/core/run-ops.sql +43 -0
- package/dist/core/scheme-types.d.ts +45 -0
- package/dist/core/scheme-types.d.ts.map +1 -0
- package/dist/core/scheme-types.js +6 -0
- package/dist/core/scheme-types.js.map +1 -0
- package/dist/core/session-settings.d.ts +23 -0
- package/dist/core/session-settings.d.ts.map +1 -0
- package/dist/core/session-settings.js +55 -0
- package/dist/core/session-settings.js.map +1 -0
- package/dist/core/teaching.d.ts +3 -0
- package/dist/core/teaching.d.ts.map +1 -0
- package/dist/core/teaching.js +13 -0
- package/dist/core/teaching.js.map +1 -0
- package/dist/core/types.d.ts +3 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/digest/Digest.d.ts +20 -0
- package/dist/digest/Digest.d.ts.map +1 -0
- package/dist/digest/Digest.js +451 -0
- package/dist/digest/Digest.js.map +1 -0
- package/dist/digest/Digest.sql +1 -0
- package/dist/digest/digest.sql +55 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/schemes/EffectPolicy.d.ts +6 -0
- package/dist/schemes/EffectPolicy.d.ts.map +1 -0
- package/dist/schemes/EffectPolicy.js +18 -0
- package/dist/schemes/EffectPolicy.js.map +1 -0
- package/dist/schemes/Exec.d.ts +39 -0
- package/dist/schemes/Exec.d.ts.map +1 -0
- package/dist/schemes/Exec.js +510 -0
- package/dist/schemes/Exec.js.map +1 -0
- package/dist/schemes/ExecOutputScheme.d.ts +20 -0
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -0
- package/dist/schemes/ExecOutputScheme.js +39 -0
- package/dist/schemes/ExecOutputScheme.js.map +1 -0
- package/dist/schemes/File.d.ts +42 -0
- package/dist/schemes/File.d.ts.map +1 -0
- package/dist/schemes/File.js +356 -0
- package/dist/schemes/File.js.map +1 -0
- package/dist/schemes/Known.d.ts +17 -0
- package/dist/schemes/Known.d.ts.map +1 -0
- package/dist/schemes/Known.js +40 -0
- package/dist/schemes/Known.js.map +1 -0
- package/dist/schemes/Log.d.ts +22 -0
- package/dist/schemes/Log.d.ts.map +1 -0
- package/dist/schemes/Log.js +269 -0
- package/dist/schemes/Log.js.map +1 -0
- package/dist/schemes/Log.sql +59 -0
- package/dist/schemes/Plurnk.d.ts +17 -0
- package/dist/schemes/Plurnk.d.ts.map +1 -0
- package/dist/schemes/Plurnk.js +46 -0
- package/dist/schemes/Plurnk.js.map +1 -0
- package/dist/schemes/Run.d.ts +25 -0
- package/dist/schemes/Run.d.ts.map +1 -0
- package/dist/schemes/Run.js +172 -0
- package/dist/schemes/Run.js.map +1 -0
- package/dist/schemes/Skill.d.ts +17 -0
- package/dist/schemes/Skill.d.ts.map +1 -0
- package/dist/schemes/Skill.js +40 -0
- package/dist/schemes/Skill.js.map +1 -0
- package/dist/schemes/Unknown.d.ts +17 -0
- package/dist/schemes/Unknown.d.ts.map +1 -0
- package/dist/schemes/Unknown.js +39 -0
- package/dist/schemes/Unknown.js.map +1 -0
- package/dist/schemes/_entry-chunk.d.ts +11 -0
- package/dist/schemes/_entry-chunk.d.ts.map +1 -0
- package/dist/schemes/_entry-chunk.js +100 -0
- package/dist/schemes/_entry-chunk.js.map +1 -0
- package/dist/schemes/_entry-crud.d.ts +31 -0
- package/dist/schemes/_entry-crud.d.ts.map +1 -0
- package/dist/schemes/_entry-crud.js +77 -0
- package/dist/schemes/_entry-crud.js.map +1 -0
- package/dist/schemes/_entry-crud.sql +101 -0
- package/dist/schemes/_entry-find.d.ts +32 -0
- package/dist/schemes/_entry-find.d.ts.map +1 -0
- package/dist/schemes/_entry-find.js +226 -0
- package/dist/schemes/_entry-find.js.map +1 -0
- package/dist/schemes/_entry-find.sql +54 -0
- package/dist/schemes/_entry-graph.d.ts +16 -0
- package/dist/schemes/_entry-graph.d.ts.map +1 -0
- package/dist/schemes/_entry-graph.js +94 -0
- package/dist/schemes/_entry-graph.js.map +1 -0
- package/dist/schemes/_entry-graph.sql +52 -0
- package/dist/schemes/_entry-manifest.d.ts +25 -0
- package/dist/schemes/_entry-manifest.d.ts.map +1 -0
- package/dist/schemes/_entry-manifest.js +266 -0
- package/dist/schemes/_entry-manifest.js.map +1 -0
- package/dist/schemes/_entry-ops.d.ts +32 -0
- package/dist/schemes/_entry-ops.d.ts.map +1 -0
- package/dist/schemes/_entry-ops.js +216 -0
- package/dist/schemes/_entry-ops.js.map +1 -0
- package/dist/schemes/_entry-ops.sql +31 -0
- package/dist/schemes/_entry-semantic.d.ts +38 -0
- package/dist/schemes/_entry-semantic.d.ts.map +1 -0
- package/dist/schemes/_entry-semantic.js +202 -0
- package/dist/schemes/_entry-semantic.js.map +1 -0
- package/dist/schemes/_entry-semantic.sql +95 -0
- package/dist/schemes/_entry-send.d.ts +11 -0
- package/dist/schemes/_entry-send.d.ts.map +1 -0
- package/dist/schemes/_entry-send.js +66 -0
- package/dist/schemes/_entry-send.js.map +1 -0
- package/dist/schemes/cosine.d.ts +4 -0
- package/dist/schemes/cosine.d.ts.map +1 -0
- package/dist/schemes/cosine.js +9 -0
- package/dist/schemes/cosine.js.map +1 -0
- package/dist/schemes/exec-abort.d.ts +15 -0
- package/dist/schemes/exec-abort.d.ts.map +1 -0
- package/dist/schemes/exec-abort.js +29 -0
- package/dist/schemes/exec-abort.js.map +1 -0
- package/dist/schemes/exec-env.d.ts +5 -0
- package/dist/schemes/exec-env.d.ts.map +1 -0
- package/dist/schemes/exec-env.js +34 -0
- package/dist/schemes/exec-env.js.map +1 -0
- package/dist/server/Daemon.d.ts +244 -0
- package/dist/server/Daemon.d.ts.map +1 -0
- package/dist/server/Daemon.js +1119 -0
- package/dist/server/Daemon.js.map +1 -0
- package/dist/server/client-input.d.ts +11 -0
- package/dist/server/client-input.d.ts.map +1 -0
- package/dist/server/client-input.js +145 -0
- package/dist/server/client-input.js.map +1 -0
- package/dist/server/clientTurn.d.ts +6 -0
- package/dist/server/clientTurn.d.ts.map +1 -0
- package/dist/server/clientTurn.js +23 -0
- package/dist/server/clientTurn.js.map +1 -0
- package/dist/server/clientTurn.sql +10 -0
- package/dist/server/dispatch-as-plurnk.d.ts +7 -0
- package/dist/server/dispatch-as-plurnk.d.ts.map +1 -0
- package/dist/server/dispatch-as-plurnk.js +23 -0
- package/dist/server/dispatch-as-plurnk.js.map +1 -0
- package/dist/server/drain.sql +124 -0
- package/dist/server/envelope.d.ts +53 -0
- package/dist/server/envelope.d.ts.map +1 -0
- package/dist/server/envelope.js +172 -0
- package/dist/server/envelope.js.map +1 -0
- package/dist/server/envelope.sql +76 -0
- package/dist/server/logEntry.d.ts +35 -0
- package/dist/server/logEntry.d.ts.map +1 -0
- package/dist/server/logEntry.js +49 -0
- package/dist/server/logEntry.js.map +1 -0
- package/dist/server/logEntry.sql +10 -0
- package/dist/server/loopDocs.d.ts +6 -0
- package/dist/server/loopDocs.d.ts.map +1 -0
- package/dist/server/loopDocs.js +22 -0
- package/dist/server/loopDocs.js.map +1 -0
- package/dist/server/noProposals.d.ts +6 -0
- package/dist/server/noProposals.d.ts.map +1 -0
- package/dist/server/noProposals.js +37 -0
- package/dist/server/noProposals.js.map +1 -0
- package/dist/server/seam-entry-read.sql +21 -0
- package/dist/server/seam-log-read.sql +21 -0
- package/dist/server/seam-loop.sql +9 -0
- package/dist/server/seam-proposal-list.sql +13 -0
- package/dist/server/version-info.d.ts +14 -0
- package/dist/server/version-info.d.ts.map +1 -0
- package/dist/server/version-info.js +69 -0
- package/dist/server/version-info.js.map +1 -0
- package/dist/server/yolo.d.ts +6 -0
- package/dist/server/yolo.d.ts.map +1 -0
- package/dist/server/yolo.js +64 -0
- package/dist/server/yolo.js.map +1 -0
- package/dist/service.d.ts +6 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +309 -0
- package/dist/service.js.map +1 -0
- package/migrations/0000-00-00.01_schema.sql +500 -0
- package/package.json +86 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yolo.d.ts","sourceRoot":"","sources":["../../src/server/yolo.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAE5C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,OAAO,OAAO,IAAI;IACrB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,CAuB/C;CACJ"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// Server-side YOLO listener — in-tree subscriber to Engine.onProposalPending
|
|
2
|
+
// that auto-accepts proposals when the loop's persisted flags.yolo === true.
|
|
3
|
+
// No client roundtrip; no human approval; no RPC involvement.
|
|
4
|
+
//
|
|
5
|
+
// === Server-side vs client-side YOLO ===
|
|
6
|
+
//
|
|
7
|
+
// These are distinct features. Both have legitimate use cases. Neither
|
|
8
|
+
// replaces the other.
|
|
9
|
+
//
|
|
10
|
+
// Server-side YOLO (this file)
|
|
11
|
+
// - Enabled via loops.flags.yolo = true. RPC opt-in:
|
|
12
|
+
// loop.run({ prompt, flags: { yolo: true } }).
|
|
13
|
+
// - Engine auto-accepts in-process; the client need not be connected.
|
|
14
|
+
// - Use cases: benchmarks (pure model+grammar timing, no RPC roundtrip
|
|
15
|
+
// in the hot loop), CI runs, ad-hoc internal automation, test
|
|
16
|
+
// fixtures. Anywhere "just run and tell me the final state" is the
|
|
17
|
+
// right contract.
|
|
18
|
+
// - Client apps (@plurnk/plurnk CLI / TUI) intentionally do NOT expose
|
|
19
|
+
// this flag — server YOLO is not standard end-user ergonomics.
|
|
20
|
+
//
|
|
21
|
+
// Client-side YOLO (@plurnk/plurnk --yolo / PLURNK_YOLO)
|
|
22
|
+
// - Client receives the loop/proposal notification and immediately
|
|
23
|
+
// sends loop.resolve({decision:"accept", outcome:"client_yolo"}).
|
|
24
|
+
// - The wire roundtrip still happens; the daemon stays unaware that
|
|
25
|
+
// no human reviewed.
|
|
26
|
+
// - Use cases: real users who want "stop bothering me" ergonomics
|
|
27
|
+
// across an interactive session. Documented in client SPEC §open-fold.
|
|
28
|
+
//
|
|
29
|
+
// Listener fires BEFORE ProposalLifecycle.awaitResolution awaits the waiter, so a
|
|
30
|
+
// synchronous resolveProposal here is delivered to the awaiting dispatch
|
|
31
|
+
// without yielding. The loop/proposal broadcast still goes out (listeners
|
|
32
|
+
// fan out independently) — clients in server-YOLO runs may see a brief
|
|
33
|
+
// proposed-then-resolved blink in their UI. The carried event.flags.yolo
|
|
34
|
+
// lets clients suppress review-UI rendering for those entries.
|
|
35
|
+
export default class Yolo {
|
|
36
|
+
static attachYolo(engine, _db) {
|
|
37
|
+
// §dual-yolo-server-yolo-auto-accept
|
|
38
|
+
engine.onProposalPending((event) => {
|
|
39
|
+
if (!event.flags.yolo)
|
|
40
|
+
return;
|
|
41
|
+
// A [300] question is NOT yolo-able (#346): it exists precisely to stop the world
|
|
42
|
+
// for a human — auto-accepting answers nothing. The session opted into questions
|
|
43
|
+
// (settings.questions), so the stop is wanted even under yolo.
|
|
44
|
+
if (event.op === "SEND" && event.attrs.question !== undefined)
|
|
45
|
+
return;
|
|
46
|
+
try {
|
|
47
|
+
if (event.staleClobberRisk) {
|
|
48
|
+
// #note10 — the target diverged on disk this turn; the model's EDIT is
|
|
49
|
+
// based on a stale read. Reject rather than silently clobber the ambient
|
|
50
|
+
// change. The model sees an ordinary reject (outcome is forensics-only)
|
|
51
|
+
// and can re-READ the entry + retry against the current content.
|
|
52
|
+
engine.resolveProposal(event.logEntryId, { decision: "reject", outcome: "stale_read_clobber" });
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
engine.resolveProposal(event.logEntryId, { decision: "accept" });
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Errors here don't abort dispatch — the proposal stays
|
|
59
|
+
// pending and falls through to the RPC / timeout path.
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=yolo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yolo.js","sourceRoot":"","sources":["../../src/server/yolo.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,6EAA6E;AAC7E,8DAA8D;AAC9D,EAAE;AACF,0CAA0C;AAC1C,EAAE;AACF,uEAAuE;AACvE,sBAAsB;AACtB,EAAE;AACF,iCAAiC;AACjC,yDAAyD;AACzD,qDAAqD;AACrD,0EAA0E;AAC1E,2EAA2E;AAC3E,oEAAoE;AACpE,yEAAyE;AACzE,wBAAwB;AACxB,2EAA2E;AAC3E,qEAAqE;AACrE,EAAE;AACF,2DAA2D;AAC3D,uEAAuE;AACvE,wEAAwE;AACxE,wEAAwE;AACxE,2BAA2B;AAC3B,sEAAsE;AACtE,6EAA6E;AAC7E,EAAE;AACF,kFAAkF;AAClF,yEAAyE;AACzE,0EAA0E;AAC1E,uEAAuE;AACvE,yEAAyE;AACzE,+DAA+D;AAM/D,MAAM,CAAC,OAAO,OAAO,IAAI;IACrB,MAAM,CAAC,UAAU,CAAC,MAAc,EAAE,GAAO;QACrC,qCAAqC;QACrC,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAA2B,EAAE,EAAE;YACrD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;gBAAE,OAAO;YAC9B,kFAAkF;YAClF,iFAAiF;YACjF,+DAA+D;YAC/D,IAAI,KAAK,CAAC,EAAE,KAAK,MAAM,IAAK,KAAK,CAAC,KAA+B,CAAC,QAAQ,KAAK,SAAS;gBAAE,OAAO;YACjG,IAAI,CAAC;gBACD,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;oBACzB,uEAAuE;oBACvE,yEAAyE;oBACzE,wEAAwE;oBACxE,iEAAiE;oBACjE,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;oBAChG,OAAO;gBACX,CAAC;gBACD,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrE,CAAC;YAAC,MAAM,CAAC;gBACL,wDAAwD;gBACxD,uDAAuD;YAC3D,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":";AAoBA,MAAM,CAAC,OAAO,OAAO,OAAO;;IA4MxB,OAAa,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAqEjC;CACJ"}
|
package/dist/service.js
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import Paths from "./Paths.js";
|
|
3
|
+
import { parseArgs } from "node:util";
|
|
4
|
+
import { existsSync, mkdirSync, copyFileSync, writeFileSync, rmSync } from "node:fs";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { dirname, resolve } from "node:path";
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
import SqlRite from "@possumtech/sqlrite";
|
|
9
|
+
import Daemon from "./server/Daemon.js";
|
|
10
|
+
import EnvFlags from "./core/EnvFlags.js";
|
|
11
|
+
import EnvDefaults from "./core/env-defaults.js";
|
|
12
|
+
import ProviderInstantiate from "./core/ProviderInstantiate.js";
|
|
13
|
+
import Meta from "@plurnk/plurnk-meta";
|
|
14
|
+
import { resolveActiveAlias } from "@plurnk/plurnk-providers";
|
|
15
|
+
import { Module as AguiModule } from "@plurnk/plurnk-agui";
|
|
16
|
+
// The `plurnk-service` executable: launches the daemon (start) or runs migrations.
|
|
17
|
+
// Not the user-facing client — that is the separate `plurnk` project.
|
|
18
|
+
export default class Service {
|
|
19
|
+
// This file's own directory holds the runtime code + its .sql (src/ in dev, dist/ in a
|
|
20
|
+
// published install); its parent is the package root (migrations/, requirements.md, .env.defaults).
|
|
21
|
+
static #codeDir = dirname(fileURLToPath(import.meta.url));
|
|
22
|
+
static #projectRoot = resolve(Service.#codeDir, "..");
|
|
23
|
+
static #ext = import.meta.url.endsWith(".ts") ? ".ts" : ".js";
|
|
24
|
+
static #homeDir = resolve(homedir(), ".plurnk");
|
|
25
|
+
// First-run bootstrap — run-time, NOT an install script: seed ~/.plurnk so a global
|
|
26
|
+
// install has a stable home for config + the DB. Idempotent (only acts when absent).
|
|
27
|
+
static #ensureHome() {
|
|
28
|
+
// Seed ONCE, on first run (the home is absent). After that the user owns ~/.plurnk —
|
|
29
|
+
// edits and deletions stick, no silent re-seed. The assembled floor is in-memory
|
|
30
|
+
// (§operator-config-env-defaults); `~/.plurnk/.env.defaults` is its rendered catalog,
|
|
31
|
+
// machine-owned and regenerated each boot. Wiping the whole dir is a deliberate reset.
|
|
32
|
+
if (existsSync(Service.#homeDir))
|
|
33
|
+
return;
|
|
34
|
+
mkdirSync(Service.#homeDir, { recursive: true });
|
|
35
|
+
// The first-run model selection lives HERE, as commented peers — an honest surfaced
|
|
36
|
+
// choice (no active default ships; #307). One uncomment per option; agents read this
|
|
37
|
+
// file as naturally as humans do.
|
|
38
|
+
writeFileSync(resolve(Service.#homeDir, ".env"), [
|
|
39
|
+
"# plurnk config — overrides the shipped defaults (~/.plurnk/.env.defaults is the assembled legend).",
|
|
40
|
+
"#",
|
|
41
|
+
"# Pick a model — uncomment ONE block:",
|
|
42
|
+
"#",
|
|
43
|
+
"# LOCAL — your own llama-server / any OpenAI-compatible endpoint:",
|
|
44
|
+
"# PLURNK_MODEL_local=\"openai/gemma\"",
|
|
45
|
+
"# OPENAI_BASE_URL=http://127.0.0.1:11434",
|
|
46
|
+
"# PLURNK_MODEL=local",
|
|
47
|
+
"#",
|
|
48
|
+
"# CLOUD — bring your own key, any openrouter model:",
|
|
49
|
+
"# PLURNK_MODEL_cloud=\"openrouter/qwen/qwen3-coder\"",
|
|
50
|
+
"# OPENROUTER_API_KEY=\"...\"",
|
|
51
|
+
"# PLURNK_MODEL=cloud",
|
|
52
|
+
"#",
|
|
53
|
+
"# PLURNK.AI - Plurnk-optimized endpoint service - https://plurnk.ai/",
|
|
54
|
+
"# PLURNK_MODEL_plurnk=\"plurnk/plurnk\"",
|
|
55
|
+
"# PLURNK_API_KEY=\"...\"",
|
|
56
|
+
"# PLURNK_MODEL=plurnk",
|
|
57
|
+
"",
|
|
58
|
+
].join("\n"));
|
|
59
|
+
// Seed the default operating policy → ~/.plurnk/AGENTS.md, foisted as ## Plurnk Service Policy
|
|
60
|
+
// (readSystemPolicy). A new install opens with a sane disposition, not a blank policy; the user
|
|
61
|
+
// owns + edits it after — a deleted policy stays deleted, like the .env floor.
|
|
62
|
+
const shippedPolicy = Paths.personality; // the docs corpus ships the default policy
|
|
63
|
+
if (existsSync(shippedPolicy))
|
|
64
|
+
copyFileSync(shippedPolicy, resolve(Service.#homeDir, "AGENTS.md"));
|
|
65
|
+
process.stderr.write(`plurnk-service: created ${Service.#homeDir} — config in ${resolve(Service.#homeDir, ".env")}\n`);
|
|
66
|
+
}
|
|
67
|
+
// Package-owned reference files are REFRESHED from the installed package on every boot —
|
|
68
|
+
// they carry the installed version's prose, so a seed-once snapshot would silently drift.
|
|
69
|
+
// Safe to clobber because they are package-owned, NOT user config: ~/.plurnk/.env (the
|
|
70
|
+
// user's, seeded once above) is never touched here. The knob legend is the assembled
|
|
71
|
+
// ~/.plurnk/.env.defaults, written by main() after assembly; .env.example is that legend's
|
|
72
|
+
// retired name — a machine-owned stale copy is removed so it can't mislead readers.
|
|
73
|
+
static #syncReferenceFiles() {
|
|
74
|
+
if (!existsSync(Service.#homeDir))
|
|
75
|
+
return;
|
|
76
|
+
for (const name of ["INSTALL.md"]) {
|
|
77
|
+
const src = resolve(Service.#projectRoot, name);
|
|
78
|
+
if (existsSync(src))
|
|
79
|
+
copyFileSync(src, resolve(Service.#homeDir, name));
|
|
80
|
+
}
|
|
81
|
+
rmSync(resolve(Service.#homeDir, ".env.example"), { force: true });
|
|
82
|
+
}
|
|
83
|
+
static #expandHome(p) {
|
|
84
|
+
if (p === "~")
|
|
85
|
+
return homedir();
|
|
86
|
+
return p.startsWith("~/") ? resolve(homedir(), p.slice(2)) : p;
|
|
87
|
+
}
|
|
88
|
+
// The node_modules holding the service's plugin deps (exec/scheme/mimetype), resolved
|
|
89
|
+
// from this file's REAL location by the shared membership walk. Falls back to CWD.
|
|
90
|
+
static #pluginsNodeModules() {
|
|
91
|
+
return Meta.nearestNodeModules(Service.#codeDir) ?? resolve(process.cwd(), "node_modules");
|
|
92
|
+
}
|
|
93
|
+
static #die(code, message) {
|
|
94
|
+
process.stderr.write(`${message}\n`);
|
|
95
|
+
process.exit(code);
|
|
96
|
+
}
|
|
97
|
+
static #loadEnv(path, required) {
|
|
98
|
+
if (existsSync(path)) {
|
|
99
|
+
try {
|
|
100
|
+
process.loadEnvFile(path);
|
|
101
|
+
}
|
|
102
|
+
catch (cause) {
|
|
103
|
+
Service.#die(64, `failed to load ${path}: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else if (required) {
|
|
107
|
+
Service.#die(64, `${path} does not exist`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// node-style env-file flags: --env-file=<path> (required) / --env-file-if-exists=<path>
|
|
111
|
+
// (skip if missing), repeatable, in command-line order. node only loads pre-script files;
|
|
112
|
+
// a published `plurnk-service --env-file=…` needs this post-script loader.
|
|
113
|
+
static #envFileArgs() {
|
|
114
|
+
return process.argv.flatMap((a) => {
|
|
115
|
+
if (a.startsWith("--env-file-if-exists="))
|
|
116
|
+
return [{ path: a.slice(a.indexOf("=") + 1), required: false }];
|
|
117
|
+
if (a.startsWith("--env-file="))
|
|
118
|
+
return [{ path: a.slice(a.indexOf("=") + 1), required: true }];
|
|
119
|
+
return [];
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
static #requireEnv(name) {
|
|
123
|
+
const value = process.env[name];
|
|
124
|
+
if (value === undefined || value.length === 0)
|
|
125
|
+
Service.#die(78, `missing required env ${name} (declare it in .env.defaults)`);
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
static #sqliteKnob(name) {
|
|
129
|
+
const raw = process.env[name];
|
|
130
|
+
if (raw === undefined || raw.trim() === "")
|
|
131
|
+
return undefined;
|
|
132
|
+
const n = Number(raw);
|
|
133
|
+
if (!Number.isInteger(n))
|
|
134
|
+
Service.#die(78, `${name} must be an integer, got ${JSON.stringify(raw)}`);
|
|
135
|
+
return n;
|
|
136
|
+
}
|
|
137
|
+
static async #openDb(dbPath) {
|
|
138
|
+
const tuning = {};
|
|
139
|
+
for (const [env, opt] of [
|
|
140
|
+
["PLURNK_SERVICE_SQLITE_TIMEOUT", "timeout"],
|
|
141
|
+
["PLURNK_SERVICE_SQLITE_CACHE_SIZE", "cacheSize"],
|
|
142
|
+
["PLURNK_SERVICE_SQLITE_MMAP_SIZE", "mmapSize"],
|
|
143
|
+
["PLURNK_SERVICE_SQLITE_MAX_PAGE_COUNT", "maxPageCount"],
|
|
144
|
+
]) {
|
|
145
|
+
const v = Service.#sqliteKnob(env);
|
|
146
|
+
if (v !== undefined)
|
|
147
|
+
tuning[opt] = v;
|
|
148
|
+
}
|
|
149
|
+
mkdirSync(dirname(dbPath), { recursive: true });
|
|
150
|
+
try {
|
|
151
|
+
const db = await SqlRite.open({
|
|
152
|
+
path: dbPath,
|
|
153
|
+
dir: [resolve(Service.#projectRoot, "migrations"), Service.#codeDir],
|
|
154
|
+
functions: [resolve(Service.#codeDir, `schemes/cosine${Service.#ext}`)],
|
|
155
|
+
...tuning,
|
|
156
|
+
});
|
|
157
|
+
return db;
|
|
158
|
+
}
|
|
159
|
+
catch (cause) {
|
|
160
|
+
// SQLite's bare "disk I/O error" names neither file nor culprit. The classic footgun fails
|
|
161
|
+
// exactly this way: the main DB was deleted while -wal/-shm sidecars survived (often still
|
|
162
|
+
// held by a running daemon). Fail hard, legibly — name the path and the stale sidecars.
|
|
163
|
+
const sidecars = [`${dbPath}-wal`, `${dbPath}-shm`].filter((p) => existsSync(p));
|
|
164
|
+
const hint = sidecars.length > 0
|
|
165
|
+
? ` — stale sidecar(s) present (${sidecars.join(", ")}): a prior daemon may still hold the old database; stop it and delete the sidecars`
|
|
166
|
+
: "";
|
|
167
|
+
throw new Error(`open ${dbPath} failed${hint}`, { cause });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
static async #migrate() {
|
|
171
|
+
const dbPath = Service.#expandHome(Service.#requireEnv("PLURNK_SERVICE_DB_PATH"));
|
|
172
|
+
const db = await Service.#openDb(dbPath);
|
|
173
|
+
try {
|
|
174
|
+
process.stdout.write(`migrated: ${dbPath}\n`);
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
await db.close();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
static async #start() {
|
|
181
|
+
const dbPath = Service.#expandHome(Service.#requireEnv("PLURNK_SERVICE_DB_PATH"));
|
|
182
|
+
const host = Service.#requireEnv("PLURNK_HOST");
|
|
183
|
+
// PLURNK_PORT is THE client surface — the AG-UI+ listener (the agui daughter module binds
|
|
184
|
+
// it at boot via the seam). Production is single-listener (#357): no daemon WS port.
|
|
185
|
+
const port = Number(Service.#requireEnv("PLURNK_PORT"));
|
|
186
|
+
const db = await Service.#openDb(dbPath);
|
|
187
|
+
const alias = resolveActiveAlias();
|
|
188
|
+
const provider = alias === null ? null : await ProviderInstantiate.loadActiveProvider();
|
|
189
|
+
const daemon = new Daemon({ db, provider, nodeModulesPath: Service.#pluginsNodeModules() });
|
|
190
|
+
// AG-UI daughter module (#355) — THE client surface, always on: its init runs at boot with the
|
|
191
|
+
// seam handle and binds PLURNK_HOST:PLURNK_PORT. The module owns its knobs' semantics.
|
|
192
|
+
const aguiInit = AguiModule.init({
|
|
193
|
+
host, port,
|
|
194
|
+
...(process.env.PLURNK_AGUI_TOKEN !== undefined && process.env.PLURNK_AGUI_TOKEN.length > 0 ? { token: process.env.PLURNK_AGUI_TOKEN } : {}),
|
|
195
|
+
...(process.env.PLURNK_AGUI_MAX_TURNS !== undefined && process.env.PLURNK_AGUI_MAX_TURNS.length > 0 ? { maxTurns: Number(process.env.PLURNK_AGUI_MAX_TURNS) } : {}),
|
|
196
|
+
});
|
|
197
|
+
// Capture the module so the banner reports the BOUND address, not the configured one —
|
|
198
|
+
// with PLURNK_PORT=0 the configured value is 0 and banner parsers get garbage.
|
|
199
|
+
let agui = null;
|
|
200
|
+
daemon.registerModule(async (seam) => { agui = await aguiInit(seam); });
|
|
201
|
+
await daemon.start(); // the daemon owns no transport (#364) — the agui module opens the one listener
|
|
202
|
+
const aguiAddr = agui?.address() ?? { host, port };
|
|
203
|
+
// mimetypes#50 recontract: null ⇔ NO embedder (a remote embedder with an incomplete
|
|
204
|
+
// self-report returns info with the unknowns explicitly null — say which case this is).
|
|
205
|
+
const embedInfo = await daemon.mimetypes.embedderInfo();
|
|
206
|
+
if (embedInfo === null) {
|
|
207
|
+
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");
|
|
208
|
+
}
|
|
209
|
+
else if (embedInfo.maxTokens === null) {
|
|
210
|
+
process.stderr.write("plurnk-service: remote embedder active but reports no token window — set PLURNK_MIMETYPES_EMBED_MAX_TOKENS to the endpoint's limit or embedding derivations will refuse\n");
|
|
211
|
+
}
|
|
212
|
+
// §tokenomics-window-partition coupling (F7): per-request numeric reasoning budgets are
|
|
213
|
+
// IGNORED by llama-server — when thinking is on, only the box's --reasoning-budget launch
|
|
214
|
+
// flag clamps it, and it must equal PLURNK_SERVICE_REASONING. Unverifiable from here, so
|
|
215
|
+
// say it loudly rather than let the reserve be fiction.
|
|
216
|
+
const thinking = process.env.PLURNK_PROVIDERS_THINKING ?? "off";
|
|
217
|
+
if (thinking !== "off") {
|
|
218
|
+
process.stderr.write(`plurnk-service: native thinking is ${thinking} — llama-server ignores per-request numeric budgets; ensure the serving box launches with --reasoning-budget ${process.env.PLURNK_PROVIDERS_THINKING_CAPACITY ?? "?"} or the capacity is not enforced.\n`);
|
|
219
|
+
}
|
|
220
|
+
if (alias === null) {
|
|
221
|
+
process.stderr.write(`plurnk-service: no model configured — uncomment one of the three options (local / cloud / plurnk.ai) in ${resolve(Service.#homeDir, ".env")}. Loops fail legibly until then.\n`);
|
|
222
|
+
}
|
|
223
|
+
const aliasStr = alias === null ? "no model" : `${alias.alias}=${alias.provider}/${alias.model}`;
|
|
224
|
+
process.stdout.write(`plurnk-service agui=http://${aguiAddr.host}:${aguiAddr.port} db=${dbPath} ${aliasStr}\n`);
|
|
225
|
+
const shutdown = async () => { await daemon.stop(); await db.close(); process.exit(0); };
|
|
226
|
+
process.on("SIGINT", shutdown);
|
|
227
|
+
process.on("SIGTERM", shutdown);
|
|
228
|
+
}
|
|
229
|
+
static async main() {
|
|
230
|
+
if (!process.argv.includes("--help") && !process.argv.includes("-h")) {
|
|
231
|
+
Service.#ensureHome();
|
|
232
|
+
Service.#syncReferenceFiles();
|
|
233
|
+
}
|
|
234
|
+
// Env cascade — first write wins (loadEnvFile is set-if-unset), so load highest first.
|
|
235
|
+
// Precedence high→low: CLI --flags > shell env > --env-file/--config > ./.env >
|
|
236
|
+
// ~/.plurnk/.env > the assembled .env.defaults floor (§operator-config-env-defaults:
|
|
237
|
+
// this package's file + every installed member's, uniqueness-checked).
|
|
238
|
+
for (const { path: envFile, required } of Service.#envFileArgs())
|
|
239
|
+
Service.#loadEnv(envFile, required);
|
|
240
|
+
const configFlagIndex = process.argv.findIndex((a) => a === "--config" || a.startsWith("--config="));
|
|
241
|
+
const configFile = (() => {
|
|
242
|
+
if (configFlagIndex === -1)
|
|
243
|
+
return null;
|
|
244
|
+
const arg = process.argv[configFlagIndex];
|
|
245
|
+
if (arg.includes("="))
|
|
246
|
+
return arg.slice(arg.indexOf("=") + 1);
|
|
247
|
+
return process.argv[configFlagIndex + 1] ?? null;
|
|
248
|
+
})();
|
|
249
|
+
if (configFile !== null)
|
|
250
|
+
Service.#loadEnv(configFile, true);
|
|
251
|
+
Service.#loadEnv(".env", false);
|
|
252
|
+
Service.#loadEnv(resolve(Service.#homeDir, ".env"), false);
|
|
253
|
+
// The assembled floor sits under everything the operator set: this package's
|
|
254
|
+
// .env.defaults + every installed member's, one owner per key (collision = boot crash),
|
|
255
|
+
// applied set-if-unset. The catalog renders to ~/.plurnk/.env.defaults — the operator's
|
|
256
|
+
// legend, machine-owned, never read back as config.
|
|
257
|
+
const defaultsFiles = await EnvDefaults.collect(Service.#projectRoot, Service.#pluginsNodeModules());
|
|
258
|
+
EnvDefaults.apply(EnvDefaults.merge(defaultsFiles));
|
|
259
|
+
if (existsSync(Service.#homeDir))
|
|
260
|
+
writeFileSync(resolve(Service.#homeDir, ".env.defaults"), EnvDefaults.renderCatalog(defaultsFiles));
|
|
261
|
+
const flagDescriptors = await EnvFlags.parseEnvDefaults(resolve(Service.#projectRoot, ".env.defaults"));
|
|
262
|
+
const flagOptions = {};
|
|
263
|
+
for (const f of flagDescriptors) {
|
|
264
|
+
flagOptions[f.flagName.replace(/^--/, "")] = { type: "string" };
|
|
265
|
+
}
|
|
266
|
+
const usage = `usage: plurnk-service [options] [migrate]
|
|
267
|
+
|
|
268
|
+
${EnvFlags.formatFlagsHelp(flagDescriptors)}
|
|
269
|
+
|
|
270
|
+
--env-file=<path> layer env from <path> (repeatable; errors if missing)
|
|
271
|
+
--env-file-if-exists=<path> layer env from <path> if present (repeatable)
|
|
272
|
+
--config=<path> layer additional env from <path>
|
|
273
|
+
-h, --help show this help
|
|
274
|
+
`;
|
|
275
|
+
const { positionals, values } = parseArgs({
|
|
276
|
+
allowPositionals: true,
|
|
277
|
+
strict: false,
|
|
278
|
+
options: { help: { type: "boolean", short: "h" }, config: { type: "string" }, ...flagOptions },
|
|
279
|
+
});
|
|
280
|
+
for (const f of flagDescriptors) {
|
|
281
|
+
const key = f.flagName.replace(/^--/, "");
|
|
282
|
+
const v = values[key];
|
|
283
|
+
if (typeof v === "string")
|
|
284
|
+
process.env[f.envName] = v;
|
|
285
|
+
}
|
|
286
|
+
if (values.help) {
|
|
287
|
+
process.stdout.write(usage);
|
|
288
|
+
process.exit(0);
|
|
289
|
+
}
|
|
290
|
+
const dispatch = { migrate: Service.#migrate, start: Service.#start };
|
|
291
|
+
const subcommand = typeof positionals[0] === "string" ? positionals[0] : "start";
|
|
292
|
+
const handler = dispatch[subcommand];
|
|
293
|
+
if (handler === undefined)
|
|
294
|
+
Service.#die(64, `unknown subcommand: ${subcommand}\n\n${usage}`);
|
|
295
|
+
if (positionals.length > 1)
|
|
296
|
+
Service.#die(64, `unexpected arguments: ${positionals.slice(1).join(" ")}`);
|
|
297
|
+
try {
|
|
298
|
+
await handler();
|
|
299
|
+
}
|
|
300
|
+
catch (cause) {
|
|
301
|
+
process.stderr.write(`${subcommand}: ${cause instanceof Error ? cause.message : String(cause)}\n`);
|
|
302
|
+
if (cause instanceof Error && cause.cause)
|
|
303
|
+
process.stderr.write(` cause: ${cause.cause instanceof Error ? cause.cause.message : String(cause.cause)}\n`);
|
|
304
|
+
process.exit(1);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
await Service.main();
|
|
309
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|