@plurnk/plurnk-service 0.7.0 → 0.9.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/SPEC.md +116 -83
- package/bin/plurnk-service.ts +132 -0
- package/dist/Paths.d.ts +8 -0
- package/dist/Paths.d.ts.map +1 -0
- package/dist/Paths.js +47 -0
- package/dist/Paths.js.map +1 -0
- package/dist/content/index.d.ts +9 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +10 -0
- package/dist/content/index.js.map +1 -0
- package/dist/content/line-marker.d.ts +26 -0
- package/dist/content/line-marker.d.ts.map +1 -0
- package/dist/content/line-marker.js +323 -0
- package/dist/content/line-marker.js.map +1 -0
- package/dist/content/matcher.d.ts +15 -0
- package/dist/content/matcher.d.ts.map +1 -0
- package/dist/content/matcher.js +112 -0
- package/dist/content/matcher.js.map +1 -0
- package/dist/content/mimetype-binary.d.ts +9 -0
- package/dist/content/mimetype-binary.d.ts.map +1 -0
- package/dist/content/mimetype-binary.js +86 -0
- package/dist/content/mimetype-binary.js.map +1 -0
- package/dist/content/path-mimetype.d.ts +6 -0
- package/dist/content/path-mimetype.d.ts.map +1 -0
- package/dist/content/path-mimetype.js +49 -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 +60 -0
- package/dist/content/read-resolve.js.map +1 -0
- package/dist/core/ChannelWrite.d.ts +35 -30
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +49 -41
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/Engine.d.ts +16 -10
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +309 -115
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/EnvFlags.d.ts +6 -3
- package/dist/core/EnvFlags.d.ts.map +1 -1
- package/dist/core/EnvFlags.js +62 -60
- package/dist/core/EnvFlags.js.map +1 -1
- package/dist/core/ExecutorRegistry.d.ts +26 -0
- package/dist/core/ExecutorRegistry.d.ts.map +1 -0
- package/dist/core/ExecutorRegistry.js +99 -0
- package/dist/core/ExecutorRegistry.js.map +1 -0
- package/dist/core/PluginLoader.d.ts +6 -3
- package/dist/core/PluginLoader.d.ts.map +1 -1
- package/dist/core/PluginLoader.js +77 -73
- package/dist/core/PluginLoader.js.map +1 -1
- package/dist/core/ProviderInstantiate.d.ts +4 -2
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +23 -22
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/SchemeRegistry.d.ts +1 -1
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +3 -3
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/git-membership.d.ts +8 -0
- package/dist/core/git-membership.d.ts.map +1 -0
- package/dist/core/git-membership.js +125 -0
- package/dist/core/git-membership.js.map +1 -0
- package/dist/core/packet-wire.d.ts +47 -6
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +376 -312
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/resolveForLoop.d.ts +16 -0
- package/dist/core/resolveForLoop.d.ts.map +1 -0
- package/dist/core/resolveForLoop.js +34 -0
- package/dist/core/resolveForLoop.js.map +1 -0
- package/dist/core/results.d.ts +40 -0
- package/dist/core/results.d.ts.map +1 -0
- package/dist/core/results.js +52 -0
- package/dist/core/results.js.map +1 -0
- package/dist/core/scheme-types.d.ts +7 -4
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/scheme-types.js +4 -4
- package/dist/core/scheme-types.js.map +1 -1
- package/dist/core/types.d.ts +26 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +17 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +1 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -43
- package/dist/index.js.map +1 -1
- 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 +1 -0
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +86 -45
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/File.d.ts +0 -1
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +32 -69
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Known.d.ts.map +1 -1
- package/dist/schemes/Known.js +13 -13
- package/dist/schemes/Known.js.map +1 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +8 -52
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Plurnk.d.ts.map +1 -1
- package/dist/schemes/Plurnk.js +13 -13
- package/dist/schemes/Plurnk.js.map +1 -1
- package/dist/schemes/Skill.d.ts.map +1 -1
- package/dist/schemes/Skill.js +13 -13
- package/dist/schemes/Skill.js.map +1 -1
- package/dist/schemes/Unknown.d.ts.map +1 -1
- package/dist/schemes/Unknown.js +13 -13
- package/dist/schemes/Unknown.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts +5 -3
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +55 -50
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-find.d.ts +10 -3
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +99 -77
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-manifest.d.ts +6 -0
- package/dist/schemes/_entry-manifest.d.ts.map +1 -0
- package/dist/schemes/_entry-manifest.js +45 -0
- package/dist/schemes/_entry-manifest.js.map +1 -0
- package/dist/schemes/_entry-ops.d.ts +7 -4
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +198 -316
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-send.d.ts +4 -1
- package/dist/schemes/_entry-send.d.ts.map +1 -1
- package/dist/schemes/_entry-send.js +57 -55
- package/dist/schemes/_entry-send.js.map +1 -1
- package/dist/server/ClientConnection.js +3 -3
- package/dist/server/ClientConnection.js.map +1 -1
- package/dist/server/Daemon.d.ts +5 -5
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +234 -176
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/clientTurn.d.ts +4 -1
- package/dist/server/clientTurn.d.ts.map +1 -1
- package/dist/server/clientTurn.js +19 -17
- package/dist/server/clientTurn.js.map +1 -1
- package/dist/server/dsl.d.ts +19 -16
- package/dist/server/dsl.d.ts.map +1 -1
- package/dist/server/dsl.js +127 -105
- package/dist/server/dsl.js.map +1 -1
- package/dist/server/envelope.d.ts +22 -19
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +116 -102
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/logEntry.d.ts +4 -1
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +41 -39
- package/dist/server/logEntry.js.map +1 -1
- package/dist/server/methods/_dispatchAsClient.d.ts +3 -1
- package/dist/server/methods/_dispatchAsClient.d.ts.map +1 -1
- package/dist/server/methods/_dispatchAsClient.js +31 -29
- package/dist/server/methods/_dispatchAsClient.js.map +1 -1
- package/dist/server/methods/discover.d.ts +3 -1
- package/dist/server/methods/discover.d.ts.map +1 -1
- package/dist/server/methods/discover.js +8 -6
- package/dist/server/methods/discover.js.map +1 -1
- package/dist/server/methods/entry_read.d.ts +4 -1
- package/dist/server/methods/entry_read.d.ts.map +1 -1
- package/dist/server/methods/entry_read.js +54 -52
- package/dist/server/methods/entry_read.js.map +1 -1
- package/dist/server/methods/log_read.d.ts +4 -1
- package/dist/server/methods/log_read.d.ts.map +1 -1
- package/dist/server/methods/log_read.js +38 -36
- package/dist/server/methods/log_read.js.map +1 -1
- package/dist/server/methods/loop_cancel.d.ts +3 -1
- package/dist/server/methods/loop_cancel.d.ts.map +1 -1
- package/dist/server/methods/loop_cancel.js +19 -17
- package/dist/server/methods/loop_cancel.js.map +1 -1
- package/dist/server/methods/loop_resolve.d.ts +3 -1
- package/dist/server/methods/loop_resolve.d.ts.map +1 -1
- package/dist/server/methods/loop_resolve.js +42 -40
- package/dist/server/methods/loop_resolve.js.map +1 -1
- package/dist/server/methods/loop_run.d.ts +3 -1
- package/dist/server/methods/loop_run.d.ts.map +1 -1
- package/dist/server/methods/loop_run.js +104 -102
- package/dist/server/methods/loop_run.js.map +1 -1
- package/dist/server/methods/op_copy.d.ts +3 -1
- package/dist/server/methods/op_copy.d.ts.map +1 -1
- package/dist/server/methods/op_copy.js +25 -23
- package/dist/server/methods/op_copy.js.map +1 -1
- package/dist/server/methods/op_dispatch.d.ts +3 -1
- package/dist/server/methods/op_dispatch.d.ts.map +1 -1
- package/dist/server/methods/op_dispatch.js +18 -16
- package/dist/server/methods/op_dispatch.js.map +1 -1
- package/dist/server/methods/op_edit.d.ts +3 -1
- package/dist/server/methods/op_edit.d.ts.map +1 -1
- package/dist/server/methods/op_edit.js +23 -21
- package/dist/server/methods/op_edit.js.map +1 -1
- package/dist/server/methods/op_exec.d.ts +3 -1
- package/dist/server/methods/op_exec.d.ts.map +1 -1
- package/dist/server/methods/op_exec.js +20 -18
- package/dist/server/methods/op_exec.js.map +1 -1
- package/dist/server/methods/op_find.d.ts +3 -1
- package/dist/server/methods/op_find.d.ts.map +1 -1
- package/dist/server/methods/op_find.js +23 -21
- package/dist/server/methods/op_find.js.map +1 -1
- package/dist/server/methods/op_hide.d.ts +3 -1
- package/dist/server/methods/op_hide.d.ts.map +1 -1
- package/dist/server/methods/op_hide.js +23 -21
- package/dist/server/methods/op_hide.js.map +1 -1
- package/dist/server/methods/op_move.d.ts +3 -1
- package/dist/server/methods/op_move.d.ts.map +1 -1
- package/dist/server/methods/op_move.js +23 -21
- package/dist/server/methods/op_move.js.map +1 -1
- package/dist/server/methods/op_parse.d.ts +3 -1
- package/dist/server/methods/op_parse.d.ts.map +1 -1
- package/dist/server/methods/op_parse.js +24 -22
- package/dist/server/methods/op_parse.js.map +1 -1
- package/dist/server/methods/op_read.d.ts +3 -1
- package/dist/server/methods/op_read.d.ts.map +1 -1
- package/dist/server/methods/op_read.js +23 -21
- package/dist/server/methods/op_read.js.map +1 -1
- package/dist/server/methods/op_send.d.ts +3 -1
- package/dist/server/methods/op_send.d.ts.map +1 -1
- package/dist/server/methods/op_send.js +22 -20
- package/dist/server/methods/op_send.js.map +1 -1
- package/dist/server/methods/op_show.d.ts +3 -1
- package/dist/server/methods/op_show.d.ts.map +1 -1
- package/dist/server/methods/op_show.js +23 -21
- package/dist/server/methods/op_show.js.map +1 -1
- package/dist/server/methods/ping.d.ts +3 -1
- package/dist/server/methods/ping.d.ts.map +1 -1
- package/dist/server/methods/ping.js +8 -6
- package/dist/server/methods/ping.js.map +1 -1
- package/dist/server/methods/providers_list.d.ts +3 -1
- package/dist/server/methods/providers_list.d.ts.map +1 -1
- package/dist/server/methods/providers_list.js +19 -17
- package/dist/server/methods/providers_list.js.map +1 -1
- package/dist/server/methods/session_attach.d.ts +3 -1
- package/dist/server/methods/session_attach.d.ts.map +1 -1
- package/dist/server/methods/session_attach.js +43 -41
- package/dist/server/methods/session_attach.js.map +1 -1
- package/dist/server/methods/session_create.d.ts +3 -1
- package/dist/server/methods/session_create.d.ts.map +1 -1
- package/dist/server/methods/session_create.js +51 -49
- package/dist/server/methods/session_create.js.map +1 -1
- package/dist/server/methods/session_list.d.ts +3 -1
- package/dist/server/methods/session_list.d.ts.map +1 -1
- package/dist/server/methods/session_list.js +9 -7
- package/dist/server/methods/session_list.js.map +1 -1
- package/dist/server/methods/session_runs.d.ts +3 -1
- package/dist/server/methods/session_runs.d.ts.map +1 -1
- package/dist/server/methods/session_runs.js +19 -17
- package/dist/server/methods/session_runs.js.map +1 -1
- package/dist/server/methods/session_set_persona.d.ts +3 -1
- package/dist/server/methods/session_set_persona.d.ts.map +1 -1
- package/dist/server/methods/session_set_persona.js +28 -26
- package/dist/server/methods/session_set_persona.js.map +1 -1
- package/dist/server/methods/session_set_root.d.ts +3 -1
- package/dist/server/methods/session_set_root.d.ts.map +1 -1
- package/dist/server/methods/session_set_root.js +31 -29
- package/dist/server/methods/session_set_root.js.map +1 -1
- 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/yolo.d.ts +3 -1
- package/dist/server/yolo.d.ts.map +1 -1
- package/dist/server/yolo.js +15 -13
- package/dist/server/yolo.js.map +1 -1
- package/package.json +71 -32
- package/bin/plurnk-service.js +0 -112
- /package/migrations/{001_schema.sql → 0000-00-00.01_schema.sql} +0 -0
|
@@ -14,87 +14,91 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
14
14
|
};
|
|
15
15
|
import { readdir, readFile } from "node:fs/promises";
|
|
16
16
|
import { resolve } from "node:path";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
let entries;
|
|
21
|
-
try {
|
|
22
|
-
entries = await readdir(plurnkDir, { withFileTypes: true });
|
|
17
|
+
export default class PluginLoader {
|
|
18
|
+
static #isValidKind(kind) {
|
|
19
|
+
return kind === "provider" || kind === "scheme" || kind === "mimetype";
|
|
23
20
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const discovered = [];
|
|
28
|
-
for (const entry of entries) {
|
|
29
|
-
if (!entry.isDirectory())
|
|
30
|
-
continue;
|
|
31
|
-
const packagePath = resolve(plurnkDir, entry.name);
|
|
32
|
-
const packageJsonPath = resolve(packagePath, "package.json");
|
|
33
|
-
let pkg;
|
|
21
|
+
static async discoverPlugins(nodeModulesDir) {
|
|
22
|
+
const plurnkDir = resolve(nodeModulesDir, "@plurnk");
|
|
23
|
+
let entries;
|
|
34
24
|
try {
|
|
35
|
-
|
|
36
|
-
pkg = JSON.parse(content);
|
|
25
|
+
entries = await readdir(plurnkDir, { withFileTypes: true });
|
|
37
26
|
}
|
|
38
27
|
catch {
|
|
39
|
-
|
|
28
|
+
return [];
|
|
40
29
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
const instance = new PluginClass();
|
|
71
|
-
assertIdentityMatch(plugin, instance);
|
|
72
|
-
return instance;
|
|
73
|
-
};
|
|
74
|
-
export const assertIdentityMatch = (plugin, instance) => {
|
|
75
|
-
if (plugin.manifest.kind === "mimetype") {
|
|
76
|
-
const declared = instance.mimetype;
|
|
77
|
-
if (typeof declared !== "string") {
|
|
78
|
-
throw new Error(`${plugin.packageName}: mimetype handler instance must declare a string \`mimetype\` field`);
|
|
30
|
+
const discovered = [];
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
if (!entry.isDirectory())
|
|
33
|
+
continue;
|
|
34
|
+
const packagePath = resolve(plurnkDir, entry.name);
|
|
35
|
+
const packageJsonPath = resolve(packagePath, "package.json");
|
|
36
|
+
let pkg;
|
|
37
|
+
try {
|
|
38
|
+
const content = await readFile(packageJsonPath, "utf8");
|
|
39
|
+
pkg = JSON.parse(content);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (typeof pkg.name !== "string")
|
|
45
|
+
continue;
|
|
46
|
+
if (pkg.plurnk === undefined || pkg.plurnk === null || typeof pkg.plurnk !== "object")
|
|
47
|
+
continue;
|
|
48
|
+
const candidate = pkg.plurnk;
|
|
49
|
+
if (!PluginLoader.#isValidKind(candidate.kind))
|
|
50
|
+
continue;
|
|
51
|
+
if (typeof candidate.name !== "string" || candidate.name.length === 0)
|
|
52
|
+
continue;
|
|
53
|
+
discovered.push({
|
|
54
|
+
packageName: pkg.name,
|
|
55
|
+
packagePath,
|
|
56
|
+
manifest: { kind: candidate.kind, name: candidate.name },
|
|
57
|
+
});
|
|
79
58
|
}
|
|
80
|
-
|
|
81
|
-
|
|
59
|
+
return discovered.toSorted((a, b) => a.packageName.localeCompare(b.packageName));
|
|
60
|
+
}
|
|
61
|
+
// Dynamic-import a discovered plugin's default export and instantiate it.
|
|
62
|
+
// Default export MUST be a constructable class with a zero-arg constructor.
|
|
63
|
+
// Identity-match enforcement per plurnk-mimetypes / plurnk-schemes manifests:
|
|
64
|
+
// the instance's claimed identity MUST match the package manifest's `plurnk.name`.
|
|
65
|
+
// Providers skip this check — manifest.name is a vendor identifier; the
|
|
66
|
+
// instance's `model` is per-config (plurnk-providers#1, identity getters).
|
|
67
|
+
static async loadPlugin(plugin) {
|
|
68
|
+
const mod = await import(__rewriteRelativeImportExtension(plugin.packageName));
|
|
69
|
+
const PluginClass = mod.default;
|
|
70
|
+
if (typeof PluginClass !== "function") {
|
|
71
|
+
throw new Error(`${plugin.packageName}: default export is not a constructor`);
|
|
82
72
|
}
|
|
83
|
-
|
|
73
|
+
const instance = new PluginClass();
|
|
74
|
+
PluginLoader.assertIdentityMatch(plugin, instance);
|
|
75
|
+
return instance;
|
|
84
76
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
77
|
+
static assertIdentityMatch(plugin, instance) {
|
|
78
|
+
if (plugin.manifest.kind === "mimetype") {
|
|
79
|
+
const declared = instance.mimetype;
|
|
80
|
+
if (typeof declared !== "string") {
|
|
81
|
+
throw new Error(`${plugin.packageName}: mimetype handler instance must declare a string \`mimetype\` field`);
|
|
82
|
+
}
|
|
83
|
+
if (declared !== plugin.manifest.name) {
|
|
84
|
+
throw new Error(`${plugin.packageName}: identity mismatch — package manifest declares mimetype '${plugin.manifest.name}', instance declares '${declared}'`);
|
|
85
|
+
}
|
|
86
|
+
return;
|
|
94
87
|
}
|
|
95
|
-
|
|
88
|
+
if (plugin.manifest.kind === "scheme") {
|
|
89
|
+
// Schemes carry a static `manifest` on the class (plurnk-schemes contract).
|
|
90
|
+
// Transitional: bundled schemes don't yet have it (task #32 wires
|
|
91
|
+
// manifest registration). When the static manifest is absent, accept
|
|
92
|
+
// the package manifest name as the source of truth and trust the caller.
|
|
93
|
+
const classManifest = instance.constructor;
|
|
94
|
+
const declared = classManifest?.manifest?.name;
|
|
95
|
+
if (declared !== undefined && declared !== plugin.manifest.name) {
|
|
96
|
+
throw new Error(`${plugin.packageName}: identity mismatch — package manifest declares scheme '${plugin.manifest.name}', class manifest declares '${String(declared)}'`);
|
|
97
|
+
}
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Providers: no identity-match at this layer. Package manifest `name` is
|
|
101
|
+
// the vendor family; instance `model` is per-config (plurnk-providers#1).
|
|
96
102
|
}
|
|
97
|
-
|
|
98
|
-
// the vendor family; instance `model` is per-config (plurnk-providers#1).
|
|
99
|
-
};
|
|
103
|
+
}
|
|
100
104
|
//# sourceMappingURL=PluginLoader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginLoader.js","sourceRoot":"","sources":["../../src/core/PluginLoader.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,oEAAoE;AACpE,+CAA+C;;;;;;;;;AAE/C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,MAAM,
|
|
1
|
+
{"version":3,"file":"PluginLoader.js","sourceRoot":"","sources":["../../src/core/PluginLoader.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,oEAAoE;AACpE,+CAA+C;;;;;;;;;AAE/C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,MAAM,CAAC,YAAY,CAAC,IAAa;QAC7B,OAAO,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,cAAsB;QAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACrD,IAAI,OAA4D,CAAC;QACjE,IAAI,CAAC;YACD,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAuB,EAAE,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAC7D,IAAI,GAAwC,CAAC;YAC7C,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBACxD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACL,SAAS;YACb,CAAC;YACD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS;YAChG,MAAM,SAAS,GAAG,GAAG,CAAC,MAA4C,CAAC;YACnE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC;gBAAE,SAAS;YACzD,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAChF,UAAU,CAAC,IAAI,CAAC;gBACZ,WAAW,EAAE,GAAG,CAAC,IAAI;gBACrB,WAAW;gBACX,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;aAC3D,CAAC,CAAC;QACP,CAAC;QAED,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,0EAA0E;IAC1E,4EAA4E;IAC5E,8EAA8E;IAC9E,mFAAmF;IACnF,wEAAwE;IACxE,2EAA2E;IAC3E,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAwB;QAC5C,MAAM,GAAG,GAAG,MAAM,MAAM,kCAAC,MAAM,CAAC,WAAW,EAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;QAChC,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,WAAW,uCAAuC,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QACnC,YAAY,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,MAAwB,EAAE,QAAiB;QAClE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAI,QAAmC,CAAC,QAAQ,CAAC;YAC/D,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACX,GAAG,MAAM,CAAC,WAAW,sEAAsE,CAC9F,CAAC;YACN,CAAC;YACD,IAAI,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACX,GAAG,MAAM,CAAC,WAAW,6DAA6D,MAAM,CAAC,QAAQ,CAAC,IAAI,yBAAyB,QAAQ,GAAG,CAC7I,CAAC;YACN,CAAC;YACD,OAAO;QACX,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,4EAA4E;YAC5E,kEAAkE;YAClE,qEAAqE;YACrE,yEAAyE;YACzE,MAAM,aAAa,GAAI,QAAmB,CAAC,WAAgD,CAAC;YAC5F,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC;YAC/C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9D,MAAM,IAAI,KAAK,CACX,GAAG,MAAM,CAAC,WAAW,2DAA2D,MAAM,CAAC,QAAQ,CAAC,IAAI,+BAA+B,MAAM,CAAC,QAAQ,CAAC,GAAG,CACzJ,CAAC;YACN,CAAC;YACD,OAAO;QACX,CAAC;QAED,yEAAyE;QACzE,0EAA0E;IAC9E,CAAC;CACJ"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Provider, ProviderAlias } from "@plurnk/plurnk-providers";
|
|
2
|
-
export
|
|
3
|
-
|
|
2
|
+
export default class ProviderInstantiate {
|
|
3
|
+
static instantiateProvider(alias: ProviderAlias, env?: NodeJS.ProcessEnv): Promise<Provider>;
|
|
4
|
+
static loadActiveProvider(env?: NodeJS.ProcessEnv): Promise<Provider | null>;
|
|
5
|
+
}
|
|
4
6
|
//# sourceMappingURL=ProviderInstantiate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderInstantiate.d.ts","sourceRoot":"","sources":["../../src/core/ProviderInstantiate.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAmB,MAAM,0BAA0B,CAAC;AAEzF,
|
|
1
|
+
{"version":3,"file":"ProviderInstantiate.d.ts","sourceRoot":"","sources":["../../src/core/ProviderInstantiate.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAmB,MAAM,0BAA0B,CAAC;AAEzF,MAAM,CAAC,OAAO,OAAO,mBAAmB;WACvB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,QAAQ,CAAC;WAmBlG,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAKlG"}
|
|
@@ -14,28 +14,29 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
14
14
|
return path;
|
|
15
15
|
};
|
|
16
16
|
import { resolveActiveAlias } from "@plurnk/plurnk-providers";
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
export default class ProviderInstantiate {
|
|
18
|
+
static async instantiateProvider(alias, env = process.env) {
|
|
19
|
+
const packageName = `@plurnk/plurnk-providers-${alias.provider}`;
|
|
20
|
+
let mod;
|
|
21
|
+
try {
|
|
22
|
+
mod = await import(__rewriteRelativeImportExtension(packageName));
|
|
23
|
+
}
|
|
24
|
+
catch (cause) {
|
|
25
|
+
throw new Error(`provider package ${packageName} not installed (alias '${alias.alias}' requires it)`, { cause });
|
|
26
|
+
}
|
|
27
|
+
const factory = mod.default;
|
|
28
|
+
if (typeof factory?.fromEnv !== "function") {
|
|
29
|
+
throw new Error(`${packageName}: default export must have a static \`fromEnv(env, model)\` factory`);
|
|
30
|
+
}
|
|
31
|
+
return await factory.fromEnv(env, alias.model);
|
|
22
32
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
33
|
+
// Convenience: resolve + instantiate in one call. Returns null when no
|
|
34
|
+
// PLURNK_MODEL is set (caller decides what 'no provider' means).
|
|
35
|
+
static async loadActiveProvider(env = process.env) {
|
|
36
|
+
const alias = resolveActiveAlias(env);
|
|
37
|
+
if (alias === null)
|
|
38
|
+
return null;
|
|
39
|
+
return ProviderInstantiate.instantiateProvider(alias, env);
|
|
26
40
|
}
|
|
27
|
-
|
|
28
|
-
if (typeof factory?.fromEnv !== "function") {
|
|
29
|
-
throw new Error(`${packageName}: default export must have a static \`fromEnv(env, model)\` factory`);
|
|
30
|
-
}
|
|
31
|
-
return await factory.fromEnv(env, alias.model);
|
|
32
|
-
};
|
|
33
|
-
// Convenience: resolve + instantiate in one call. Returns null when no
|
|
34
|
-
// PLURNK_MODEL is set (caller decides what 'no provider' means).
|
|
35
|
-
export const loadActiveProvider = async (env = process.env) => {
|
|
36
|
-
const alias = resolveActiveAlias(env);
|
|
37
|
-
if (alias === null)
|
|
38
|
-
return null;
|
|
39
|
-
return instantiateProvider(alias, env);
|
|
40
|
-
};
|
|
41
|
+
}
|
|
41
42
|
//# sourceMappingURL=ProviderInstantiate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderInstantiate.js","sourceRoot":"","sources":["../../src/core/ProviderInstantiate.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wEAAwE;AACxE,uEAAuE;AACvE,uEAAuE;AACvE,EAAE;AACF,qEAAqE;AACrE,2DAA2D;;;;;;;;;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"ProviderInstantiate.js","sourceRoot":"","sources":["../../src/core/ProviderInstantiate.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wEAAwE;AACxE,uEAAuE;AACvE,uEAAuE;AACvE,EAAE;AACF,qEAAqE;AACrE,2DAA2D;;;;;;;;;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,KAAoB,EAAE,MAAyB,OAAO,CAAC,GAAG;QACvF,MAAM,WAAW,GAAG,4BAA4B,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjE,IAAI,GAAiC,CAAC;QACtC,IAAI,CAAC;YACD,GAAG,GAAG,MAAM,MAAM,kCAAC,WAAW,EAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,WAAW,0BAA0B,KAAK,CAAC,KAAK,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACrH,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,UAAU,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACX,GAAG,WAAW,qEAAqE,CACtF,CAAC;QACN,CAAC;QACD,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,uEAAuE;IACvE,iEAAiE;IACjE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;QAChE,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAChC,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemeRegistry.d.ts","sourceRoot":"","sources":["../../src/core/SchemeRegistry.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"SchemeRegistry.d.ts","sourceRoot":"","sources":["../../src/core/SchemeRegistry.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,KAAK,aAAa,GAAG,MAAM,CAAC;AAE5B,MAAM,CAAC,OAAO,OAAO,cAAc;;;IAa/B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAKpD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAE5C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAE1B,IAAI,IAAI,MAAM,EAAE;IAIhB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;CAGhD"}
|
|
@@ -5,7 +5,7 @@ import Known from "../schemes/Known.js";
|
|
|
5
5
|
import Unknown from "../schemes/Unknown.js";
|
|
6
6
|
import Skill from "../schemes/Skill.js";
|
|
7
7
|
import File from "../schemes/File.js";
|
|
8
|
-
import
|
|
8
|
+
import ResolveForLoop from "./resolveForLoop.js";
|
|
9
9
|
export default class SchemeRegistry {
|
|
10
10
|
#handlers = new Map();
|
|
11
11
|
constructor() {
|
|
@@ -26,9 +26,9 @@ export default class SchemeRegistry {
|
|
|
26
26
|
has(name) { return this.#handlers.has(name); }
|
|
27
27
|
list() { return [...this.#handlers.keys()].toSorted(); }
|
|
28
28
|
// Active set under the given loop flags (SPEC §0.5). Delegates to
|
|
29
|
-
//
|
|
29
|
+
// the in-tree ResolveForLoop utility.
|
|
30
30
|
resolveForLoop(flags) {
|
|
31
|
-
return resolveForLoop(this.#handlers, flags);
|
|
31
|
+
return ResolveForLoop.resolveForLoop(this.#handlers, flags);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
//# sourceMappingURL=SchemeRegistry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemeRegistry.js","sourceRoot":"","sources":["../../src/core/SchemeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,GAAG,MAAM,mBAAmB,CAAC;AACpC,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"SchemeRegistry.js","sourceRoot":"","sources":["../../src/core/SchemeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,GAAG,MAAM,mBAAmB,CAAC;AACpC,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE7C;QACI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAG,IAAI,MAAM,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAM,IAAI,GAAG,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAK,IAAI,IAAI,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAK,IAAI,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,OAAsB;QACzC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,yBAAyB,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,GAAG,CAAC,IAAY,IAA+B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEjF,GAAG,CAAC,IAAY,IAAa,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE/D,IAAI,KAAe,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAElE,kEAAkE;IAClE,sCAAsC;IACtC,cAAc,CAAC,KAAgB;QAC3B,OAAO,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;CACJ"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Db } from "./Db.ts";
|
|
2
|
+
import type { PlurnkSchemeContext } from "./scheme-types.ts";
|
|
3
|
+
export default class GitMembership {
|
|
4
|
+
#private;
|
|
5
|
+
static resolveGitMembership(db: Db, sessionId: number, signal: AbortSignal | undefined): Promise<string[]>;
|
|
6
|
+
static indexGitMembership(ctx: PlurnkSchemeContext): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=git-membership.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-membership.d.ts","sourceRoot":"","sources":["../../src/core/git-membership.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,MAAM,CAAC,OAAO,OAAO,aAAa;;WAiDjB,oBAAoB,CAC7B,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAAG,SAAS,GAChC,OAAO,CAAC,MAAM,EAAE,CAAC;WA2CP,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ3E"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// SPEC §14.3 D4 — git-ls-files workspace membership.
|
|
2
|
+
//
|
|
3
|
+
// When a session's `project_root` is a git working tree, the git-tracked
|
|
4
|
+
// files (`git ls-files`) are workspace MEMBERS without any explicit client
|
|
5
|
+
// `add`. This module resolves that membership and (when token accounting is
|
|
6
|
+
// available) materializes active members' disk content into a body channel +
|
|
7
|
+
// visibility so they surface in packet.system.index.
|
|
8
|
+
//
|
|
9
|
+
// Decisions realized here:
|
|
10
|
+
// D1 — workspace identity lives on the session (project_root).
|
|
11
|
+
// D3 — disk co-location: members are channel-less markers until materialized;
|
|
12
|
+
// disk stays the truth.
|
|
13
|
+
// D4 — git present → ls-files membership. git absent → no fs-walk (this
|
|
14
|
+
// module no-ops on a non-git project_root, leaving headless / non-git
|
|
15
|
+
// sessions completely unaffected). The add/ignore/read-only constraint
|
|
16
|
+
// overlay (session_constraints) is a documented follow-up — not built
|
|
17
|
+
// here; bare git-ls-files membership is the whole of this phase.
|
|
18
|
+
// D5 — EMI is eager + relevance-bounded: materialize is re-read from disk at
|
|
19
|
+
// resolution time so a divergent member reflects current disk content.
|
|
20
|
+
//
|
|
21
|
+
// git resolution shells out via node:child_process (the same surface the
|
|
22
|
+
// File scheme's tests and the demo fixture use) and respects AbortSignal.
|
|
23
|
+
import { execFile } from "node:child_process";
|
|
24
|
+
import { promisify } from "node:util";
|
|
25
|
+
import { readFile } from "node:fs/promises";
|
|
26
|
+
import { resolve } from "node:path";
|
|
27
|
+
import { MimetypeBinary } from "../content/index.js";
|
|
28
|
+
import EntryCrud from "../schemes/_entry-crud.js";
|
|
29
|
+
export default class GitMembership {
|
|
30
|
+
static #execFileP = promisify(execFile);
|
|
31
|
+
// project_root for a session. NULL = headless (no membership). Read once per
|
|
32
|
+
// resolution; the File scheme reads the same column for its own root.
|
|
33
|
+
static async #loadSessionRoot(db, sessionId) {
|
|
34
|
+
const row = await db.envelope_get_session.get({ id: sessionId });
|
|
35
|
+
return row?.project_root ?? null;
|
|
36
|
+
}
|
|
37
|
+
// Is `root` the top of a git working tree? `git rev-parse --is-inside-work-tree`
|
|
38
|
+
// exits non-zero (throws here) when `root` is not under git — the gate that
|
|
39
|
+
// keeps non-git / headless sessions out of any git path (D4: "git absent → no
|
|
40
|
+
// fs-walk"). Conservative: any git failure means "not a git workspace."
|
|
41
|
+
static async #isGitWorkTree(root, signal) {
|
|
42
|
+
try {
|
|
43
|
+
const { stdout } = await GitMembership.#execFileP("git", ["rev-parse", "--is-inside-work-tree"], { cwd: root, signal });
|
|
44
|
+
return stdout.trim() === "true";
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Tracked files, workspace-relative, via `git ls-files -z`. NUL-delimited so
|
|
51
|
+
// paths with spaces/newlines survive. Empty repo → [].
|
|
52
|
+
static async #gitTrackedFiles(root, signal) {
|
|
53
|
+
const { stdout } = await GitMembership.#execFileP("git", ["ls-files", "-z"], { cwd: root, signal, maxBuffer: 64 * 1024 * 1024 });
|
|
54
|
+
return stdout.split("\0").filter((p) => p.length > 0);
|
|
55
|
+
}
|
|
56
|
+
// Detect a tracked file's mimetype (mirrors File.detectFileMimetype): route
|
|
57
|
+
// through the Mimetypes service when present, normalizing the auto-text result
|
|
58
|
+
// to the text primitive (plurnk-service never auto-derives text/plain). No
|
|
59
|
+
// service → text primitive.
|
|
60
|
+
static async #detectMimetype(canonical, mimetypes) {
|
|
61
|
+
if (mimetypes !== undefined) {
|
|
62
|
+
const detected = await mimetypes.detect({ path: canonical });
|
|
63
|
+
return MimetypeBinary.normalizeAutoTextMimetype(detected);
|
|
64
|
+
}
|
|
65
|
+
return MimetypeBinary.TEXT_PRIMITIVE_MIMETYPE;
|
|
66
|
+
}
|
|
67
|
+
// Register every git-tracked file as a bare session member (scheme=null),
|
|
68
|
+
// idempotently. Channel-less — disk is the truth (D3); the row is the
|
|
69
|
+
// membership marker File.read gates on. Returns the tracked pathnames so the
|
|
70
|
+
// caller can materialize them through writeEntry.
|
|
71
|
+
//
|
|
72
|
+
// signal-respecting: the git shell-outs honor `signal`; on a non-git or
|
|
73
|
+
// headless root nothing is touched.
|
|
74
|
+
static async resolveGitMembership(db, sessionId, signal) {
|
|
75
|
+
const root = await GitMembership.#loadSessionRoot(db, sessionId);
|
|
76
|
+
if (root === null)
|
|
77
|
+
return [];
|
|
78
|
+
if (!await GitMembership.#isGitWorkTree(root, signal))
|
|
79
|
+
return [];
|
|
80
|
+
const tracked = await GitMembership.#gitTrackedFiles(root, signal);
|
|
81
|
+
for (const pathname of tracked) {
|
|
82
|
+
await db.crud_register_session_member.get({ session_id: sessionId, scheme: null, pathname });
|
|
83
|
+
}
|
|
84
|
+
return tracked;
|
|
85
|
+
}
|
|
86
|
+
// Materialize a member's disk content into a body channel + visibility for the
|
|
87
|
+
// run via writeEntry (the entry-write paradigm) — so it surfaces in
|
|
88
|
+
// packet.system.index (D4/D5). Re-reads disk each call (eager + relevance-
|
|
89
|
+
// bounded). Binary files are members but never materialized into a text
|
|
90
|
+
// channel. Missing-on-disk (tracked but deleted in the working tree) is
|
|
91
|
+
// skipped — membership stands, no channel.
|
|
92
|
+
static async #materializeMember(pathname, root, ctx) {
|
|
93
|
+
const canonical = resolve(root, pathname);
|
|
94
|
+
const mimetype = await GitMembership.#detectMimetype(canonical, ctx.mimetypes);
|
|
95
|
+
if (MimetypeBinary.isBinaryMimetype(mimetype))
|
|
96
|
+
return;
|
|
97
|
+
let content;
|
|
98
|
+
try {
|
|
99
|
+
content = await readFile(canonical, "utf8");
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
if (err.code === "ENOENT")
|
|
103
|
+
return;
|
|
104
|
+
throw err;
|
|
105
|
+
}
|
|
106
|
+
// writeEntry finds the registered member (scheme=null) and refreshes its
|
|
107
|
+
// body channel each turn, so a member edited out-of-band reflects current
|
|
108
|
+
// disk content (D5) — tokenization + visibility flow through the paradigm.
|
|
109
|
+
await EntryCrud.writeEntry(pathname, { channels: { body: { content, mimetype } }, tags: [] }, ctx, null);
|
|
110
|
+
}
|
|
111
|
+
// Full membership + materialization pass for a run. Registers git members,
|
|
112
|
+
// then materializes each active (on-disk, non-binary) member into the index
|
|
113
|
+
// through writeEntry. Called at packet-composition time (Engine.runTurn) per
|
|
114
|
+
// D5. No-ops on headless / non-git sessions.
|
|
115
|
+
static async indexGitMembership(ctx) {
|
|
116
|
+
const root = await GitMembership.#loadSessionRoot(ctx.db, ctx.sessionId);
|
|
117
|
+
if (root === null)
|
|
118
|
+
return;
|
|
119
|
+
const tracked = await GitMembership.resolveGitMembership(ctx.db, ctx.sessionId, ctx.signal);
|
|
120
|
+
for (const pathname of tracked) {
|
|
121
|
+
await GitMembership.#materializeMember(pathname, root, ctx);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=git-membership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-membership.js","sourceRoot":"","sources":["../../src/core/git-membership.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
interface SystemSection {
|
|
2
|
+
system_definition: string;
|
|
3
|
+
persona?: unknown;
|
|
4
|
+
index?: unknown;
|
|
5
|
+
log?: unknown;
|
|
6
|
+
tokens?: number;
|
|
7
|
+
}
|
|
8
|
+
interface UserSection {
|
|
9
|
+
prompt?: unknown;
|
|
10
|
+
telemetry?: {
|
|
11
|
+
budget?: unknown;
|
|
12
|
+
errors?: unknown;
|
|
13
|
+
};
|
|
14
|
+
system_requirements?: unknown;
|
|
15
|
+
tokens?: number;
|
|
16
|
+
}
|
|
17
|
+
interface Packet {
|
|
18
|
+
system: SystemSection;
|
|
19
|
+
user: UserSection;
|
|
20
|
+
}
|
|
21
|
+
type CountTokens = (text: string) => number;
|
|
22
|
+
export default class PacketWire {
|
|
23
|
+
#private;
|
|
24
|
+
static renderSystemContent(system: SystemSection): string;
|
|
25
|
+
static renderUserContent(user: UserSection): string;
|
|
26
|
+
static packetToWireMessages(packet: Packet): Array<{
|
|
27
|
+
role: string;
|
|
28
|
+
content: string;
|
|
29
|
+
}>;
|
|
30
|
+
static measureBudgetSections(packet: Packet, countTokens: CountTokens): {
|
|
31
|
+
index: {
|
|
32
|
+
channels: number;
|
|
33
|
+
tokens: number;
|
|
34
|
+
};
|
|
35
|
+
log: {
|
|
36
|
+
entries: number;
|
|
37
|
+
tokens: number;
|
|
38
|
+
byScheme: Array<{
|
|
39
|
+
scheme: string;
|
|
40
|
+
entries: number;
|
|
41
|
+
tokens: number;
|
|
42
|
+
}>;
|
|
43
|
+
};
|
|
44
|
+
total: number;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
7
48
|
//# sourceMappingURL=packet-wire.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packet-wire.d.ts","sourceRoot":"","sources":["../../src/core/packet-wire.
|
|
1
|
+
{"version":3,"file":"packet-wire.d.ts","sourceRoot":"","sources":["../../src/core/packet-wire.ts"],"names":[],"mappings":"AAmDA,UAAU,aAAa;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AACD,UAAU,WAAW;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACnD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AACD,UAAU,MAAM;IAAG,MAAM,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE;AAC7D,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,UAAU;;IAM3B,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM;IAqBzD,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAoBnD,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAcrF,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG;QACpE,KAAK,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5C,GAAG,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,KAAK,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC;QAC/G,KAAK,EAAE,MAAM,CAAC;KACjB;CA6TJ"}
|