@plurnk/plurnk-service 1.2.0 → 1.3.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 +7 -5
- package/README.md +16 -13
- package/SPEC.md +72 -130
- package/dist/build-info.d.ts +11 -0
- package/dist/build-info.d.ts.map +1 -0
- package/dist/build-info.js +45 -0
- package/dist/build-info.js.map +1 -0
- package/dist/build-info.json +1 -0
- package/dist/content/index.js +1 -1
- package/dist/content/index.js.map +1 -1
- package/dist/content/line-marker.js +1 -1
- package/dist/content/line-marker.js.map +1 -1
- package/dist/content/matcher.js +4 -4
- package/dist/content/matcher.js.map +1 -1
- package/dist/content/mimetype-binary.js +1 -1
- package/dist/content/mimetype-binary.js.map +1 -1
- package/dist/content/path-mimetype.js +1 -1
- package/dist/content/path-mimetype.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +2 -1
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +6 -19
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +2 -7
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +92 -23
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/Engine.d.ts +9 -0
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +126 -30
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +8 -6
- package/dist/core/PacketBuilder.js +1 -1
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/PluginLoader.d.ts +1 -0
- package/dist/core/PluginLoader.d.ts.map +1 -1
- package/dist/core/PluginLoader.js +22 -11
- package/dist/core/PluginLoader.js.map +1 -1
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +11 -6
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ProviderInstantiate.d.ts +1 -0
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +8 -0
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/SchemeRegistry.d.ts +3 -1
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +18 -11
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/caps/DbEntryCaps.d.ts +6 -5
- package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
- package/dist/core/caps/DbEntryCaps.js +36 -14
- package/dist/core/caps/DbEntryCaps.js.map +1 -1
- package/dist/core/caps/DbProjectionCaps.d.ts +11 -0
- package/dist/core/caps/DbProjectionCaps.d.ts.map +1 -0
- package/dist/core/caps/DbProjectionCaps.js +19 -0
- package/dist/core/caps/DbProjectionCaps.js.map +1 -0
- package/dist/core/caps/DbSubscriptionCaps.d.ts +3 -1
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.js +12 -3
- package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts +18 -4
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +26 -12
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
- package/dist/core/fork.sql +4 -4
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +23 -0
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +3 -2
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/path-decode.d.ts +1 -0
- package/dist/core/path-decode.d.ts.map +1 -1
- package/dist/core/path-decode.js +1 -0
- package/dist/core/path-decode.js.map +1 -1
- package/dist/core/plurnk-uri.d.ts.map +1 -1
- package/dist/core/plurnk-uri.js +5 -3
- package/dist/core/plurnk-uri.js.map +1 -1
- package/dist/core/resolveForLoop.js +1 -1
- package/dist/core/resolveForLoop.js.map +1 -1
- package/dist/core/results.js +2 -2
- package/dist/core/results.js.map +1 -1
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/scheme-types.js +1 -1
- package/dist/core/scheme-types.js.map +1 -1
- package/dist/core/search-gate.js +2 -2
- package/dist/core/search-gate.js.map +1 -1
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +79 -8
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/digest.sql +1 -1
- package/dist/schemes/Exec.d.ts +2 -4
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +41 -11
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +1 -0
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +20 -0
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Prompt.d.ts +6 -7
- package/dist/schemes/Prompt.d.ts.map +1 -1
- package/dist/schemes/Prompt.js +4 -5
- package/dist/schemes/Prompt.js.map +1 -1
- package/dist/schemes/Skill.d.ts +7 -9
- package/dist/schemes/Skill.d.ts.map +1 -1
- package/dist/schemes/Skill.js +5 -7
- package/dist/schemes/Skill.js.map +1 -1
- package/dist/schemes/Worker.d.ts.map +1 -1
- package/dist/schemes/Worker.js +1 -0
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-chunk.d.ts +4 -1
- package/dist/schemes/_entry-chunk.d.ts.map +1 -1
- package/dist/schemes/_entry-chunk.js +76 -22
- package/dist/schemes/_entry-chunk.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +0 -10
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +9 -8
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-find.sql +1 -1
- package/dist/schemes/_entry-graph.d.ts +1 -1
- package/dist/schemes/_entry-graph.d.ts.map +1 -1
- package/dist/schemes/_entry-graph.js +13 -12
- package/dist/schemes/_entry-graph.js.map +1 -1
- package/dist/schemes/_entry-graph.sql +49 -13
- package/dist/schemes/_entry-manifest.d.ts +5 -2
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +135 -123
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +0 -4
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-semantic.d.ts +12 -5
- package/dist/schemes/_entry-semantic.d.ts.map +1 -1
- package/dist/schemes/_entry-semantic.js +57 -70
- package/dist/schemes/_entry-semantic.js.map +1 -1
- package/dist/schemes/_entry-semantic.sql +22 -53
- package/dist/server/Daemon.d.ts +4 -3
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +109 -44
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/auto.d.ts +6 -0
- package/dist/server/auto.d.ts.map +1 -0
- package/dist/server/{yolo.js → auto.js} +15 -16
- package/dist/server/auto.js.map +1 -0
- package/dist/server/client-input.d.ts +1 -1
- package/dist/server/client-input.d.ts.map +1 -1
- package/dist/server/client-input.js +11 -4
- package/dist/server/client-input.js.map +1 -1
- package/dist/server/drain.sql +6 -3
- package/dist/server/loopDocs.d.ts.map +1 -1
- package/dist/server/loopDocs.js +2 -2
- package/dist/server/loopDocs.js.map +1 -1
- package/dist/server/noProposals.js +5 -5
- package/dist/server/noProposals.js.map +1 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +18 -5
- package/dist/service.js.map +1 -1
- package/migrations/0000-00-00.01_schema.sql +55 -48
- package/migrations/0004_loop-provider.sql +3 -0
- package/migrations/0005_subscription-published-channel.sql +3 -0
- package/package.json +27 -22
- package/dist/server/yolo.d.ts +0 -6
- package/dist/server/yolo.d.ts.map +0 -1
- package/dist/server/yolo.js.map +0 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface BuildInfo {
|
|
2
|
+
package: string;
|
|
3
|
+
version: string;
|
|
4
|
+
revision?: string;
|
|
5
|
+
dirty?: boolean;
|
|
6
|
+
artifact: "source" | "dist";
|
|
7
|
+
path: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const getBuildInfo: () => Promise<BuildInfo>;
|
|
10
|
+
export declare const formatBuildInfo: (info: BuildInfo) => string;
|
|
11
|
+
//# sourceMappingURL=build-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-info.d.ts","sourceRoot":"","sources":["../src/build-info.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;CAChB;AASD,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,SAAS,CAiCtD,CAAC;AAEF,eAAO,MAAM,eAAe,SAAU,SAAS,KAAG,MAKjD,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
const codeDir = dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
const packageRoot = resolve(codeDir, "..");
|
|
7
|
+
const artifact = import.meta.url.endsWith(".ts") ? "source" : "dist";
|
|
8
|
+
const readJson = async (path) => JSON.parse(await readFile(path, "utf8"));
|
|
9
|
+
export const getBuildInfo = async () => {
|
|
10
|
+
const pkg = await readJson(resolve(packageRoot, "package.json"));
|
|
11
|
+
if (artifact === "dist") {
|
|
12
|
+
try {
|
|
13
|
+
const built = await readJson(resolve(codeDir, "build-info.json"));
|
|
14
|
+
return { ...built, artifact, path: packageRoot };
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (error.code !== "ENOENT")
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const git = (...args) => execFileSync("git", ["-C", packageRoot, ...args], {
|
|
23
|
+
encoding: "utf8",
|
|
24
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
25
|
+
}).trim();
|
|
26
|
+
return {
|
|
27
|
+
package: pkg.name,
|
|
28
|
+
version: pkg.version,
|
|
29
|
+
revision: git("rev-parse", "HEAD"),
|
|
30
|
+
dirty: git("status", "--porcelain").length > 0,
|
|
31
|
+
artifact,
|
|
32
|
+
path: packageRoot,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return { package: pkg.name, version: pkg.version, artifact, path: packageRoot };
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
export const formatBuildInfo = (info) => {
|
|
40
|
+
const revision = info.revision === undefined
|
|
41
|
+
? "unknown"
|
|
42
|
+
: `${info.revision.slice(0, 12)}${info.dirty ? "-dirty" : ""}`;
|
|
43
|
+
return `${info.package}@${info.version} ${revision} ${info.artifact} ${info.path}`;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=build-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-info.js","sourceRoot":"","sources":["../src/build-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAWzC,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3C,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AAErE,MAAM,QAAQ,GAAG,KAAK,EAAK,IAAY,EAAc,EAAE,CACnD,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAM,CAAC;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,IAAwB,EAAE;IACvD,MAAM,GAAG,GAAG,MAAM,QAAQ,CACtB,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CACvC,CAAC;IAEF,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CACxB,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CACtC,CAAC;YACF,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QACxE,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,GAAG,IAAc,EAAU,EAAE,CACtC,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,EAAE;YAC9C,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACtC,CAAC,CAAC,IAAI,EAAE,CAAC;QACd,OAAO;YACH,OAAO,EAAE,GAAG,CAAC,IAAI;YACjB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC;YAClC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC;YAC9C,QAAQ;YACR,IAAI,EAAE,WAAW;SACpB,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACpF,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAe,EAAU,EAAE;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS;QACxC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACnE,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AACvF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"package":"@plurnk/plurnk-service","version":"1.3.0","revision":"c72cbac781f1b6b199e4da0f0ea5ca5577ad2675","dirty":false}
|
package/dist/content/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Transport-agnostic content primitives — matching, <L> slicing, mimetype
|
|
2
2
|
// classification, path→mimetype. Uniform across every scheme and mimetype;
|
|
3
|
-
// folded in from the former @plurnk/plurnk-schemes
|
|
3
|
+
// folded in from the former @plurnk/plurnk-schemes plugin, which was
|
|
4
4
|
// misnamed: this is service-level content logic, not protocol-specific.
|
|
5
5
|
export { default as MimetypeBinary } from "./mimetype-binary.js";
|
|
6
6
|
export { default as LineMarkerOps } from "./line-marker.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,qEAAqE;AACrE,wEAAwE;AAExE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// `<L>` line-marker slicing + structural edits — single source of truth is
|
|
2
|
-
// @plurnk/plurnk-schemes (keystone PR-1). Local OO facade over the
|
|
2
|
+
// @plurnk/plurnk-schemes (keystone PR-1). Local OO facade over the plugin's
|
|
3
3
|
// functions; call sites stay `LineMarkerOps.sliceLines(...)`. Types re-exported.
|
|
4
4
|
//
|
|
5
5
|
// `<L>` semantics (plurnk.md §`<L>`): <N> position, <N,M> range, <0> prepend
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line-marker.js","sourceRoot":"","sources":["../../src/content/line-marker.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"line-marker.js","sourceRoot":"","sources":["../../src/content/line-marker.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,iFAAiF;AACjF,EAAE;AACF,6EAA6E;AAC7E,wDAAwD;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAMhD,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,MAAM,CAAC,UAAU,CAAC,OAAe,EAAE,MAAkB,IAAiB,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7G,MAAM,CAAC,cAAc,CAAC,OAAe,EAAE,MAAkB,IAAqB,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACzH,MAAM,CAAC,iBAAiB,CAAC,OAAe,EAAE,MAAkB,EAAE,IAAY,IAAgB,OAAO,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mHAAmH;IAClQ,MAAM,CAAC,aAAa,CAAC,OAAe,EAAE,MAAkB,IAAiB,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACnH,MAAM,CAAC,mBAAmB,CAAC,OAAe,EAAE,MAAkB,EAAE,IAAY,IAAgB,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAElJ,uFAAuF;IACvF,4FAA4F;IAC5F,4FAA4F;IAC5F,MAAM,CAAC,SAAS,CAAC,MAAkB;QAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9F,CAAC;CACJ"}
|
package/dist/content/matcher.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
// Body-matcher filtering. The mimetypes
|
|
1
|
+
// Body-matcher filtering. The mimetypes plugin owns dialect dispatch, projection, AND
|
|
2
2
|
// source-line provenance: we hand it the matcher the GRAMMAR already parsed (as a
|
|
3
3
|
// ParsedBodyMatcher — no second parser, mimetypes#42) plus the content, and it returns
|
|
4
4
|
// QueryMatch[] with each hit's source span(s). READ returns the LINE at each match
|
|
5
5
|
// (plurnk.md:31) — a matcher SELECTS, it never extracts a value. We never reach into the
|
|
6
|
-
// internal deepJson/deepXml projections; that's the
|
|
6
|
+
// internal deepJson/deepXml projections; that's the plugin's layer.
|
|
7
7
|
//
|
|
8
8
|
// Status: 200 = matches; 204 = matcher applied, zero results; 400 = malformed matcher
|
|
9
9
|
// expression; 203 = source unparseable for its mimetype → raw bytes as text so the model
|
|
@@ -16,7 +16,7 @@ export default class Matcher {
|
|
|
16
16
|
}
|
|
17
17
|
// READ returns LINES of content (plurnk.md:31): a matcher SELECTS, READ delivers the
|
|
18
18
|
// source line(s) at each match — not the extracted value. `m.lines` is each hit's source
|
|
19
|
-
// span(s), uniform across dialects (the
|
|
19
|
+
// span(s), uniform across dialects (the plugin self-provides them). One source-line
|
|
20
20
|
// prefix `N:` (plurnk.md:32), deduped by source line; baseLine shifts slice-relative
|
|
21
21
|
// spans back to source coordinates. A hit with no span (e.g. an xpath computed scalar —
|
|
22
22
|
// count()/sum(), which has no source node) falls back to the matched value.
|
|
@@ -62,7 +62,7 @@ export default class Matcher {
|
|
|
62
62
|
// user error — fail hard rather than silently mis-handle.
|
|
63
63
|
if (body.dialect === "semantic" || body.dialect === "graph")
|
|
64
64
|
throw new Error(`matchAgainstContent is content-only; ${body.dialect} must resolve through FIND`);
|
|
65
|
-
// Hand the
|
|
65
|
+
// Hand the plugin the matcher the GRAMMAR parsed — no second parser (mimetypes#42).
|
|
66
66
|
const parsedMatcher = body.dialect === "regex"
|
|
67
67
|
? { dialect: "regex", pattern: body.pattern, flags: body.flags }
|
|
68
68
|
: { dialect: body.dialect, pattern: body.raw };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/content/matcher.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/content/matcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Mimetype classifiers used at op-handler boundaries — single source of truth
|
|
2
2
|
// is @plurnk/plurnk-schemes (keystone PR-1). Local OO facade over the
|
|
3
|
-
//
|
|
3
|
+
// plugin's functions (mandate: static-method class); call sites stay
|
|
4
4
|
// `MimetypeBinary.isBinaryMimetype(...)`.
|
|
5
5
|
//
|
|
6
6
|
// isBinaryMimetype — enforces 415 on binary entries (SPEC §op-invariants)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mimetype-binary.js","sourceRoot":"","sources":["../../src/content/mimetype-binary.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,
|
|
1
|
+
{"version":3,"file":"mimetype-binary.js","sourceRoot":"","sources":["../../src/content/mimetype-binary.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,qEAAqE;AACrE,0CAA0C;AAC1C,EAAE;AACF,kFAAkF;AAClF,4EAA4E;AAC5E,2EAA2E;AAC3E,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,IAAI,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEjH,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,uBAAuB,GAAG,wBAAwB,CAAC;IAC1D,MAAM,CAAC,gBAAgB,CAAC,QAAgB,IAAa,OAAO,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpG,MAAM,CAAC,cAAc,CAAC,QAAgB,IAAa,OAAO,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,CAAC,uBAAuB,CAAC,QAAgB,IAAa,OAAO,kBAAkB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClH,MAAM,CAAC,yBAAyB,CAAC,QAAmC,IAAY,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,wFAAwF;CACpO"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Path-extension mimetype resolver for entry schemes — single source of truth
|
|
2
2
|
// is @plurnk/plurnk-schemes (keystone PR-1). Local OO facade over the
|
|
3
|
-
//
|
|
3
|
+
// plugin's function; call sites stay `PathMimetype.resolveEntryMimetype(...)`.
|
|
4
4
|
//
|
|
5
5
|
// A pathname's extension drives the effective mimetype (§ext-mimetype-extension-mimetype; via the sibling
|
|
6
6
|
// Mimetypes detect service); the scheme manifest's channel default is the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-mimetype.js","sourceRoot":"","sources":["../../src/content/path-mimetype.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE
|
|
1
|
+
{"version":3,"file":"path-mimetype.js","sourceRoot":"","sources":["../../src/content/path-mimetype.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,+EAA+E;AAC/E,EAAE;AACF,0GAA0G;AAC1G,0EAA0E;AAC1E,iEAAiE;AACjE,uDAAuD;AACvD,OAAO,EAAE,YAAY,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvE,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,MAAM,CAAC,oBAAoB,CAAC,QAAgB,EAAE,aAAqB,EAAE,SAAgC;QACjG,OAAO,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IACrE,CAAC;CACJ"}
|
|
@@ -64,13 +64,14 @@ export default class ChannelWrite {
|
|
|
64
64
|
notify?: StreamEventNotify;
|
|
65
65
|
coordinate?: StreamCoordinate;
|
|
66
66
|
}): Promise<void>;
|
|
67
|
-
static openSubscription(db: Db, { workerId, entryId, scheme, handle, pollSeconds, turnScoped }: {
|
|
67
|
+
static openSubscription(db: Db, { workerId, entryId, scheme, handle, pollSeconds, turnScoped, publishedChannel }: {
|
|
68
68
|
workerId: number;
|
|
69
69
|
entryId: number;
|
|
70
70
|
scheme: string;
|
|
71
71
|
handle: string;
|
|
72
72
|
pollSeconds?: number | null;
|
|
73
73
|
turnScoped?: boolean;
|
|
74
|
+
publishedChannel?: string | null;
|
|
74
75
|
}): Promise<number>;
|
|
75
76
|
static closeSubscription(db: Db, { subscriptionId, status }: {
|
|
76
77
|
subscriptionId: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelWrite.d.ts","sourceRoot":"","sources":["../../src/core/ChannelWrite.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ChannelWrite.d.ts","sourceRoot":"","sources":["../../src/core/ChannelWrite.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,23 +48,6 @@ export default class ChannelWrite {
|
|
|
48
48
|
const result = await ChannelWrite.#stateStmt(db).run({ state, entry_id: entryId, channel });
|
|
49
49
|
if (result.changes === 0)
|
|
50
50
|
return;
|
|
51
|
-
// §semantic-fts-at-write — a stream's accumulated BODY content becomes keyword-searchable
|
|
52
|
-
// the moment the channel settles (closed/errored), not a pump-pass later. Body only: the
|
|
53
|
-
// FTS row is per-ENTRY (rowid = entry id) and the fusion's keyword half is the body's.
|
|
54
|
-
if ((state === "closed" || state === "errored") && channel === "body") {
|
|
55
|
-
const row = await db.channel_meta.get({ entry_id: entryId, channel });
|
|
56
|
-
if (row !== undefined) {
|
|
57
|
-
const body = await db.read_channel_content.get({ entry_id: entryId, channel });
|
|
58
|
-
if (body !== undefined) {
|
|
59
|
-
await db.fts_delete.run({ entry_id: entryId });
|
|
60
|
-
// §membership-binary-sniff — the same NUL guard as member ingest: a streamed
|
|
61
|
-
// binary (an http READ of an image) must not enter the keyword index.
|
|
62
|
-
const head = body.content.slice(0, 8192);
|
|
63
|
-
if (body.content.length > 0 && !head.includes("\u0000"))
|
|
64
|
-
await db.fts_insert.run({ entry_id: entryId, content: body.content });
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
51
|
if (notify === undefined)
|
|
69
52
|
return;
|
|
70
53
|
const meta = await ChannelWrite.#channelMeta(db).get({ entry_id: entryId, channel });
|
|
@@ -74,8 +57,12 @@ export default class ChannelWrite {
|
|
|
74
57
|
}
|
|
75
58
|
// The subscription registry — open/find/close — is how a stream's cancellation
|
|
76
59
|
// (SEND[499] / KILL) routes to the right live subscription. §subscriptions-subscription-registry-routes-cancellation
|
|
77
|
-
static async openSubscription(db, { workerId, entryId, scheme, handle, pollSeconds, turnScoped }) {
|
|
78
|
-
const row = await ChannelWrite.#openSubStmt(db).get({
|
|
60
|
+
static async openSubscription(db, { workerId, entryId, scheme, handle, pollSeconds, turnScoped, publishedChannel }) {
|
|
61
|
+
const row = await ChannelWrite.#openSubStmt(db).get({
|
|
62
|
+
worker_id: workerId, entry_id: entryId, scheme, handle,
|
|
63
|
+
poll_seconds: pollSeconds ?? null, turn_scoped: turnScoped ? 1 : 0,
|
|
64
|
+
published_channel: publishedChannel ?? null,
|
|
65
|
+
});
|
|
79
66
|
if (row === undefined)
|
|
80
67
|
throw new Error("openSubscription: INSERT ... RETURNING produced no row");
|
|
81
68
|
return row.id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelWrite.js","sourceRoot":"","sources":["../../src/core/ChannelWrite.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ChannelWrite.js","sourceRoot":"","sources":["../../src/core/ChannelWrite.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,8 +34,8 @@ WHERE entry_id = $entry_id AND name = $channel;
|
|
|
34
34
|
-- PREP: open_subscription
|
|
35
35
|
-- turn_scoped COALESCEs to 0 so a caller binding the raw prep without it (an unbounded stream) is
|
|
36
36
|
-- a normal, non-turn-scoped subscription — the column is NOT NULL, so a missing bind would error.
|
|
37
|
-
INSERT INTO subscriptions (worker_id, entry_id, scheme, handle, poll_seconds, turn_scoped)
|
|
38
|
-
VALUES ($worker_id, $entry_id, $scheme, $handle, $poll_seconds, COALESCE($turn_scoped, 0))
|
|
37
|
+
INSERT INTO subscriptions (worker_id, entry_id, scheme, handle, poll_seconds, turn_scoped, published_channel)
|
|
38
|
+
VALUES ($worker_id, $entry_id, $scheme, $handle, $poll_seconds, COALESCE($turn_scoped, 0), $published_channel)
|
|
39
39
|
RETURNING id;
|
|
40
40
|
|
|
41
41
|
-- PREP: close_subscription
|
|
@@ -78,8 +78,3 @@ WHERE e.workspace_id = $workspace_id
|
|
|
78
78
|
AND s.closed_at IS NOT NULL
|
|
79
79
|
ORDER BY s.closed_at DESC
|
|
80
80
|
LIMIT 1;
|
|
81
|
-
|
|
82
|
-
-- PREP: read_channel_content
|
|
83
|
-
-- §semantic-fts-at-write — a settled stream's accumulated body, read once for the
|
|
84
|
-
-- write-time FTS index.
|
|
85
|
-
SELECT content FROM entry_channels WHERE entry_id = $entry_id AND name = $channel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dispatcher.d.ts","sourceRoot":"","sources":["../../src/core/Dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAmD,MAAM,wBAAwB,CAAC;AAC/G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,SAAS,CAAC;AAE9C,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAC;AAQ5D,OAAO,KAAK,EAAkB,UAAU,EAAkC,MAAM,mBAAmB,CAAC;AAEpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Dispatcher.d.ts","sourceRoot":"","sources":["../../src/core/Dispatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/core/Dispatcher.js
CHANGED
|
@@ -10,6 +10,8 @@ import { DEFAULT_LOOP_FLAGS } from "./scheme-types.js";
|
|
|
10
10
|
import { LineMarkerOps, MimetypeBinary } from "../content/index.js";
|
|
11
11
|
import SchemeCtxImpl from "./caps/SchemeCtxImpl.js";
|
|
12
12
|
import EntryCrud from "../schemes/_entry-crud.js";
|
|
13
|
+
import EntryFind from "../schemes/_entry-find.js";
|
|
14
|
+
import EntryOps from "../schemes/_entry-ops.js";
|
|
13
15
|
import WorkspaceSettings from "./workspace-settings.js";
|
|
14
16
|
// SPEC §scheme-surface: writer must be in target scheme's manifest.writableBy.
|
|
15
17
|
// OPEN/FOLD/READ/FIND are not gated — they curate the log or read, never mutating an entry.
|
|
@@ -93,7 +95,7 @@ class Dispatcher {
|
|
|
93
95
|
if (denial !== null) {
|
|
94
96
|
result = denial;
|
|
95
97
|
}
|
|
96
|
-
else if (
|
|
98
|
+
else if (this.#readFansOut(statement)) {
|
|
97
99
|
// READ honors FIND: a glob/folder scope or a matcher fans out to one log row per MATCH
|
|
98
100
|
// (its own writeLogs), returning early. A READ never proposes, so it bypasses the
|
|
99
101
|
// single-row path below. A bare entry, body-less, falls through to the direct read. #286
|
|
@@ -166,7 +168,7 @@ class Dispatcher {
|
|
|
166
168
|
// speech, not a proposal — #isProposal, #255), the entry is written
|
|
167
169
|
// state='proposed'; dispatch then PAUSES on a per-entry waiter until
|
|
168
170
|
// resolution arrives via Engine.resolveProposal (from the loop/resolve RPC,
|
|
169
|
-
//
|
|
171
|
+
// auto listener, or timeout). The post-resolution status replaces 202 in the
|
|
170
172
|
// result the caller sees, so runTurn never branches on a pending state.
|
|
171
173
|
if (_a.#isProposal(statement, result)) {
|
|
172
174
|
// Effect-gated auto-run (read/pure runtimes, plurnk-service#182):
|
|
@@ -183,13 +185,13 @@ class Dispatcher {
|
|
|
183
185
|
// and waiter-registration would open a race window.
|
|
184
186
|
const resolutionPromise = this.#proposals.awaitResolution(logEntryId);
|
|
185
187
|
// Notify external listeners (Daemon broadcasts loop/proposal;
|
|
186
|
-
//
|
|
188
|
+
// auto listener auto-resolves) BEFORE awaiting — they may
|
|
187
189
|
// resolve synchronously inside their handlers.
|
|
188
190
|
const target = this.#extractTarget(statement.target);
|
|
189
191
|
await this.#canonColumns(target, workspaceId); // {§fs-answer-in-canon} — compare in the same canon the rows store
|
|
190
|
-
const flags = await this.#loadLoopFlags(loopId); // the
|
|
192
|
+
const flags = await this.#loadLoopFlags(loopId); // the proposal carries loop authority — §proposal-ownership-notification
|
|
191
193
|
// #note10 — if the target diverged on disk this turn, the model's EDIT is based
|
|
192
|
-
// on a stale read; flag it so a
|
|
194
|
+
// on a stale read; flag it so a auto resolution rejects instead of clobbering.
|
|
193
195
|
const diverged = await this.#db.engine_target_diverged_this_turn.get({ worker_id: workerId, turn_id: turnId, scheme: target.scheme, pathname: target.pathname });
|
|
194
196
|
const event = {
|
|
195
197
|
logEntryId, workspaceId, workerId, loopId, turnId,
|
|
@@ -263,7 +265,7 @@ class Dispatcher {
|
|
|
263
265
|
// Loads loops.flags (json column) and merges over DEFAULT_LOOP_FLAGS so
|
|
264
266
|
// missing keys read as their documented defaults. Single read site —
|
|
265
267
|
// ProposalPendingEvent.flags is constructed from this, and listeners
|
|
266
|
-
// (Daemon broadcast,
|
|
268
|
+
// (Daemon broadcast, loop auto) share the result.
|
|
267
269
|
async #loadLoopFlags(loopId) {
|
|
268
270
|
const row = await this.#db.engine_get_loop_flags.get({ loop_id: loopId });
|
|
269
271
|
if (row === undefined)
|
|
@@ -320,7 +322,7 @@ class Dispatcher {
|
|
|
320
322
|
// §search-gate (#406, owner ruling) — search runtimes only; everything else dispatches
|
|
321
323
|
// untouched. A DUPLICATE (same runtime+command this loop) STRIKES AND SERVES: 409 (the
|
|
322
324
|
// strike rail counts the turn failure; the failed-ops gate holds the terminal a turn)
|
|
323
|
-
// carrying the prior
|
|
325
|
+
// carrying the prior ranked digest re-read live — the model sees its results again, the
|
|
324
326
|
// engine never re-fetches, no provenance prose. The per-turn CAP is flood control: 429.
|
|
325
327
|
async #gatedExec(statement, ctx, loopId, turnId) {
|
|
326
328
|
const runtime = ("signal" in statement && typeof statement.signal === "string" && statement.signal.length > 0) ? statement.signal : "sh";
|
|
@@ -330,7 +332,7 @@ class Dispatcher {
|
|
|
330
332
|
return { status: 429, error: `Per-turn search limit reached (${verdict.cap}).` };
|
|
331
333
|
}
|
|
332
334
|
if (verdict.verdict === "duplicate") {
|
|
333
|
-
// {§stream-owner-scoped} — the prior
|
|
335
|
+
// {§stream-owner-scoped} — the prior ranked digest is the CALLER's own stream entry.
|
|
334
336
|
const prior = await EntryCrud.readEntry(verdict.priorPathname, ctx, runtime, ctx.workerId);
|
|
335
337
|
const raw = prior.entry?.channels["#results"]?.content ?? "";
|
|
336
338
|
let results = raw;
|
|
@@ -365,7 +367,7 @@ class Dispatcher {
|
|
|
365
367
|
if (statement.op === "SEND" && statement.target === null)
|
|
366
368
|
return null;
|
|
367
369
|
const flags = await this.#loadLoopFlags(loopId);
|
|
368
|
-
// Fast path: default flags gate nothing. (
|
|
370
|
+
// Fast path: default flags gate nothing. (auto never gates.)
|
|
369
371
|
if (!flags.noWeb && !flags.noInteraction && flags.mode === "act")
|
|
370
372
|
return null;
|
|
371
373
|
// §mode-ask-read-only — the ancient contract: an ask-mode loop NEVER changes the world. The
|
|
@@ -449,7 +451,7 @@ class Dispatcher {
|
|
|
449
451
|
return denied;
|
|
450
452
|
const prompt = typeof statement.body === "string" ? statement.body : "";
|
|
451
453
|
// §worker-delegation-inherits-flags — authority flows down the delegation edge: the child's live
|
|
452
|
-
// loop runs with ITS DELEGATOR'S flags. A flagless (non-
|
|
454
|
+
// loop runs with ITS DELEGATOR'S flags. A flagless (non-auto) child's every side-effecting op
|
|
453
455
|
// proposes into a resolver-less void — 300s auto-cancel per attempt was the fan-out wedge.
|
|
454
456
|
const flags = await this.#loadLoopFlags(ctx.loopId);
|
|
455
457
|
// A name is frozen per worker but reclaimable across time (§machine-processes-worker-origin): a LIVE
|
|
@@ -599,14 +601,17 @@ class Dispatcher {
|
|
|
599
601
|
// A READ fans out (honors FIND) when it resolves to more than the single exact entry: a glob
|
|
600
602
|
// or folder scope, OR a matcher (which selects per-match within whatever the target resolved).
|
|
601
603
|
// A bare entry, body-less, is the one direct read. #286
|
|
602
|
-
|
|
604
|
+
#readFansOut(statement) {
|
|
603
605
|
if (statement.op !== "READ")
|
|
604
606
|
return false;
|
|
605
607
|
if ("body" in statement && statement.body !== null)
|
|
606
608
|
return true; // a matcher → per-match fan-out
|
|
607
609
|
const t = statement.target;
|
|
608
610
|
const p = t === null ? "" : (t.kind === "url" ? t.pathname : t.raw);
|
|
609
|
-
|
|
611
|
+
if (p.includes("*"))
|
|
612
|
+
return true;
|
|
613
|
+
const schemeName = schemeNameOf(t);
|
|
614
|
+
return p.endsWith("/") && schemeName !== null && this.#schemes.manifestFor(schemeName)?.folderScopes === true;
|
|
610
615
|
}
|
|
611
616
|
// Clone the READ onto one concrete match — the FIND already matched, so the per-match READ
|
|
612
617
|
// delivers content at the span: strip the body (no re-match) and set <L> to the span. A null
|
|
@@ -619,11 +624,69 @@ class Dispatcher {
|
|
|
619
624
|
const lineMarker = span !== null ? { marks: [span.lineStart, span.lineEnd] } : null;
|
|
620
625
|
return { ...statement, target: target, lineMarker, body: null };
|
|
621
626
|
}
|
|
627
|
+
#standardEntryManifest(schemeName, statement) {
|
|
628
|
+
const handler = this.#schemes.get(schemeName);
|
|
629
|
+
if (typeof handler?.find === "function")
|
|
630
|
+
return null;
|
|
631
|
+
const target = statement.target;
|
|
632
|
+
if (target === null || target.kind !== "url" || target.scheme === null)
|
|
633
|
+
return null;
|
|
634
|
+
const manifest = this.#schemes.manifestFor(schemeName);
|
|
635
|
+
return manifest === undefined ? null : { ...manifest, name: target.scheme };
|
|
636
|
+
}
|
|
637
|
+
static #foldStoredEntryAuthority(statement) {
|
|
638
|
+
const target = statement.target;
|
|
639
|
+
if (target === null || target.kind !== "url")
|
|
640
|
+
return statement;
|
|
641
|
+
const pathname = foldAuthorityIntoPath(target.hostname, target.pathname);
|
|
642
|
+
return {
|
|
643
|
+
...statement,
|
|
644
|
+
target: { ...target, hostname: null, pathname, raw: `${target.scheme}://${pathname}` },
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
static #storedEntryMatchRead(statement, pathname, span, storage) {
|
|
648
|
+
const target = statement.target;
|
|
649
|
+
if (target === null || target.kind !== "url")
|
|
650
|
+
return _a.#retargetRead(statement, pathname, span);
|
|
651
|
+
const hostPrefix = target.hostname === null ? null : `/${target.hostname}`;
|
|
652
|
+
const displayPath = hostPrefix !== null && pathname.startsWith(`${hostPrefix}/`)
|
|
653
|
+
? pathname.slice(hostPrefix.length)
|
|
654
|
+
: pathname;
|
|
655
|
+
const lineMarker = span === null ? null : { marks: [span.lineStart, span.lineEnd] };
|
|
656
|
+
return {
|
|
657
|
+
...statement,
|
|
658
|
+
target: storage
|
|
659
|
+
? { ...target, hostname: null, pathname, raw: `${target.scheme}://${pathname}` }
|
|
660
|
+
: { ...target, pathname: displayPath, raw: `${target.scheme}://${target.hostname ?? ""}${displayPath}` },
|
|
661
|
+
lineMarker,
|
|
662
|
+
body: null,
|
|
663
|
+
};
|
|
664
|
+
}
|
|
622
665
|
async #handleReadFanout(statement, ctx, ids) {
|
|
623
666
|
const { workerId, loopId, turnId, sequence, origin, onDispatch } = ids;
|
|
624
667
|
const schemeName = schemeNameOf(statement.target);
|
|
625
|
-
const
|
|
668
|
+
const findStatement = { ...statement, op: "FIND" };
|
|
669
|
+
const standardEntryManifest = schemeName === null ? null : this.#standardEntryManifest(schemeName, statement);
|
|
670
|
+
const found = standardEntryManifest === null
|
|
671
|
+
? await this.#run(schemeName, findStatement, ctx)
|
|
672
|
+
: await EntryFind.findWorkspaceEntries(_a.#foldStoredEntryAuthority(findStatement), ctx, standardEntryManifest);
|
|
626
673
|
const matches = found.matches ?? [];
|
|
674
|
+
const overflow = typeof found.overflow === "number" ? found.overflow : null;
|
|
675
|
+
// §find-count-not-contents applies to WORK as well as rendering. A READ
|
|
676
|
+
// over an over-budget selection writes the bounded FIND summary plus one
|
|
677
|
+
// loud refusal; it never silently truncates and never materializes a
|
|
678
|
+
// hidden prefix/suffix of the set.
|
|
679
|
+
if (overflow !== null) {
|
|
680
|
+
const findRowId = await this.#writeLog({ statement: { ...statement, op: "FIND" }, result: found, workspaceId: ctx.workspaceId, workerId, loopId, turnId, sequence, origin });
|
|
681
|
+
onDispatch?.(findRowId);
|
|
682
|
+
const result = {
|
|
683
|
+
status: 413,
|
|
684
|
+
error: `${overflow} matches exceed the READ materialization budget — narrow the target or matcher.`,
|
|
685
|
+
};
|
|
686
|
+
const readRowId = await this.#writeLog({ statement, result, workspaceId: ctx.workspaceId, workerId, loopId, turnId, sequence: sequence + 1, origin });
|
|
687
|
+
onDispatch?.(readRowId);
|
|
688
|
+
return { ...result, rowsWritten: 2 };
|
|
689
|
+
}
|
|
627
690
|
// Find-less scheme, a matcher/scope error, or zero matches → a single row carrying the
|
|
628
691
|
// status, exactly like a non-fanned READ. The model sees the empty/failed result, not silence.
|
|
629
692
|
if (found.status !== 200 || matches.length === 0) {
|
|
@@ -648,13 +711,22 @@ class Dispatcher {
|
|
|
648
711
|
const fannedStatuses = [];
|
|
649
712
|
let written = 1;
|
|
650
713
|
for (const m of matches) {
|
|
714
|
+
ctx.signal?.throwIfAborted();
|
|
651
715
|
let whole = wholeByPath.get(m.pathname);
|
|
652
716
|
if (whole === undefined) {
|
|
653
|
-
|
|
717
|
+
const retargeted = standardEntryManifest === null
|
|
718
|
+
? _a.#retargetRead(statement, m.pathname, null)
|
|
719
|
+
: _a.#storedEntryMatchRead(statement, m.pathname, null, true);
|
|
720
|
+
whole = standardEntryManifest === null
|
|
721
|
+
? await this.#run(schemeName, retargeted, ctx)
|
|
722
|
+
: await EntryOps.readWorkspaceEntry(retargeted, ctx, standardEntryManifest);
|
|
654
723
|
wholeByPath.set(m.pathname, whole);
|
|
655
724
|
}
|
|
656
725
|
const result = _a.#sliceMatch(whole, m.span);
|
|
657
|
-
const
|
|
726
|
+
const deliveredStatement = standardEntryManifest === null
|
|
727
|
+
? _a.#retargetRead(statement, m.pathname, m.span)
|
|
728
|
+
: _a.#storedEntryMatchRead(statement, m.pathname, m.span, false);
|
|
729
|
+
const id = await this.#writeLog({ statement: deliveredStatement, result, workspaceId: ctx.workspaceId, workerId, loopId, turnId, sequence: sequence + written, origin });
|
|
658
730
|
onDispatch?.(id);
|
|
659
731
|
fannedStatuses.push(result.status);
|
|
660
732
|
written++;
|
|
@@ -957,14 +1029,11 @@ class Dispatcher {
|
|
|
957
1029
|
const method = handler[methodName];
|
|
958
1030
|
if (typeof method !== "function")
|
|
959
1031
|
return { status: 501 };
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
return method.call(handler, statement, new SchemeCtxImpl(ctx, schemeName));
|
|
966
|
-
}
|
|
967
|
-
return method.call(handler, statement, ctx);
|
|
1032
|
+
const addressedScheme = statement.target?.kind === "url" ? statement.target.scheme : null;
|
|
1033
|
+
const manifest = this.#schemes.manifestFor(schemeName);
|
|
1034
|
+
if (manifest === undefined)
|
|
1035
|
+
throw new Error(`scheme '${schemeName}' has no manifest`);
|
|
1036
|
+
return method.call(handler, statement, new SchemeCtxImpl(ctx, addressedScheme ?? schemeName, manifest));
|
|
968
1037
|
}
|
|
969
1038
|
// A status-202 result is a reviewable PROPOSAL (a side-effecting op — EDIT/EXEC/
|
|
970
1039
|
// directed write — paused for client resolution) UNLESS it is a broadcast SEND.
|