@ponythewhite/base-context 1.0.6 → 1.0.8
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/CHANGELOG.md +25 -0
- package/dist/base-context-runtime/pyproject.toml +1 -1
- package/dist/base-context-runtime/src/rlm/__init__.py +3 -0
- package/dist/base-context-runtime/src/rlm/harness.py +86 -48
- package/dist/base-context-runtime/test/test_harness.py +215 -140
- package/dist/base-context-runtime/uv.lock +1 -1
- package/dist/build-info.json +1 -1
- package/dist/bundle/amazon-bedrock.js +3 -3
- package/dist/bundle/{anthropic-UV5GZDGU.js → anthropic-5PSCZEER.js} +2 -7
- package/dist/bundle/{azure-openai-responses-WSNPXLYC.js → azure-openai-responses-AYTLJR33.js} +2 -2
- package/dist/bundle/{bundled-modules-MEACET4U.js → bundled-modules-IGMJH2MU.js} +5 -5
- package/dist/bundle/{chunk-UPVDERMD.js → chunk-2IPDSTDR.js} +11 -9
- package/dist/bundle/chunk-D3KOF57W.js +22040 -0
- package/dist/bundle/{chunk-QKI6KEGP.js → chunk-EXEFSSF4.js} +1509 -577
- package/dist/bundle/{chunk-VSIYFWYI.js → chunk-KT2BNEPE.js} +21 -8
- package/dist/bundle/{chunk-KTNETTHI.js → chunk-Q3MBSBEB.js} +3 -101
- package/dist/bundle/{chunk-LFPWHI42.js → chunk-QKIFBA7N.js} +2 -2
- package/dist/bundle/{chunk-LIZVVGHR.js → chunk-RVJVXZCS.js} +13 -10
- package/dist/bundle/{cli-main-ANUJY7Y4.js → cli-main-BUK7QTHO.js} +4 -4
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/{google-T32FMD4G.js → google-HTMCUJ7X.js} +2 -2
- package/dist/bundle/{google-vertex-56KP6I3B.js → google-vertex-ZQO65AXF.js} +2 -2
- package/dist/bundle/{main-4GIKOHIT.js → main-2FWHT2WZ.js} +5 -5
- package/dist/bundle/{mistral-WGBMYIVU.js → mistral-SB7LU56G.js} +1 -1
- package/dist/bundle/{openai-codex-responses-PIV2RQ3G.js → openai-codex-responses-5CEW4VN3.js} +53 -27
- package/dist/bundle/{openai-completions-64C3JPR4.js → openai-completions-BAZJQSS2.js} +1 -1
- package/dist/bundle/{openai-responses-UI7RSTDV.js → openai-responses-VHOE427P.js} +48 -5
- package/dist/core/agent-session.d.ts +6 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +189 -31
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/canonical-context.d.ts +8 -0
- package/dist/core/canonical-context.d.ts.map +1 -1
- package/dist/core/canonical-context.js +37 -5
- package/dist/core/canonical-context.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +2 -2
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +31 -13
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/context-epoch.d.ts +1 -1
- package/dist/core/context-epoch.d.ts.map +1 -1
- package/dist/core/context-epoch.js +20 -12
- package/dist/core/context-epoch.js.map +1 -1
- package/dist/core/extensions/types.d.ts +2 -2
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/history-index-worker.d.ts.map +1 -1
- package/dist/core/history-index-worker.js +29 -8
- package/dist/core/history-index-worker.js.map +1 -1
- package/dist/core/history-index.d.ts +11 -1
- package/dist/core/history-index.d.ts.map +1 -1
- package/dist/core/history-index.js +2 -1
- package/dist/core/history-index.js.map +1 -1
- package/dist/core/inference-coordinator.d.ts.map +1 -1
- package/dist/core/inference-coordinator.js +110 -13
- package/dist/core/inference-coordinator.js.map +1 -1
- package/dist/core/kernel/bootstrap.d.ts.map +1 -1
- package/dist/core/kernel/bootstrap.js +97 -107
- package/dist/core/kernel/bootstrap.js.map +1 -1
- package/dist/core/kernel/repl-manager.d.ts.map +1 -1
- package/dist/core/kernel/repl-manager.js +11 -0
- package/dist/core/kernel/repl-manager.js.map +1 -1
- package/dist/core/kernel/shared.d.ts +2 -0
- package/dist/core/kernel/shared.d.ts.map +1 -1
- package/dist/core/kernel/shared.js.map +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +4 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/prompts/rlm.d.ts.map +1 -1
- package/dist/core/prompts/rlm.js +4 -2
- package/dist/core/prompts/rlm.js.map +1 -1
- package/dist/core/public-context.d.ts.map +1 -1
- package/dist/core/public-context.js +16 -0
- package/dist/core/public-context.js.map +1 -1
- package/dist/core/refinement/refinement.d.ts +19 -5
- package/dist/core/refinement/refinement.d.ts.map +1 -1
- package/dist/core/refinement/refinement.js +90 -35
- package/dist/core/refinement/refinement.js.map +1 -1
- package/dist/core/request-view-selection.d.ts +12 -4
- package/dist/core/request-view-selection.d.ts.map +1 -1
- package/dist/core/request-view-selection.js +242 -100
- package/dist/core/request-view-selection.js.map +1 -1
- package/dist/core/retained-tool-output.d.ts +28 -0
- package/dist/core/retained-tool-output.d.ts.map +1 -0
- package/dist/core/retained-tool-output.js +102 -0
- package/dist/core/retained-tool-output.js.map +1 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/selective-recovery.d.ts +47 -3
- package/dist/core/selective-recovery.d.ts.map +1 -1
- package/dist/core/selective-recovery.js +428 -109
- package/dist/core/selective-recovery.js.map +1 -1
- package/dist/core/session-history-index.d.ts +3 -1
- package/dist/core/session-history-index.d.ts.map +1 -1
- package/dist/core/session-history-index.js +1 -1
- package/dist/core/session-history-index.js.map +1 -1
- package/dist/core/settings-manager.d.ts +5 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +3 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.d.ts +3 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +3 -3
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/task-frame.d.ts +1 -1
- package/dist/core/task-frame.d.ts.map +1 -1
- package/dist/core/task-frame.js +21 -1
- package/dist/core/task-frame.js.map +1 -1
- package/dist/core/task-state-reader.d.ts +10 -2
- package/dist/core/task-state-reader.d.ts.map +1 -1
- package/dist/core/task-state-reader.js +75 -9
- package/dist/core/task-state-reader.js.map +1 -1
- package/dist/core/tools/ipython.d.ts +5 -0
- package/dist/core/tools/ipython.d.ts.map +1 -1
- package/dist/core/tools/ipython.js +59 -17
- package/dist/core/tools/ipython.js.map +1 -1
- package/dist/core/tools/prime-context.d.ts.map +1 -1
- package/dist/core/tools/prime-context.js +1 -1
- package/dist/core/tools/prime-context.js.map +1 -1
- package/dist/core/view-units.d.ts +4 -0
- package/dist/core/view-units.d.ts.map +1 -1
- package/dist/core/view-units.js +28 -19
- package/dist/core/view-units.js.map +1 -1
- package/dist/installer.mjs +98 -77
- package/dist/modes/interactive/components/refinement-outcome-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/refinement-outcome-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +5 -5
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/skills/skill-creator/SKILL.md +18 -1
- package/docs/settings.md +45 -0
- package/docs/skills.md +77 -2
- package/package.json +4 -4
- package/skills/skill-creator/SKILL.md +18 -1
- package/dist/bundle/chunk-W46VZFI6.js +0 -21681
|
@@ -84,67 +84,99 @@ async function isExecutable(filePath) {
|
|
|
84
84
|
return false;
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
|
-
function
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
return "unreadable";
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
function normalizePythonSkills(pythonSkills) {
|
|
87
|
+
function planPythonSkills(pythonSkills) {
|
|
88
|
+
const metadata = new Map();
|
|
89
|
+
const siblings = new Map();
|
|
96
90
|
const byKey = new Map();
|
|
91
|
+
const readMetadata = (pyprojectPath) => {
|
|
92
|
+
let parsed = metadata.get(pyprojectPath);
|
|
93
|
+
if (parsed)
|
|
94
|
+
return parsed;
|
|
95
|
+
let text = "";
|
|
96
|
+
let pyprojectHash = "unreadable";
|
|
97
|
+
try {
|
|
98
|
+
const bytes = readFileSync(pyprojectPath);
|
|
99
|
+
text = bytes.toString("utf8");
|
|
100
|
+
pyprojectHash = `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Preserve the existing unreadable-metadata readiness behavior.
|
|
104
|
+
}
|
|
105
|
+
const projectSection = parseTomlProjectSection(text);
|
|
106
|
+
parsed = {
|
|
107
|
+
projectName: projectSection?.match(/^\s*name\s*=\s*["']([^"']+)["']/m)?.[1]?.trim(),
|
|
108
|
+
dependencyNames: parsePythonSkillDependencyNames(projectSection),
|
|
109
|
+
pyprojectHash,
|
|
110
|
+
};
|
|
111
|
+
metadata.set(pyprojectPath, parsed);
|
|
112
|
+
return parsed;
|
|
113
|
+
};
|
|
114
|
+
const projectName = (skill) => (readMetadata(skill.pyprojectPath).projectName || skill.importName).replaceAll("_", "-").toLowerCase();
|
|
115
|
+
const siblingPackages = (packagePath) => {
|
|
116
|
+
const siblingsDir = path.dirname(packagePath);
|
|
117
|
+
let packages = siblings.get(siblingsDir);
|
|
118
|
+
if (packages)
|
|
119
|
+
return packages;
|
|
120
|
+
packages = new Map();
|
|
121
|
+
for (const entry of readdirSync(siblingsDir, { withFileTypes: true })) {
|
|
122
|
+
if (!entry.isDirectory())
|
|
123
|
+
continue;
|
|
124
|
+
const siblingPath = path.join(siblingsDir, entry.name);
|
|
125
|
+
const pyprojectPath = path.join(siblingPath, "pyproject.toml");
|
|
126
|
+
if (!existsSync(pyprojectPath))
|
|
127
|
+
continue;
|
|
128
|
+
const skill = {
|
|
129
|
+
importName: entry.name.replaceAll("-", "_"),
|
|
130
|
+
packagePath: siblingPath,
|
|
131
|
+
pyprojectPath,
|
|
132
|
+
pyprojectHash: readMetadata(pyprojectPath).pyprojectHash,
|
|
133
|
+
};
|
|
134
|
+
const name = projectName(skill);
|
|
135
|
+
if (!packages.has(name))
|
|
136
|
+
packages.set(name, skill);
|
|
137
|
+
}
|
|
138
|
+
siblings.set(siblingsDir, packages);
|
|
139
|
+
return packages;
|
|
140
|
+
};
|
|
97
141
|
const addSkill = (skill) => {
|
|
98
142
|
const packagePath = path.resolve(skill.packagePath);
|
|
99
143
|
const pyprojectPath = path.resolve(skill.pyprojectPath);
|
|
100
144
|
const key = `${skill.importName}\0${packagePath}`;
|
|
101
|
-
if (byKey.has(key))
|
|
145
|
+
if (byKey.has(key))
|
|
102
146
|
return;
|
|
103
|
-
|
|
147
|
+
const parsed = readMetadata(pyprojectPath);
|
|
104
148
|
const bootstrapSkill = {
|
|
105
149
|
importName: skill.importName,
|
|
106
150
|
packagePath,
|
|
107
151
|
pyprojectPath,
|
|
108
|
-
pyprojectHash:
|
|
152
|
+
pyprojectHash: parsed.pyprojectHash,
|
|
109
153
|
};
|
|
110
154
|
byKey.set(key, bootstrapSkill);
|
|
111
|
-
for (const
|
|
112
|
-
const
|
|
113
|
-
if (
|
|
114
|
-
addSkill(
|
|
115
|
-
}
|
|
155
|
+
for (const name of parsed.dependencyNames) {
|
|
156
|
+
const dependency = siblingPackages(packagePath).get(name);
|
|
157
|
+
if (dependency)
|
|
158
|
+
addSkill(dependency);
|
|
116
159
|
}
|
|
117
160
|
};
|
|
118
|
-
for (const skill of pythonSkills ?? [])
|
|
161
|
+
for (const skill of pythonSkills ?? [])
|
|
119
162
|
addSkill(skill);
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
try {
|
|
130
|
-
const text = readFileSync(pyprojectPath, "utf-8");
|
|
131
|
-
const match = text.match(/^\s*\[project\]\s*$/m);
|
|
132
|
-
if (!match || match.index === undefined) {
|
|
133
|
-
return undefined;
|
|
134
|
-
}
|
|
135
|
-
const sectionStart = match.index + match[0].length;
|
|
136
|
-
const rest = text.slice(sectionStart);
|
|
137
|
-
const nextSection = rest.search(/^\s*\[/m);
|
|
138
|
-
return nextSection >= 0 ? rest.slice(0, nextSection) : rest;
|
|
139
|
-
}
|
|
140
|
-
catch {
|
|
141
|
-
return undefined;
|
|
142
|
-
}
|
|
163
|
+
const skills = [...byKey.values()].sort((a, b) => a.packagePath.localeCompare(b.packagePath) || a.importName.localeCompare(b.importName));
|
|
164
|
+
const byProjectName = new Map(skills.map((skill) => [projectName(skill), skill]));
|
|
165
|
+
const dependencies = new Map(skills.map((skill) => [
|
|
166
|
+
skill,
|
|
167
|
+
[...readMetadata(skill.pyprojectPath).dependencyNames]
|
|
168
|
+
.map((name) => byProjectName.get(name))
|
|
169
|
+
.filter((dependency) => dependency !== undefined),
|
|
170
|
+
]));
|
|
171
|
+
return { skills, dependencies, installOrder: sortPythonSkillsForInstall(skills, dependencies) };
|
|
143
172
|
}
|
|
144
|
-
function
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
173
|
+
function parseTomlProjectSection(text) {
|
|
174
|
+
const match = text.match(/^\s*\[project\]\s*$/m);
|
|
175
|
+
if (!match || match.index === undefined)
|
|
176
|
+
return;
|
|
177
|
+
const rest = text.slice(match.index + match[0].length);
|
|
178
|
+
const nextSection = rest.search(/^\s*\[/m);
|
|
179
|
+
return nextSection >= 0 ? rest.slice(0, nextSection) : rest;
|
|
148
180
|
}
|
|
149
181
|
function parseDependencyPackageName(dependency) {
|
|
150
182
|
const withoutMarker = dependency.split(";")[0]?.trim() ?? "";
|
|
@@ -183,8 +215,7 @@ function findTomlArrayEnd(text, startIndex) {
|
|
|
183
215
|
}
|
|
184
216
|
return -1;
|
|
185
217
|
}
|
|
186
|
-
function
|
|
187
|
-
const projectSection = readTomlProjectSection(skill.pyprojectPath);
|
|
218
|
+
function parsePythonSkillDependencyNames(projectSection) {
|
|
188
219
|
if (!projectSection) {
|
|
189
220
|
return new Set();
|
|
190
221
|
}
|
|
@@ -212,42 +243,8 @@ function readPythonSkillDependencyNames(skill) {
|
|
|
212
243
|
}
|
|
213
244
|
return dependencies;
|
|
214
245
|
}
|
|
215
|
-
function
|
|
216
|
-
const
|
|
217
|
-
for (const entry of readdirSync(siblingsDir, { withFileTypes: true })) {
|
|
218
|
-
if (!entry.isDirectory()) {
|
|
219
|
-
continue;
|
|
220
|
-
}
|
|
221
|
-
const packagePath = path.join(siblingsDir, entry.name);
|
|
222
|
-
const pyprojectPath = path.join(packagePath, "pyproject.toml");
|
|
223
|
-
if (!existsSync(pyprojectPath)) {
|
|
224
|
-
continue;
|
|
225
|
-
}
|
|
226
|
-
const dependency = {
|
|
227
|
-
importName: entry.name.replaceAll("-", "_"),
|
|
228
|
-
packagePath,
|
|
229
|
-
pyprojectPath,
|
|
230
|
-
pyprojectHash: fileContentHash(pyprojectPath),
|
|
231
|
-
};
|
|
232
|
-
if (readPythonSkillProjectName(dependency).replaceAll("_", "-").toLowerCase() === dependencyName) {
|
|
233
|
-
return dependency;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
return undefined;
|
|
237
|
-
}
|
|
238
|
-
function sortPythonSkillsForInstall(pythonSkills) {
|
|
239
|
-
const byProjectName = new Map();
|
|
240
|
-
const originalIndex = new Map();
|
|
241
|
-
for (const [index, skill] of pythonSkills.entries()) {
|
|
242
|
-
originalIndex.set(skill, index);
|
|
243
|
-
byProjectName.set(readPythonSkillProjectName(skill).replaceAll("_", "-").toLowerCase(), skill);
|
|
244
|
-
}
|
|
245
|
-
const dependenciesBySkill = new Map();
|
|
246
|
-
for (const skill of pythonSkills) {
|
|
247
|
-
dependenciesBySkill.set(skill, [...readPythonSkillDependencyNames(skill)]
|
|
248
|
-
.map((dependencyName) => byProjectName.get(dependencyName) ?? resolveSiblingPythonSkillDependency(skill, dependencyName))
|
|
249
|
-
.filter((dependency) => Boolean(dependency)));
|
|
250
|
-
}
|
|
246
|
+
function sortPythonSkillsForInstall(pythonSkills, dependenciesBySkill) {
|
|
247
|
+
const originalIndex = new Map(pythonSkills.map((skill, index) => [skill, index]));
|
|
251
248
|
const pending = new Set(pythonSkills);
|
|
252
249
|
const sorted = [];
|
|
253
250
|
while (pending.size > 0) {
|
|
@@ -588,13 +585,11 @@ async function hashRuntimeSource(sourceDir) {
|
|
|
588
585
|
}
|
|
589
586
|
return `sha256:${hash.digest("hex")}`;
|
|
590
587
|
}
|
|
591
|
-
async function bootstrapVenv(venv,
|
|
588
|
+
async function bootstrapVenv(venv, plan, options, sourceDir, runtimeIdentity) {
|
|
592
589
|
await mkdir(path.dirname(venv), { recursive: true });
|
|
593
590
|
const uv = await ensureUv(options);
|
|
594
591
|
const python = path.join(venv, "bin", "python");
|
|
595
|
-
const sourceDir = await resolveRuntimeSourceDir();
|
|
596
592
|
const runtimeRequirement = sourceDir;
|
|
597
|
-
const runtimeIdentity = await resolveRuntimeIdentity();
|
|
598
593
|
await run(uv, ["python", "install", PYTHON_VERSION]);
|
|
599
594
|
await run(uv, ["venv", venv, "--python", PYTHON_VERSION, "--seed"]);
|
|
600
595
|
await run(uv, [
|
|
@@ -606,27 +601,19 @@ async function bootstrapVenv(venv, pythonSkills, options) {
|
|
|
606
601
|
STATE_SNAPSHOT_REQUIREMENT,
|
|
607
602
|
...DEFAULT_RLM_EXTRA_UV_ARGS,
|
|
608
603
|
]);
|
|
609
|
-
await syncPythonSkills(uv, venv, python, runtimeIdentity,
|
|
604
|
+
await syncPythonSkills(uv, venv, python, runtimeIdentity, plan, options);
|
|
610
605
|
}
|
|
611
|
-
async function syncPythonSkills(uv, venv, python, runtimeIdentity,
|
|
606
|
+
async function syncPythonSkills(uv, venv, python, runtimeIdentity, plan, options) {
|
|
612
607
|
const version = await readBootstrapVersion(venv);
|
|
613
608
|
const installedPythonSkills = [];
|
|
614
609
|
const currentPythonSkills = new Map((version?.pythonSkills ?? []).map((skill) => [`${skill.importName}\0${skill.packagePath}`, skill]));
|
|
615
|
-
const
|
|
616
|
-
const dependenciesBySkill = new Map(pythonSkills.map((skill) => [
|
|
617
|
-
skill,
|
|
618
|
-
[...readPythonSkillDependencyNames(skill)]
|
|
619
|
-
.map((dependencyName) => pythonSkillsByProjectName.get(dependencyName) ??
|
|
620
|
-
resolveSiblingPythonSkillDependency(skill, dependencyName))
|
|
621
|
-
.filter((dependency) => Boolean(dependency)),
|
|
622
|
-
]));
|
|
623
|
-
for (const skill of sortPythonSkillsForInstall(pythonSkills)) {
|
|
610
|
+
for (const skill of plan.installOrder) {
|
|
624
611
|
const existingSkill = currentPythonSkills.get(`${skill.importName}\0${skill.packagePath}`);
|
|
625
612
|
if (existingSkill?.pyprojectPath === skill.pyprojectPath && existingSkill.pyprojectHash === skill.pyprojectHash) {
|
|
626
613
|
installedPythonSkills.push(skill);
|
|
627
614
|
continue;
|
|
628
615
|
}
|
|
629
|
-
const localDependencies =
|
|
616
|
+
const localDependencies = plan.dependencies.get(skill) ?? [];
|
|
630
617
|
const localDependencyArgs = localDependencies
|
|
631
618
|
.filter((dependency) => {
|
|
632
619
|
const installedDependency = currentPythonSkills.get(`${dependency.importName}\0${dependency.packagePath}`);
|
|
@@ -669,7 +656,8 @@ function formatBootstrapFailure(error) {
|
|
|
669
656
|
"First-time setup needs internet to install uv, Python, the bundled base-context-runtime, and default Python packages; once set up, base-context runs offline. " +
|
|
670
657
|
"Set BASE_CONTEXT_KERNEL_PYTHON to a Python with a current base-context-runtime and default Python packages installed to skip auto-bootstrap.");
|
|
671
658
|
}
|
|
672
|
-
async function ensureKernelPythonUncached(options,
|
|
659
|
+
async function ensureKernelPythonUncached(options, plan) {
|
|
660
|
+
const pythonSkills = plan.skills;
|
|
673
661
|
const override = readAbsolutePathEnv(PRODUCT_ENV.kernelPython);
|
|
674
662
|
if (override) {
|
|
675
663
|
const python = override;
|
|
@@ -695,7 +683,8 @@ async function ensureKernelPythonUncached(options, pythonSkills) {
|
|
|
695
683
|
}
|
|
696
684
|
const venv = await resolveWritableKernelVenvDir();
|
|
697
685
|
const python = path.join(venv, "bin", "python");
|
|
698
|
-
const
|
|
686
|
+
const sourceDir = await resolveRuntimeSourceDir();
|
|
687
|
+
const runtimeIdentity = await hashRuntimeSource(sourceDir);
|
|
699
688
|
if (await kernelReady(python, venv, runtimeIdentity, pythonSkills))
|
|
700
689
|
return python;
|
|
701
690
|
const releaseLock = await acquireBootstrapLock(venv);
|
|
@@ -703,7 +692,7 @@ async function ensureKernelPythonUncached(options, pythonSkills) {
|
|
|
703
692
|
if (await kernelReady(python, venv, runtimeIdentity, pythonSkills))
|
|
704
693
|
return python;
|
|
705
694
|
if (await kernelBaseReady(python, venv, runtimeIdentity)) {
|
|
706
|
-
await syncPythonSkills(await ensureUv(options), venv, python, runtimeIdentity,
|
|
695
|
+
await syncPythonSkills(await ensureUv(options), venv, python, runtimeIdentity, plan, options);
|
|
707
696
|
return python;
|
|
708
697
|
}
|
|
709
698
|
if (ownedRuntime && !readAbsolutePathEnv(PRODUCT_ENV.kernelVenv)) {
|
|
@@ -715,7 +704,7 @@ async function ensureKernelPythonUncached(options, pythonSkills) {
|
|
|
715
704
|
reportProgress(options, "rebuilding kernel venv");
|
|
716
705
|
await rm(venv, { recursive: true, force: true });
|
|
717
706
|
}
|
|
718
|
-
await bootstrapVenv(venv,
|
|
707
|
+
await bootstrapVenv(venv, plan, options, sourceDir, runtimeIdentity);
|
|
719
708
|
}
|
|
720
709
|
catch (error) {
|
|
721
710
|
throw formatBootstrapFailure(error);
|
|
@@ -727,11 +716,11 @@ async function ensureKernelPythonUncached(options, pythonSkills) {
|
|
|
727
716
|
return python;
|
|
728
717
|
}
|
|
729
718
|
export function ensureKernelPython(options = {}) {
|
|
730
|
-
const
|
|
731
|
-
const key = ensureKernelPythonKey(
|
|
719
|
+
const plan = planPythonSkills(options.pythonSkills);
|
|
720
|
+
const key = ensureKernelPythonKey(plan.skills);
|
|
732
721
|
if (inFlightEnsureKernelPython?.key === key)
|
|
733
722
|
return inFlightEnsureKernelPython.promise;
|
|
734
|
-
const promise = ensureKernelPythonUncached(options,
|
|
723
|
+
const promise = ensureKernelPythonUncached(options, plan).finally(() => {
|
|
735
724
|
if (inFlightEnsureKernelPython?.promise === promise)
|
|
736
725
|
inFlightEnsureKernelPython = null;
|
|
737
726
|
});
|
|
@@ -749,8 +738,9 @@ export async function prepareOwnedKernelPython() {
|
|
|
749
738
|
}
|
|
750
739
|
const python = path.join(ownedRuntime.runtimeDir, "bin", "python");
|
|
751
740
|
const options = { onProgress: (message) => console.error(message) };
|
|
752
|
-
await
|
|
753
|
-
const runtimeIdentity = await
|
|
741
|
+
const sourceDir = await resolveRuntimeSourceDir();
|
|
742
|
+
const runtimeIdentity = await hashRuntimeSource(sourceDir);
|
|
743
|
+
await bootstrapVenv(ownedRuntime.runtimeDir, planPythonSkills([]), options, sourceDir, runtimeIdentity);
|
|
754
744
|
if (!(await kernelReady(python, ownedRuntime.runtimeDir, runtimeIdentity, [])) ||
|
|
755
745
|
(await missingRlmExtraImportLabels(python)).length > 0) {
|
|
756
746
|
throw new Error("Base-Context candidate Python runtime did not become ready. This candidate was not activated.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/core/kernel/bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { constants, existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { access, mkdir, readdir, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { stderr, stdin } from \"node:process\";\nimport { createInterface } from \"node:readline/promises\";\nimport { setTimeout as sleep } from \"node:timers/promises\";\nimport { getPackageDir, getPhysicalPackageDir } from \"../../config.js\";\nimport { getOwnedInstallation, readInstallSelection } from \"../../owned-install-layout.js\";\nimport { PRODUCT, PRODUCT_ENV } from \"../../product-identity.js\";\nimport { assertProductStatePath, readAbsolutePathEnv, resolveRuntimePaths } from \"../../runtime-paths.js\";\nimport type { PythonSkillRuntimeInfo } from \"../skills.js\";\n\nconst ownedRuntime = getOwnedInstallation(getPhysicalPackageDir());\nconst BOOTSTRAP_SCHEMA = 11;\nconst PYTHON_VERSION = \"3.13\";\nconst RUNTIME_REQUIREMENT = PRODUCT.runtimeDistribution;\n// Serializes the kernel's user namespace so it can be revived across session\n// resume. Internal-only; intentionally not surfaced to the model as an import.\nconst STATE_SNAPSHOT_REQUIREMENT = \"dill\";\nconst DEFAULT_RLM_EXTRA_PACKAGES = [\n\t{ uvArg: \"requests\", importName: \"requests\", promptLabel: \"requests\" },\n\t{ uvArg: \"httpx\", importName: \"httpx\", promptLabel: \"httpx\" },\n\t{ uvArg: \"pyyaml\", importName: \"yaml\", promptLabel: \"yaml (PyYAML)\" },\n\t{ uvArg: \"tomli\", importName: \"tomli\", promptLabel: \"tomli\" },\n\t{ uvArg: \"python-dotenv\", importName: \"dotenv\", promptLabel: \"dotenv (python-dotenv)\" },\n\t{ uvArg: \"pandas\", importName: \"pandas\", promptLabel: \"pandas\" },\n\t{ uvArg: \"numpy\", importName: \"numpy\", promptLabel: \"numpy\" },\n\t{ uvArg: \"scipy\", importName: \"scipy\", promptLabel: \"scipy\" },\n\t{ uvArg: \"beautifulsoup4\", importName: \"bs4\", promptLabel: \"bs4 (Beautiful Soup)\" },\n\t{ uvArg: \"lxml\", importName: \"lxml\", promptLabel: \"lxml\" },\n\t{ uvArg: \"pydantic\", importName: \"pydantic\", promptLabel: \"pydantic\" },\n\t{ uvArg: \"tyro\", importName: \"tyro\", promptLabel: \"tyro\" },\n];\nexport const DEFAULT_RLM_EXTRA_UV_ARGS = DEFAULT_RLM_EXTRA_PACKAGES.map((pkg) => pkg.uvArg);\nexport const DEFAULT_RLM_EXTRA_IMPORT_NAMES = DEFAULT_RLM_EXTRA_PACKAGES.map((pkg) => pkg.importName);\nexport const DEFAULT_RLM_EXTRA_IMPORT_LABELS = DEFAULT_RLM_EXTRA_PACKAGES.map((pkg) => pkg.promptLabel);\nconst UV_INSTALL_COMMAND = \"curl -LsSf https://astral.sh/uv/install.sh | UV_NO_MODIFY_PATH=1 sh\";\nconst REQUIRED_HARNESS_METHODS = [\n\t\"create_memory\",\n\t\"update_memory\",\n\t\"delete_memory\",\n\t\"create_skill\",\n\t\"update_skill\",\n\t\"delete_skill\",\n\t\"create_subagent\",\n\t\"update_subagent\",\n\t\"delete_subagent\",\n\t\"create_prompt_note\",\n\t\"update_prompt_note\",\n\t\"delete_prompt_note\",\n\t\"record_refinement\",\n];\nconst RUNTIME_READY_CHECK = `import inspect; from importlib import metadata; import rlm; assert metadata.version(\"${RUNTIME_REQUIREMENT}\"); assert \"prime-agent-runtime\" not in {d.metadata[\"Name\"].lower().replace(\"_\", \"-\") for d in metadata.distributions()}; from rlm import McpIntegration; import rlm.mcp as mcp; from rlm.harness import HarnessEntry; _harness_methods = ${JSON.stringify(REQUIRED_HARNESS_METHODS)}; assert callable(mcp.list_tools); assert callable(mcp.call_tool); assert hasattr(rlm, 'run'); assert callable(rlm); assert hasattr(rlm, 'rlm'); assert callable(rlm.rlm); assert callable(rlm.host_request); assert callable(rlm.find_models); assert callable(rlm.rlm.find_models); assert hasattr(rlm, 'harness'); assert hasattr(rlm, 'get_harness_state'); assert hasattr(rlm.rlm, 'harness'); assert hasattr(rlm.rlm, 'get_harness_state'); assert all(callable(getattr(_harness, _method, None)) for _harness in (rlm.harness, rlm.rlm.harness) for _method in _harness_methods); assert 'reference' in HarnessEntry.__dataclass_fields__; assert 'scope' in HarnessEntry.__dataclass_fields__; assert 'reference' in inspect.signature(rlm.harness.create_skill).parameters; assert 'reference' in inspect.signature(rlm.harness.update_skill).parameters; assert 'global_' in inspect.signature(rlm.harness.create_memory).parameters; assert 'global_' in inspect.signature(rlm.get_harness_state).parameters; assert not hasattr(rlm, 'background'); assert not hasattr(rlm.rlm, 'background'); from rlm.bash import BashHandle, BashResult; assert callable(rlm.bash); assert all(callable(getattr(BashHandle, _m, None)) for _m in ('tail', 'output', 'poll', 'kill')); assert {'exit_code', 'output', 'duration'} <= set(BashResult.__dataclass_fields__); import rlm.repl as _repl; assert callable(_repl.main); assert callable(_repl.emit); assert callable(_repl.host_request); assert callable(_repl.is_active); assert _repl.PROTOCOL_VERSION == 4; assert callable(rlm.emit); assert not hasattr(rlm, 'HOST_COMM_TARGET'); assert not hasattr(mcp, 'install_shutdown_hook')`;\nconst BOOTSTRAP_VERSION_FILE = \".bootstrap-version\";\nconst BOOTSTRAP_LOCK_NAME = \".bootstrap.lock\";\nconst BOOTSTRAP_LOCK_RETRY_MS = 100;\nconst BOOTSTRAP_LOCK_STALE_WITHOUT_PID_MS = 30_000;\n\nlet inFlightEnsureKernelPython: { key: string; promise: Promise<string> } | null = null;\n\nexport type KernelPythonSkill = PythonSkillRuntimeInfo;\nexport type KernelBootstrapProgressHandler = (message: string) => void;\n\nexport interface EnsureKernelPythonOptions {\n\tpythonSkills?: readonly KernelPythonSkill[];\n\tonProgress?: KernelBootstrapProgressHandler;\n}\n\ninterface BootstrapPythonSkill {\n\timportName: string;\n\tpackagePath: string;\n\tpyprojectPath: string;\n\tpyprojectHash: string;\n}\n\ninterface BootstrapVersion {\n\tschema: number;\n\truntime?: string;\n\tsnapshot?: string;\n\textraUvArgs?: string[];\n\tpythonSkills?: BootstrapPythonSkill[];\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isNodeError(error: unknown, code: string): boolean {\n\treturn error instanceof Error && \"code\" in error && error.code === code;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nasync function exists(filePath: string): Promise<boolean> {\n\ttry {\n\t\tawait access(filePath);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function isExecutable(filePath: string): Promise<boolean> {\n\ttry {\n\t\tawait access(filePath, constants.X_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction fileContentHash(filePath: string): string {\n\ttry {\n\t\treturn `sha256:${createHash(\"sha256\").update(readFileSync(filePath)).digest(\"hex\")}`;\n\t} catch {\n\t\treturn \"unreadable\";\n\t}\n}\n\nfunction normalizePythonSkills(pythonSkills: readonly KernelPythonSkill[] | undefined): BootstrapPythonSkill[] {\n\tconst byKey = new Map<string, BootstrapPythonSkill>();\n\tconst addSkill = (skill: Pick<KernelPythonSkill, \"importName\" | \"packagePath\" | \"pyprojectPath\">): void => {\n\t\tconst packagePath = path.resolve(skill.packagePath);\n\t\tconst pyprojectPath = path.resolve(skill.pyprojectPath);\n\t\tconst key = `${skill.importName}\\0${packagePath}`;\n\t\tif (byKey.has(key)) {\n\t\t\treturn;\n\t\t}\n\t\tconst bootstrapSkill: BootstrapPythonSkill = {\n\t\t\timportName: skill.importName,\n\t\t\tpackagePath,\n\t\t\tpyprojectPath,\n\t\t\tpyprojectHash: fileContentHash(pyprojectPath),\n\t\t};\n\t\tbyKey.set(key, bootstrapSkill);\n\t\tfor (const dependencyName of readPythonSkillDependencyNames(bootstrapSkill)) {\n\t\t\tconst siblingDependency = resolveSiblingPythonSkillDependency(bootstrapSkill, dependencyName);\n\t\t\tif (siblingDependency) {\n\t\t\t\taddSkill(siblingDependency);\n\t\t\t}\n\t\t}\n\t};\n\tfor (const skill of pythonSkills ?? []) {\n\t\taddSkill(skill);\n\t}\n\treturn [...byKey.values()].sort((a, b) => {\n\t\tconst packageCompare = a.packagePath.localeCompare(b.packagePath);\n\t\tif (packageCompare !== 0) return packageCompare;\n\t\treturn a.importName.localeCompare(b.importName);\n\t});\n}\n\nfunction readTomlProjectSection(pyprojectPath: string): string | undefined {\n\ttry {\n\t\tconst text = readFileSync(pyprojectPath, \"utf-8\");\n\t\tconst match = text.match(/^\\s*\\[project\\]\\s*$/m);\n\t\tif (!match || match.index === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst sectionStart = match.index + match[0].length;\n\t\tconst rest = text.slice(sectionStart);\n\t\tconst nextSection = rest.search(/^\\s*\\[/m);\n\t\treturn nextSection >= 0 ? rest.slice(0, nextSection) : rest;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction readPythonSkillProjectName(skill: BootstrapPythonSkill): string {\n\tconst projectSection = readTomlProjectSection(skill.pyprojectPath);\n\tconst name = projectSection?.match(/^\\s*name\\s*=\\s*[\"']([^\"']+)[\"']/m)?.[1];\n\treturn name?.trim() || skill.importName.replaceAll(\"_\", \"-\");\n}\n\nfunction parseDependencyPackageName(dependency: string): string | undefined {\n\tconst withoutMarker = dependency.split(\";\")[0]?.trim() ?? \"\";\n\tif (!withoutMarker) {\n\t\treturn undefined;\n\t}\n\tconst match = withoutMarker.match(/^([A-Za-z0-9_.-]+)/);\n\treturn match?.[1]?.replaceAll(\"_\", \"-\").toLowerCase();\n}\n\nfunction findTomlArrayEnd(text: string, startIndex: number): number {\n\tlet inQuote: '\"' | \"'\" | undefined;\n\tlet escaped = false;\n\tfor (let index = startIndex; index < text.length; index++) {\n\t\tconst char = text[index];\n\t\tif (inQuote) {\n\t\t\tif (escaped) {\n\t\t\t\tescaped = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === \"\\\\\") {\n\t\t\t\tescaped = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === inQuote) {\n\t\t\t\tinQuote = undefined;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === '\"' || char === \"'\") {\n\t\t\tinQuote = char;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \"]\") {\n\t\t\treturn index;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction readPythonSkillDependencyNames(skill: BootstrapPythonSkill): Set<string> {\n\tconst projectSection = readTomlProjectSection(skill.pyprojectPath);\n\tif (!projectSection) {\n\t\treturn new Set();\n\t}\n\tconst dependenciesStart = projectSection.search(/^\\s*dependencies\\s*=\\s*\\[/m);\n\tif (dependenciesStart < 0) {\n\t\treturn new Set();\n\t}\n\tconst arrayStart = projectSection.indexOf(\"[\", dependenciesStart);\n\tif (arrayStart < 0) {\n\t\treturn new Set();\n\t}\n\tconst arrayEnd = findTomlArrayEnd(projectSection, arrayStart + 1);\n\tif (arrayEnd < 0) {\n\t\treturn new Set();\n\t}\n\tconst dependenciesArray = projectSection.slice(arrayStart, arrayEnd + 1);\n\tconst dependencies = new Set<string>();\n\tconst dependencyPattern = /\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"|'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)'/g;\n\tfor (const match of dependenciesArray.matchAll(dependencyPattern)) {\n\t\tconst dependency = (match[1] ?? match[2] ?? \"\").replaceAll('\\\\\"', '\"').replaceAll(\"\\\\'\", \"'\");\n\t\tconst name = parseDependencyPackageName(dependency);\n\t\tif (name) {\n\t\t\tdependencies.add(name);\n\t\t}\n\t}\n\treturn dependencies;\n}\n\nfunction resolveSiblingPythonSkillDependency(\n\tskill: BootstrapPythonSkill,\n\tdependencyName: string,\n): BootstrapPythonSkill | undefined {\n\tconst siblingsDir = path.dirname(skill.packagePath);\n\tfor (const entry of readdirSync(siblingsDir, { withFileTypes: true })) {\n\t\tif (!entry.isDirectory()) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst packagePath = path.join(siblingsDir, entry.name);\n\t\tconst pyprojectPath = path.join(packagePath, \"pyproject.toml\");\n\t\tif (!existsSync(pyprojectPath)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst dependency: BootstrapPythonSkill = {\n\t\t\timportName: entry.name.replaceAll(\"-\", \"_\"),\n\t\t\tpackagePath,\n\t\t\tpyprojectPath,\n\t\t\tpyprojectHash: fileContentHash(pyprojectPath),\n\t\t};\n\t\tif (readPythonSkillProjectName(dependency).replaceAll(\"_\", \"-\").toLowerCase() === dependencyName) {\n\t\t\treturn dependency;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction sortPythonSkillsForInstall(pythonSkills: readonly BootstrapPythonSkill[]): BootstrapPythonSkill[] {\n\tconst byProjectName = new Map<string, BootstrapPythonSkill>();\n\tconst originalIndex = new Map<BootstrapPythonSkill, number>();\n\tfor (const [index, skill] of pythonSkills.entries()) {\n\t\toriginalIndex.set(skill, index);\n\t\tbyProjectName.set(readPythonSkillProjectName(skill).replaceAll(\"_\", \"-\").toLowerCase(), skill);\n\t}\n\n\tconst dependenciesBySkill = new Map<BootstrapPythonSkill, BootstrapPythonSkill[]>();\n\tfor (const skill of pythonSkills) {\n\t\tdependenciesBySkill.set(\n\t\t\tskill,\n\t\t\t[...readPythonSkillDependencyNames(skill)]\n\t\t\t\t.map(\n\t\t\t\t\t(dependencyName) =>\n\t\t\t\t\t\tbyProjectName.get(dependencyName) ?? resolveSiblingPythonSkillDependency(skill, dependencyName),\n\t\t\t\t)\n\t\t\t\t.filter((dependency): dependency is BootstrapPythonSkill => Boolean(dependency)),\n\t\t);\n\t}\n\n\tconst pending = new Set(pythonSkills);\n\tconst sorted: BootstrapPythonSkill[] = [];\n\twhile (pending.size > 0) {\n\t\tlet progressed = false;\n\t\tfor (const skill of [...pending].sort((a, b) => (originalIndex.get(a) ?? 0) - (originalIndex.get(b) ?? 0))) {\n\t\t\tconst dependencies = dependenciesBySkill.get(skill) ?? [];\n\t\t\tif (dependencies.some((dependency) => pending.has(dependency))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tsorted.push(skill);\n\t\t\tpending.delete(skill);\n\t\t\tprogressed = true;\n\t\t}\n\t\tif (!progressed) {\n\t\t\t// Cyclic local skill dependencies cannot be topologically ordered; keep a\n\t\t\t// deterministic order and let uv surface the packaging error if needed.\n\t\t\tsorted.push(...[...pending].sort((a, b) => a.packagePath.localeCompare(b.packagePath)));\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn sorted;\n}\n\nfunction formatPythonSkillInstallArgs(skill: BootstrapPythonSkill): string[] {\n\treturn [\"--editable\", skill.packagePath];\n}\n\nfunction ensureKernelPythonKey(pythonSkills: readonly BootstrapPythonSkill[]): string {\n\treturn [\n\t\tprocess.env[PRODUCT_ENV.kernelPython] ?? \"\",\n\t\tprocess.env[PRODUCT_ENV.kernelVenv] ?? \"\",\n\t\tprocess.env.HOME ?? \"\",\n\t\tprocess.env[PRODUCT_ENV.home] ?? \"\",\n\t\tJSON.stringify(pythonSkills),\n\t].join(\"\\0\");\n}\n\nexport function getKernelVenvDir(): string {\n\tconst override = readAbsolutePathEnv(PRODUCT_ENV.kernelVenv);\n\treturn assertProductStatePath(override ?? ownedRuntime?.runtimeDir ?? resolveRuntimePaths().runtime);\n}\n\nasync function resolveWritableKernelVenvDir(): Promise<string> {\n\tconst venv = getKernelVenvDir();\n\tawait mkdir(path.dirname(venv), { recursive: true });\n\treturn venv;\n}\n\nfunction run(\n\tcommand: string,\n\targs: string[],\n\toptions: { stdio?: \"ignore\" | \"inherit\"; env?: NodeJS.ProcessEnv } = {},\n): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst child = spawn(command, args, {\n\t\t\tenv: options.env ?? process.env,\n\t\t\tstdio: options.stdio ?? \"ignore\",\n\t\t});\n\t\tchild.on(\"error\", reject);\n\t\tchild.on(\"exit\", (code, signal) => {\n\t\t\tif (code === 0) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst reason = signal ? `signal ${signal}` : `exit code ${code}`;\n\t\t\treject(new Error(`${command} ${args.join(\" \")} failed with ${reason}`));\n\t\t});\n\t});\n}\n\nasync function pythonImports(python: string, moduleName: string): Promise<boolean> {\n\ttry {\n\t\tawait run(python, [\"-c\", `import ${moduleName}`], { stdio: \"ignore\" });\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function hasBaseContextRuntime(python: string): Promise<boolean> {\n\ttry {\n\t\tawait run(python, [\"-c\", RUNTIME_READY_CHECK], { stdio: \"ignore\" });\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function missingRlmExtraImportLabels(python: string): Promise<string[]> {\n\tconst missing: string[] = [];\n\tfor (const pkg of DEFAULT_RLM_EXTRA_PACKAGES) {\n\t\tif (!(await pythonImports(python, pkg.importName))) {\n\t\t\tmissing.push(pkg.promptLabel);\n\t\t}\n\t}\n\treturn missing;\n}\n\nasync function missingPythonSkillImportLabels(\n\tpython: string,\n\tpythonSkills: readonly KernelPythonSkill[],\n): Promise<string[]> {\n\tconst missing: string[] = [];\n\tfor (const skill of pythonSkills) {\n\t\tif (!(await pythonImports(python, skill.importName))) {\n\t\t\tmissing.push(`${skill.name} (${skill.importName})`);\n\t\t}\n\t}\n\treturn missing;\n}\n\nfunction reportProgress(options: EnsureKernelPythonOptions, message: string): void {\n\tif (options.onProgress) {\n\t\toptions.onProgress(message);\n\t\treturn;\n\t}\n\tprocess.stderr.write(`${message}\\n`);\n}\n\nfunction bootstrapLockDir(venv: string): string {\n\treturn path.join(path.dirname(venv), `${path.basename(venv)}${BOOTSTRAP_LOCK_NAME}`);\n}\n\nfunction processIsRunning(pid: number): boolean {\n\ttry {\n\t\tprocess.kill(pid, 0);\n\t\treturn true;\n\t} catch (error) {\n\t\treturn isNodeError(error, \"EPERM\");\n\t}\n}\n\nasync function readLockPid(lockDir: string): Promise<number | null> {\n\ttry {\n\t\tconst raw = await readFile(path.join(lockDir, \"pid\"), \"utf8\");\n\t\tconst pid = Number.parseInt(raw.trim(), 10);\n\t\treturn Number.isInteger(pid) && pid > 0 ? pid : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nasync function lockMissingPidIsStale(lockDir: string): Promise<boolean> {\n\ttry {\n\t\tconst lockStat = await stat(lockDir);\n\t\treturn Date.now() - lockStat.mtimeMs > BOOTSTRAP_LOCK_STALE_WITHOUT_PID_MS;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function acquireBootstrapLock(venv: string): Promise<() => Promise<void>> {\n\tconst lockDir = bootstrapLockDir(venv);\n\tawait mkdir(path.dirname(lockDir), { recursive: true });\n\n\tfor (;;) {\n\t\ttry {\n\t\t\tawait mkdir(lockDir);\n\t\t\tawait writeFile(path.join(lockDir, \"pid\"), `${process.pid}\\n`, \"utf8\");\n\t\t\treturn () => rm(lockDir, { recursive: true, force: true });\n\t\t} catch (error) {\n\t\t\tif (!isNodeError(error, \"EEXIST\")) throw error;\n\n\t\t\tconst pid = await readLockPid(lockDir);\n\t\t\tif (pid === null ? await lockMissingPidIsStale(lockDir) : !processIsRunning(pid)) {\n\t\t\t\tawait rm(lockDir, { recursive: true, force: true });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tawait sleep(BOOTSTRAP_LOCK_RETRY_MS);\n\t\t}\n\t}\n}\n\nasync function findExecutable(name: string): Promise<string | null> {\n\tconst pathValue = process.env.PATH;\n\tif (!pathValue) return null;\n\tconst candidates = process.platform === \"win32\" ? [name, `${name}.exe`] : [name];\n\tfor (const dir of pathValue.split(path.delimiter)) {\n\t\tif (!dir) continue;\n\t\tfor (const candidate of candidates) {\n\t\t\tconst fullPath = path.join(dir, candidate);\n\t\t\tif (await isExecutable(fullPath)) return fullPath;\n\t\t}\n\t}\n\treturn null;\n}\n\nasync function ensureUv(options: EnsureKernelPythonOptions): Promise<string> {\n\tconst fromPath = await findExecutable(\"uv\");\n\tif (fromPath) return fromPath;\n\n\tconst localUv = path.join(os.homedir(), \".local\", \"bin\", process.platform === \"win32\" ? \"uv.exe\" : \"uv\");\n\tif (await isExecutable(localUv)) return localUv;\n\n\tconst shouldInstallUv =\n\t\tprocess.env[PRODUCT_ENV.installUv] === \"1\" || (!options.onProgress && (await confirmUvInstall()));\n\tif (!shouldInstallUv) {\n\t\tthrow new Error(\n\t\t\t`uv is required to set up the Python kernel. Install uv yourself: ${UV_INSTALL_COMMAND}, ` +\n\t\t\t\t\"or set BASE_CONTEXT_INSTALL_UV=1 to let base-context run that installer.\",\n\t\t);\n\t}\n\n\treportProgress(options, \"› installing uv (one-time)…\");\n\ttry {\n\t\tawait run(\"sh\", [\"-c\", UV_INSTALL_COMMAND], {\n\t\t\tstdio: options.onProgress ? \"ignore\" : \"inherit\",\n\t\t\tenv: { ...process.env, UV_INSTALL_DIR: path.dirname(localUv) },\n\t\t});\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`couldn't install uv from astral.sh; install it yourself: ${UV_INSTALL_COMMAND}, then re-run base-context. ${errorMessage(error)}`,\n\t\t);\n\t}\n\n\tif (await isExecutable(localUv)) return localUv;\n\tconst installedFromPath = await findExecutable(\"uv\");\n\tif (installedFromPath) return installedFromPath;\n\tthrow new Error(\"uv install completed but binary not found at ~/.local/bin/uv\");\n}\n\nasync function confirmUvInstall(): Promise<boolean> {\n\tif (process.env[PRODUCT_ENV.installUv] === \"0\") return false;\n\tif (!stdin.isTTY || !stderr.isTTY) return false;\n\n\tconst rl = createInterface({ input: stdin, output: stderr });\n\ttry {\n\t\tconst answer = (\n\t\t\tawait rl.question(\"Base Context needs uv to set up Python. Install uv from astral.sh now? [Y/n] \")\n\t\t)\n\t\t\t.trim()\n\t\t\t.toLowerCase();\n\t\treturn answer !== \"n\" && answer !== \"no\";\n\t} finally {\n\t\trl.close();\n\t}\n}\n\nasync function readBootstrapVersion(venv: string): Promise<BootstrapVersion | null> {\n\ttry {\n\t\tconst raw = await readFile(path.join(venv, BOOTSTRAP_VERSION_FILE), \"utf8\");\n\t\tconst parsed: unknown = JSON.parse(raw);\n\t\tif (!isRecord(parsed) || typeof parsed.schema !== \"number\") return null;\n\t\tconst extraUvArgs =\n\t\t\tArray.isArray(parsed.extraUvArgs) &&\n\t\t\tparsed.extraUvArgs.every((v: unknown): v is string => typeof v === \"string\")\n\t\t\t\t? (parsed.extraUvArgs as string[])\n\t\t\t\t: undefined;\n\t\tlet pythonSkills: BootstrapPythonSkill[] | undefined;\n\t\tif (Array.isArray(parsed.pythonSkills)) {\n\t\t\tif (\n\t\t\t\t!parsed.pythonSkills.every((v: unknown): v is BootstrapPythonSkill => {\n\t\t\t\t\tif (!isRecord(v)) return false;\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttypeof v.importName === \"string\" &&\n\t\t\t\t\t\ttypeof v.packagePath === \"string\" &&\n\t\t\t\t\t\ttypeof v.pyprojectPath === \"string\" &&\n\t\t\t\t\t\ttypeof v.pyprojectHash === \"string\"\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tpythonSkills = parsed.pythonSkills as BootstrapPythonSkill[];\n\t\t}\n\t\treturn {\n\t\t\tschema: parsed.schema,\n\t\t\truntime: typeof parsed.runtime === \"string\" ? parsed.runtime : undefined,\n\t\t\tsnapshot: typeof parsed.snapshot === \"string\" ? parsed.snapshot : undefined,\n\t\t\textraUvArgs,\n\t\t\tpythonSkills,\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction extraUvArgsMatch(a: string[] | undefined, b: string[] | undefined): boolean {\n\tif (a === b) return true;\n\tif (!a || !b) return false;\n\tif (a.length !== b.length) return false;\n\treturn a.every((v, i) => v === b[i]);\n}\n\nfunction pythonSkillsMatch(a: BootstrapPythonSkill[] | undefined, b: readonly BootstrapPythonSkill[]): boolean {\n\tconst left = a ?? [];\n\tif (left.length !== b.length) return false;\n\treturn left.every((skill, index) => {\n\t\tconst expected = b[index];\n\t\treturn (\n\t\t\tskill.importName === expected.importName &&\n\t\t\tskill.packagePath === expected.packagePath &&\n\t\t\tskill.pyprojectPath === expected.pyprojectPath &&\n\t\t\tskill.pyprojectHash === expected.pyprojectHash\n\t\t);\n\t});\n}\n\nfunction bootstrapVersionCurrent(\n\tversion: BootstrapVersion | null,\n\truntimeIdentity: string,\n\tpythonSkills: readonly BootstrapPythonSkill[],\n): boolean {\n\treturn (\n\t\tversion !== null &&\n\t\tbootstrapBaseVersionCurrent(version, runtimeIdentity) &&\n\t\tpythonSkillsMatch(version.pythonSkills, pythonSkills)\n\t);\n}\n\nfunction bootstrapBaseVersionCurrent(version: BootstrapVersion | null, runtimeIdentity: string): boolean {\n\treturn (\n\t\tversion?.schema === BOOTSTRAP_SCHEMA &&\n\t\tversion.runtime === runtimeIdentity &&\n\t\tversion.snapshot === STATE_SNAPSHOT_REQUIREMENT &&\n\t\textraUvArgsMatch(version.extraUvArgs, DEFAULT_RLM_EXTRA_UV_ARGS)\n\t);\n}\n\nasync function writeBootstrapVersion(\n\tvenv: string,\n\truntimeIdentity: string,\n\tpythonSkills: readonly BootstrapPythonSkill[],\n): Promise<void> {\n\tconst version: BootstrapVersion = {\n\t\tschema: BOOTSTRAP_SCHEMA,\n\t\truntime: runtimeIdentity,\n\t\tsnapshot: STATE_SNAPSHOT_REQUIREMENT,\n\t\textraUvArgs: DEFAULT_RLM_EXTRA_UV_ARGS,\n\t\tpythonSkills: [...pythonSkills],\n\t};\n\tawait writeFile(path.join(venv, BOOTSTRAP_VERSION_FILE), `${JSON.stringify(version)}\\n`, \"utf8\");\n}\n\nexport function runtimeCandidateDirs(): string[] {\n\tif (ownedRuntime) return [path.join(ownedRuntime.packageDir, \"dist\", RUNTIME_REQUIREMENT)];\n\tconst packageDir = getPackageDir();\n\tif (existsSync(path.join(packageDir, \"src\"))) {\n\t\treturn [path.resolve(packageDir, \"..\", \"..\", \"prime-agent-runtime\")];\n\t}\n\treturn [path.join(packageDir, \"dist\", RUNTIME_REQUIREMENT), path.join(packageDir, RUNTIME_REQUIREMENT)];\n}\n\nasync function resolveRuntimeSourceDir(): Promise<string> {\n\tfor (const candidate of runtimeCandidateDirs()) {\n\t\tif (await exists(path.join(candidate, \"pyproject.toml\"))) return candidate;\n\t}\n\tthrow new Error(\n\t\t\"Base Context runtime payload is missing. Reinstall this Base Context release; registry runtime fallback is disabled.\",\n\t);\n}\n\nexport async function resolveRuntimeIdentity(): Promise<string> {\n\treturn hashRuntimeSource(await resolveRuntimeSourceDir());\n}\n\n// A source read failure must not be replaced by a registry runtime.\nasync function hashRuntimeSource(sourceDir: string): Promise<string> {\n\tconst rlmDir = path.join(sourceDir, \"src\", \"rlm\");\n\tconst files: string[] = [path.join(sourceDir, \"pyproject.toml\")];\n\tasync function collect(dir: string): Promise<void> {\n\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tconst full = path.join(dir, entry.name);\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tawait collect(full);\n\t\t\t} else if (entry.isFile() && entry.name.endsWith(\".py\")) {\n\t\t\t\tfiles.push(full);\n\t\t\t}\n\t\t}\n\t}\n\tawait collect(rlmDir);\n\tfiles.sort();\n\tconst hash = createHash(\"sha256\");\n\tfor (const file of files) {\n\t\thash.update(path.relative(sourceDir, file));\n\t\thash.update(\"\\0\");\n\t\thash.update(await readFile(file));\n\t\thash.update(\"\\0\");\n\t}\n\treturn `sha256:${hash.digest(\"hex\")}`;\n}\n\nasync function bootstrapVenv(\n\tvenv: string,\n\tpythonSkills: readonly BootstrapPythonSkill[],\n\toptions: EnsureKernelPythonOptions,\n): Promise<void> {\n\tawait mkdir(path.dirname(venv), { recursive: true });\n\tconst uv = await ensureUv(options);\n\tconst python = path.join(venv, \"bin\", \"python\");\n\tconst sourceDir = await resolveRuntimeSourceDir();\n\tconst runtimeRequirement = sourceDir;\n\tconst runtimeIdentity = await resolveRuntimeIdentity();\n\n\tawait run(uv, [\"python\", \"install\", PYTHON_VERSION]);\n\tawait run(uv, [\"venv\", venv, \"--python\", PYTHON_VERSION, \"--seed\"]);\n\tawait run(uv, [\n\t\t\"pip\",\n\t\t\"install\",\n\t\t\"--python\",\n\t\tpython,\n\t\truntimeRequirement,\n\t\tSTATE_SNAPSHOT_REQUIREMENT,\n\t\t...DEFAULT_RLM_EXTRA_UV_ARGS,\n\t]);\n\tawait syncPythonSkills(uv, venv, python, runtimeIdentity, pythonSkills, options);\n}\n\nasync function syncPythonSkills(\n\tuv: string,\n\tvenv: string,\n\tpython: string,\n\truntimeIdentity: string,\n\tpythonSkills: readonly BootstrapPythonSkill[],\n\toptions: EnsureKernelPythonOptions,\n): Promise<void> {\n\tconst version = await readBootstrapVersion(venv);\n\tconst installedPythonSkills: BootstrapPythonSkill[] = [];\n\tconst currentPythonSkills = new Map(\n\t\t(version?.pythonSkills ?? []).map((skill) => [`${skill.importName}\\0${skill.packagePath}`, skill]),\n\t);\n\tconst pythonSkillsByProjectName = new Map(\n\t\tpythonSkills.map((skill) => [readPythonSkillProjectName(skill).replaceAll(\"_\", \"-\").toLowerCase(), skill]),\n\t);\n\tconst dependenciesBySkill = new Map(\n\t\tpythonSkills.map((skill) => [\n\t\t\tskill,\n\t\t\t[...readPythonSkillDependencyNames(skill)]\n\t\t\t\t.map(\n\t\t\t\t\t(dependencyName) =>\n\t\t\t\t\t\tpythonSkillsByProjectName.get(dependencyName) ??\n\t\t\t\t\t\tresolveSiblingPythonSkillDependency(skill, dependencyName),\n\t\t\t\t)\n\t\t\t\t.filter((dependency): dependency is BootstrapPythonSkill => Boolean(dependency)),\n\t\t]),\n\t);\n\n\tfor (const skill of sortPythonSkillsForInstall(pythonSkills)) {\n\t\tconst existingSkill = currentPythonSkills.get(`${skill.importName}\\0${skill.packagePath}`);\n\t\tif (existingSkill?.pyprojectPath === skill.pyprojectPath && existingSkill.pyprojectHash === skill.pyprojectHash) {\n\t\t\tinstalledPythonSkills.push(skill);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst localDependencies = dependenciesBySkill.get(skill) ?? [];\n\t\tconst localDependencyArgs = localDependencies\n\t\t\t.filter((dependency) => {\n\t\t\t\tconst installedDependency = currentPythonSkills.get(`${dependency.importName}\\0${dependency.packagePath}`);\n\t\t\t\tconst installedThisSync = installedPythonSkills.some(\n\t\t\t\t\t(installed) =>\n\t\t\t\t\t\tinstalled.importName === dependency.importName &&\n\t\t\t\t\t\tinstalled.packagePath === dependency.packagePath &&\n\t\t\t\t\t\tinstalled.pyprojectPath === dependency.pyprojectPath &&\n\t\t\t\t\t\tinstalled.pyprojectHash === dependency.pyprojectHash,\n\t\t\t\t);\n\t\t\t\treturn !(\n\t\t\t\t\tinstalledThisSync ||\n\t\t\t\t\t(installedDependency?.pyprojectPath === dependency.pyprojectPath &&\n\t\t\t\t\t\tinstalledDependency.pyprojectHash === dependency.pyprojectHash)\n\t\t\t\t);\n\t\t\t})\n\t\t\t.flatMap(formatPythonSkillInstallArgs);\n\n\t\ttry {\n\t\t\tawait run(uv, [\n\t\t\t\t\"pip\",\n\t\t\t\t\"install\",\n\t\t\t\t\"--python\",\n\t\t\t\tpython,\n\t\t\t\t...formatPythonSkillInstallArgs(skill),\n\t\t\t\t...localDependencyArgs,\n\t\t\t]);\n\t\t\tinstalledPythonSkills.push(\n\t\t\t\tskill,\n\t\t\t\t...localDependencies.filter((dependency) => !installedPythonSkills.includes(dependency)),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\treportProgress(\n\t\t\t\toptions,\n\t\t\t\t`Warning: Python skill ${skill.importName} failed to install and will be unavailable: ${errorMessage(error)}`,\n\t\t\t);\n\t\t}\n\t}\n\tawait writeBootstrapVersion(venv, runtimeIdentity, installedPythonSkills);\n}\n\nasync function kernelBaseReady(python: string, venv: string, runtimeIdentity: string): Promise<boolean> {\n\treturn (\n\t\t(await hasBaseContextRuntime(python)) &&\n\t\tbootstrapBaseVersionCurrent(await readBootstrapVersion(venv), runtimeIdentity)\n\t);\n}\n\nasync function kernelReady(\n\tpython: string,\n\tvenv: string,\n\truntimeIdentity: string,\n\tpythonSkills: readonly BootstrapPythonSkill[],\n): Promise<boolean> {\n\treturn (\n\t\t(await hasBaseContextRuntime(python)) &&\n\t\tbootstrapVersionCurrent(await readBootstrapVersion(venv), runtimeIdentity, pythonSkills)\n\t);\n}\n\nfunction formatBootstrapFailure(error: unknown): Error {\n\treturn new Error(\n\t\t`Failed to set up the Python kernel runtime. ${errorMessage(error)}\\n` +\n\t\t\t\"First-time setup needs internet to install uv, Python, the bundled base-context-runtime, and default Python packages; once set up, base-context runs offline. \" +\n\t\t\t\"Set BASE_CONTEXT_KERNEL_PYTHON to a Python with a current base-context-runtime and default Python packages installed to skip auto-bootstrap.\",\n\t);\n}\n\nasync function ensureKernelPythonUncached(\n\toptions: EnsureKernelPythonOptions,\n\tpythonSkills: readonly BootstrapPythonSkill[],\n): Promise<string> {\n\tconst override = readAbsolutePathEnv(PRODUCT_ENV.kernelPython);\n\tif (override) {\n\t\tconst python = override;\n\t\tconst missing: string[] = [];\n\t\tif (!(await hasBaseContextRuntime(python))) {\n\t\t\tmissing.push(\n\t\t\t\t\"a current base-context-runtime with callable rlm.run, rlm.host_request, and explicit harness CRUD methods\",\n\t\t\t);\n\t\t}\n\t\tif (missing.length === 0) {\n\t\t\tconst missingExtraImports = await missingRlmExtraImportLabels(python);\n\t\t\tif (missingExtraImports.length > 0) {\n\t\t\t\tmissing.push(`default Python packages (${missingExtraImports.join(\", \")})`);\n\t\t\t}\n\t\t}\n\t\tif (missing.length === 0 && pythonSkills.length > 0) {\n\t\t\tconst missingPythonSkills = await missingPythonSkillImportLabels(python, options.pythonSkills ?? []);\n\t\t\tif (missingPythonSkills.length > 0) {\n\t\t\t\treportProgress(\n\t\t\t\t\toptions,\n\t\t\t\t\t`Warning: Python skills unavailable in BASE_CONTEXT_KERNEL_PYTHON and will be disabled: ${missingPythonSkills.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (missing.length === 0) return python;\n\t\tthrow new Error(`BASE_CONTEXT_KERNEL_PYTHON points to a Python missing ${missing.join(\" and \")}: ${python}`);\n\t}\n\n\tconst venv = await resolveWritableKernelVenvDir();\n\tconst python = path.join(venv, \"bin\", \"python\");\n\tconst runtimeIdentity = await resolveRuntimeIdentity();\n\tif (await kernelReady(python, venv, runtimeIdentity, pythonSkills)) return python;\n\n\tconst releaseLock = await acquireBootstrapLock(venv);\n\ttry {\n\t\tif (await kernelReady(python, venv, runtimeIdentity, pythonSkills)) return python;\n\t\tif (await kernelBaseReady(python, venv, runtimeIdentity)) {\n\t\t\tawait syncPythonSkills(await ensureUv(options), venv, python, runtimeIdentity, pythonSkills, options);\n\t\t\treturn python;\n\t\t}\n\n\t\tif (ownedRuntime && !readAbsolutePathEnv(PRODUCT_ENV.kernelVenv)) {\n\t\t\tthrow new Error(\n\t\t\t\t\"The selected Base-Context default runtime is unavailable or stale. Install a prepared candidate or explicitly roll back; the retained runtime was not rebuilt.\",\n\t\t\t);\n\t\t}\n\n\t\tconst hadVenv = existsSync(venv);\n\t\treportProgress(options, \"› setting up python kernel (one-time, ~30s)…\");\n\t\tif (hadVenv) {\n\t\t\treportProgress(options, \"rebuilding kernel venv\");\n\t\t\tawait rm(venv, { recursive: true, force: true });\n\t\t}\n\n\t\tawait bootstrapVenv(venv, pythonSkills, options);\n\t} catch (error) {\n\t\tthrow formatBootstrapFailure(error);\n\t} finally {\n\t\tawait releaseLock().catch(() => undefined);\n\t}\n\n\treportProgress(options, \"✓ ready\");\n\treturn python;\n}\n\nexport function ensureKernelPython(options: EnsureKernelPythonOptions = {}): Promise<string> {\n\tconst pythonSkills = normalizePythonSkills(options.pythonSkills);\n\tconst key = ensureKernelPythonKey(pythonSkills);\n\tif (inFlightEnsureKernelPython?.key === key) return inFlightEnsureKernelPython.promise;\n\n\tconst promise = ensureKernelPythonUncached(options, pythonSkills).finally(() => {\n\t\tif (inFlightEnsureKernelPython?.promise === promise) inFlightEnsureKernelPython = null;\n\t});\n\tinFlightEnsureKernelPython = { key, promise };\n\treturn promise;\n}\n\n/** Prepare only a new physical owned release, before its selection can be published. */\nexport async function prepareOwnedKernelPython(): Promise<string> {\n\tif (!ownedRuntime || existsSync(ownedRuntime.runtimeDir)) {\n\t\tthrow new Error(\"Base-Context runtime preparation requires a new, empty owned release runtime directory.\");\n\t}\n\tconst selected = readInstallSelection(ownedRuntime.root);\n\tif (selected?.active === ownedRuntime.version || selected?.previous === ownedRuntime.version) {\n\t\tthrow new Error(\"Base-Context will not prepare a published release in place. Install a new candidate instead.\");\n\t}\n\tconst python = path.join(ownedRuntime.runtimeDir, \"bin\", \"python\");\n\tconst options: EnsureKernelPythonOptions = { onProgress: (message) => console.error(message) };\n\tawait bootstrapVenv(ownedRuntime.runtimeDir, [], options);\n\tconst runtimeIdentity = await resolveRuntimeIdentity();\n\tif (\n\t\t!(await kernelReady(python, ownedRuntime.runtimeDir, runtimeIdentity, [])) ||\n\t\t(await missingRlmExtraImportLabels(python)).length > 0\n\t) {\n\t\tthrow new Error(\"Base-Context candidate Python runtime did not become ready. This candidate was not activated.\");\n\t}\n\treturn python;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/core/kernel/bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { constants, existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { access, mkdir, readdir, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { stderr, stdin } from \"node:process\";\nimport { createInterface } from \"node:readline/promises\";\nimport { setTimeout as sleep } from \"node:timers/promises\";\nimport { getPackageDir, getPhysicalPackageDir } from \"../../config.js\";\nimport { getOwnedInstallation, readInstallSelection } from \"../../owned-install-layout.js\";\nimport { PRODUCT, PRODUCT_ENV } from \"../../product-identity.js\";\nimport { assertProductStatePath, readAbsolutePathEnv, resolveRuntimePaths } from \"../../runtime-paths.js\";\nimport type { PythonSkillRuntimeInfo } from \"../skills.js\";\n\nconst ownedRuntime = getOwnedInstallation(getPhysicalPackageDir());\nconst BOOTSTRAP_SCHEMA = 11;\nconst PYTHON_VERSION = \"3.13\";\nconst RUNTIME_REQUIREMENT = PRODUCT.runtimeDistribution;\n// Serializes the kernel's user namespace so it can be revived across session\n// resume. Internal-only; intentionally not surfaced to the model as an import.\nconst STATE_SNAPSHOT_REQUIREMENT = \"dill\";\nconst DEFAULT_RLM_EXTRA_PACKAGES = [\n\t{ uvArg: \"requests\", importName: \"requests\", promptLabel: \"requests\" },\n\t{ uvArg: \"httpx\", importName: \"httpx\", promptLabel: \"httpx\" },\n\t{ uvArg: \"pyyaml\", importName: \"yaml\", promptLabel: \"yaml (PyYAML)\" },\n\t{ uvArg: \"tomli\", importName: \"tomli\", promptLabel: \"tomli\" },\n\t{ uvArg: \"python-dotenv\", importName: \"dotenv\", promptLabel: \"dotenv (python-dotenv)\" },\n\t{ uvArg: \"pandas\", importName: \"pandas\", promptLabel: \"pandas\" },\n\t{ uvArg: \"numpy\", importName: \"numpy\", promptLabel: \"numpy\" },\n\t{ uvArg: \"scipy\", importName: \"scipy\", promptLabel: \"scipy\" },\n\t{ uvArg: \"beautifulsoup4\", importName: \"bs4\", promptLabel: \"bs4 (Beautiful Soup)\" },\n\t{ uvArg: \"lxml\", importName: \"lxml\", promptLabel: \"lxml\" },\n\t{ uvArg: \"pydantic\", importName: \"pydantic\", promptLabel: \"pydantic\" },\n\t{ uvArg: \"tyro\", importName: \"tyro\", promptLabel: \"tyro\" },\n];\nexport const DEFAULT_RLM_EXTRA_UV_ARGS = DEFAULT_RLM_EXTRA_PACKAGES.map((pkg) => pkg.uvArg);\nexport const DEFAULT_RLM_EXTRA_IMPORT_NAMES = DEFAULT_RLM_EXTRA_PACKAGES.map((pkg) => pkg.importName);\nexport const DEFAULT_RLM_EXTRA_IMPORT_LABELS = DEFAULT_RLM_EXTRA_PACKAGES.map((pkg) => pkg.promptLabel);\nconst UV_INSTALL_COMMAND = \"curl -LsSf https://astral.sh/uv/install.sh | UV_NO_MODIFY_PATH=1 sh\";\nconst REQUIRED_HARNESS_METHODS = [\n\t\"create_memory\",\n\t\"update_memory\",\n\t\"delete_memory\",\n\t\"create_skill\",\n\t\"update_skill\",\n\t\"delete_skill\",\n\t\"create_subagent\",\n\t\"update_subagent\",\n\t\"delete_subagent\",\n\t\"create_prompt_note\",\n\t\"update_prompt_note\",\n\t\"delete_prompt_note\",\n\t\"record_refinement\",\n];\nconst RUNTIME_READY_CHECK = `import inspect; from importlib import metadata; import rlm; assert metadata.version(\"${RUNTIME_REQUIREMENT}\"); assert \"prime-agent-runtime\" not in {d.metadata[\"Name\"].lower().replace(\"_\", \"-\") for d in metadata.distributions()}; from rlm import McpIntegration; import rlm.mcp as mcp; from rlm.harness import HarnessEntry; _harness_methods = ${JSON.stringify(REQUIRED_HARNESS_METHODS)}; assert callable(mcp.list_tools); assert callable(mcp.call_tool); assert hasattr(rlm, 'run'); assert callable(rlm); assert hasattr(rlm, 'rlm'); assert callable(rlm.rlm); assert callable(rlm.host_request); assert callable(rlm.find_models); assert callable(rlm.rlm.find_models); assert hasattr(rlm, 'harness'); assert hasattr(rlm, 'get_harness_state'); assert hasattr(rlm.rlm, 'harness'); assert hasattr(rlm.rlm, 'get_harness_state'); assert all(callable(getattr(_harness, _method, None)) for _harness in (rlm.harness, rlm.rlm.harness) for _method in _harness_methods); assert 'reference' in HarnessEntry.__dataclass_fields__; assert 'scope' in HarnessEntry.__dataclass_fields__; assert 'reference' in inspect.signature(rlm.harness.create_skill).parameters; assert 'reference' in inspect.signature(rlm.harness.update_skill).parameters; assert 'global_' in inspect.signature(rlm.harness.create_memory).parameters; assert 'global_' in inspect.signature(rlm.get_harness_state).parameters; assert not hasattr(rlm, 'background'); assert not hasattr(rlm.rlm, 'background'); from rlm.bash import BashHandle, BashResult; assert callable(rlm.bash); assert all(callable(getattr(BashHandle, _m, None)) for _m in ('tail', 'output', 'poll', 'kill')); assert {'exit_code', 'output', 'duration'} <= set(BashResult.__dataclass_fields__); import rlm.repl as _repl; assert callable(_repl.main); assert callable(_repl.emit); assert callable(_repl.host_request); assert callable(_repl.is_active); assert _repl.PROTOCOL_VERSION == 4; assert callable(rlm.emit); assert not hasattr(rlm, 'HOST_COMM_TARGET'); assert not hasattr(mcp, 'install_shutdown_hook')`;\nconst BOOTSTRAP_VERSION_FILE = \".bootstrap-version\";\nconst BOOTSTRAP_LOCK_NAME = \".bootstrap.lock\";\nconst BOOTSTRAP_LOCK_RETRY_MS = 100;\nconst BOOTSTRAP_LOCK_STALE_WITHOUT_PID_MS = 30_000;\n\nlet inFlightEnsureKernelPython: { key: string; promise: Promise<string> } | null = null;\n\nexport type KernelPythonSkill = PythonSkillRuntimeInfo;\nexport type KernelBootstrapProgressHandler = (message: string) => void;\n\nexport interface EnsureKernelPythonOptions {\n\tpythonSkills?: readonly KernelPythonSkill[];\n\tonProgress?: KernelBootstrapProgressHandler;\n}\n\ninterface BootstrapPythonSkill {\n\timportName: string;\n\tpackagePath: string;\n\tpyprojectPath: string;\n\tpyprojectHash: string;\n}\n\ninterface BootstrapVersion {\n\tschema: number;\n\truntime?: string;\n\tsnapshot?: string;\n\textraUvArgs?: string[];\n\tpythonSkills?: BootstrapPythonSkill[];\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isNodeError(error: unknown, code: string): boolean {\n\treturn error instanceof Error && \"code\" in error && error.code === code;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nasync function exists(filePath: string): Promise<boolean> {\n\ttry {\n\t\tawait access(filePath);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function isExecutable(filePath: string): Promise<boolean> {\n\ttry {\n\t\tawait access(filePath, constants.X_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\ninterface PythonSkillMetadata {\n\tprojectName?: string;\n\tdependencyNames: Set<string>;\n\tpyprojectHash: string;\n}\n\ninterface PythonSkillPlan {\n\tskills: BootstrapPythonSkill[];\n\tinstallOrder: BootstrapPythonSkill[];\n\tdependencies: Map<BootstrapPythonSkill, BootstrapPythonSkill[]>;\n}\n\nfunction planPythonSkills(pythonSkills: readonly KernelPythonSkill[] | undefined): PythonSkillPlan {\n\tconst metadata = new Map<string, PythonSkillMetadata>();\n\tconst siblings = new Map<string, Map<string, BootstrapPythonSkill>>();\n\tconst byKey = new Map<string, BootstrapPythonSkill>();\n\tconst readMetadata = (pyprojectPath: string): PythonSkillMetadata => {\n\t\tlet parsed = metadata.get(pyprojectPath);\n\t\tif (parsed) return parsed;\n\t\tlet text = \"\";\n\t\tlet pyprojectHash = \"unreadable\";\n\t\ttry {\n\t\t\tconst bytes = readFileSync(pyprojectPath);\n\t\t\ttext = bytes.toString(\"utf8\");\n\t\t\tpyprojectHash = `sha256:${createHash(\"sha256\").update(bytes).digest(\"hex\")}`;\n\t\t} catch {\n\t\t\t// Preserve the existing unreadable-metadata readiness behavior.\n\t\t}\n\t\tconst projectSection = parseTomlProjectSection(text);\n\t\tparsed = {\n\t\t\tprojectName: projectSection?.match(/^\\s*name\\s*=\\s*[\"']([^\"']+)[\"']/m)?.[1]?.trim(),\n\t\t\tdependencyNames: parsePythonSkillDependencyNames(projectSection),\n\t\t\tpyprojectHash,\n\t\t};\n\t\tmetadata.set(pyprojectPath, parsed);\n\t\treturn parsed;\n\t};\n\tconst projectName = (skill: BootstrapPythonSkill): string =>\n\t\t(readMetadata(skill.pyprojectPath).projectName || skill.importName).replaceAll(\"_\", \"-\").toLowerCase();\n\tconst siblingPackages = (packagePath: string): Map<string, BootstrapPythonSkill> => {\n\t\tconst siblingsDir = path.dirname(packagePath);\n\t\tlet packages = siblings.get(siblingsDir);\n\t\tif (packages) return packages;\n\t\tpackages = new Map();\n\t\tfor (const entry of readdirSync(siblingsDir, { withFileTypes: true })) {\n\t\t\tif (!entry.isDirectory()) continue;\n\t\t\tconst siblingPath = path.join(siblingsDir, entry.name);\n\t\t\tconst pyprojectPath = path.join(siblingPath, \"pyproject.toml\");\n\t\t\tif (!existsSync(pyprojectPath)) continue;\n\t\t\tconst skill = {\n\t\t\t\timportName: entry.name.replaceAll(\"-\", \"_\"),\n\t\t\t\tpackagePath: siblingPath,\n\t\t\t\tpyprojectPath,\n\t\t\t\tpyprojectHash: readMetadata(pyprojectPath).pyprojectHash,\n\t\t\t};\n\t\t\tconst name = projectName(skill);\n\t\t\tif (!packages.has(name)) packages.set(name, skill);\n\t\t}\n\t\tsiblings.set(siblingsDir, packages);\n\t\treturn packages;\n\t};\n\tconst addSkill = (skill: Pick<KernelPythonSkill, \"importName\" | \"packagePath\" | \"pyprojectPath\">): void => {\n\t\tconst packagePath = path.resolve(skill.packagePath);\n\t\tconst pyprojectPath = path.resolve(skill.pyprojectPath);\n\t\tconst key = `${skill.importName}\\0${packagePath}`;\n\t\tif (byKey.has(key)) return;\n\t\tconst parsed = readMetadata(pyprojectPath);\n\t\tconst bootstrapSkill: BootstrapPythonSkill = {\n\t\t\timportName: skill.importName,\n\t\t\tpackagePath,\n\t\t\tpyprojectPath,\n\t\t\tpyprojectHash: parsed.pyprojectHash,\n\t\t};\n\t\tbyKey.set(key, bootstrapSkill);\n\t\tfor (const name of parsed.dependencyNames) {\n\t\t\tconst dependency = siblingPackages(packagePath).get(name);\n\t\t\tif (dependency) addSkill(dependency);\n\t\t}\n\t};\n\tfor (const skill of pythonSkills ?? []) addSkill(skill);\n\tconst skills = [...byKey.values()].sort(\n\t\t(a, b) => a.packagePath.localeCompare(b.packagePath) || a.importName.localeCompare(b.importName),\n\t);\n\tconst byProjectName = new Map(skills.map((skill) => [projectName(skill), skill]));\n\tconst dependencies = new Map(\n\t\tskills.map((skill) => [\n\t\t\tskill,\n\t\t\t[...readMetadata(skill.pyprojectPath).dependencyNames]\n\t\t\t\t.map((name) => byProjectName.get(name))\n\t\t\t\t.filter((dependency): dependency is BootstrapPythonSkill => dependency !== undefined),\n\t\t]),\n\t);\n\treturn { skills, dependencies, installOrder: sortPythonSkillsForInstall(skills, dependencies) };\n}\n\nfunction parseTomlProjectSection(text: string): string | undefined {\n\tconst match = text.match(/^\\s*\\[project\\]\\s*$/m);\n\tif (!match || match.index === undefined) return;\n\tconst rest = text.slice(match.index + match[0].length);\n\tconst nextSection = rest.search(/^\\s*\\[/m);\n\treturn nextSection >= 0 ? rest.slice(0, nextSection) : rest;\n}\n\nfunction parseDependencyPackageName(dependency: string): string | undefined {\n\tconst withoutMarker = dependency.split(\";\")[0]?.trim() ?? \"\";\n\tif (!withoutMarker) {\n\t\treturn undefined;\n\t}\n\tconst match = withoutMarker.match(/^([A-Za-z0-9_.-]+)/);\n\treturn match?.[1]?.replaceAll(\"_\", \"-\").toLowerCase();\n}\n\nfunction findTomlArrayEnd(text: string, startIndex: number): number {\n\tlet inQuote: '\"' | \"'\" | undefined;\n\tlet escaped = false;\n\tfor (let index = startIndex; index < text.length; index++) {\n\t\tconst char = text[index];\n\t\tif (inQuote) {\n\t\t\tif (escaped) {\n\t\t\t\tescaped = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === \"\\\\\") {\n\t\t\t\tescaped = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === inQuote) {\n\t\t\t\tinQuote = undefined;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === '\"' || char === \"'\") {\n\t\t\tinQuote = char;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \"]\") {\n\t\t\treturn index;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction parsePythonSkillDependencyNames(projectSection: string | undefined): Set<string> {\n\tif (!projectSection) {\n\t\treturn new Set();\n\t}\n\tconst dependenciesStart = projectSection.search(/^\\s*dependencies\\s*=\\s*\\[/m);\n\tif (dependenciesStart < 0) {\n\t\treturn new Set();\n\t}\n\tconst arrayStart = projectSection.indexOf(\"[\", dependenciesStart);\n\tif (arrayStart < 0) {\n\t\treturn new Set();\n\t}\n\tconst arrayEnd = findTomlArrayEnd(projectSection, arrayStart + 1);\n\tif (arrayEnd < 0) {\n\t\treturn new Set();\n\t}\n\tconst dependenciesArray = projectSection.slice(arrayStart, arrayEnd + 1);\n\tconst dependencies = new Set<string>();\n\tconst dependencyPattern = /\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"|'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)'/g;\n\tfor (const match of dependenciesArray.matchAll(dependencyPattern)) {\n\t\tconst dependency = (match[1] ?? match[2] ?? \"\").replaceAll('\\\\\"', '\"').replaceAll(\"\\\\'\", \"'\");\n\t\tconst name = parseDependencyPackageName(dependency);\n\t\tif (name) {\n\t\t\tdependencies.add(name);\n\t\t}\n\t}\n\treturn dependencies;\n}\n\nfunction sortPythonSkillsForInstall(\n\tpythonSkills: readonly BootstrapPythonSkill[],\n\tdependenciesBySkill: ReadonlyMap<BootstrapPythonSkill, readonly BootstrapPythonSkill[]>,\n): BootstrapPythonSkill[] {\n\tconst originalIndex = new Map(pythonSkills.map((skill, index) => [skill, index]));\n\n\tconst pending = new Set(pythonSkills);\n\tconst sorted: BootstrapPythonSkill[] = [];\n\twhile (pending.size > 0) {\n\t\tlet progressed = false;\n\t\tfor (const skill of [...pending].sort((a, b) => (originalIndex.get(a) ?? 0) - (originalIndex.get(b) ?? 0))) {\n\t\t\tconst dependencies = dependenciesBySkill.get(skill) ?? [];\n\t\t\tif (dependencies.some((dependency) => pending.has(dependency))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tsorted.push(skill);\n\t\t\tpending.delete(skill);\n\t\t\tprogressed = true;\n\t\t}\n\t\tif (!progressed) {\n\t\t\t// Cyclic local skill dependencies cannot be topologically ordered; keep a\n\t\t\t// deterministic order and let uv surface the packaging error if needed.\n\t\t\tsorted.push(...[...pending].sort((a, b) => a.packagePath.localeCompare(b.packagePath)));\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn sorted;\n}\n\nfunction formatPythonSkillInstallArgs(skill: BootstrapPythonSkill): string[] {\n\treturn [\"--editable\", skill.packagePath];\n}\n\nfunction ensureKernelPythonKey(pythonSkills: readonly BootstrapPythonSkill[]): string {\n\treturn [\n\t\tprocess.env[PRODUCT_ENV.kernelPython] ?? \"\",\n\t\tprocess.env[PRODUCT_ENV.kernelVenv] ?? \"\",\n\t\tprocess.env.HOME ?? \"\",\n\t\tprocess.env[PRODUCT_ENV.home] ?? \"\",\n\t\tJSON.stringify(pythonSkills),\n\t].join(\"\\0\");\n}\n\nexport function getKernelVenvDir(): string {\n\tconst override = readAbsolutePathEnv(PRODUCT_ENV.kernelVenv);\n\treturn assertProductStatePath(override ?? ownedRuntime?.runtimeDir ?? resolveRuntimePaths().runtime);\n}\n\nasync function resolveWritableKernelVenvDir(): Promise<string> {\n\tconst venv = getKernelVenvDir();\n\tawait mkdir(path.dirname(venv), { recursive: true });\n\treturn venv;\n}\n\nfunction run(\n\tcommand: string,\n\targs: string[],\n\toptions: { stdio?: \"ignore\" | \"inherit\"; env?: NodeJS.ProcessEnv } = {},\n): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst child = spawn(command, args, {\n\t\t\tenv: options.env ?? process.env,\n\t\t\tstdio: options.stdio ?? \"ignore\",\n\t\t});\n\t\tchild.on(\"error\", reject);\n\t\tchild.on(\"exit\", (code, signal) => {\n\t\t\tif (code === 0) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst reason = signal ? `signal ${signal}` : `exit code ${code}`;\n\t\t\treject(new Error(`${command} ${args.join(\" \")} failed with ${reason}`));\n\t\t});\n\t});\n}\n\nasync function pythonImports(python: string, moduleName: string): Promise<boolean> {\n\ttry {\n\t\tawait run(python, [\"-c\", `import ${moduleName}`], { stdio: \"ignore\" });\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function hasBaseContextRuntime(python: string): Promise<boolean> {\n\ttry {\n\t\tawait run(python, [\"-c\", RUNTIME_READY_CHECK], { stdio: \"ignore\" });\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function missingRlmExtraImportLabels(python: string): Promise<string[]> {\n\tconst missing: string[] = [];\n\tfor (const pkg of DEFAULT_RLM_EXTRA_PACKAGES) {\n\t\tif (!(await pythonImports(python, pkg.importName))) {\n\t\t\tmissing.push(pkg.promptLabel);\n\t\t}\n\t}\n\treturn missing;\n}\n\nasync function missingPythonSkillImportLabels(\n\tpython: string,\n\tpythonSkills: readonly KernelPythonSkill[],\n): Promise<string[]> {\n\tconst missing: string[] = [];\n\tfor (const skill of pythonSkills) {\n\t\tif (!(await pythonImports(python, skill.importName))) {\n\t\t\tmissing.push(`${skill.name} (${skill.importName})`);\n\t\t}\n\t}\n\treturn missing;\n}\n\nfunction reportProgress(options: EnsureKernelPythonOptions, message: string): void {\n\tif (options.onProgress) {\n\t\toptions.onProgress(message);\n\t\treturn;\n\t}\n\tprocess.stderr.write(`${message}\\n`);\n}\n\nfunction bootstrapLockDir(venv: string): string {\n\treturn path.join(path.dirname(venv), `${path.basename(venv)}${BOOTSTRAP_LOCK_NAME}`);\n}\n\nfunction processIsRunning(pid: number): boolean {\n\ttry {\n\t\tprocess.kill(pid, 0);\n\t\treturn true;\n\t} catch (error) {\n\t\treturn isNodeError(error, \"EPERM\");\n\t}\n}\n\nasync function readLockPid(lockDir: string): Promise<number | null> {\n\ttry {\n\t\tconst raw = await readFile(path.join(lockDir, \"pid\"), \"utf8\");\n\t\tconst pid = Number.parseInt(raw.trim(), 10);\n\t\treturn Number.isInteger(pid) && pid > 0 ? pid : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nasync function lockMissingPidIsStale(lockDir: string): Promise<boolean> {\n\ttry {\n\t\tconst lockStat = await stat(lockDir);\n\t\treturn Date.now() - lockStat.mtimeMs > BOOTSTRAP_LOCK_STALE_WITHOUT_PID_MS;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function acquireBootstrapLock(venv: string): Promise<() => Promise<void>> {\n\tconst lockDir = bootstrapLockDir(venv);\n\tawait mkdir(path.dirname(lockDir), { recursive: true });\n\n\tfor (;;) {\n\t\ttry {\n\t\t\tawait mkdir(lockDir);\n\t\t\tawait writeFile(path.join(lockDir, \"pid\"), `${process.pid}\\n`, \"utf8\");\n\t\t\treturn () => rm(lockDir, { recursive: true, force: true });\n\t\t} catch (error) {\n\t\t\tif (!isNodeError(error, \"EEXIST\")) throw error;\n\n\t\t\tconst pid = await readLockPid(lockDir);\n\t\t\tif (pid === null ? await lockMissingPidIsStale(lockDir) : !processIsRunning(pid)) {\n\t\t\t\tawait rm(lockDir, { recursive: true, force: true });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tawait sleep(BOOTSTRAP_LOCK_RETRY_MS);\n\t\t}\n\t}\n}\n\nasync function findExecutable(name: string): Promise<string | null> {\n\tconst pathValue = process.env.PATH;\n\tif (!pathValue) return null;\n\tconst candidates = process.platform === \"win32\" ? [name, `${name}.exe`] : [name];\n\tfor (const dir of pathValue.split(path.delimiter)) {\n\t\tif (!dir) continue;\n\t\tfor (const candidate of candidates) {\n\t\t\tconst fullPath = path.join(dir, candidate);\n\t\t\tif (await isExecutable(fullPath)) return fullPath;\n\t\t}\n\t}\n\treturn null;\n}\n\nasync function ensureUv(options: EnsureKernelPythonOptions): Promise<string> {\n\tconst fromPath = await findExecutable(\"uv\");\n\tif (fromPath) return fromPath;\n\n\tconst localUv = path.join(os.homedir(), \".local\", \"bin\", process.platform === \"win32\" ? \"uv.exe\" : \"uv\");\n\tif (await isExecutable(localUv)) return localUv;\n\n\tconst shouldInstallUv =\n\t\tprocess.env[PRODUCT_ENV.installUv] === \"1\" || (!options.onProgress && (await confirmUvInstall()));\n\tif (!shouldInstallUv) {\n\t\tthrow new Error(\n\t\t\t`uv is required to set up the Python kernel. Install uv yourself: ${UV_INSTALL_COMMAND}, ` +\n\t\t\t\t\"or set BASE_CONTEXT_INSTALL_UV=1 to let base-context run that installer.\",\n\t\t);\n\t}\n\n\treportProgress(options, \"› installing uv (one-time)…\");\n\ttry {\n\t\tawait run(\"sh\", [\"-c\", UV_INSTALL_COMMAND], {\n\t\t\tstdio: options.onProgress ? \"ignore\" : \"inherit\",\n\t\t\tenv: { ...process.env, UV_INSTALL_DIR: path.dirname(localUv) },\n\t\t});\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`couldn't install uv from astral.sh; install it yourself: ${UV_INSTALL_COMMAND}, then re-run base-context. ${errorMessage(error)}`,\n\t\t);\n\t}\n\n\tif (await isExecutable(localUv)) return localUv;\n\tconst installedFromPath = await findExecutable(\"uv\");\n\tif (installedFromPath) return installedFromPath;\n\tthrow new Error(\"uv install completed but binary not found at ~/.local/bin/uv\");\n}\n\nasync function confirmUvInstall(): Promise<boolean> {\n\tif (process.env[PRODUCT_ENV.installUv] === \"0\") return false;\n\tif (!stdin.isTTY || !stderr.isTTY) return false;\n\n\tconst rl = createInterface({ input: stdin, output: stderr });\n\ttry {\n\t\tconst answer = (\n\t\t\tawait rl.question(\"Base Context needs uv to set up Python. Install uv from astral.sh now? [Y/n] \")\n\t\t)\n\t\t\t.trim()\n\t\t\t.toLowerCase();\n\t\treturn answer !== \"n\" && answer !== \"no\";\n\t} finally {\n\t\trl.close();\n\t}\n}\n\nasync function readBootstrapVersion(venv: string): Promise<BootstrapVersion | null> {\n\ttry {\n\t\tconst raw = await readFile(path.join(venv, BOOTSTRAP_VERSION_FILE), \"utf8\");\n\t\tconst parsed: unknown = JSON.parse(raw);\n\t\tif (!isRecord(parsed) || typeof parsed.schema !== \"number\") return null;\n\t\tconst extraUvArgs =\n\t\t\tArray.isArray(parsed.extraUvArgs) &&\n\t\t\tparsed.extraUvArgs.every((v: unknown): v is string => typeof v === \"string\")\n\t\t\t\t? (parsed.extraUvArgs as string[])\n\t\t\t\t: undefined;\n\t\tlet pythonSkills: BootstrapPythonSkill[] | undefined;\n\t\tif (Array.isArray(parsed.pythonSkills)) {\n\t\t\tif (\n\t\t\t\t!parsed.pythonSkills.every((v: unknown): v is BootstrapPythonSkill => {\n\t\t\t\t\tif (!isRecord(v)) return false;\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttypeof v.importName === \"string\" &&\n\t\t\t\t\t\ttypeof v.packagePath === \"string\" &&\n\t\t\t\t\t\ttypeof v.pyprojectPath === \"string\" &&\n\t\t\t\t\t\ttypeof v.pyprojectHash === \"string\"\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tpythonSkills = parsed.pythonSkills as BootstrapPythonSkill[];\n\t\t}\n\t\treturn {\n\t\t\tschema: parsed.schema,\n\t\t\truntime: typeof parsed.runtime === \"string\" ? parsed.runtime : undefined,\n\t\t\tsnapshot: typeof parsed.snapshot === \"string\" ? parsed.snapshot : undefined,\n\t\t\textraUvArgs,\n\t\t\tpythonSkills,\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction extraUvArgsMatch(a: string[] | undefined, b: string[] | undefined): boolean {\n\tif (a === b) return true;\n\tif (!a || !b) return false;\n\tif (a.length !== b.length) return false;\n\treturn a.every((v, i) => v === b[i]);\n}\n\nfunction pythonSkillsMatch(a: BootstrapPythonSkill[] | undefined, b: readonly BootstrapPythonSkill[]): boolean {\n\tconst left = a ?? [];\n\tif (left.length !== b.length) return false;\n\treturn left.every((skill, index) => {\n\t\tconst expected = b[index];\n\t\treturn (\n\t\t\tskill.importName === expected.importName &&\n\t\t\tskill.packagePath === expected.packagePath &&\n\t\t\tskill.pyprojectPath === expected.pyprojectPath &&\n\t\t\tskill.pyprojectHash === expected.pyprojectHash\n\t\t);\n\t});\n}\n\nfunction bootstrapVersionCurrent(\n\tversion: BootstrapVersion | null,\n\truntimeIdentity: string,\n\tpythonSkills: readonly BootstrapPythonSkill[],\n): boolean {\n\treturn (\n\t\tversion !== null &&\n\t\tbootstrapBaseVersionCurrent(version, runtimeIdentity) &&\n\t\tpythonSkillsMatch(version.pythonSkills, pythonSkills)\n\t);\n}\n\nfunction bootstrapBaseVersionCurrent(version: BootstrapVersion | null, runtimeIdentity: string): boolean {\n\treturn (\n\t\tversion?.schema === BOOTSTRAP_SCHEMA &&\n\t\tversion.runtime === runtimeIdentity &&\n\t\tversion.snapshot === STATE_SNAPSHOT_REQUIREMENT &&\n\t\textraUvArgsMatch(version.extraUvArgs, DEFAULT_RLM_EXTRA_UV_ARGS)\n\t);\n}\n\nasync function writeBootstrapVersion(\n\tvenv: string,\n\truntimeIdentity: string,\n\tpythonSkills: readonly BootstrapPythonSkill[],\n): Promise<void> {\n\tconst version: BootstrapVersion = {\n\t\tschema: BOOTSTRAP_SCHEMA,\n\t\truntime: runtimeIdentity,\n\t\tsnapshot: STATE_SNAPSHOT_REQUIREMENT,\n\t\textraUvArgs: DEFAULT_RLM_EXTRA_UV_ARGS,\n\t\tpythonSkills: [...pythonSkills],\n\t};\n\tawait writeFile(path.join(venv, BOOTSTRAP_VERSION_FILE), `${JSON.stringify(version)}\\n`, \"utf8\");\n}\n\nexport function runtimeCandidateDirs(): string[] {\n\tif (ownedRuntime) return [path.join(ownedRuntime.packageDir, \"dist\", RUNTIME_REQUIREMENT)];\n\tconst packageDir = getPackageDir();\n\tif (existsSync(path.join(packageDir, \"src\"))) {\n\t\treturn [path.resolve(packageDir, \"..\", \"..\", \"prime-agent-runtime\")];\n\t}\n\treturn [path.join(packageDir, \"dist\", RUNTIME_REQUIREMENT), path.join(packageDir, RUNTIME_REQUIREMENT)];\n}\n\nasync function resolveRuntimeSourceDir(): Promise<string> {\n\tfor (const candidate of runtimeCandidateDirs()) {\n\t\tif (await exists(path.join(candidate, \"pyproject.toml\"))) return candidate;\n\t}\n\tthrow new Error(\n\t\t\"Base Context runtime payload is missing. Reinstall this Base Context release; registry runtime fallback is disabled.\",\n\t);\n}\n\nexport async function resolveRuntimeIdentity(): Promise<string> {\n\treturn hashRuntimeSource(await resolveRuntimeSourceDir());\n}\n\n// A source read failure must not be replaced by a registry runtime.\nasync function hashRuntimeSource(sourceDir: string): Promise<string> {\n\tconst rlmDir = path.join(sourceDir, \"src\", \"rlm\");\n\tconst files: string[] = [path.join(sourceDir, \"pyproject.toml\")];\n\tasync function collect(dir: string): Promise<void> {\n\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tconst full = path.join(dir, entry.name);\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tawait collect(full);\n\t\t\t} else if (entry.isFile() && entry.name.endsWith(\".py\")) {\n\t\t\t\tfiles.push(full);\n\t\t\t}\n\t\t}\n\t}\n\tawait collect(rlmDir);\n\tfiles.sort();\n\tconst hash = createHash(\"sha256\");\n\tfor (const file of files) {\n\t\thash.update(path.relative(sourceDir, file));\n\t\thash.update(\"\\0\");\n\t\thash.update(await readFile(file));\n\t\thash.update(\"\\0\");\n\t}\n\treturn `sha256:${hash.digest(\"hex\")}`;\n}\n\nasync function bootstrapVenv(\n\tvenv: string,\n\tplan: PythonSkillPlan,\n\toptions: EnsureKernelPythonOptions,\n\tsourceDir: string,\n\truntimeIdentity: string,\n): Promise<void> {\n\tawait mkdir(path.dirname(venv), { recursive: true });\n\tconst uv = await ensureUv(options);\n\tconst python = path.join(venv, \"bin\", \"python\");\n\tconst runtimeRequirement = sourceDir;\n\n\tawait run(uv, [\"python\", \"install\", PYTHON_VERSION]);\n\tawait run(uv, [\"venv\", venv, \"--python\", PYTHON_VERSION, \"--seed\"]);\n\tawait run(uv, [\n\t\t\"pip\",\n\t\t\"install\",\n\t\t\"--python\",\n\t\tpython,\n\t\truntimeRequirement,\n\t\tSTATE_SNAPSHOT_REQUIREMENT,\n\t\t...DEFAULT_RLM_EXTRA_UV_ARGS,\n\t]);\n\tawait syncPythonSkills(uv, venv, python, runtimeIdentity, plan, options);\n}\n\nasync function syncPythonSkills(\n\tuv: string,\n\tvenv: string,\n\tpython: string,\n\truntimeIdentity: string,\n\tplan: PythonSkillPlan,\n\toptions: EnsureKernelPythonOptions,\n): Promise<void> {\n\tconst version = await readBootstrapVersion(venv);\n\tconst installedPythonSkills: BootstrapPythonSkill[] = [];\n\tconst currentPythonSkills = new Map(\n\t\t(version?.pythonSkills ?? []).map((skill) => [`${skill.importName}\\0${skill.packagePath}`, skill]),\n\t);\n\n\tfor (const skill of plan.installOrder) {\n\t\tconst existingSkill = currentPythonSkills.get(`${skill.importName}\\0${skill.packagePath}`);\n\t\tif (existingSkill?.pyprojectPath === skill.pyprojectPath && existingSkill.pyprojectHash === skill.pyprojectHash) {\n\t\t\tinstalledPythonSkills.push(skill);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst localDependencies = plan.dependencies.get(skill) ?? [];\n\t\tconst localDependencyArgs = localDependencies\n\t\t\t.filter((dependency) => {\n\t\t\t\tconst installedDependency = currentPythonSkills.get(`${dependency.importName}\\0${dependency.packagePath}`);\n\t\t\t\tconst installedThisSync = installedPythonSkills.some(\n\t\t\t\t\t(installed) =>\n\t\t\t\t\t\tinstalled.importName === dependency.importName &&\n\t\t\t\t\t\tinstalled.packagePath === dependency.packagePath &&\n\t\t\t\t\t\tinstalled.pyprojectPath === dependency.pyprojectPath &&\n\t\t\t\t\t\tinstalled.pyprojectHash === dependency.pyprojectHash,\n\t\t\t\t);\n\t\t\t\treturn !(\n\t\t\t\t\tinstalledThisSync ||\n\t\t\t\t\t(installedDependency?.pyprojectPath === dependency.pyprojectPath &&\n\t\t\t\t\t\tinstalledDependency.pyprojectHash === dependency.pyprojectHash)\n\t\t\t\t);\n\t\t\t})\n\t\t\t.flatMap(formatPythonSkillInstallArgs);\n\n\t\ttry {\n\t\t\tawait run(uv, [\n\t\t\t\t\"pip\",\n\t\t\t\t\"install\",\n\t\t\t\t\"--python\",\n\t\t\t\tpython,\n\t\t\t\t...formatPythonSkillInstallArgs(skill),\n\t\t\t\t...localDependencyArgs,\n\t\t\t]);\n\t\t\tinstalledPythonSkills.push(\n\t\t\t\tskill,\n\t\t\t\t...localDependencies.filter((dependency) => !installedPythonSkills.includes(dependency)),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\treportProgress(\n\t\t\t\toptions,\n\t\t\t\t`Warning: Python skill ${skill.importName} failed to install and will be unavailable: ${errorMessage(error)}`,\n\t\t\t);\n\t\t}\n\t}\n\tawait writeBootstrapVersion(venv, runtimeIdentity, installedPythonSkills);\n}\n\nasync function kernelBaseReady(python: string, venv: string, runtimeIdentity: string): Promise<boolean> {\n\treturn (\n\t\t(await hasBaseContextRuntime(python)) &&\n\t\tbootstrapBaseVersionCurrent(await readBootstrapVersion(venv), runtimeIdentity)\n\t);\n}\n\nasync function kernelReady(\n\tpython: string,\n\tvenv: string,\n\truntimeIdentity: string,\n\tpythonSkills: readonly BootstrapPythonSkill[],\n): Promise<boolean> {\n\treturn (\n\t\t(await hasBaseContextRuntime(python)) &&\n\t\tbootstrapVersionCurrent(await readBootstrapVersion(venv), runtimeIdentity, pythonSkills)\n\t);\n}\n\nfunction formatBootstrapFailure(error: unknown): Error {\n\treturn new Error(\n\t\t`Failed to set up the Python kernel runtime. ${errorMessage(error)}\\n` +\n\t\t\t\"First-time setup needs internet to install uv, Python, the bundled base-context-runtime, and default Python packages; once set up, base-context runs offline. \" +\n\t\t\t\"Set BASE_CONTEXT_KERNEL_PYTHON to a Python with a current base-context-runtime and default Python packages installed to skip auto-bootstrap.\",\n\t);\n}\n\nasync function ensureKernelPythonUncached(options: EnsureKernelPythonOptions, plan: PythonSkillPlan): Promise<string> {\n\tconst pythonSkills = plan.skills;\n\tconst override = readAbsolutePathEnv(PRODUCT_ENV.kernelPython);\n\tif (override) {\n\t\tconst python = override;\n\t\tconst missing: string[] = [];\n\t\tif (!(await hasBaseContextRuntime(python))) {\n\t\t\tmissing.push(\n\t\t\t\t\"a current base-context-runtime with callable rlm.run, rlm.host_request, and explicit harness CRUD methods\",\n\t\t\t);\n\t\t}\n\t\tif (missing.length === 0) {\n\t\t\tconst missingExtraImports = await missingRlmExtraImportLabels(python);\n\t\t\tif (missingExtraImports.length > 0) {\n\t\t\t\tmissing.push(`default Python packages (${missingExtraImports.join(\", \")})`);\n\t\t\t}\n\t\t}\n\t\tif (missing.length === 0 && pythonSkills.length > 0) {\n\t\t\tconst missingPythonSkills = await missingPythonSkillImportLabels(python, options.pythonSkills ?? []);\n\t\t\tif (missingPythonSkills.length > 0) {\n\t\t\t\treportProgress(\n\t\t\t\t\toptions,\n\t\t\t\t\t`Warning: Python skills unavailable in BASE_CONTEXT_KERNEL_PYTHON and will be disabled: ${missingPythonSkills.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (missing.length === 0) return python;\n\t\tthrow new Error(`BASE_CONTEXT_KERNEL_PYTHON points to a Python missing ${missing.join(\" and \")}: ${python}`);\n\t}\n\n\tconst venv = await resolveWritableKernelVenvDir();\n\tconst python = path.join(venv, \"bin\", \"python\");\n\tconst sourceDir = await resolveRuntimeSourceDir();\n\tconst runtimeIdentity = await hashRuntimeSource(sourceDir);\n\tif (await kernelReady(python, venv, runtimeIdentity, pythonSkills)) return python;\n\n\tconst releaseLock = await acquireBootstrapLock(venv);\n\ttry {\n\t\tif (await kernelReady(python, venv, runtimeIdentity, pythonSkills)) return python;\n\t\tif (await kernelBaseReady(python, venv, runtimeIdentity)) {\n\t\t\tawait syncPythonSkills(await ensureUv(options), venv, python, runtimeIdentity, plan, options);\n\t\t\treturn python;\n\t\t}\n\n\t\tif (ownedRuntime && !readAbsolutePathEnv(PRODUCT_ENV.kernelVenv)) {\n\t\t\tthrow new Error(\n\t\t\t\t\"The selected Base-Context default runtime is unavailable or stale. Install a prepared candidate or explicitly roll back; the retained runtime was not rebuilt.\",\n\t\t\t);\n\t\t}\n\n\t\tconst hadVenv = existsSync(venv);\n\t\treportProgress(options, \"› setting up python kernel (one-time, ~30s)…\");\n\t\tif (hadVenv) {\n\t\t\treportProgress(options, \"rebuilding kernel venv\");\n\t\t\tawait rm(venv, { recursive: true, force: true });\n\t\t}\n\n\t\tawait bootstrapVenv(venv, plan, options, sourceDir, runtimeIdentity);\n\t} catch (error) {\n\t\tthrow formatBootstrapFailure(error);\n\t} finally {\n\t\tawait releaseLock().catch(() => undefined);\n\t}\n\n\treportProgress(options, \"✓ ready\");\n\treturn python;\n}\n\nexport function ensureKernelPython(options: EnsureKernelPythonOptions = {}): Promise<string> {\n\tconst plan = planPythonSkills(options.pythonSkills);\n\tconst key = ensureKernelPythonKey(plan.skills);\n\tif (inFlightEnsureKernelPython?.key === key) return inFlightEnsureKernelPython.promise;\n\n\tconst promise = ensureKernelPythonUncached(options, plan).finally(() => {\n\t\tif (inFlightEnsureKernelPython?.promise === promise) inFlightEnsureKernelPython = null;\n\t});\n\tinFlightEnsureKernelPython = { key, promise };\n\treturn promise;\n}\n\n/** Prepare only a new physical owned release, before its selection can be published. */\nexport async function prepareOwnedKernelPython(): Promise<string> {\n\tif (!ownedRuntime || existsSync(ownedRuntime.runtimeDir)) {\n\t\tthrow new Error(\"Base-Context runtime preparation requires a new, empty owned release runtime directory.\");\n\t}\n\tconst selected = readInstallSelection(ownedRuntime.root);\n\tif (selected?.active === ownedRuntime.version || selected?.previous === ownedRuntime.version) {\n\t\tthrow new Error(\"Base-Context will not prepare a published release in place. Install a new candidate instead.\");\n\t}\n\tconst python = path.join(ownedRuntime.runtimeDir, \"bin\", \"python\");\n\tconst options: EnsureKernelPythonOptions = { onProgress: (message) => console.error(message) };\n\tconst sourceDir = await resolveRuntimeSourceDir();\n\tconst runtimeIdentity = await hashRuntimeSource(sourceDir);\n\tawait bootstrapVenv(ownedRuntime.runtimeDir, planPythonSkills([]), options, sourceDir, runtimeIdentity);\n\tif (\n\t\t!(await kernelReady(python, ownedRuntime.runtimeDir, runtimeIdentity, [])) ||\n\t\t(await missingRlmExtraImportLabels(python)).length > 0\n\t) {\n\t\tthrow new Error(\"Base-Context candidate Python runtime did not become ready. This candidate was not activated.\");\n\t}\n\treturn python;\n}\n"]}
|