@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,52 @@
|
|
|
1
|
+
// The plurnk:// addressing convention. A namespace lives in the URL authority slot
|
|
2
|
+
// (plurnk://docs/x.md, plurnk://prompt/<run>/<loop>/<N>), but the canonical STORAGE key is the full
|
|
3
|
+
// path with the namespace folded in (/docs/x.md) — entries are keyed by (scope, scheme,
|
|
4
|
+
// pathname) with no authority column, so the authority MUST fold into the path.
|
|
5
|
+
//
|
|
6
|
+
// fold = parse-side: authority → path. Generic; a no-op when there's no authority.
|
|
7
|
+
// render = the inverse: path → model-facing URI. A multi-segment plurnk path promotes its
|
|
8
|
+
// first segment to the authority slot; a single-segment singleton (manifest.json,
|
|
9
|
+
// an alias doc) stays empty-authority root. Non-plurnk schemes are untouched.
|
|
10
|
+
//
|
|
11
|
+
// A web host (http://en.wikipedia.org/…) is NOT a namespace and never folds — callers that
|
|
12
|
+
// see other schemes gate the fold on scheme === "plurnk"; the entry layer only ever sees
|
|
13
|
+
// empty-authority schemes, so it folds unconditionally (a no-op there).
|
|
14
|
+
// Bare paths default to the file scheme per plurnk.md (grammar sysprompt):
|
|
15
|
+
// "Bare paths (no scheme) default to local relative project file paths."
|
|
16
|
+
// file:/// remains an optional explicit form for absolute paths.
|
|
17
|
+
export function schemeNameOf(path) {
|
|
18
|
+
if (path === null)
|
|
19
|
+
return null;
|
|
20
|
+
// http + https are one scheme — the http sibling owns both prefixes (#195).
|
|
21
|
+
if (path.kind === "url")
|
|
22
|
+
return path.scheme === "https" ? "http" : path.scheme;
|
|
23
|
+
return "file"; // local (bare) → file
|
|
24
|
+
}
|
|
25
|
+
export function foldAuthorityIntoPath(hostname, pathname) {
|
|
26
|
+
return hostname ? `/${hostname}${pathname}` : pathname;
|
|
27
|
+
}
|
|
28
|
+
// §prompt-auto-read — the prompt address is RUN-QUALIFIED (#382 fault-1): entries are
|
|
29
|
+
// session-scoped while loop sequences are per-run, so every run's first loop is sequence 1 and
|
|
30
|
+
// a WORK-spawned sister's turn-1 foist would clobber its parent's /prompt/1/1. The run id in
|
|
31
|
+
// the path is /proc/<pid>-style process qualification — one filesystem, collision-free
|
|
32
|
+
// coordinates. Every prompt writer and query builds through these two.
|
|
33
|
+
export function promptPathname(runId, loopSeq, turnSeq) {
|
|
34
|
+
return `/prompt/${runId}/${loopSeq}/${turnSeq}`;
|
|
35
|
+
}
|
|
36
|
+
export function promptLoopPrefix(runId, loopSeq) {
|
|
37
|
+
return `/prompt/${runId}/${loopSeq}/`;
|
|
38
|
+
}
|
|
39
|
+
export function renderAddress(scheme, pathname) {
|
|
40
|
+
if (scheme === "plurnk" && pathname.split("/").filter((s) => s.length > 0).length >= 2) {
|
|
41
|
+
return `plurnk://${pathname.replace(/^\//, "")}`;
|
|
42
|
+
}
|
|
43
|
+
// #370 — the run IS the authority (§run-scheme): a stored row whose authority was folded into
|
|
44
|
+
// the pathname (/name/...) must render run://name/..., never run:///name/... — one packet was
|
|
45
|
+
// minting BOTH forms and the model treated them as different addresses. Same for web URLs
|
|
46
|
+
// (run42 sweep: the entry-sink's materialized pages rendered https:///en.wikipedia.org/...).
|
|
47
|
+
// known/unknown/plurnk-single-segment keep :/// — empty authority IS their canonical form.
|
|
48
|
+
if (scheme === "run" || scheme === "http" || scheme === "https")
|
|
49
|
+
return `${scheme}://${pathname.replace(/^\//, "")}`;
|
|
50
|
+
return `${scheme}://${pathname}`;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=plurnk-uri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plurnk-uri.js","sourceRoot":"","sources":["../../src/core/plurnk-uri.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,oGAAoG;AACpG,wFAAwF;AACxF,gFAAgF;AAChF,EAAE;AACF,uFAAuF;AACvF,4FAA4F;AAC5F,6FAA6F;AAC7F,yFAAyF;AACzF,EAAE;AACF,2FAA2F;AAC3F,yFAAyF;AACzF,wEAAwE;AAIxE,2EAA2E;AAC3E,yEAAyE;AACzE,iEAAiE;AACjE,MAAM,UAAU,YAAY,CAAC,IAAuB;IAChD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,4EAA4E;IAC5E,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/E,OAAO,MAAM,CAAC,CAAE,sBAAsB;AAC1C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAuB,EAAE,QAAgB;IAC3E,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3D,CAAC;AAED,sFAAsF;AACtF,+FAA+F;AAC/F,6FAA6F;AAC7F,uFAAuF;AACvF,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,OAAe,EAAE,OAAe;IAC1E,OAAO,WAAW,KAAK,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,OAAe;IAC3D,OAAO,WAAW,KAAK,IAAI,OAAO,GAAG,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,QAAgB;IAC1D,IAAI,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACrF,OAAO,YAAY,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;IACrD,CAAC;IACD,8FAA8F;IAC9F,8FAA8F;IAC9F,0FAA0F;IAC1F,6FAA6F;IAC7F,2FAA2F;IAC3F,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,GAAG,MAAM,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;IACrH,OAAO,GAAG,MAAM,MAAM,QAAQ,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveForLoop.d.ts","sourceRoot":"","sources":["../../src/core/resolveForLoop.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAE1F;CACJ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Active-scheme resolution under a loop's flags — single source of truth is
|
|
2
|
+
// @plurnk/plurnk-schemes (keystone PR-1). Local OO facade over the daughter's
|
|
3
|
+
// function (mandate: static-method class); call sites stay
|
|
4
|
+
// `ResolveForLoop.resolveForLoop(...)`. Schemes opt into flag affinity via
|
|
5
|
+
// `manifest.flags`; absence = always active.
|
|
6
|
+
import { SchemeResolver } from "@plurnk/plurnk-schemes";
|
|
7
|
+
export default class ResolveForLoop {
|
|
8
|
+
static resolveForLoop(handlers, flags) {
|
|
9
|
+
return SchemeResolver.forLoop(handlers, flags);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=resolveForLoop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveForLoop.js","sourceRoot":"","sources":["../../src/core/resolveForLoop.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,8EAA8E;AAC9E,2DAA2D;AAC3D,2EAA2E;AAC3E,6CAA6C;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,cAAc,CAAC,QAAqC,EAAE,KAAgB;QACzE,OAAO,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;CACJ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EntryResult, ProposalResult, PassthroughResult, SchemeResult, SchemeResultBase, TelemetryEvent } from "@plurnk/plurnk-schemes";
|
|
2
|
+
import type { LogCoordinate } from "@plurnk/plurnk-grammar";
|
|
3
|
+
export type { EntryResult, ProposalResult, PassthroughResult, SchemeResult, SchemeResultBase, TelemetryEvent };
|
|
4
|
+
export default class Results {
|
|
5
|
+
static isEntryResult(r: SchemeResult): r is EntryResult;
|
|
6
|
+
static isProposalResult(r: SchemeResult): r is ProposalResult;
|
|
7
|
+
static isPassthroughResult(r: SchemeResult): r is PassthroughResult;
|
|
8
|
+
static isErrorStatus(status: number): boolean;
|
|
9
|
+
static schemeError(scheme: string, kind: string, message?: string | null, position?: TelemetryEvent["position"]): TelemetryEvent;
|
|
10
|
+
static logCoordinate(coordinate: string, op?: string): LogCoordinate;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=results.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"results.d.ts","sourceRoot":"","sources":["../../src/core/results.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACR,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EACjG,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;AAE/G,MAAM,CAAC,OAAO,OAAO,OAAO;IACxB,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,IAAI,WAAW,CAAgC;IACvF,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,IAAI,cAAc,CAAmC;IAChG,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,IAAI,iBAAiB,CAAsC;IAIzG,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAA2C;IAGxF,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,cAAc,CAE/H;IAGD,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,aAAa,CAAmD;CAC1H"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Canonical op-result contract — single source of truth is now
|
|
2
|
+
// @plurnk/plurnk-schemes (keystone PR-1). The types re-export from the
|
|
3
|
+
// daughter; the logic delegates to its functions behind a local OO facade
|
|
4
|
+
// (mandate: stateless transforms are static-method classes), so in-tree call
|
|
5
|
+
// sites stay `Results.schemeError(...)` while the implementation lives in the
|
|
6
|
+
// daughter — "pull, don't copy."
|
|
7
|
+
//
|
|
8
|
+
// The shape keys on SCHEME-SHAPE, not op: entry (known/unknown/skill/plurnk),
|
|
9
|
+
// proposal (file/exec), passthrough (log, future http). `error` is a grammar
|
|
10
|
+
// `TelemetryEvent`, present iff `status >= 400`; the consumer mirrors it into
|
|
11
|
+
// `packet.user.telemetry.errors[]` unchanged.
|
|
12
|
+
import { Results as _Results } from "@plurnk/plurnk-schemes";
|
|
13
|
+
export default class Results {
|
|
14
|
+
static isEntryResult(r) { return _Results.isEntry(r); }
|
|
15
|
+
static isProposalResult(r) { return _Results.isProposal(r); }
|
|
16
|
+
static isPassthroughResult(r) { return _Results.isPassthrough(r); }
|
|
17
|
+
// A result is an error result iff its status is in the 4xx/5xx range; the
|
|
18
|
+
// `error` envelope is expected on those and absent otherwise.
|
|
19
|
+
static isErrorStatus(status) { return _Results.isErrorStatus(status); }
|
|
20
|
+
// Build a scheme-sourced TelemetryEvent (`source: scheme:<name>`).
|
|
21
|
+
static schemeError(scheme, kind, message, position) {
|
|
22
|
+
return _Results.error(scheme, kind, message, position);
|
|
23
|
+
}
|
|
24
|
+
// Build a LogCoordinate position pointing at an action's log row.
|
|
25
|
+
static logCoordinate(coordinate, op) { return _Results.logCoordinate(coordinate, op); }
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=results.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"results.js","sourceRoot":"","sources":["../../src/core/results.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,uEAAuE;AACvE,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAC9E,iCAAiC;AACjC,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,8CAA8C;AAC9C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAQ7D,MAAM,CAAC,OAAO,OAAO,OAAO;IACxB,MAAM,CAAC,aAAa,CAAC,CAAe,IAAsB,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,MAAM,CAAC,gBAAgB,CAAC,CAAe,IAAyB,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,CAAC,mBAAmB,CAAC,CAAe,IAA4B,OAAO,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzG,0EAA0E;IAC1E,8DAA8D;IAC9D,MAAM,CAAC,aAAa,CAAC,MAAc,IAAa,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAExF,mEAAmE;IACnE,MAAM,CAAC,WAAW,CAAC,MAAc,EAAE,IAAY,EAAE,OAAuB,EAAE,QAAqC;QAC3G,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,aAAa,CAAC,UAAkB,EAAE,EAAW,IAAmB,OAAO,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;CAC1H"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-cap.d.ts","sourceRoot":"","sources":["../../src/core/run-cap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,SAAS,CAAC;AAS9C,MAAM,CAAC,OAAO,OAAO,MAAM;IACvB,OAAa,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAO9F;CACJ"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Session-tier ceiling on CONCURRENT active runs (a run with a non-terminal loop)
|
|
2
|
+
// — the fork-bomb / destabilization brake. `PLURNK_SERVICE_SESSION_RUNS_MAX_ACTIVE` is the
|
|
3
|
+
// knob; -1 / unset / invalid = no cap. Only concurrency is bounded, never lifetime:
|
|
4
|
+
// sessions persist for months, so a total-created cap would punish longevity. A
|
|
5
|
+
// spawn/fork past the ceiling fails hard (508) — no queue, no retry. Checked at the
|
|
6
|
+
// single run-creation site (Dispatcher.#handleRunCopy, which both spawns and forks); irc is
|
|
7
|
+
// exempt — it targets an existing run and creates nothing.
|
|
8
|
+
export default class RunCap {
|
|
9
|
+
static async deny(db, sessionId) {
|
|
10
|
+
const raw = process.env.PLURNK_SERVICE_SESSION_RUNS_MAX_ACTIVE;
|
|
11
|
+
const cap = raw === undefined || raw.length === 0 ? -1 : Number.parseInt(raw, 10);
|
|
12
|
+
if (!Number.isFinite(cap) || cap < 0)
|
|
13
|
+
return null; // no cap
|
|
14
|
+
const row = await db.run_count_active.get({ session_id: sessionId });
|
|
15
|
+
if ((row?.n ?? 0) >= cap)
|
|
16
|
+
return { status: 508, error: `session active-run ceiling reached (PLURNK_SERVICE_SESSION_RUNS_MAX_ACTIVE=${cap})` };
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=run-cap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-cap.js","sourceRoot":"","sources":["../../src/core/run-cap.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,2FAA2F;AAC3F,oFAAoF;AACpF,gFAAgF;AAChF,oFAAoF;AACpF,4FAA4F;AAC5F,2DAA2D;AAC3D,MAAM,CAAC,OAAO,OAAO,MAAM;IACvB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAM,EAAE,SAAiB;QACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC;QAC/D,MAAM,GAAG,GAAG,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,SAAS;QAC5D,MAAM,GAAG,GAAG,MAAO,EAAE,CAAC,gBAA+B,CAAC,GAAG,CAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG;YAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,8EAA8E,GAAG,GAAG,EAAE,CAAC;QAC9I,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
-- run:// op family — the run-table primitive spawn/irc need beyond fork.sql.
|
|
2
|
+
-- Resolve a sister run by name, WITHIN a session only (the actor boundary — a
|
|
3
|
+
-- model never reaches another session's runs, SPEC §machine-processes). Newest
|
|
4
|
+
-- wins if a name was reused. spawn reuses fork.sql's run-insert (fork_insert_run,
|
|
5
|
+
-- the identical INSERT); fork reuses Fork.fork; only by-name resolution is new.
|
|
6
|
+
|
|
7
|
+
-- PREP: run_resolve_by_name
|
|
8
|
+
SELECT id FROM runs WHERE session_id = $session_id AND name = $name
|
|
9
|
+
ORDER BY id DESC LIMIT 1;
|
|
10
|
+
|
|
11
|
+
-- PREP: run_name_by_id
|
|
12
|
+
-- A run's name from its id (§run-scheme) — the run:/// self-fold resolves the
|
|
13
|
+
-- acting run (ctx.runId) to its name to key its run-scope entries by authority.
|
|
14
|
+
SELECT name FROM runs WHERE id = $run_id;
|
|
15
|
+
|
|
16
|
+
-- PREP: run_deliverable_by_name
|
|
17
|
+
-- The newest run holding this name, with its latest loop's status + terminal message — the
|
|
18
|
+
-- deliverable a sister COLLECTS by READing run://<name> (§run-scheme-collect, the pull side of
|
|
19
|
+
-- the same deliverable the push delta carries). Terminal status → the message is the result (200)
|
|
20
|
+
-- or the abandonment reason; non-terminal → the worker hasn't delivered yet (READ steers to 202).
|
|
21
|
+
-- terminated_by names a collapse/cancel so the COLLECT renders its marker (#379).
|
|
22
|
+
SELECT r.id AS run_id, l.status, l.terminal_message, l.terminated_by
|
|
23
|
+
FROM runs r
|
|
24
|
+
JOIN loops l ON l.run_id = r.id
|
|
25
|
+
WHERE r.session_id = $session_id AND r.name = $name
|
|
26
|
+
ORDER BY r.id DESC, l.sequence DESC
|
|
27
|
+
LIMIT 1;
|
|
28
|
+
|
|
29
|
+
-- PREP: run_live_by_name
|
|
30
|
+
-- The newest run holding this name that is still LIVE (a non-terminal loop, 100/102) —
|
|
31
|
+
-- the spawn gate's collision check. A hit means the name is in use by a running sister
|
|
32
|
+
-- (refuse: 409); no hit means the name is free or held only by a terminated run (reclaim).
|
|
33
|
+
SELECT r.id FROM runs r
|
|
34
|
+
JOIN loops l ON l.run_id = r.id
|
|
35
|
+
WHERE r.session_id = $session_id AND r.name = $name AND l.status IN (100, 102)
|
|
36
|
+
ORDER BY r.id DESC LIMIT 1;
|
|
37
|
+
|
|
38
|
+
-- PREP: run_count_active
|
|
39
|
+
-- Runs in a session with a non-terminal loop (status 100 pending / 102 in-progress)
|
|
40
|
+
-- — "active" for the PLURNK_SERVICE_SESSION_RUNS_MAX_ACTIVE ceiling (run-cap.ts).
|
|
41
|
+
SELECT COUNT(DISTINCT r.id) AS n FROM runs r
|
|
42
|
+
JOIN loops l ON l.run_id = r.id
|
|
43
|
+
WHERE r.session_id = $session_id AND l.status IN (100, 102);
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Db } from "./Db.ts";
|
|
2
|
+
import type { Mimetypes } from "@plurnk/plurnk-mimetypes";
|
|
3
|
+
import type ExecutorRegistry from "./ExecutorRegistry.ts";
|
|
4
|
+
import type { StreamEventNotify, WakeRunNotify, InjectRunNotify } from "./ChannelWrite.ts";
|
|
5
|
+
import type { WriterTier } from "./types.ts";
|
|
6
|
+
import type { TelemetryEvent } from "./results.ts";
|
|
7
|
+
import type { PacketSection } from "./packet-wire.ts";
|
|
8
|
+
export type { LoopFlags, SchemeFlagAffinity, SchemeManifest, WriterTier, } from "./types.ts";
|
|
9
|
+
export { DEFAULT_LOOP_FLAGS } from "./types.ts";
|
|
10
|
+
export type SchemeReadResult = {
|
|
11
|
+
status: number;
|
|
12
|
+
content: string | null;
|
|
13
|
+
mimetype: string | null;
|
|
14
|
+
error?: string;
|
|
15
|
+
reason?: string;
|
|
16
|
+
startLine?: number | null;
|
|
17
|
+
matches?: number | null;
|
|
18
|
+
awaitRun?: string;
|
|
19
|
+
};
|
|
20
|
+
export interface PlurnkSchemeContext {
|
|
21
|
+
readonly db: Db;
|
|
22
|
+
readonly sessionId: number;
|
|
23
|
+
readonly runId: number;
|
|
24
|
+
readonly loopId: number;
|
|
25
|
+
readonly turnId: number;
|
|
26
|
+
readonly writer: WriterTier;
|
|
27
|
+
readonly signal: AbortSignal | undefined;
|
|
28
|
+
readonly streamEventNotify?: StreamEventNotify;
|
|
29
|
+
readonly wakeRunNotify?: WakeRunNotify;
|
|
30
|
+
readonly injectRun?: InjectRunNotify;
|
|
31
|
+
readonly mimetypes?: Mimetypes;
|
|
32
|
+
readonly executors?: ExecutorRegistry;
|
|
33
|
+
readonly tokenize?: (text: string) => number;
|
|
34
|
+
readonly gauge?: {
|
|
35
|
+
tokenizerId: string;
|
|
36
|
+
exact: boolean;
|
|
37
|
+
count: (text: string) => Promise<number>;
|
|
38
|
+
};
|
|
39
|
+
readonly defaultChannelFor?: (scheme: string | null) => string;
|
|
40
|
+
readonly pushTelemetry?: (event: TelemetryEvent) => void;
|
|
41
|
+
}
|
|
42
|
+
export interface PacketSectionTransformer {
|
|
43
|
+
transformSections(sections: PacketSection[]): PacketSection[] | Promise<PacketSection[]>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=scheme-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheme-types.d.ts","sourceRoot":"","sources":["../../src/core/scheme-types.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD,YAAY,EACR,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,UAAU,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKhD,MAAM,MAAM,gBAAgB,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAkBF,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAKvC,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAI/B,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAQtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAI7C,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IAInG,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;IAM/D,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC5D;AAQD,MAAM,WAAW,wBAAwB;IACrC,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CAC5F"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Per-call scheme context (DB-coupled). Framework-grade types
|
|
2
|
+
// (SchemeManifest, SchemeFlagAffinity, WriterTier, LoopFlags) re-export from
|
|
3
|
+
// the in-tree ./types.ts and ./results.ts — folded in from the former
|
|
4
|
+
// @plurnk/plurnk-schemes daughter; the uniform contract belongs in the service.
|
|
5
|
+
export { DEFAULT_LOOP_FLAGS } from "./types.js";
|
|
6
|
+
//# sourceMappingURL=scheme-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheme-types.js","sourceRoot":"","sources":["../../src/core/scheme-types.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,6EAA6E;AAC7E,sEAAsE;AACtE,gFAAgF;AAkBhF,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Db } from "./Db.ts";
|
|
2
|
+
export type ClientMdDoc = {
|
|
3
|
+
alias: string;
|
|
4
|
+
content: string;
|
|
5
|
+
};
|
|
6
|
+
export type SessionOpenContext = {
|
|
7
|
+
filesItems: number | null;
|
|
8
|
+
mdDocs: ClientMdDoc[];
|
|
9
|
+
maxCommands: number | null;
|
|
10
|
+
git: boolean | null;
|
|
11
|
+
client: string | null;
|
|
12
|
+
execs: Record<string, string> | null;
|
|
13
|
+
questions: boolean | null;
|
|
14
|
+
};
|
|
15
|
+
export default class SessionSettings {
|
|
16
|
+
static read(db: Db, sessionId: number): Promise<SessionOpenContext>;
|
|
17
|
+
static questionsEnabled(db: Db, sessionId: number): Promise<boolean>;
|
|
18
|
+
static resolveDocs(clientDocs: ReadonlyArray<ClientMdDoc>): Promise<Array<{
|
|
19
|
+
entryName: string;
|
|
20
|
+
content: string;
|
|
21
|
+
}>>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=session-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-settings.d.ts","sourceRoot":"","sources":["../../src/core/session-settings.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,SAAS,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,eAAe;IAGhC,OAAa,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAaxE;IAKD,OAAa,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGzE;IAOD,OAAa,WAAW,CAAC,UAAU,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAOvH;CACJ"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// #231 — a session's client-chosen open-context: the per-session overrides a client
|
|
2
|
+
// user legitimately sets at session.create, read at turn-0 with precedence over env.
|
|
3
|
+
// Two knobs with deliberately different compose semantics:
|
|
4
|
+
// - filesItems: REPLACE — a single scalar; the client value wins outright over
|
|
5
|
+
// PLURNK_SERVICE_FILES_ITEMS (normalization — 0=off / -1=full / N=first-N — stays in Engine).
|
|
6
|
+
// - mdDocs: UNION — the server env docs (PLURNK_SERVICE_MD_*) and the client's docs ride
|
|
7
|
+
// together; the systemwide policy doc survives unless the client shadows its alias.
|
|
8
|
+
// Storage is a JSON bag on sessions.settings (the env mdDocs live in process.env, never
|
|
9
|
+
// the DB, so the union is a TS set-merge regardless — normalizing the column buys nothing).
|
|
10
|
+
import { readFile } from "node:fs/promises";
|
|
11
|
+
import Paths from "../Paths.js";
|
|
12
|
+
export default class SessionSettings {
|
|
13
|
+
// The session's open-context bag. Absent/unset fields read as null / []. A malformed
|
|
14
|
+
// bag never reaches here — session.create validates before persisting.
|
|
15
|
+
static async read(db, sessionId) {
|
|
16
|
+
const row = await db.session_get_settings.get({ session_id: sessionId });
|
|
17
|
+
const bag = row?.settings !== undefined ? JSON.parse(row.settings) : {};
|
|
18
|
+
const filesItems = typeof bag.filesItems === "number" ? bag.filesItems : null;
|
|
19
|
+
const maxCommands = typeof bag.maxCommands === "number" ? bag.maxCommands : null;
|
|
20
|
+
const git = typeof bag.git === "boolean" ? bag.git : null;
|
|
21
|
+
const client = typeof bag.client === "string" ? bag.client : null;
|
|
22
|
+
const execs = (typeof bag.execs === "object" && bag.execs !== null && !Array.isArray(bag.execs)) ? bag.execs : null;
|
|
23
|
+
const questions = typeof bag.questions === "boolean" ? bag.questions : null;
|
|
24
|
+
const mdDocs = Array.isArray(bag.mdDocs)
|
|
25
|
+
? bag.mdDocs.filter((d) => typeof d?.alias === "string" && typeof d?.content === "string")
|
|
26
|
+
: [];
|
|
27
|
+
return { filesItems, mdDocs, maxCommands, git, client, execs, questions };
|
|
28
|
+
}
|
|
29
|
+
// §send-300-choices — the three-state cascade resolved: ALLOWED servicewide (PLURNK_QUESTIONS
|
|
30
|
+
// != "0") AND affirmatively REQUESTED by the client for this session. One predicate, shared by
|
|
31
|
+
// the dispatch gate and the teaching injection so capability and teaching can never desync.
|
|
32
|
+
static async questionsEnabled(db, sessionId) {
|
|
33
|
+
if (process.env.PLURNK_QUESTIONS === "0")
|
|
34
|
+
return false;
|
|
35
|
+
return (await SessionSettings.read(db, sessionId)).questions === true;
|
|
36
|
+
}
|
|
37
|
+
// The turn-0 reference-doc set: server env docs (PLURNK_SERVICE_MD_*, read from disk) UNION the
|
|
38
|
+
// session's client docs (content), keyed by `<alias>.md`. On alias collision the client
|
|
39
|
+
// wins — it may deliberately shadow a server doc, but by default the policy doc rides
|
|
40
|
+
// along. Missing env files are skipped (same as the env-only path before #231). The set
|
|
41
|
+
// is the single source for BOTH the loop_run materialize and the Engine turn-0 READ foist.
|
|
42
|
+
static async resolveDocs(clientDocs) {
|
|
43
|
+
const byEntry = new Map();
|
|
44
|
+
for (const { entryName, path } of Paths.docs()) {
|
|
45
|
+
try {
|
|
46
|
+
byEntry.set(entryName, await readFile(path, "utf8"));
|
|
47
|
+
}
|
|
48
|
+
catch { /* missing → skip */ }
|
|
49
|
+
}
|
|
50
|
+
for (const { alias, content } of clientDocs)
|
|
51
|
+
byEntry.set(`${alias}.md`, content); // client wins
|
|
52
|
+
return [...byEntry].map(([entryName, content]) => ({ entryName, content }));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=session-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-settings.js","sourceRoot":"","sources":["../../src/core/session-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teaching.d.ts","sourceRoot":"","sources":["../../src/core/teaching.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,aAAc,MAAM,KAAG,MAAyB,CAAC;AAM1E,eAAO,MAAM,cAAc,QAAO,WAAW,CAAC,MAAM,CACwD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// #240 — the shared teaching-line shape for the System Tools (exec tags) + System Schemes
|
|
2
|
+
// directories: a terse `* <oneliner>`, rendered IDENTICALLY for execs and schemes. The example
|
|
3
|
+
// self-documents its tag/scheme, so no service-added prefix. Reference docs are NOT linked inline
|
|
4
|
+
// (#270): they're materialized at plurnk://docs/<name>.md and discovered via the turn-1
|
|
5
|
+
// FIND(plurnk://docs/**) foist, keeping the raw packet free of doc links. `* ` bullets + bare op
|
|
6
|
+
// forms match the packet's list/op rendering (no `- `, no backticks).
|
|
7
|
+
export const teachingLine = (oneliner) => `* ${oneliner}`;
|
|
8
|
+
// #240 — PLURNK_SERVICE_DOCS_EXCLUDE: a comma list of scheme/exec names dropped from BOTH the teaching
|
|
9
|
+
// oneliner AND the materialized pull-doc, on load — the self-evident/retired names the operator
|
|
10
|
+
// wants no doc for (default `plurnk,file,exec`, set in .env.defaults). Read per-call so a process
|
|
11
|
+
// can change it; unknown names are inert (a filter, never a contract).
|
|
12
|
+
export const docsExcludeSet = () => new Set((process.env.PLURNK_SERVICE_DOCS_EXCLUDE ?? "").split(",").map((s) => s.trim()).filter(Boolean));
|
|
13
|
+
//# sourceMappingURL=teaching.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teaching.js","sourceRoot":"","sources":["../../src/core/teaching.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,+FAA+F;AAC/F,kGAAkG;AAClG,wFAAwF;AACxF,iGAAiG;AACjG,sEAAsE;AACtE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAU,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC;AAE1E,uGAAuG;AACvG,gGAAgG;AAChG,kGAAkG;AAClG,uEAAuE;AACvE,MAAM,CAAC,MAAM,cAAc,GAAG,GAAwB,EAAE,CACpD,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAQA,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
interface DigestOptions {
|
|
3
|
+
dbPath: string;
|
|
4
|
+
digestDir?: string;
|
|
5
|
+
runId?: number;
|
|
6
|
+
sessionId?: number;
|
|
7
|
+
}
|
|
8
|
+
export default class Digest {
|
|
9
|
+
#private;
|
|
10
|
+
static defaultDbPath(): string;
|
|
11
|
+
static requiem(opts: DigestOptions & {
|
|
12
|
+
signal?: AbortSignal;
|
|
13
|
+
}): Promise<{
|
|
14
|
+
path: string;
|
|
15
|
+
runs: number;
|
|
16
|
+
}>;
|
|
17
|
+
static run(opts: DigestOptions): void;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=Digest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Digest.d.ts","sourceRoot":"","sources":["../../src/digest/Digest.ts"],"names":[],"mappings":";AA0FA,UAAU,aAAa;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,OAAO,MAAM;;IA+NvB,MAAM,CAAC,aAAa,IAAI,MAAM,CAO7B;IAQD,OAAa,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAiE5G;IAED,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAyFpC;CACJ"}
|