sneakoscope 0.7.0 → 0.7.2
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/package.json +1 -1
- package/src/cli/main.mjs +83 -33
- package/src/core/fsx.mjs +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sneakoscope",
|
|
3
3
|
"displayName": "ㅅㅋㅅ",
|
|
4
|
-
"version": "0.7.
|
|
4
|
+
"version": "0.7.2",
|
|
5
5
|
"description": "Sneakoscope Codex: database-safe Codex CLI/App harness with Team, Goal, AutoResearch, TriWiki, and Honest Mode.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"homepage": "https://github.com/mandarange/Sneakoscope-Codex#readme",
|
package/src/cli/main.mjs
CHANGED
|
@@ -14,7 +14,7 @@ import { containsUserQuestion, noQuestionContinuationReason } from '../core/no-q
|
|
|
14
14
|
import { evaluateDoneGate, defaultDoneGate } from '../core/hproof.mjs';
|
|
15
15
|
import { emitHook } from '../core/hooks-runtime.mjs';
|
|
16
16
|
import { storageReport, enforceRetention, pruneWikiArtifacts } from '../core/retention.mjs';
|
|
17
|
-
import { classifySql, classifyCommand, checkDbOperation, handleMadSksUserConfirmation } from '../core/db-safety.mjs';
|
|
17
|
+
import { classifySql, classifyCommand, checkDbOperation, handleMadSksUserConfirmation, loadDbSafetyPolicy, scanDbSafety } from '../core/db-safety.mjs';
|
|
18
18
|
import { checkHarnessModification, harnessGuardStatus, isHarnessSourceProject } from '../core/harness-guard.mjs';
|
|
19
19
|
import { formatHarnessConflictReport, llmHarnessCleanupPrompt, scanHarnessConflicts } from '../core/harness-conflicts.mjs';
|
|
20
20
|
import { context7Docs, context7Resolve, context7Text, context7Tools } from '../core/context7-client.mjs';
|
|
@@ -253,19 +253,16 @@ async function postinstall() {
|
|
|
253
253
|
else if (globalSkills.status === 'partial') console.log(`Codex App global $ skills: partial in ${globalSkills.root}; missing ${globalSkills.missing_skills.join(', ')}. Run \`sks doctor --fix\`.`);
|
|
254
254
|
else if (globalSkills.status === 'skipped') console.log(`Codex App global $ skills: skipped (${globalSkills.reason}).`);
|
|
255
255
|
else if (globalSkills.status === 'failed') console.log(`Codex App global $ skills: auto setup failed. Run \`sks doctor --fix\`. ${globalSkills.error || ''}`.trim());
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
if (runNow) {
|
|
262
|
-
await bootstrap(['--from-postinstall']);
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
256
|
+
const bootstrapDecision = await postinstallBootstrapDecision(installRoot);
|
|
257
|
+
if (bootstrapDecision.run) {
|
|
258
|
+
console.log(`SKS bootstrap: ${bootstrapDecision.reason}.`);
|
|
259
|
+
await runPostinstallBootstrap(installRoot);
|
|
260
|
+
return;
|
|
265
261
|
}
|
|
266
262
|
console.log('\nNext:');
|
|
267
263
|
console.log(' sks bootstrap');
|
|
268
|
-
console.log(
|
|
264
|
+
console.log(`\nSKS bootstrap was not run automatically: ${bootstrapDecision.reason}.`);
|
|
265
|
+
console.log('This initializes the current project, installs SKS Codex App skills, verifies Codex App/Context7 readiness, and checks warp/runtime dependencies.');
|
|
269
266
|
console.log('Dependency repair: sks deps check; sks deps install warp');
|
|
270
267
|
console.log('Open runtime after readiness is green: sks\n');
|
|
271
268
|
}
|
|
@@ -295,9 +292,23 @@ function shouldAskPostinstallQuestion() {
|
|
|
295
292
|
return Boolean(input.isTTY && output.isTTY && process.env.CI !== 'true' && process.env.SKS_POSTINSTALL_NO_PROMPT !== '1');
|
|
296
293
|
}
|
|
297
294
|
|
|
298
|
-
async function
|
|
299
|
-
if (process.env.SKS_POSTINSTALL_NO_BOOTSTRAP === '1') return false;
|
|
300
|
-
|
|
295
|
+
async function postinstallBootstrapDecision(root) {
|
|
296
|
+
if (process.env.SKS_POSTINSTALL_NO_BOOTSTRAP === '1') return { run: false, reason: 'SKS_POSTINSTALL_NO_BOOTSTRAP=1' };
|
|
297
|
+
if (process.env.SKS_POSTINSTALL_BOOTSTRAP === '0') return { run: false, reason: 'SKS_POSTINSTALL_BOOTSTRAP=0' };
|
|
298
|
+
const candidate = await isProjectSetupCandidate(path.resolve(root || process.cwd()));
|
|
299
|
+
if (!candidate && process.env.SKS_POSTINSTALL_BOOTSTRAP !== '1') return { run: false, reason: 'no project marker found in install cwd' };
|
|
300
|
+
if (process.env.SKS_POSTINSTALL_BOOTSTRAP === '1') return { run: true, reason: 'forced by SKS_POSTINSTALL_BOOTSTRAP=1' };
|
|
301
|
+
return { run: true, reason: 'auto-running sks setup --bootstrap --install-scope global --force' };
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
async function runPostinstallBootstrap(root) {
|
|
305
|
+
const previousCwd = process.cwd();
|
|
306
|
+
process.chdir(path.resolve(root || previousCwd));
|
|
307
|
+
try {
|
|
308
|
+
await bootstrap(['--from-postinstall', '--install-scope', 'global', '--force']);
|
|
309
|
+
} finally {
|
|
310
|
+
process.chdir(previousCwd);
|
|
311
|
+
}
|
|
301
312
|
}
|
|
302
313
|
|
|
303
314
|
async function askPostinstallQuestion(question) {
|
|
@@ -1711,10 +1722,11 @@ async function doctor(args) {
|
|
|
1711
1722
|
let conflictScan = await scanHarnessConflicts(root);
|
|
1712
1723
|
let repairApplied = false;
|
|
1713
1724
|
let globalSkillsRepair = null;
|
|
1725
|
+
const globalCommand = await globalSksCommand();
|
|
1714
1726
|
if (flag(args, '--fix') && !conflictScan.hard_block) {
|
|
1715
|
-
const fixScope = requestedScope || 'global';
|
|
1716
1727
|
const existingManifest = await readJson(path.join(root, '.sneakoscope', 'manifest.json'), null);
|
|
1717
|
-
|
|
1728
|
+
const fixScope = requestedScope || normalizeInstallScope(existingManifest?.installation?.scope || 'global');
|
|
1729
|
+
await initProject(root, { installScope: fixScope, globalCommand, localOnly: flag(args, '--local-only') || Boolean(existingManifest?.git?.local_only), force: true, repair: true });
|
|
1718
1730
|
if (!flag(args, '--local-only')) globalSkillsRepair = await ensureGlobalCodexSkillsDuringInstall({ force: true });
|
|
1719
1731
|
repairApplied = true;
|
|
1720
1732
|
conflictScan = await scanHarnessConflicts(root);
|
|
@@ -1726,7 +1738,7 @@ async function doctor(args) {
|
|
|
1726
1738
|
const pkgBytes = await dirSize(packageRoot()).catch(() => 0);
|
|
1727
1739
|
const manifest = await readJson(path.join(root, '.sneakoscope', 'manifest.json'), null);
|
|
1728
1740
|
const installScope = requestedScope || normalizeInstallScope(manifest?.installation?.scope || 'global');
|
|
1729
|
-
const install = await installStatus(root, installScope);
|
|
1741
|
+
const install = await installStatus(root, installScope, { globalCommand });
|
|
1730
1742
|
const dbPolicyExists = await exists(path.join(root, '.sneakoscope', 'db-safety.json'));
|
|
1731
1743
|
const dbScan = await scanDbSafety(root).catch((err) => ({ ok: false, findings: [{ id: 'db_safety_scan_failed', severity: 'high', reason: err.message }] }));
|
|
1732
1744
|
const context7Status = await checkContext7(root);
|
|
@@ -1868,7 +1880,10 @@ async function installStatus(root, scope, opts = {}) {
|
|
|
1868
1880
|
const discoveredGlobalBin = await discoverGlobalSksCommand();
|
|
1869
1881
|
const configuredGlobalBin = await configuredSksBin(opts.globalCommand);
|
|
1870
1882
|
const globalBin = configuredGlobalBin || discoveredGlobalBin;
|
|
1871
|
-
const
|
|
1883
|
+
const sourceProject = await isHarnessSourceProject(root).catch(() => false);
|
|
1884
|
+
const sourceBin = path.join(root, 'bin', 'sks.mjs');
|
|
1885
|
+
const sourceBinExists = sourceProject && await exists(sourceBin);
|
|
1886
|
+
const commandPrefix = sourceBinExists ? 'node ./bin/sks.mjs' : sksCommandPrefix(scope, { globalCommand: globalBin || undefined });
|
|
1872
1887
|
const projectBin = path.join(root, 'node_modules', 'sneakoscope', 'bin', 'sks.mjs');
|
|
1873
1888
|
const projectBinExists = await exists(projectBin);
|
|
1874
1889
|
return {
|
|
@@ -1877,7 +1892,9 @@ async function installStatus(root, scope, opts = {}) {
|
|
|
1877
1892
|
command_prefix: commandPrefix,
|
|
1878
1893
|
global_bin: globalBin,
|
|
1879
1894
|
project_bin: projectBin,
|
|
1880
|
-
|
|
1895
|
+
source_project: sourceProject,
|
|
1896
|
+
source_bin: sourceBinExists ? sourceBin : null,
|
|
1897
|
+
ok: sourceBinExists || (scope === 'project' ? projectBinExists : Boolean(globalBin))
|
|
1881
1898
|
};
|
|
1882
1899
|
}
|
|
1883
1900
|
|
|
@@ -2038,18 +2055,47 @@ async function selftest() {
|
|
|
2038
2055
|
const guardStatus = await harnessGuardStatus(tmp);
|
|
2039
2056
|
if (!guardStatus.ok || !guardStatus.locked || guardStatus.source_exception) throw new Error('selftest failed: harness guard not locked in installed project');
|
|
2040
2057
|
const repairTmp = tmpdir();
|
|
2041
|
-
await
|
|
2058
|
+
await writeJsonAtomic(path.join(repairTmp, 'package.json'), { name: 'sneakoscope', version: '0.0.0', type: 'module' });
|
|
2059
|
+
await ensureDir(path.join(repairTmp, 'bin'));
|
|
2060
|
+
await writeTextAtomic(path.join(repairTmp, 'bin', 'sks.mjs'), '#!/usr/bin/env node\n');
|
|
2061
|
+
await ensureDir(path.join(repairTmp, 'src', 'core'));
|
|
2062
|
+
await writeTextAtomic(path.join(repairTmp, 'src', 'core', 'init.mjs'), '// source-project marker\n');
|
|
2063
|
+
await writeTextAtomic(path.join(repairTmp, 'src', 'core', 'hooks-runtime.mjs'), '// source-project marker\n');
|
|
2064
|
+
await initProject(repairTmp, { installScope: 'project', localOnly: true });
|
|
2042
2065
|
await writeTextAtomic(path.join(repairTmp, '.agents', 'skills', 'team', 'SKILL.md'), 'tampered\n');
|
|
2043
2066
|
await writeTextAtomic(path.join(repairTmp, '.agents', 'skills', 'agent-team', 'SKILL.md'), '---\nname: agent-team\ndescription: Fallback Codex App picker alias for $Team.\n---\n');
|
|
2044
2067
|
await ensureDir(path.join(repairTmp, '.agents', 'skills', 'custom-keep'));
|
|
2045
2068
|
await writeTextAtomic(path.join(repairTmp, '.agents', 'skills', 'custom-keep', 'SKILL.md'), '---\nname: custom-keep\ndescription: User custom skill, not generated by SKS.\n---\n');
|
|
2046
2069
|
await writeTextAtomic(path.join(repairTmp, '.codex', 'skills', 'team', 'SKILL.md'), 'legacy mirror\n');
|
|
2047
|
-
await
|
|
2070
|
+
await writeTextAtomic(path.join(repairTmp, '.codex', 'hooks.json'), '{ "hooks": { "Stop": [{ "hooks": [{ "type": "command", "command": "tampered hook" }] }] } }\n');
|
|
2071
|
+
await writeTextAtomic(path.join(repairTmp, '.codex', 'SNEAKOSCOPE.md'), 'tampered quick reference\n');
|
|
2072
|
+
await writeJsonAtomic(path.join(repairTmp, '.sneakoscope', 'policy.json'), { broken: true });
|
|
2073
|
+
const existingAgentsMd = await safeReadText(path.join(repairTmp, 'AGENTS.md'));
|
|
2074
|
+
await writeTextAtomic(path.join(repairTmp, 'AGENTS.md'), existingAgentsMd.replace(/<!-- BEGIN Sneakoscope Codex GX MANAGED BLOCK -->[\s\S]*?<!-- END Sneakoscope Codex GX MANAGED BLOCK -->\n?/, '<!-- BEGIN Sneakoscope Codex GX MANAGED BLOCK -->\ntampered managed block\n<!-- END Sneakoscope Codex GX MANAGED BLOCK -->\n'));
|
|
2075
|
+
const doctorRepair = await runProcess(process.execPath, [path.join(packageRoot(), 'bin', 'sks.mjs'), 'doctor', '--fix', '--local-only', '--json'], {
|
|
2076
|
+
cwd: repairTmp,
|
|
2077
|
+
env: { HOME: path.join(repairTmp, 'home'), SKS_DISABLE_UPDATE_CHECK: '1' },
|
|
2078
|
+
timeoutMs: 30000,
|
|
2079
|
+
maxOutputBytes: 1024 * 1024
|
|
2080
|
+
});
|
|
2081
|
+
if (doctorRepair.code !== 0) throw new Error(`selftest failed: doctor --fix exited ${doctorRepair.code}: ${doctorRepair.stderr}`);
|
|
2082
|
+
const doctorRepairJson = JSON.parse(doctorRepair.stdout || '{}');
|
|
2083
|
+
if (!doctorRepairJson.repair?.applied || doctorRepairJson.install?.scope !== 'project' || !doctorRepairJson.install?.ok || !doctorRepairJson.install?.source_project) throw new Error('selftest failed: doctor --fix did not preserve project source install scope');
|
|
2084
|
+
const repairedManifest = await readJson(path.join(repairTmp, '.sneakoscope', 'manifest.json'));
|
|
2085
|
+
if (repairedManifest.installation?.scope !== 'project' || repairedManifest.installation?.hook_command_prefix !== 'node ./bin/sks.mjs') throw new Error('selftest failed: doctor --fix rewrote project source install scope to the wrong command prefix');
|
|
2048
2086
|
const repairedTeamSkill = await safeReadText(path.join(repairTmp, '.agents', 'skills', 'team', 'SKILL.md'));
|
|
2049
2087
|
if (!repairedTeamSkill.includes('SKS Team orchestration') || repairedTeamSkill.includes('tampered')) throw new Error('selftest failed: doctor repair did not regenerate team skill');
|
|
2050
2088
|
if (await exists(path.join(repairTmp, '.agents', 'skills', 'agent-team', 'SKILL.md'))) throw new Error('selftest failed: doctor repair did not remove deprecated agent-team alias skill');
|
|
2051
2089
|
if (!(await exists(path.join(repairTmp, '.agents', 'skills', 'custom-keep', 'SKILL.md')))) throw new Error('selftest failed: doctor repair removed a user-owned custom skill');
|
|
2052
2090
|
if (await exists(path.join(repairTmp, '.codex', 'skills', 'team', 'SKILL.md'))) throw new Error('selftest failed: doctor repair did not remove legacy .codex/skills');
|
|
2091
|
+
const repairedQuickReference = await safeReadText(path.join(repairTmp, '.codex', 'SNEAKOSCOPE.md'));
|
|
2092
|
+
if (!repairedQuickReference.includes('Install scope: `project`') || repairedQuickReference.includes('tampered')) throw new Error('selftest failed: doctor --fix did not regenerate quick reference');
|
|
2093
|
+
const repairedHooks = await safeReadText(path.join(repairTmp, '.codex', 'hooks.json'));
|
|
2094
|
+
if (!repairedHooks.includes('node ./bin/sks.mjs hook stop') || repairedHooks.includes('tampered hook')) throw new Error('selftest failed: doctor --fix did not regenerate Codex hooks');
|
|
2095
|
+
const repairedPolicy = await readJson(path.join(repairTmp, '.sneakoscope', 'policy.json'));
|
|
2096
|
+
if (repairedPolicy.broken || repairedPolicy.installation?.scope !== 'project' || !repairedPolicy.prompt_pipeline?.dollar_commands?.includes('$Team')) throw new Error('selftest failed: doctor --fix did not regenerate policy');
|
|
2097
|
+
const repairedAgentsMd = await safeReadText(path.join(repairTmp, 'AGENTS.md'));
|
|
2098
|
+
if (!repairedAgentsMd.includes('Do not create unrequested fallback implementation code') || repairedAgentsMd.includes('tampered managed block')) throw new Error('selftest failed: doctor --fix did not repair AGENTS managed block');
|
|
2053
2099
|
const conflictTmp = tmpdir();
|
|
2054
2100
|
await ensureDir(path.join(conflictTmp, '.omx'));
|
|
2055
2101
|
const conflictScan = await scanHarnessConflicts(conflictTmp, { home: path.join(conflictTmp, 'home') });
|
|
@@ -2062,25 +2108,29 @@ async function selftest() {
|
|
|
2062
2108
|
if (postinstallConflictPrompt.code !== 0 || !String(postinstallConflictPrompt.stdout || '').includes('Goal: completely remove the conflicting Codex harnesses')) throw new Error('selftest failed: interactive postinstall prompt did not print cleanup prompt');
|
|
2063
2109
|
const postinstallSetupTmp = tmpdir();
|
|
2064
2110
|
await writeJsonAtomic(path.join(postinstallSetupTmp, 'package.json'), { name: 'postinstall-setup-smoke', version: '0.0.0' });
|
|
2065
|
-
const postinstallSetup = await runProcess(process.execPath, [path.join(packageRoot(), 'bin', 'sks.mjs'), 'postinstall'], { cwd: postinstallSetupTmp, env: { INIT_CWD: postinstallSetupTmp, HOME: path.join(postinstallSetupTmp, 'home'), SKS_SKIP_POSTINSTALL_SHIM: '1', SKS_SKIP_POSTINSTALL_CONTEXT7: '1' }, timeoutMs:
|
|
2111
|
+
const postinstallSetup = await runProcess(process.execPath, [path.join(packageRoot(), 'bin', 'sks.mjs'), 'postinstall'], { cwd: postinstallSetupTmp, env: { INIT_CWD: postinstallSetupTmp, HOME: path.join(postinstallSetupTmp, 'home'), SKS_SKIP_POSTINSTALL_SHIM: '1', SKS_SKIP_POSTINSTALL_CONTEXT7: '1', SKS_SKIP_CLI_TOOLS: '1' }, timeoutMs: 30000, maxOutputBytes: 256 * 1024 });
|
|
2066
2112
|
if (postinstallSetup.code !== 0) throw new Error(`selftest failed: postinstall setup exited ${postinstallSetup.code}: ${postinstallSetup.stderr}`);
|
|
2067
2113
|
if (await exists(path.join(postinstallSetupTmp, '.agents', 'skills', 'agent-team', 'SKILL.md'))) throw new Error('selftest failed: postinstall installed deprecated agent-team fallback skill');
|
|
2068
|
-
if (!String(postinstallSetup.stdout || '').includes('
|
|
2069
|
-
if (await exists(path.join(postinstallSetupTmp, '.codex', 'hooks.json'))) throw new Error('selftest failed: postinstall
|
|
2114
|
+
if (!String(postinstallSetup.stdout || '').includes('SKS bootstrap: auto-running sks setup --bootstrap --install-scope global --force') || !String(postinstallSetup.stdout || '').includes('SKS Ready')) throw new Error('selftest failed: postinstall did not auto-run global forced bootstrap');
|
|
2115
|
+
if (!(await exists(path.join(postinstallSetupTmp, '.codex', 'hooks.json')))) throw new Error('selftest failed: postinstall did not create project hooks during automatic bootstrap');
|
|
2070
2116
|
if (!String(postinstallSetup.stdout || '').includes('Codex App global $ skills: installed')) throw new Error('selftest failed: postinstall did not report automatic global Codex App skills');
|
|
2117
|
+
const postinstallSetupManifest = await readJson(path.join(postinstallSetupTmp, '.sneakoscope', 'manifest.json'));
|
|
2118
|
+
if (postinstallSetupManifest.installation?.scope !== 'global') throw new Error('selftest failed: postinstall automatic bootstrap did not use global install scope');
|
|
2119
|
+
for (const rel of ['.agents/skills/team/SKILL.md', '.codex/config.toml', '.codex/hooks.json', '.sneakoscope/harness-guard.json', '.codex/SNEAKOSCOPE.md', 'AGENTS.md', '.gitignore']) {
|
|
2120
|
+
if (!(await exists(path.join(postinstallSetupTmp, rel)))) throw new Error(`selftest failed: automatic postinstall bootstrap did not create ${rel}`);
|
|
2121
|
+
}
|
|
2122
|
+
const postinstallSetupGitignore = await safeReadText(path.join(postinstallSetupTmp, '.gitignore'));
|
|
2123
|
+
if (!postinstallSetupGitignore.includes('.sneakoscope/') || !postinstallSetupGitignore.includes('.codex/') || !postinstallSetupGitignore.includes('.agents/') || !postinstallSetupGitignore.includes('AGENTS.md')) throw new Error('selftest failed: automatic postinstall bootstrap did not ignore SKS generated files');
|
|
2071
2124
|
for (const { command } of DOLLAR_COMMANDS) {
|
|
2072
2125
|
const skillName = command.slice(1).toLowerCase();
|
|
2073
2126
|
if (!(await exists(path.join(postinstallSetupTmp, 'home', '.agents', 'skills', skillName, 'SKILL.md')))) throw new Error(`selftest failed: postinstall global ${command} skill not installed`);
|
|
2074
2127
|
}
|
|
2075
|
-
const
|
|
2076
|
-
|
|
2077
|
-
const
|
|
2078
|
-
if (
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
}
|
|
2082
|
-
const postinstallBootstrapGitignore = await safeReadText(path.join(postinstallBootstrapTmp, '.gitignore'));
|
|
2083
|
-
if (!postinstallBootstrapGitignore.includes('.sneakoscope/') || !postinstallBootstrapGitignore.includes('.codex/') || !postinstallBootstrapGitignore.includes('.agents/') || !postinstallBootstrapGitignore.includes('AGENTS.md')) throw new Error('selftest failed: bootstrap did not ignore SKS generated files');
|
|
2128
|
+
const oldNoBootstrap = process.env.SKS_POSTINSTALL_NO_BOOTSTRAP;
|
|
2129
|
+
process.env.SKS_POSTINSTALL_NO_BOOTSTRAP = '1';
|
|
2130
|
+
const noBootstrapDecision = await postinstallBootstrapDecision(postinstallSetupTmp);
|
|
2131
|
+
if (oldNoBootstrap === undefined) delete process.env.SKS_POSTINSTALL_NO_BOOTSTRAP;
|
|
2132
|
+
else process.env.SKS_POSTINSTALL_NO_BOOTSTRAP = oldNoBootstrap;
|
|
2133
|
+
if (noBootstrapDecision.run || noBootstrapDecision.reason !== 'SKS_POSTINSTALL_NO_BOOTSTRAP=1') throw new Error('selftest failed: postinstall bootstrap opt-out decision');
|
|
2084
2134
|
const bootstrapJsonTmp = tmpdir();
|
|
2085
2135
|
await writeJsonAtomic(path.join(bootstrapJsonTmp, 'package.json'), { name: 'bootstrap-json-smoke', version: '0.0.0' });
|
|
2086
2136
|
const bootstrapJson = await runProcess(process.execPath, [path.join(packageRoot(), 'bin', 'sks.mjs'), 'bootstrap', '--json'], { cwd: bootstrapJsonTmp, env: { HOME: path.join(bootstrapJsonTmp, 'home'), SKS_SKIP_POSTINSTALL_GLOBAL_SKILLS: '1', SKS_SKIP_CLI_TOOLS: '1' }, timeoutMs: 30000, maxOutputBytes: 256 * 1024 });
|
package/src/core/fsx.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import os from 'node:os';
|
|
|
5
5
|
import crypto from 'node:crypto';
|
|
6
6
|
import { spawn } from 'node:child_process';
|
|
7
7
|
|
|
8
|
-
export const PACKAGE_VERSION = '0.7.
|
|
8
|
+
export const PACKAGE_VERSION = '0.7.2';
|
|
9
9
|
export const DEFAULT_PROCESS_TAIL_BYTES = 256 * 1024;
|
|
10
10
|
export const DEFAULT_PROCESS_TIMEOUT_MS = 30 * 60 * 1000;
|
|
11
11
|
|