@plurnk/plurnk-service 1.23.0 → 1.25.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 +17 -15
- package/INSTALL.md +96 -20
- package/README.md +2 -2
- package/SPEC.md +519 -206
- package/dist/Paths.d.ts +1 -0
- package/dist/Paths.d.ts.map +1 -1
- package/dist/Paths.js +1 -0
- package/dist/Paths.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/core/AdministrativeLoop.d.ts +1 -1
- package/dist/core/AdministrativeLoop.d.ts.map +1 -1
- package/dist/core/AdministrativeLoop.js +5 -5
- package/dist/core/AdministrativeLoop.js.map +1 -1
- package/dist/core/AdmittedTurnExecutor.d.ts +3 -2
- package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
- package/dist/core/AdmittedTurnExecutor.js +14 -1
- package/dist/core/AdmittedTurnExecutor.js.map +1 -1
- package/dist/core/CapabilityResolver.js +1 -1
- package/dist/core/CapabilityResolver.js.map +1 -1
- package/dist/core/DataStatementRunner.d.ts.map +1 -1
- package/dist/core/DataStatementRunner.js +1 -3
- package/dist/core/DataStatementRunner.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +10 -0
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +71 -18
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/Dispatcher.sql +0 -7
- package/dist/core/Engine.d.ts +2 -2
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.d.ts +16 -4
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +31 -31
- package/dist/core/ExecutorRegistry.js.map +1 -1
- package/dist/core/FabricatedLog.d.ts +2 -0
- package/dist/core/FabricatedLog.d.ts.map +1 -1
- package/dist/core/FabricatedLog.js +18 -7
- package/dist/core/FabricatedLog.js.map +1 -1
- package/dist/core/HostPaths.d.ts +7 -1
- package/dist/core/HostPaths.d.ts.map +1 -1
- package/dist/core/HostPaths.js +25 -12
- package/dist/core/HostPaths.js.map +1 -1
- package/dist/core/LogEntryProjection.d.ts +1 -0
- package/dist/core/LogEntryProjection.d.ts.map +1 -1
- package/dist/core/LogEntryProjection.js +10 -0
- package/dist/core/LogEntryProjection.js.map +1 -1
- package/dist/core/LoopDriver.d.ts.map +1 -1
- package/dist/core/LoopDriver.js +8 -1
- package/dist/core/LoopDriver.js.map +1 -1
- package/dist/core/LoopLifecycle.d.ts +1 -1
- package/dist/core/LoopLifecycle.js +1 -1
- package/dist/core/LoopLifecycle.sql +2 -2
- package/dist/core/LoopPolicies.d.ts.map +1 -1
- package/dist/core/LoopPolicies.js +12 -7
- package/dist/core/LoopPolicies.js.map +1 -1
- package/dist/core/OperatorConfig.d.ts.map +1 -1
- package/dist/core/OperatorConfig.js +97 -51
- package/dist/core/OperatorConfig.js.map +1 -1
- package/dist/core/PacketBuilder.d.ts +2 -0
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +44 -32
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/PacketBuilder.sql +3 -1
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +3 -2
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/TurnDispositionHandler.d.ts +1 -1
- package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
- package/dist/core/TurnDispositionHandler.js +6 -15
- package/dist/core/TurnDispositionHandler.js.map +1 -1
- package/dist/core/TurnMaterialization.js +1 -1
- package/dist/core/TurnMaterialization.js.map +1 -1
- package/dist/core/TurnOps.d.ts +1 -0
- package/dist/core/TurnOps.d.ts.map +1 -1
- package/dist/core/TurnOps.js +18 -0
- package/dist/core/TurnOps.js.map +1 -1
- package/dist/core/TurnRunner.d.ts +6 -0
- package/dist/core/TurnRunner.d.ts.map +1 -1
- package/dist/core/TurnRunner.js +18 -8
- package/dist/core/TurnRunner.js.map +1 -1
- package/dist/core/TurnSources.sql +0 -15
- package/dist/core/env-defaults.d.ts +12 -1
- package/dist/core/env-defaults.d.ts.map +1 -1
- package/dist/core/env-defaults.js +46 -7
- package/dist/core/env-defaults.js.map +1 -1
- package/dist/core/file-creation-policy.d.ts.map +1 -1
- package/dist/core/file-creation-policy.js +2 -1
- package/dist/core/file-creation-policy.js.map +1 -1
- package/dist/core/packet-wire.d.ts +10 -2
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +87 -69
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/results.d.ts +2 -0
- package/dist/core/results.d.ts.map +1 -1
- package/dist/core/results.js +7 -0
- package/dist/core/results.js.map +1 -1
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +10 -4
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/DigestRender.d.ts.map +1 -1
- package/dist/digest/DigestRender.js +51 -22
- package/dist/digest/DigestRender.js.map +1 -1
- package/dist/digest/DigestRequiem.d.ts.map +1 -1
- package/dist/digest/DigestRequiem.js +10 -4
- package/dist/digest/DigestRequiem.js.map +1 -1
- package/dist/digest/digest-rows.d.ts +9 -1
- package/dist/digest/digest-rows.d.ts.map +1 -1
- package/dist/digest/digest-rows.js.map +1 -1
- package/dist/digest/digest.sql +16 -0
- package/dist/observe/init.d.ts +1 -0
- package/dist/observe/init.d.ts.map +1 -1
- package/dist/observe/init.js +5 -1
- package/dist/observe/init.js.map +1 -1
- package/dist/schemes/EffectPolicy.d.ts.map +1 -1
- package/dist/schemes/EffectPolicy.js +4 -4
- package/dist/schemes/EffectPolicy.js.map +1 -1
- package/dist/schemes/Exec.d.ts +1 -0
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +30 -14
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecScheduler.d.ts.map +1 -1
- package/dist/schemes/ExecScheduler.js +4 -3
- package/dist/schemes/ExecScheduler.js.map +1 -1
- package/dist/schemes/ExecScratch.d.ts.map +1 -1
- package/dist/schemes/ExecScratch.js +2 -1
- package/dist/schemes/ExecScratch.js.map +1 -1
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +15 -10
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +25 -3
- package/dist/schemes/Log.js.map +1 -1
- package/dist/server/AgentRoots.d.ts +6 -0
- package/dist/server/AgentRoots.d.ts.map +1 -0
- package/dist/server/AgentRoots.js +25 -0
- package/dist/server/AgentRoots.js.map +1 -0
- package/dist/server/ConfigurationDiagnostics.d.ts +12 -0
- package/dist/server/ConfigurationDiagnostics.d.ts.map +1 -0
- package/dist/server/ConfigurationDiagnostics.js +40 -0
- package/dist/server/ConfigurationDiagnostics.js.map +1 -0
- package/dist/server/Daemon.d.ts +11 -5
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +124 -48
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DaemonModule.d.ts +11 -4
- package/dist/server/DaemonModule.d.ts.map +1 -1
- package/dist/server/EnvFunctionality.d.ts.map +1 -1
- package/dist/server/EnvFunctionality.js +5 -2
- package/dist/server/EnvFunctionality.js.map +1 -1
- package/dist/server/Functionality.d.ts +6 -0
- package/dist/server/Functionality.d.ts.map +1 -1
- package/dist/server/Functionality.js +173 -37
- package/dist/server/Functionality.js.map +1 -1
- package/dist/server/FunctionalityManager.js +6 -6
- package/dist/server/FunctionalityManager.js.map +1 -1
- package/dist/server/MembersFunctionality.d.ts.map +1 -1
- package/dist/server/MembersFunctionality.js +13 -41
- package/dist/server/MembersFunctionality.js.map +1 -1
- package/dist/server/PluginSources.d.ts +20 -0
- package/dist/server/PluginSources.d.ts.map +1 -0
- package/dist/server/PluginSources.js +52 -0
- package/dist/server/PluginSources.js.map +1 -0
- package/dist/server/PlurnkSkill.js +1 -1
- package/dist/server/PlurnkSkill.js.map +1 -1
- package/dist/server/Retention.d.ts.map +1 -1
- package/dist/server/Retention.js +11 -30
- package/dist/server/Retention.js.map +1 -1
- package/dist/server/ServiceModules.d.ts +1 -0
- package/dist/server/ServiceModules.d.ts.map +1 -1
- package/dist/server/ServiceModules.js +9 -3
- package/dist/server/ServiceModules.js.map +1 -1
- package/dist/server/SkillSource.d.ts +37 -0
- package/dist/server/SkillSource.d.ts.map +1 -0
- package/dist/server/SkillSource.js +267 -0
- package/dist/server/SkillSource.js.map +1 -0
- package/dist/server/SkillsFunctionality.d.ts +8 -27
- package/dist/server/SkillsFunctionality.d.ts.map +1 -1
- package/dist/server/SkillsFunctionality.js +218 -270
- package/dist/server/SkillsFunctionality.js.map +1 -1
- package/dist/server/WorkerModelResolver.d.ts +1 -2
- package/dist/server/WorkerModelResolver.d.ts.map +1 -1
- package/dist/server/WorkerModelResolver.js +18 -19
- package/dist/server/WorkerModelResolver.js.map +1 -1
- package/dist/server/WorkspacePlugins.d.ts +25 -0
- package/dist/server/WorkspacePlugins.d.ts.map +1 -0
- package/dist/server/WorkspacePlugins.js +43 -0
- package/dist/server/WorkspacePlugins.js.map +1 -0
- package/dist/server/dispatch-as-plurnk.d.ts.map +1 -1
- package/dist/server/dispatch-as-plurnk.js +3 -1
- package/dist/server/dispatch-as-plurnk.js.map +1 -1
- package/dist/server/envelope.js +1 -1
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/loop-model.d.ts.map +1 -1
- package/dist/server/loop-model.js +1 -2
- package/dist/server/loop-model.js.map +1 -1
- package/dist/server/module-discovery.d.ts +6 -0
- package/dist/server/module-discovery.d.ts.map +1 -1
- package/dist/server/module-discovery.js +46 -24
- package/dist/server/module-discovery.js.map +1 -1
- package/dist/server/skills-problems.d.ts +8 -0
- package/dist/server/skills-problems.d.ts.map +1 -0
- package/dist/server/skills-problems.js +18 -0
- package/dist/server/skills-problems.js.map +1 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +55 -45
- package/dist/service.js.map +1 -1
- package/docs/env.md +7 -8
- package/docs/members.md +4 -3
- package/docs/skills.md +45 -22
- package/migrations/012_emission.sql +77 -0
- package/package.json +38 -36
- package/plurnk.service +29 -0
- package/dist/core/PreviousEmission.d.ts +0 -14
- package/dist/core/PreviousEmission.d.ts.map +0 -1
- package/dist/core/PreviousEmission.js +0 -24
- package/dist/core/PreviousEmission.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-defaults.d.ts","sourceRoot":"","sources":["../../src/core/env-defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"env-defaults.d.ts","sourceRoot":"","sources":["../../src/core/env-defaults.ts"],"names":[],"mappings":"AAGA,OAAa,EAAE,kBAAkB,EAAyB,MAAM,qBAAqB,CAAC;AAEtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAYvC,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAC3C,QAAQ,CAAC,mBAAmB,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC5D,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAC7C;AAED,MAAM,CAAC,OAAO,OAAO,WAAW;;IAuC5B,OAAa,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,SAA2B,EAAE,GAAE;QAC5F,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;KAC7B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAuBtC;IAGD,OAAa,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAUpF;IAID,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAU7F;IAGD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAEhF;IAID,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAW9D;CACJ"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { parseEnv } from "node:util";
|
|
2
2
|
import { readFile } from "node:fs/promises";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import Meta from "@plurnk/plurnk-meta";
|
|
4
|
+
import Meta, { ConfigurationError } from "@plurnk/plurnk-meta";
|
|
5
|
+
import { AgentPluginFiles } from "@plurnk/plurnk-meta/agent-plugin";
|
|
6
|
+
import HostPaths from "./HostPaths.js";
|
|
7
|
+
import PluginSources from "../server/PluginSources.js";
|
|
5
8
|
export default class EnvDefaults {
|
|
6
9
|
static async #readDefaults(dir, owner) {
|
|
7
10
|
let text;
|
|
@@ -24,8 +27,7 @@ export default class EnvDefaults {
|
|
|
24
27
|
}
|
|
25
28
|
// Enumerate installed package dirs via the shared membership primitives
|
|
26
29
|
// (@plurnk/plurnk-meta); keep ecosystem members that ship a .env.defaults.
|
|
27
|
-
static async #memberFiles(
|
|
28
|
-
const dirs = await Meta.packageDirs(nodeModules);
|
|
30
|
+
static async #memberFiles(dirs) {
|
|
29
31
|
const files = [];
|
|
30
32
|
for (const { dir, name } of dirs.toSorted((a, b) => a.name.localeCompare(b.name))) {
|
|
31
33
|
if (!Meta.isTrusted(name))
|
|
@@ -50,12 +52,48 @@ export default class EnvDefaults {
|
|
|
50
52
|
// The host's own file first, then every installed member's, name-sorted (deterministic).
|
|
51
53
|
// The host is excluded from the member scan — a workspace checkout symlinks the daemon
|
|
52
54
|
// into node_modules as its own member, and self-vs-self is not a collision.
|
|
53
|
-
static async collect(serviceRoot, nodeModules) {
|
|
55
|
+
static async collect(serviceRoot, nodeModules, { hostPaths = new HostPaths() } = {}) {
|
|
54
56
|
const own = await EnvDefaults.#readDefaults(serviceRoot, "@plurnk/plurnk-service");
|
|
55
57
|
if (own === null)
|
|
56
58
|
throw new Error("@plurnk/plurnk-service: .env.defaults missing from the package root — the shipped floor is not optional");
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
+
const environment = { ...own.parsed, ...process.env };
|
|
60
|
+
const sources = await PluginSources.read({ hostPaths, nodeModules, environment });
|
|
61
|
+
const configurationErrors = [...sources.configurationErrors];
|
|
62
|
+
const members = await EnvDefaults.#memberFiles(sources.packages.filter(({ dir }) => !sources.pluginPackages.has(dir)));
|
|
63
|
+
const files = [own, ...members.filter((m) => m.owner !== own.owner)];
|
|
64
|
+
const selected = new Set(sources.plugins.map(({ root }) => root));
|
|
65
|
+
const nativeDirs = new Set([...selected, ...sources.pluginPackages]);
|
|
66
|
+
for (const dir of nativeDirs) {
|
|
67
|
+
try {
|
|
68
|
+
const native = await Meta.readManifest(dir);
|
|
69
|
+
if (native === null || native.packageName === null || !Meta.isTrusted(native.packageName))
|
|
70
|
+
continue;
|
|
71
|
+
if (native.plurnk.kind === "module" ? !selected.has(dir) : !sources.pluginPackages.has(dir))
|
|
72
|
+
continue;
|
|
73
|
+
const file = await EnvDefaults.nativeFile(dir, native.packageName);
|
|
74
|
+
if (file !== null)
|
|
75
|
+
files.push(file);
|
|
76
|
+
}
|
|
77
|
+
catch (cause) {
|
|
78
|
+
if (!(cause instanceof ConfigurationError))
|
|
79
|
+
throw cause;
|
|
80
|
+
configurationErrors.push(cause);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return { files, configurationErrors, reports: sources.reports };
|
|
84
|
+
}
|
|
85
|
+
// {§operator-config-env-defaults} A standard bundle's panel is native extension data, not a portable component.
|
|
86
|
+
static async nativeFile(root, owner) {
|
|
87
|
+
const location = join(root, "ai.plurnk", ".env.defaults");
|
|
88
|
+
try {
|
|
89
|
+
if (!await AgentPluginFiles.contained(root, location)) {
|
|
90
|
+
throw new Error("native defaults resolve outside the plugin root");
|
|
91
|
+
}
|
|
92
|
+
return await EnvDefaults.#readDefaults(join(root, "ai.plurnk"), owner);
|
|
93
|
+
}
|
|
94
|
+
catch (cause) {
|
|
95
|
+
throw new ConfigurationError(location, `${owner}: native .env.defaults is unavailable: ${cause.message}`, { cause });
|
|
96
|
+
}
|
|
59
97
|
}
|
|
60
98
|
// The ONE law: global key uniqueness. A collision names both claimants — it is also the
|
|
61
99
|
// deliberate handoff signal when a sibling adopts a section the host carried for it.
|
|
@@ -83,7 +121,8 @@ export default class EnvDefaults {
|
|
|
83
121
|
"# Plurnk installed configuration defaults",
|
|
84
122
|
"# Generated on demand from each installed package's .env.defaults.",
|
|
85
123
|
"# This output is documentation, not an input file. Put user overrides in",
|
|
86
|
-
"# $XDG_CONFIG_HOME/plurnk/.env, a
|
|
124
|
+
"# $XDG_CONFIG_HOME/plurnk/.env, a file selected with --config or --env-file,",
|
|
125
|
+
"# or the shell environment. A working directory's .env is not read.",
|
|
87
126
|
"# Effective secret values are never projected here.",
|
|
88
127
|
"",
|
|
89
128
|
].join("\n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-defaults.js","sourceRoot":"","sources":["../../src/core/env-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"env-defaults.js","sourceRoot":"","sources":["../../src/core/env-defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-creation-policy.d.ts","sourceRoot":"","sources":["../../src/core/file-creation-policy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-creation-policy.d.ts","sourceRoot":"","sources":["../../src/core/file-creation-policy.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,YAAI,MAAM,EAAE,MAAM,EAAE,WAAW,CAAU,CAAC;AACzE,MAAM,MAAM,eAAe,GAAG,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAIhE,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAK1D;IAED,MAAM,CAAC,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,eAAe,CAEzE;IAED,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,GAAG,IAAI,GAAG,eAAe,CAG7F;IAED,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAEnE;CACJ"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// {§operator-config-file-create-scope}: one ordered service/workspace ceiling for
|
|
2
2
|
// filesystem creation. Admission itself remains owned by file membership; this module
|
|
3
3
|
// only parses and composes the configuration contract.
|
|
4
|
+
import { Knob } from "@plurnk/plurnk-meta";
|
|
4
5
|
export const FILE_CREATE_SCOPES = ["none", "root", "namespace"];
|
|
5
6
|
const rank = new Map(FILE_CREATE_SCOPES.map((scope, index) => [scope, index]));
|
|
6
7
|
export default class FileCreationPolicy {
|
|
@@ -11,7 +12,7 @@ export default class FileCreationPolicy {
|
|
|
11
12
|
return value;
|
|
12
13
|
}
|
|
13
14
|
static serviceScope(env = process.env) {
|
|
14
|
-
return
|
|
15
|
+
return Knob.choice("PLURNK_SERVICE_FILE_CREATE_SCOPE", FILE_CREATE_SCOPES, env);
|
|
15
16
|
}
|
|
16
17
|
static effective(service, workspace) {
|
|
17
18
|
if (workspace === null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-creation-policy.js","sourceRoot":"","sources":["../../src/core/file-creation-policy.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,sFAAsF;AACtF,uDAAuD;AAEvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAU,CAAC;AAGzE,MAAM,IAAI,GAAG,IAAI,GAAG,CAA0B,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAExG,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,MAAM,CAAC,KAAK,CAAC,KAAc,EAAE,IAAY;QACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAwB,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,mBAAmB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjH,CAAC;QACD,OAAO,KAAwB,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;QACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"file-creation-policy.js","sourceRoot":"","sources":["../../src/core/file-creation-policy.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,sFAAsF;AACtF,uDAAuD;AAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAU,CAAC;AAGzE,MAAM,IAAI,GAAG,IAAI,GAAG,CAA0B,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAExG,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,MAAM,CAAC,KAAK,CAAC,KAAc,EAAE,IAAY;QACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAwB,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,mBAAmB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjH,CAAC;QACD,OAAO,KAAwB,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC,kCAAkC,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,OAAwB,EAAE,SAAiC;QACxE,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACvF,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAAsB,EAAE,WAAoB;QACtD,OAAO,KAAK,KAAK,WAAW,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;IACvE,CAAC;CACJ"}
|
|
@@ -25,9 +25,15 @@ export interface RenderedLog {
|
|
|
25
25
|
readonly records: readonly string[];
|
|
26
26
|
readonly curationTargets: readonly ReclaimableLogItem[];
|
|
27
27
|
readonly attachments: readonly PacketAttachment[];
|
|
28
|
+
readonly emissions: readonly RenderedEmission[];
|
|
28
29
|
readonly unadmittedOutput: readonly number[];
|
|
29
30
|
readonly newOverflow: boolean;
|
|
30
31
|
}
|
|
32
|
+
export interface RenderedEmission {
|
|
33
|
+
readonly coordinate: string;
|
|
34
|
+
readonly content: string;
|
|
35
|
+
readonly weight: number;
|
|
36
|
+
}
|
|
31
37
|
export default class PacketWire {
|
|
32
38
|
#private;
|
|
33
39
|
static renderSlot(sections: SectionView[], slot: "system" | "user"): string;
|
|
@@ -39,10 +45,12 @@ export default class PacketWire {
|
|
|
39
45
|
static renderLog(entries: unknown, weighContent: WeighContent, options?: RenderLogOptions): string;
|
|
40
46
|
static renderLogWithAccounting(entries: unknown, weighContent: WeighContent, options?: RenderLogOptions): RenderedLog;
|
|
41
47
|
static sectionContent(packet: Packet, name: string): string;
|
|
42
|
-
static packetToWireMessages(packet: Packet,
|
|
48
|
+
static packetToWireMessages(packet: Packet, emissions: ReadonlyMap<string, string>): Array<{
|
|
43
49
|
role: string;
|
|
44
50
|
content: string;
|
|
45
51
|
}>;
|
|
52
|
+
static deliveredEmission(frozen: string): string;
|
|
53
|
+
static placedEmissions(sections: readonly SectionView[], emissions: ReadonlyMap<string, string>): string[];
|
|
46
54
|
static isArrival(e: {
|
|
47
55
|
readonly op?: unknown;
|
|
48
56
|
readonly origin?: unknown;
|
|
@@ -54,7 +62,7 @@ export default class PacketWire {
|
|
|
54
62
|
readonly attrs?: unknown;
|
|
55
63
|
readonly source?: unknown;
|
|
56
64
|
}): boolean;
|
|
57
|
-
static wireMessages(packet: RequestPacket, bytesOf: (attachment: PacketAttachment) => Promise<Uint8Array>, accepts?: (kind: PacketAttachment["kind"]) => boolean
|
|
65
|
+
static wireMessages(packet: RequestPacket, emissions: ReadonlyMap<string, string>, bytesOf: (attachment: PacketAttachment) => Promise<Uint8Array>, accepts?: (kind: PacketAttachment["kind"]) => boolean): Promise<ChatMessage[]>;
|
|
58
66
|
static attachmentCaption(attachment: PacketAttachment): string;
|
|
59
67
|
}
|
|
60
68
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packet-wire.d.ts","sourceRoot":"","sources":["../../src/core/packet-wire.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"packet-wire.d.ts","sourceRoot":"","sources":["../../src/core/packet-wire.ts"],"names":[],"mappings":"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"}
|
package/dist/core/packet-wire.js
CHANGED
|
@@ -96,7 +96,7 @@ export default class PacketWire {
|
|
|
96
96
|
static renderLogWithAccounting(entries, weighContent, options = {}) {
|
|
97
97
|
const log = Array.isArray(entries) ? entries : [];
|
|
98
98
|
if (log.length === 0)
|
|
99
|
-
return { content: "", records: [], curationTargets: [], attachments: [], unadmittedOutput: [], newOverflow: false };
|
|
99
|
+
return { content: "", records: [], curationTargets: [], attachments: [], emissions: [], unadmittedOutput: [], newOverflow: false };
|
|
100
100
|
const rows = PacketWire.#renderLogEntries(log, weighContent, options);
|
|
101
101
|
const records = rows.map(({ content }) => content);
|
|
102
102
|
return {
|
|
@@ -104,6 +104,7 @@ export default class PacketWire {
|
|
|
104
104
|
records,
|
|
105
105
|
curationTargets: rows.flatMap(({ curationTarget }) => curationTarget === null ? [] : [curationTarget]),
|
|
106
106
|
attachments: rows.flatMap(({ attachment }) => attachment === null ? [] : [attachment]),
|
|
107
|
+
emissions: rows.flatMap(({ emission }) => emission === null ? [] : [emission]),
|
|
107
108
|
unadmittedOutput: rows.flatMap(({ unadmittedOutput }) => unadmittedOutput === null ? [] : [unadmittedOutput]),
|
|
108
109
|
newOverflow: rows.some(({ newOverflow }) => newOverflow),
|
|
109
110
|
};
|
|
@@ -115,78 +116,88 @@ export default class PacketWire {
|
|
|
115
116
|
const s = packet.sections?.find((x) => x.name === name);
|
|
116
117
|
return typeof s?.content === "string" ? s.content : "";
|
|
117
118
|
}
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
-
// program, verbatim and alone, as the one assistant message; then the current turn's records
|
|
124
|
-
// and the remaining user sections as the closing user message. Nothing but grammar sits under
|
|
125
|
-
// the assistant marker: whatever does becomes the model's output vocabulary (#903).
|
|
126
|
-
static packetToWireMessages(packet, previousEmission = null) {
|
|
119
|
+
// {§packet-wire-envelope} — the packet as a transcript: the system slot, then the user sections in
|
|
120
|
+
// order, split after each placed emission row so that row's emission follows as the worker's own
|
|
121
|
+
// assistant message. The user contents joined by one blank line equal renderSlot(user) byte for
|
|
122
|
+
// byte; the request always closes on a user message.
|
|
123
|
+
static packetToWireMessages(packet, emissions) {
|
|
127
124
|
const sections = packet.sections ?? [];
|
|
128
125
|
const messages = [{ role: "system", content: PacketWire.renderSlot(sections, "system") }];
|
|
129
|
-
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
126
|
+
let pending = [];
|
|
127
|
+
for (const section of sections) {
|
|
128
|
+
if (section.slot !== "user")
|
|
129
|
+
continue;
|
|
130
|
+
const rendered = PacketWire.renderSection(section);
|
|
131
|
+
if (rendered.length === 0)
|
|
132
|
+
continue;
|
|
133
|
+
if (section.name !== "log") {
|
|
134
|
+
pending.push(rendered);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
for (const { content, coordinate } of PacketWire.#logRecords(rendered)) {
|
|
138
|
+
pending.push(content);
|
|
139
|
+
const frozen = coordinate === null ? undefined : emissions.get(coordinate);
|
|
140
|
+
const emission = frozen === undefined ? "" : PacketWire.deliveredEmission(frozen);
|
|
141
|
+
// {§emission-row}: an emission of only NOTE and WAIT delivers nothing; its row stands.
|
|
142
|
+
if (emission.length === 0)
|
|
143
|
+
continue;
|
|
144
|
+
messages.push({ role: "user", content: pending.join("\n\n") });
|
|
145
|
+
messages.push({ role: "assistant", content: emission });
|
|
146
|
+
pending = [];
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const closing = pending.join("\n\n");
|
|
150
|
+
if (closing.length === 0 && messages.at(-1)?.role === "assistant")
|
|
151
|
+
throw new Error("a request never ends on an emission: nothing follows the last one");
|
|
152
|
+
messages.push({ role: "user", content: closing });
|
|
148
153
|
return messages;
|
|
149
154
|
}
|
|
150
|
-
//
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
155
|
+
// {§emission-row} — the wire omits NOTE and WAIT blocks, whose rows show them whole; the frozen
|
|
156
|
+
// projection keeps every statement. Deliberately a text filter: the projection is TurnOps' own
|
|
157
|
+
// rendering, whose fences are longer than any backtick run inside them, so a block is read back by
|
|
158
|
+
// its fences alone, whatever era froze it.
|
|
159
|
+
static deliveredEmission(frozen) {
|
|
160
|
+
const lines = frozen.split("\n");
|
|
161
|
+
const kept = [];
|
|
162
|
+
for (let index = 0; index < lines.length;) {
|
|
163
|
+
const fence = /^`{3,}/u.exec(lines[index])?.[0];
|
|
164
|
+
if (fence === undefined)
|
|
165
|
+
throw new Error(`an emission block opens with a fence, not ${JSON.stringify(lines[index])}`);
|
|
166
|
+
const end = lines.findIndex((line, at) => at > index && (line === fence || line.startsWith(`${fence} <!-- `)));
|
|
167
|
+
if (end === -1)
|
|
168
|
+
throw new Error("an emission block closes with its own fence");
|
|
169
|
+
if (!new RegExp(`^${fence}(?:NOTE|WAIT)\\b`, "u").test(lines[index]))
|
|
170
|
+
kept.push(lines.slice(index, end + 1).join("\n"));
|
|
171
|
+
index = end + 2;
|
|
160
172
|
}
|
|
173
|
+
return kept.join("\n\n");
|
|
161
174
|
}
|
|
162
|
-
//
|
|
163
|
-
//
|
|
164
|
-
static
|
|
165
|
-
|
|
175
|
+
// {§emission-row} — the coordinates of the emission rows present in the final log section, in order.
|
|
176
|
+
// Every emission row must be announced by the render pass that built the map.
|
|
177
|
+
static placedEmissions(sections, emissions) {
|
|
178
|
+
const log = sections.find((section) => section.slot === "user" && section.name === "log");
|
|
179
|
+
if (log === undefined)
|
|
166
180
|
return [];
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
const coordinate = /(?:^|\n)### log:\/\/\/(\d+)\/(\d+)\//u.exec(record);
|
|
171
|
-
const group = groups.at(-1);
|
|
172
|
-
if (coordinate === null) {
|
|
173
|
-
if (group === undefined)
|
|
174
|
-
heading.push(record);
|
|
175
|
-
else
|
|
176
|
-
group.records.push(record);
|
|
181
|
+
const placed = [];
|
|
182
|
+
for (const { coordinate, leaf } of PacketWire.#logRecords(PacketWire.renderSection(log))) {
|
|
183
|
+
if (coordinate === null)
|
|
177
184
|
continue;
|
|
185
|
+
if (emissions.has(coordinate)) {
|
|
186
|
+
if (placed.includes(coordinate))
|
|
187
|
+
throw new Error(`log:///${coordinate}/emission appears twice in one log section`);
|
|
188
|
+
placed.push(coordinate);
|
|
178
189
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
group.records.push(record);
|
|
182
|
-
else {
|
|
183
|
-
groups.push({ turn, records: [...heading, record] });
|
|
184
|
-
heading = [];
|
|
190
|
+
else if (leaf === "emission") {
|
|
191
|
+
throw new Error(`log:///${coordinate}/emission reached the log section without its emission`);
|
|
185
192
|
}
|
|
186
193
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
194
|
+
return placed;
|
|
195
|
+
}
|
|
196
|
+
static #logRecords(rendered) {
|
|
197
|
+
return rendered.split(/\n\n(?=### log:\/\/\/)/u).map((content) => {
|
|
198
|
+
const match = /^### log:\/\/\/(\d+\/\d+\/\d+)(?:\/(\S*))?(?=\s|$)/mu.exec(content);
|
|
199
|
+
return { content, coordinate: match?.[1] ?? null, leaf: match?.[2] ?? null };
|
|
200
|
+
});
|
|
190
201
|
}
|
|
191
202
|
// Number a non-READ body line as `<N>:<line>` — `N:` followed by NO separator whitespace
|
|
192
203
|
// ({§render-rule-line-navigable-prefix}): the leading digit prevents column-zero fence collisions and gives
|
|
@@ -561,8 +572,10 @@ export default class PacketWire {
|
|
|
561
572
|
// Absence = "model" — the worker's own authorship is the default (#338). An arrival is an
|
|
562
573
|
// inbound SEND row the harness published ({§message-causal-source}): its stored origin says
|
|
563
574
|
// nothing, so the row names its sender instead (#706).
|
|
564
|
-
|
|
565
|
-
|
|
575
|
+
// {§emission-row}: an emission row is stored as the harness's, but names its author.
|
|
576
|
+
const author = LogEntryProjection.isEmission(e) ? e.producer : e.origin;
|
|
577
|
+
if (typeof author === "string" && author !== "model" && !PacketWire.isArrival(e))
|
|
578
|
+
meta.origin = author;
|
|
566
579
|
// {§env-delta-attribution}: render the causal worker address or
|
|
567
580
|
// subsystem token when present; absence means the owning worker.
|
|
568
581
|
// {§message-short-identity} an arrival whose source is the transport's own name for it adds
|
|
@@ -794,7 +807,7 @@ export default class PacketWire {
|
|
|
794
807
|
// complete, and exterior arrivals share their packet allowance. Structured mutation receipts own
|
|
795
808
|
// their join bound; every remaining body uses the ordinary fixed preview.
|
|
796
809
|
static #rowBody(identity, e, fullBody, bodyVisibility, facts, promptProjectionWeight, weighContent) {
|
|
797
|
-
const { meta, op
|
|
810
|
+
const { meta, op } = identity;
|
|
798
811
|
const projectedBody = {
|
|
799
812
|
...fullBody,
|
|
800
813
|
content: bodyVisibility.fullyFolded ? bodyVisibility.readableContent : bodyVisibility.content,
|
|
@@ -803,7 +816,6 @@ export default class PacketWire {
|
|
|
803
816
|
const previewExempt = op === "READ"
|
|
804
817
|
|| op === "FIND"
|
|
805
818
|
|| op === "NOTE" || typeof op === "string" && TurnDisposition.isOp(op)
|
|
806
|
-
|| (op === null && renderedLeaf === "ops")
|
|
807
819
|
|| facts.structuredMutationReceipt;
|
|
808
820
|
const lineAnchors = op === "READ" ? e.lineAnchors ?? null : null;
|
|
809
821
|
const lineNumberWidth = op === "READ" ? e.lineNumberWidth ?? null : null;
|
|
@@ -894,13 +906,19 @@ export default class PacketWire {
|
|
|
894
906
|
: null;
|
|
895
907
|
if (attachment !== null)
|
|
896
908
|
meta.tokensAttachment = attachment.weight;
|
|
909
|
+
// {§emission-row}: an emission row carries its frozen emission outside its record, and charges what
|
|
910
|
+
// the wire delivers of it, as the worker's own message, exactly as a native part is charged.
|
|
911
|
+
const emission = LogEntryProjection.isEmission(e) && coordinate !== null
|
|
912
|
+
? { coordinate, content: fullBody.content, weight: weighContent(PacketWire.deliveredEmission(fullBody.content)) }
|
|
913
|
+
: null;
|
|
897
914
|
for (let pass = 0; pass < 8; pass += 1) {
|
|
898
|
-
const next = weighContent(renderRow()) + (attachment?.weight ?? 0);
|
|
915
|
+
const next = weighContent(renderRow()) + (attachment?.weight ?? 0) + (emission?.weight ?? 0);
|
|
899
916
|
if (next === logTokens) {
|
|
900
917
|
return {
|
|
901
918
|
content: renderRow(),
|
|
902
919
|
curationTarget: { path, logTokens },
|
|
903
920
|
attachment,
|
|
921
|
+
emission,
|
|
904
922
|
unadmittedOutput: (display === "open" || attachment !== null)
|
|
905
923
|
&& fullBody.provenance === "returned"
|
|
906
924
|
&& e.output_admission_turn_id == null
|
|
@@ -952,8 +970,8 @@ export default class PacketWire {
|
|
|
952
970
|
}
|
|
953
971
|
// {§packet-attachment-parts} — the wire form with native parts: user text first, then each accepted
|
|
954
972
|
// retained native part in observation order.
|
|
955
|
-
static async wireMessages(packet, bytesOf, accepts = () => true
|
|
956
|
-
const messages = PacketWire.packetToWireMessages(packet,
|
|
973
|
+
static async wireMessages(packet, emissions, bytesOf, accepts = () => true) {
|
|
974
|
+
const messages = PacketWire.packetToWireMessages(packet, emissions);
|
|
957
975
|
// {§packet-attachment-parts} — native parts ride the closing user message.
|
|
958
976
|
const closing = messages.at(-1);
|
|
959
977
|
const parts = [{ type: "text", text: closing.content }];
|