sneakoscope 5.5.2 → 5.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +4 -1
  2. package/crates/sks-core/Cargo.lock +1 -1
  3. package/crates/sks-core/Cargo.toml +1 -1
  4. package/crates/sks-core/src/main.rs +1 -1
  5. package/dist/bin/sks.js +1 -1
  6. package/dist/cli/command-registry.js +7 -1
  7. package/dist/cli/router.js +28 -0
  8. package/dist/commands/doctor.js +65 -3
  9. package/dist/config/skills-manifest.json +58 -58
  10. package/dist/core/agent-bridge/agent-manifest.js +64 -0
  11. package/dist/core/agent-bridge/agent-mode.js +29 -0
  12. package/dist/core/agent-bridge/mcp-server.js +156 -0
  13. package/dist/core/agents/agent-orchestrator.js +1 -11
  14. package/dist/core/commands/agent-bridge-command.js +86 -0
  15. package/dist/core/commands/image-ux-review-command.js +6 -6
  16. package/dist/core/commands/loop-command.js +2 -6
  17. package/dist/core/commands/mad-sks-command.js +3 -3
  18. package/dist/core/commands/mcp-server-command.js +13 -0
  19. package/dist/core/commands/naruto-command.js +4 -4
  20. package/dist/core/commands/ppt-command.js +6 -3
  21. package/dist/core/commands/qa-loop-command.js +64 -26
  22. package/dist/core/commands/team-command.js +1 -1
  23. package/dist/core/commands/wiki-command.js +71 -3
  24. package/dist/core/config/secret-preservation.js +43 -1
  25. package/dist/core/doctor/browser-use-repair.js +149 -0
  26. package/dist/core/doctor/computer-use-repair.js +166 -0
  27. package/dist/core/doctor/imagegen-repair.js +9 -0
  28. package/dist/core/doctor/mcp-transport-collision-repair.js +129 -0
  29. package/dist/core/doctor/supabase-mcp-repair.js +85 -16
  30. package/dist/core/feature-fixtures.js +8 -0
  31. package/dist/core/feature-registry.js +21 -0
  32. package/dist/core/fsx.js +1 -1
  33. package/dist/core/mad-db/mad-db-capability.js +1 -1
  34. package/dist/core/mission.js +19 -3
  35. package/dist/core/naruto/naruto-real-worker-child.js +5 -4
  36. package/dist/core/naruto/naruto-real-worker-runtime.js +5 -4
  37. package/dist/core/naruto/normalize-worker-prompt-text.js +12 -0
  38. package/dist/core/routes.js +3 -1
  39. package/dist/core/triwiki/code-index-scanner.js +313 -0
  40. package/dist/core/triwiki/code-pack.js +169 -0
  41. package/dist/core/triwiki/triwiki-cache-key.js +24 -2
  42. package/dist/core/triwiki-attention.js +34 -5
  43. package/dist/core/update-check.js +50 -0
  44. package/dist/core/version.js +1 -1
  45. package/dist/scripts/doctor-imagegen-repair-check.js +6 -1
  46. package/package.json +2 -2
@@ -356,6 +356,11 @@ export async function runSksUpdateNow(options = {}) {
356
356
  quiet: machineOutput,
357
357
  newPackageRoot: newBinary ? path.resolve(path.dirname(newBinary), '..', '..') : null
358
358
  });
359
+ await runUpdateNativeCapabilitySetup(stage, {
360
+ quiet: machineOutput,
361
+ newPackageRoot: newBinary ? path.resolve(path.dirname(newBinary), '..', '..') : null,
362
+ root: projectReceiptRoot
363
+ });
359
364
  }
360
365
  }
361
366
  const verification = await runFinalUpdateVerification({ installOk, newBinary, installVersion, env, projectReceiptRoot });
@@ -449,6 +454,51 @@ async function runUpdateGlobalSkillsReconcile(stage, opts = {}) {
449
454
  });
450
455
  return result;
451
456
  }
457
+ async function runUpdateNativeCapabilitySetup(stage, opts) {
458
+ if (!opts.newPackageRoot) {
459
+ stage('native_capability_setup', true, 'skipped', { reason: 'new_package_root_unresolved' });
460
+ return null;
461
+ }
462
+ const root = opts.root;
463
+ const moduleHref = (rel) => pathToFileURL(path.join(opts.newPackageRoot, 'dist', 'core', 'doctor', rel)).href;
464
+ // Same as global_skills_reconcile above: run the newly installed package's own
465
+ // modules in a subprocess rather than in-process, so an old (pre-update) driver
466
+ // binary never runs post-update repair logic with stale compiled-in behavior.
467
+ const script = [
468
+ `const [{ repairCodexImagegen }, { repairComputerUse }, { repairBrowserUse }] = await Promise.all([import(${JSON.stringify(moduleHref('imagegen-repair.js'))}), import(${JSON.stringify(moduleHref('computer-use-repair.js'))}), import(${JSON.stringify(moduleHref('browser-use-repair.js'))})]);`,
469
+ `const root = ${JSON.stringify(root)};`,
470
+ 'const imagegen = await repairCodexImagegen({ root, apply: true, reportPath: null }).catch((err) => ({ ok: false, recovered: false, attempted: true, error: String((err && err.message) || err) }));',
471
+ 'const computerUse = await repairComputerUse({ root, apply: true, reportPath: null }).catch((err) => ({ ok: false, recovered: false, attempted: true, error: String((err && err.message) || err) }));',
472
+ 'const browserUse = await repairBrowserUse({ root, apply: true, reportPath: null }).catch((err) => ({ ok: false, recovered: false, attempted: true, error: String((err && err.message) || err) }));',
473
+ 'console.log(JSON.stringify({ imagegen, computer_use: computerUse, browser_use: browserUse }));'
474
+ ].join('\n');
475
+ const work = runProcess(process.execPath, ['--input-type=module', '-e', script], {
476
+ timeoutMs: 180_000,
477
+ maxOutputBytes: 1024 * 1024
478
+ }).catch((err) => ({ code: 1, stdout: '', stderr: err?.message || String(err) }));
479
+ const run = opts.quiet ? await work : await withHeartbeat('native capability setup', work, { warnAfterMs: 30_000 });
480
+ let parsed = null;
481
+ for (const line of String(run.stdout || '').trim().split('\n').reverse()) {
482
+ try {
483
+ parsed = JSON.parse(line);
484
+ break;
485
+ }
486
+ catch { /* not the JSON result line */ }
487
+ }
488
+ const summarize = (r) => (r?.recovered === true || r?.ok === true ? 'ok' : r?.attempted ? 'blocked' : 'not-needed');
489
+ const ok = run.code === 0 && Boolean(parsed);
490
+ // A repair reporting 'blocked' (e.g. no verified CLI subcommand for a plugin
491
+ // install) is a valid, honest terminal state for this stage, not a stage
492
+ // failure — the update itself must not be blocked on a manual-only step.
493
+ stage('native_capability_setup', ok, ok ? 'completed' : 'failed', {
494
+ via: 'new_package_binary',
495
+ summary: ok
496
+ ? { imagegen: summarize(parsed.imagegen), computer_use: summarize(parsed.computer_use), browser_use: summarize(parsed.browser_use) }
497
+ : null,
498
+ error: ok ? null : String(run.stderr || '').trim().slice(-400) || `exit_${run.code}`
499
+ });
500
+ return parsed;
501
+ }
452
502
  export function sksGlobalInstallArgs(packageName, version, registry = DEFAULT_REGISTRY) {
453
503
  return ['install', '--global', `${packageName}@${version}`, '--registry', registry];
454
504
  }
@@ -1,2 +1,2 @@
1
- export const PACKAGE_VERSION = '5.5.2';
1
+ export const PACKAGE_VERSION = '5.6.0';
2
2
  //# sourceMappingURL=version.js.map
@@ -47,7 +47,11 @@ const ok = report.schema === 'sks.doctor-imagegen-repair.v1'
47
47
  && report.recovered === true
48
48
  && report.after?.core_ready === true
49
49
  && report.steps?.some((step) => step.id === 'image_generation_feature_enable' && step.ok === true)
50
- && reportFile.recovered === true;
50
+ && report.communication_test?.level === 'flag_level'
51
+ && report.communication_test?.ok === true
52
+ && report.communication_test?.real_generation_round_trip_performed === false
53
+ && reportFile.recovered === true
54
+ && reportFile.communication_test?.level === 'flag_level';
51
55
  console.log(JSON.stringify({
52
56
  schema: 'sks.doctor-imagegen-repair-check.v1',
53
57
  ok,
@@ -55,6 +59,7 @@ console.log(JSON.stringify({
55
59
  attempted: report.attempted,
56
60
  recovered: report.recovered,
57
61
  after_core_ready: report.after?.core_ready === true,
62
+ communication_test_level: report.communication_test?.level,
58
63
  report_path: reportPath
59
64
  }, null, 2));
60
65
  if (!ok)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sneakoscope",
3
3
  "displayName": "ㅅㅋㅅ",
4
- "version": "5.5.2",
4
+ "version": "5.6.0",
5
5
  "description": "Sneakoscope Codex: fast proof-first Codex trust layer with image-based Voxel TriWiki.",
6
6
  "type": "module",
7
7
  "homepage": "https://github.com/mandarange/Sneakoscope-Codex#readme",
@@ -63,7 +63,7 @@
63
63
  "build": "npm run build:clean",
64
64
  "build:clean": "node -e \"const fs=require('fs'); fs.rmSync('dist',{recursive:true,force:true}); fs.rmSync('.sneakoscope/cache/tsbuildinfo',{recursive:true,force:true})\" && tsc -p tsconfig.json && node ./dist/scripts/ensure-bin-executable.js && node ./dist/scripts/build-dist.js",
65
65
  "build:incremental": "tsc -p tsconfig.json && node ./dist/scripts/ensure-bin-executable.js && node ./dist/scripts/build-dist.js",
66
- "test": "node --test --test-concurrency=1 dist/core/__tests__/*.test.js dist/core/proof/__tests__/*.test.js dist/core/stop-gate/__tests__/*.test.js dist/core/commands/__tests__/*.test.js dist/core/dfix/__tests__/*.test.js dist/core/ppt/__tests__/*.test.js dist/core/mad-sks/__tests__/*.test.js dist/core/codex-app/__tests__/*.test.js dist/core/doctor/__tests__/*.test.js dist/cli/__tests__/*.test.js",
66
+ "test": "node --test --test-concurrency=1 dist/core/__tests__/*.test.js dist/core/proof/__tests__/*.test.js dist/core/stop-gate/__tests__/*.test.js dist/core/commands/__tests__/*.test.js dist/core/dfix/__tests__/*.test.js dist/core/ppt/__tests__/*.test.js dist/core/mad-sks/__tests__/*.test.js dist/core/codex-app/__tests__/*.test.js dist/core/doctor/__tests__/*.test.js dist/cli/__tests__/*.test.js dist/core/triwiki/__tests__/*.test.js dist/core/naruto/__tests__/*.test.js dist/core/agent-bridge/__tests__/*.test.js",
67
67
  "selftest:real": "node ./dist/bin/sks.js selftest --real --json",
68
68
  "check": "npm run release:check:affected",
69
69
  "dev:sks": "npm run build:incremental --silent && node ./dist/bin/sks.js",