sneakoscope 4.8.7 → 5.1.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/README.md +51 -726
- package/bench/tasks/t01-off-by-one/repo/package.json +9 -0
- package/bench/tasks/t01-off-by-one/repo/src/pagination.js +5 -0
- package/bench/tasks/t01-off-by-one/repo/test.js +5 -0
- package/bench/tasks/t01-off-by-one/task.json +13 -0
- package/bench/tasks/t02-signature-cochange/repo/package.json +9 -0
- package/bench/tasks/t02-signature-cochange/repo/src/admin.js +5 -0
- package/bench/tasks/t02-signature-cochange/repo/src/audit.js +5 -0
- package/bench/tasks/t02-signature-cochange/repo/src/labels.js +3 -0
- package/bench/tasks/t02-signature-cochange/repo/src/profile.js +5 -0
- package/bench/tasks/t02-signature-cochange/repo/test.js +9 -0
- package/bench/tasks/t02-signature-cochange/task.json +12 -0
- package/bench/tasks/t03-type-puzzle/repo/package.json +9 -0
- package/bench/tasks/t03-type-puzzle/repo/src/config.js +4 -0
- package/bench/tasks/t03-type-puzzle/repo/test.js +6 -0
- package/bench/tasks/t03-type-puzzle/task.json +13 -0
- package/bench/tasks/t04-refactor-preserve/repo/package.json +9 -0
- package/bench/tasks/t04-refactor-preserve/repo/src/cart.js +8 -0
- package/bench/tasks/t04-refactor-preserve/repo/test.js +4 -0
- package/bench/tasks/t04-refactor-preserve/task.json +12 -0
- package/bench/tasks/t05-performance/repo/package.json +9 -0
- package/bench/tasks/t05-performance/repo/src/pairs.js +9 -0
- package/bench/tasks/t05-performance/repo/test.js +11 -0
- package/bench/tasks/t05-performance/task.json +12 -0
- package/bench/tasks/t06-mistake-rule/repo/package.json +9 -0
- package/bench/tasks/t06-mistake-rule/repo/src/loader.js +6 -0
- package/bench/tasks/t06-mistake-rule/repo/test.js +7 -0
- package/bench/tasks/t06-mistake-rule/task.json +12 -0
- package/config/bench-baseline.json +7 -0
- package/crates/sks-core/Cargo.lock +1 -1
- package/crates/sks-core/Cargo.toml +1 -1
- package/crates/sks-core/src/main.rs +1 -1
- package/dist/bin/install.js +35 -0
- package/dist/bin/sks.js +1 -1
- package/dist/cli/cli-theme.js +51 -0
- package/dist/cli/command-registry.js +15 -4
- package/dist/cli/help-fast.js +18 -8
- package/dist/cli/insane-search-command.js +36 -8
- package/dist/cli/install-helpers.js +32 -0
- package/dist/commands/codex-lb.js +2 -0
- package/dist/commands/doctor.js +62 -6
- package/dist/commands/proof.js +6 -3
- package/dist/config/skills-manifest.json +82 -54
- package/dist/core/agents/agent-conflict-graph.js +5 -0
- package/dist/core/agents/agent-lease.js +5 -0
- package/dist/core/agents/agent-ledger-schemas.js +1 -0
- package/dist/core/agents/agent-orchestrator.js +268 -62
- package/dist/core/agents/agent-output-validator.js +14 -3
- package/dist/core/agents/agent-patch-queue-store.js +95 -2
- package/dist/core/agents/agent-patch-queue.js +6 -3
- package/dist/core/agents/agent-patch-schema.js +13 -0
- package/dist/core/agents/agent-proof-evidence.js +6 -1
- package/dist/core/agents/agent-runner-fake.js +40 -0
- package/dist/core/agents/agent-worker-pipeline.js +36 -2
- package/dist/core/agents/codex-exec-worker-adapter.js +2 -0
- package/dist/core/agents/native-worker-backend-router.js +58 -1
- package/dist/core/codex-app/sks-menubar.js +18 -5
- package/dist/core/codex-app.js +1 -0
- package/dist/core/codex-control/codex-sdk-config-policy.js +2 -1
- package/dist/core/codex-control/codex-sdk-env-policy.js +1 -1
- package/dist/core/codex-control/schemas/agent-worker-result.schema.js +12 -3
- package/dist/core/codex-hooks/codex-hook-managed-install.js +5 -0
- package/dist/core/codex-hooks/codex-hook-state-writer.js +70 -11
- package/dist/core/codex-hooks/codex-hook-trust-doctor.js +2 -2
- package/dist/core/codex-lb/codex-lb-env.js +20 -1
- package/dist/core/commands/basic-cli.js +21 -2
- package/dist/core/commands/check-command.js +37 -5
- package/dist/core/commands/computer-use-command.js +62 -7
- package/dist/core/commands/db-command.js +31 -5
- package/dist/core/commands/fast-mode-command.js +3 -0
- package/dist/core/commands/gate-result-contract.js +43 -0
- package/dist/core/commands/gates-command.js +6 -1
- package/dist/core/commands/gc-command.js +29 -2
- package/dist/core/commands/goal-command.js +9 -2
- package/dist/core/commands/gx-command.js +79 -7
- package/dist/core/commands/image-ux-review-command.js +188 -13
- package/dist/core/commands/mad-db-command.js +85 -176
- package/dist/core/commands/mad-sks-command.js +230 -29
- package/dist/core/commands/menubar-command.js +22 -1
- package/dist/core/commands/naruto-command.js +64 -10
- package/dist/core/commands/plan-command.js +76 -0
- package/dist/core/commands/ppt-command.js +159 -24
- package/dist/core/commands/qa-loop-command.js +6 -2
- package/dist/core/commands/release-command.js +55 -2
- package/dist/core/commands/research-command.js +1 -1
- package/dist/core/commands/review-command.js +217 -0
- package/dist/core/commands/route-success-helpers.js +59 -0
- package/dist/core/commands/run-command.js +19 -7
- package/dist/core/commands/seo-command.js +49 -1
- package/dist/core/commands/ui-command.js +161 -0
- package/dist/core/commands/uninstall-command.js +15 -1
- package/dist/core/db-safety.js +2 -2
- package/dist/core/doctor/doctor-transaction.js +8 -0
- package/dist/core/doctor/doctor-zellij-repair.js +1 -0
- package/dist/core/doctor/imagegen-repair.js +161 -0
- package/dist/core/feature-fixture-runner.js +2 -2
- package/dist/core/feature-fixtures.js +58 -37
- package/dist/core/feature-registry.js +102 -2
- package/dist/core/fsx.js +39 -6
- package/dist/core/image-ux-review/imagegen-adapter.js +48 -11
- package/dist/core/image-ux-review.js +16 -0
- package/dist/core/imagegen/imagegen-capability.js +11 -5
- package/dist/core/imagegen/require-imagegen.js +57 -0
- package/dist/core/init/skills.js +10 -5
- package/dist/core/mad-db/mad-db-coordinator.js +94 -18
- package/dist/core/mad-db/mad-db-policy.js +12 -10
- package/dist/core/mad-sks/executors/executor-base.js +8 -2
- package/dist/core/mad-sks/executors/index.js +4 -0
- package/dist/core/mad-sks/executors/sql-plane-executor.js +194 -0
- package/dist/core/naruto/naruto-active-pool.js +15 -4
- package/dist/core/naruto/naruto-real-worker-child.js +10 -0
- package/dist/core/naruto/naruto-role-policy.js +3 -0
- package/dist/core/naruto/naruto-task-hints.js +10 -0
- package/dist/core/naruto/naruto-work-graph.js +8 -2
- package/dist/core/naruto/naruto-work-item.js +6 -0
- package/dist/core/naruto/solution-tournament.js +101 -0
- package/dist/core/permission-gates.js +30 -0
- package/dist/core/pipeline-internals/runtime-core.js +11 -3
- package/dist/core/pipeline-internals/runtime-gates.js +27 -0
- package/dist/core/ppt-review/index.js +6 -1
- package/dist/core/ppt-review/slide-imagegen-review.js +75 -10
- package/dist/core/ppt.js +70 -2
- package/dist/core/proof/auto-finalize.js +70 -11
- package/dist/core/proof/proof-schema.js +2 -0
- package/dist/core/proof/route-adapter.js +5 -1
- package/dist/core/proof/route-finalizer.js +8 -5
- package/dist/core/proof/selftest-proof-fixtures.js +18 -5
- package/dist/core/proof/validation.js +2 -0
- package/dist/core/provider/model-router.js +53 -0
- package/dist/core/release/release-gate-node.js +3 -0
- package/dist/core/release/release-gate-resource-governor.js +1 -0
- package/dist/core/routes/constants.js +1 -1
- package/dist/core/routes.js +65 -18
- package/dist/core/safety/mutation-guard.js +5 -1
- package/dist/core/stop-gate/gate-evaluator.js +102 -0
- package/dist/core/stop-gate/stop-gate-check.js +16 -1
- package/dist/core/stop-gate/stop-gate-writer.js +4 -0
- package/dist/core/triwiki/agents-md-projector.js +184 -0
- package/dist/core/triwiki-wrongness/wrongness-schema.js +3 -1
- package/dist/core/trust-kernel/trust-kernel-schema.js +1 -0
- package/dist/core/trust-kernel/trust-report.js +1 -1
- package/dist/core/trust-kernel/trust-status.js +2 -0
- package/dist/core/ui/dashboard-html.js +111 -0
- package/dist/core/update/update-migration-state.js +366 -15
- package/dist/core/update-check.js +178 -81
- package/dist/core/verification/diff-quality.js +100 -0
- package/dist/core/verification/impact-scan.js +164 -0
- package/dist/core/verification/machine-feedback.js +146 -0
- package/dist/core/verification/mistake-rule-compiler.js +195 -0
- package/dist/core/version.js +1 -1
- package/dist/core/zellij/zellij-self-heal.js +9 -6
- package/dist/scripts/check-feature-quality.js +2 -2
- package/dist/scripts/cli-output-consistency-check.js +57 -0
- package/dist/scripts/coding-bench-check.js +136 -0
- package/dist/scripts/doctor-imagegen-repair-check.js +62 -0
- package/dist/scripts/ensure-bin-executable.js +11 -3
- package/dist/scripts/harness-benchmark-check.js +104 -0
- package/dist/scripts/legacy-update-e2e-check.js +228 -0
- package/dist/scripts/mad-db-command-check.js +11 -8
- package/dist/scripts/mad-db-route-identity-check.js +8 -6
- package/dist/scripts/mad-db-safety-conflict-matrix-check.js +31 -8
- package/dist/scripts/mad-db-skill-policy-snapshot-check.js +4 -5
- package/dist/scripts/ppt-real-imagegen-wiring-check.js +5 -1
- package/dist/scripts/proof-root-cause-policy-check.js +2 -0
- package/dist/scripts/release-dag-full-coverage-check.js +13 -4
- package/dist/scripts/release-gate-dag-runner.js +14 -0
- package/dist/scripts/release-gate-existence-audit.js +2 -1
- package/dist/scripts/release-gate-planner.js +2 -1
- package/dist/scripts/release-gate-script-parity-check.js +1 -1
- package/dist/scripts/release-metadata-1-19-check.js +2 -1
- package/dist/scripts/seo-geo-feature-fixture-quality-check.js +1 -1
- package/dist/scripts/sks-1-11-gate-lib.js +8 -6
- package/dist/scripts/ux-review-real-loop-fixture-check.js +9 -4
- package/dist/scripts/ux-review-run-wires-imagegen-check.js +4 -0
- package/docs/assets/sneakoscope-architecture-pipeline.jpg +0 -0
- package/docs/demo.tape +28 -0
- package/package.json +67 -3
- package/schemas/codex/completion-proof.schema.json +3 -2
- package/schemas/release/release-gate-node.schema.json +2 -1
- package/dist/scripts/agent-backfill-route-blackbox.js +0 -5
- package/dist/scripts/agent-dynamic-pool-route-blackbox.js +0 -5
- package/dist/scripts/agent-parallel-write-blackbox.js +0 -56
- package/dist/scripts/agent-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/agent-route-blackbox-lib.js +0 -132
- package/dist/scripts/blackbox-command-import-smoke.js +0 -143
- package/dist/scripts/blackbox-global-shim.js +0 -77
- package/dist/scripts/blackbox-matrix.js +0 -70
- package/dist/scripts/blackbox-npx-one-shot.js +0 -69
- package/dist/scripts/blackbox-pack-install.js +0 -174
- package/dist/scripts/brand-neutrality-zero-leakage-blackbox.js +0 -4
- package/dist/scripts/build-once-runner-blackbox.js +0 -34
- package/dist/scripts/codex-0140-integration-blackbox.js +0 -13
- package/dist/scripts/codex-agent-type-blackbox.js +0 -4
- package/dist/scripts/codex-app-harness-blackbox.js +0 -4
- package/dist/scripts/codex-app-skill-agent-blackbox.js +0 -4
- package/dist/scripts/codex-hook-approval-blackbox.js +0 -4
- package/dist/scripts/codex-init-deep-directory-local-blackbox.js +0 -4
- package/dist/scripts/codex-native-feature-broker-blackbox.js +0 -4
- package/dist/scripts/codex-native-pattern-analysis-blackbox.js +0 -4
- package/dist/scripts/codex-native-read-repair-split-blackbox.js +0 -55
- package/dist/scripts/codex-native-reference-cache-blackbox.js +0 -41
- package/dist/scripts/core-skill-integrity-blackbox.js +0 -32
- package/dist/scripts/dfix-fast-blackbox-check.js +0 -37
- package/dist/scripts/dfix-parallel-write-blackbox.js +0 -48
- package/dist/scripts/dfix-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/doctor-context7-mcp-repair-blackbox.js +0 -16
- package/dist/scripts/doctor-dirty-repair-blackbox.js +0 -22
- package/dist/scripts/doctor-dirty-semantic-blackbox.js +0 -8
- package/dist/scripts/doctor-fix-production-blackbox.js +0 -26
- package/dist/scripts/doctor-native-capability-repair-blackbox.js +0 -39
- package/dist/scripts/doctor-startup-config-repair-blackbox.js +0 -13
- package/dist/scripts/doctor-supabase-mcp-repair-blackbox.js +0 -14
- package/dist/scripts/doctor-transaction-engine-blackbox.js +0 -28
- package/dist/scripts/doctor-zellij-fix-blackbox.js +0 -4
- package/dist/scripts/doctor-zellij-no-homebrew-blackbox.js +0 -4
- package/dist/scripts/doctor-zellij-upgrade-blackbox.js +0 -4
- package/dist/scripts/gate-pack-runner-blackbox.js +0 -27
- package/dist/scripts/gate-pack-v2-blackbox.js +0 -18
- package/dist/scripts/geo-cli-blackbox-check.js +0 -18
- package/dist/scripts/loop-collision-blackbox.js +0 -3
- package/dist/scripts/loop-concurrency-oversubscription-blackbox.js +0 -3
- package/dist/scripts/loop-fixture-production-misuse-blackbox.js +0 -3
- package/dist/scripts/loop-kill-interrupt-real-blackbox.js +0 -3
- package/dist/scripts/loop-merge-strategy-blackbox.js +0 -3
- package/dist/scripts/loop-mesh-production-e2e-blackbox.js +0 -3
- package/dist/scripts/loop-side-effect-blackbox.js +0 -3
- package/dist/scripts/mad-db-operation-lifecycle-blackbox.js +0 -29
- package/dist/scripts/mad-sks-actual-executor-blackbox.js +0 -5
- package/dist/scripts/mad-zellij-headless-fallback-blackbox.js +0 -4
- package/dist/scripts/mad-zellij-self-heal-blackbox.js +0 -4
- package/dist/scripts/naruto-loop-mesh-blackbox.js +0 -3
- package/dist/scripts/naruto-real-parallelism-blackbox.js +0 -307
- package/dist/scripts/naruto-worktree-coding-blackbox.js +0 -29
- package/dist/scripts/parallel-runtime-real-blackbox.js +0 -44
- package/dist/scripts/pipeline-codex-native-doctor-mad-routing-real-blackbox.js +0 -77
- package/dist/scripts/pipeline-codex-native-e2e-blackbox.js +0 -13
- package/dist/scripts/pipeline-codex-native-image-routing-real-blackbox.js +0 -50
- package/dist/scripts/pipeline-codex-native-loop-routing-real-blackbox.js +0 -74
- package/dist/scripts/pipeline-codex-native-qa-routing-real-blackbox.js +0 -51
- package/dist/scripts/pipeline-codex-native-research-routing-real-blackbox.js +0 -45
- package/dist/scripts/pipeline-execution-profile-routing-blackbox.js +0 -4
- package/dist/scripts/postinstall-global-doctor-blackbox.js +0 -12
- package/dist/scripts/ppt-full-e2e-blackbox-check.js +0 -109
- package/dist/scripts/ppt-imagegen-blackbox-check.js +0 -46
- package/dist/scripts/project-skill-dedupe-blackbox.js +0 -36
- package/dist/scripts/qa-backfill-route-blackbox.js +0 -5
- package/dist/scripts/qa-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/release-full-parallelism-blackbox.js +0 -41
- package/dist/scripts/release-triwiki-first-runner-blackbox.js +0 -48
- package/dist/scripts/release-wiring-3110-blackbox.js +0 -27
- package/dist/scripts/release-wiring-3112-blackbox.js +0 -17
- package/dist/scripts/release-wiring-3113-blackbox.js +0 -17
- package/dist/scripts/research-backfill-route-blackbox.js +0 -5
- package/dist/scripts/research-final-reviewer-blackbox.js +0 -70
- package/dist/scripts/research-stage-cycle-runtime-blackbox.js +0 -40
- package/dist/scripts/research-synthesis-writer-blackbox.js +0 -24
- package/dist/scripts/route-blackbox-realism-check.js +0 -21
- package/dist/scripts/scheduler-resource-claim-blackbox.js +0 -24
- package/dist/scripts/seo-cli-blackbox-check.js +0 -18
- package/dist/scripts/sks-3110-all-feature-regression-blackbox.js +0 -116
- package/dist/scripts/sks-3112-all-feature-regression-blackbox.js +0 -29
- package/dist/scripts/sks-3113-all-feature-regression-blackbox.js +0 -17
- package/dist/scripts/sks-400-all-feature-regression-blackbox.js +0 -21
- package/dist/scripts/sks-400-extreme-parallel-blackbox.js +0 -8
- package/dist/scripts/sks-400-five-minute-blackbox.js +0 -9
- package/dist/scripts/sks-400-legacy-purge-blackbox.js +0 -8
- package/dist/scripts/sks-401-all-feature-regression-blackbox.js +0 -46
- package/dist/scripts/sks-401-five-minute-actual-blackbox.js +0 -23
- package/dist/scripts/sks-402-all-feature-regression-blackbox.js +0 -9
- package/dist/scripts/sks-402-five-minute-real-blackbox.js +0 -22
- package/dist/scripts/sksd-warm-cache-blackbox.js +0 -12
- package/dist/scripts/supabase-secret-preservation-blackbox.js +0 -29
- package/dist/scripts/team-backfill-route-blackbox.js +0 -5
- package/dist/scripts/team-parallel-write-blackbox.js +0 -55
- package/dist/scripts/team-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/triwiki-affected-graph-blackbox.js +0 -28
- package/dist/scripts/triwiki-proof-bank-blackbox.js +0 -30
- package/dist/scripts/triwiki-proof-bank-lock-blackbox.js +0 -7
- package/dist/scripts/update-preserves-supabase-keys-blackbox.js +0 -27
- package/dist/scripts/ux-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/ux-review-imagegen-blackbox-check.js +0 -67
- package/dist/scripts/zellij-initial-main-only-blackbox.js +0 -28
- package/dist/scripts/zellij-pane-lock-concurrency-blackbox.js +0 -80
- package/dist/scripts/zellij-pane-lock-open-worker-integration-blackbox.js +0 -137
- package/dist/scripts/zellij-self-heal-typed-blackbox.js +0 -4
- package/dist/scripts/zellij-slot-telemetry-real-blackbox.js +0 -20
- package/dist/scripts/zellij-stacked-fallback-integration-blackbox.js +0 -81
- package/dist/scripts/zellij-worker-pane-real-ui-blackbox.js +0 -202
|
@@ -22,6 +22,7 @@ import { buildCodexLbSetupPlan, codexLbPersistenceSummary, installCodexLbShellPr
|
|
|
22
22
|
import { extractTomlTable, writeCodexConfigGuarded } from '../core/codex/codex-config-guard.js';
|
|
23
23
|
import { cleanupCodexConfigBackups, validateCodexConfigRoundTrip } from '../core/codex/codex-config-toml.js';
|
|
24
24
|
import { runPostinstallGlobalDoctorAndMarkPending } from '../core/update/update-migration-state.js';
|
|
25
|
+
import { repairCodexImagegen } from '../core/doctor/imagegen-repair.js';
|
|
25
26
|
const CODEX_LB_PROVIDER_NAME = 'openai';
|
|
26
27
|
const CODEX_LB_PROVIDER_ENV_KEY = 'CODEX_LB_API_KEY';
|
|
27
28
|
const CODEX_LB_CANONICAL_FAST_SERVICE_TIER = 'priority';
|
|
@@ -90,6 +91,15 @@ export async function postinstall({ bootstrap, args = [] }) {
|
|
|
90
91
|
console.log(`Codex App Fast mode: skipped (${fastModeRepair.reason}).`);
|
|
91
92
|
else if (fastModeRepair.status === 'failed')
|
|
92
93
|
console.log(`Codex App Fast mode: auto repair failed. Run \`sks setup\`. ${fastModeRepair.error || ''}`.trim());
|
|
94
|
+
const imagegenRepair = await ensureCodexImagegenDuringInstall();
|
|
95
|
+
if (imagegenRepair.status === 'ready')
|
|
96
|
+
console.log('Codex App Image Gen: ready ($imagegen/gpt-image-2 detected).');
|
|
97
|
+
else if (imagegenRepair.status === 'recovered')
|
|
98
|
+
console.log('Codex App Image Gen: recovered and re-detected.');
|
|
99
|
+
else if (imagegenRepair.status === 'blocked')
|
|
100
|
+
console.log(`Codex App Image Gen: blocked; run \`sks doctor --fix\`. ${(imagegenRepair.blockers || []).join(', ')}`.trim());
|
|
101
|
+
else if (imagegenRepair.status === 'skipped')
|
|
102
|
+
console.log(`Codex App Image Gen: skipped (${imagegenRepair.reason}).`);
|
|
93
103
|
const postinstallDoctor = await runPostinstallGlobalDoctorAndMarkPending().catch((err) => ({
|
|
94
104
|
ok: false,
|
|
95
105
|
doctor: null,
|
|
@@ -2469,6 +2479,28 @@ async function ensureGlobalGetdesignSkillDuringInstall() {
|
|
|
2469
2479
|
return { status: 'present', command: skillsBin };
|
|
2470
2480
|
return { status: 'failed', command: skillsBin, error: out.trim() || 'skills add failed' };
|
|
2471
2481
|
}
|
|
2482
|
+
export async function ensureCodexImagegenDuringInstall(opts = {}) {
|
|
2483
|
+
if (process.env.SKS_POSTINSTALL_SKIP_IMAGEGEN_REPAIR === '1' || opts.skip === true) {
|
|
2484
|
+
return { status: 'skipped', reason: 'SKS_POSTINSTALL_SKIP_IMAGEGEN_REPAIR' };
|
|
2485
|
+
}
|
|
2486
|
+
const report = await repairCodexImagegen({
|
|
2487
|
+
root: opts.root || process.cwd(),
|
|
2488
|
+
apply: opts.apply !== false,
|
|
2489
|
+
codexBin: opts.codexBin || null,
|
|
2490
|
+
autoInstallCodex: opts.autoInstallCodex === true || process.env.SKS_IMAGEGEN_AUTO_INSTALL_CODEX === '1'
|
|
2491
|
+
}).catch((err) => ({
|
|
2492
|
+
recovered: false,
|
|
2493
|
+
blockers: [err?.message || String(err)],
|
|
2494
|
+
before: null,
|
|
2495
|
+
after: null
|
|
2496
|
+
}));
|
|
2497
|
+
if (report.before?.core_ready === true || (report.after?.core_ready === true && report.attempted === false)) {
|
|
2498
|
+
return { status: 'ready', report };
|
|
2499
|
+
}
|
|
2500
|
+
if (report.recovered === true)
|
|
2501
|
+
return { status: 'recovered', report };
|
|
2502
|
+
return { status: 'blocked', blockers: report.blockers || ['codex_imagegen_unavailable'], report };
|
|
2503
|
+
}
|
|
2472
2504
|
export async function ensureRelatedCliTools(args = []) {
|
|
2473
2505
|
const skip = args.includes('--skip-cli-tools') || process.env.SKS_SKIP_CLI_TOOLS === '1';
|
|
2474
2506
|
const codex = await ensureCodexCliTool({ skip, args });
|
|
@@ -73,6 +73,8 @@ export async function run(command, args = []) {
|
|
|
73
73
|
codex_lb: status,
|
|
74
74
|
chain,
|
|
75
75
|
evidence,
|
|
76
|
+
degraded_models: Array.isArray(chain.degraded_models) ? chain.degraded_models : [],
|
|
77
|
+
quota_low: Boolean(chain.quota_low),
|
|
76
78
|
blockers: [
|
|
77
79
|
...(providerReady ? [] : ['codex_lb_provider_contract_drift']),
|
|
78
80
|
...(chain.ok
|
package/dist/commands/doctor.js
CHANGED
|
@@ -3,6 +3,7 @@ import path from 'node:path';
|
|
|
3
3
|
import { projectRoot, exists, formatBytes } from '../core/fsx.js';
|
|
4
4
|
import { flag } from '../cli/args.js';
|
|
5
5
|
import { printJson } from '../cli/output.js';
|
|
6
|
+
import { ui as cliUi } from '../cli/cli-theme.js';
|
|
6
7
|
import { getCodexInfo } from '../core/codex-adapter.js';
|
|
7
8
|
import { rustInfo } from '../core/rust-accelerator.js';
|
|
8
9
|
import { codexAppIntegrationStatus } from '../core/codex-app.js';
|
|
@@ -44,9 +45,16 @@ import { writeProjectUpdateMigrationReceipt } from '../core/update/update-migrat
|
|
|
44
45
|
import { installSksMenuBar } from '../core/codex-app/sks-menubar.js';
|
|
45
46
|
import { sweepSksTempDirs } from '../core/retention.js';
|
|
46
47
|
import { reconcileSkills } from '../core/init/skills.js';
|
|
48
|
+
import { codexHookTrustDoctor } from '../core/codex-hooks/codex-hook-trust-doctor.js';
|
|
49
|
+
import { detectImagegenCapability } from '../core/imagegen/imagegen-capability.js';
|
|
50
|
+
import { repairCodexImagegen } from '../core/doctor/imagegen-repair.js';
|
|
47
51
|
export async function run(_command, args = []) {
|
|
48
52
|
const root = await projectRoot();
|
|
49
53
|
const doctorFix = flag(args, '--fix');
|
|
54
|
+
if (!flag(args, '--json')) {
|
|
55
|
+
cliUi.banner('doctor');
|
|
56
|
+
cliUi.step(doctorFix ? 'repairing and validating' : 'validating');
|
|
57
|
+
}
|
|
50
58
|
if (doctorFix)
|
|
51
59
|
return withSecretPreservationGuard(root, 'doctor-fix', () => runDoctor(args, root, doctorFix));
|
|
52
60
|
return runDoctor(args, root, doctorFix);
|
|
@@ -302,7 +310,8 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
302
310
|
const sksMenuBar = await installSksMenuBar({
|
|
303
311
|
root,
|
|
304
312
|
apply: doctorFix,
|
|
305
|
-
launch: doctorFix
|
|
313
|
+
launch: doctorFix,
|
|
314
|
+
quiet: machineOnly || flag(args, '--json')
|
|
306
315
|
}).catch((err) => ({
|
|
307
316
|
schema: 'sks.codex-app-sks-menubar.v1',
|
|
308
317
|
ok: false,
|
|
@@ -415,10 +424,22 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
415
424
|
raw_secret_values_recorded: false
|
|
416
425
|
}))
|
|
417
426
|
: null;
|
|
427
|
+
const hookTrustRepair = doctorFix && doctorPhaseIds.includes('hook_trust_repair')
|
|
428
|
+
? await codexHookTrustDoctor(root, { fix: true, managed: true, actual: true }).catch((err) => ({
|
|
429
|
+
schema: 'sks.codex-hook-trust-doctor.v2',
|
|
430
|
+
ok: false,
|
|
431
|
+
actual: true,
|
|
432
|
+
blockers: [`hook_trust_repair_failed:${err?.message || String(err)}`],
|
|
433
|
+
warnings: [],
|
|
434
|
+
repair_actions: ['sks codex trust-doctor --fix --managed --actual']
|
|
435
|
+
}))
|
|
436
|
+
: null;
|
|
418
437
|
const doctorFixTransaction = doctorFix
|
|
419
438
|
? await runDoctorFixTransaction({
|
|
420
439
|
root,
|
|
421
440
|
dirtyPlan: doctorDirtyPlan,
|
|
441
|
+
json: flag(args, '--json'),
|
|
442
|
+
machineOnly,
|
|
422
443
|
phases: [
|
|
423
444
|
{
|
|
424
445
|
id: 'setup',
|
|
@@ -488,6 +509,17 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
488
509
|
rollback_evidence: 'optional_supabase_no_ready_mutation_required'
|
|
489
510
|
})
|
|
490
511
|
},
|
|
512
|
+
{
|
|
513
|
+
id: 'hook_trust_repair',
|
|
514
|
+
run: async () => ({
|
|
515
|
+
id: 'hook_trust_repair',
|
|
516
|
+
ok: hookTrustRepair?.ok !== false,
|
|
517
|
+
repaired: doctorFix,
|
|
518
|
+
blockers: hookTrustRepair?.blockers || [],
|
|
519
|
+
warnings: hookTrustRepair?.warnings || [],
|
|
520
|
+
rollback_evidence: hookTrustRepair?.fixed?.managed_hook_file || 'codex_hook_trust_repair_idempotent'
|
|
521
|
+
})
|
|
522
|
+
},
|
|
491
523
|
{
|
|
492
524
|
id: 'sks_menubar',
|
|
493
525
|
required_for_ready: false,
|
|
@@ -572,10 +604,29 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
572
604
|
const globalSksInstallCleanup = flag(args, '--fix') && !flag(args, '--local-only')
|
|
573
605
|
? await cleanDuplicateGlobalSksInstalls({ root, fix: true }).catch((err) => ({ schema: 'sks.global-sks-install-cleanup.v1', ok: false, fix: true, error: err?.message || String(err), blockers: ['global_sks_install_cleanup_exception'] }))
|
|
574
606
|
: null;
|
|
575
|
-
const
|
|
576
|
-
const
|
|
577
|
-
?
|
|
578
|
-
|
|
607
|
+
const imagegen = await detectImagegenCapability({ codexBin: codexBin || undefined }).catch((err) => ({ ok: false, error: err.message, auth_readiness: null, core_ready: false, blockers: ['imagegen_detection_exception'] }));
|
|
608
|
+
const imagegenRepair = imagegen.core_ready === true
|
|
609
|
+
? {
|
|
610
|
+
schema: 'sks.doctor-imagegen-repair.v1',
|
|
611
|
+
ok: true,
|
|
612
|
+
attempted: false,
|
|
613
|
+
apply: doctorFix,
|
|
614
|
+
recovered: true,
|
|
615
|
+
before: imagegen,
|
|
616
|
+
after: imagegen,
|
|
617
|
+
steps: [],
|
|
618
|
+
blockers: [],
|
|
619
|
+
manual_actions: []
|
|
620
|
+
}
|
|
621
|
+
: await repairCodexImagegen({ root, apply: doctorFix, codexBin: codexBin || null }).catch((err) => ({
|
|
622
|
+
schema: 'sks.doctor-imagegen-repair.v1',
|
|
623
|
+
ok: false,
|
|
624
|
+
attempted: true,
|
|
625
|
+
apply: doctorFix,
|
|
626
|
+
recovered: false,
|
|
627
|
+
blockers: [err?.message || String(err)],
|
|
628
|
+
manual_actions: ['Run `sks doctor --fix --json` after enabling Codex App image_generation.']
|
|
629
|
+
}));
|
|
579
630
|
const codex0138Capability = deepDiagnostics
|
|
580
631
|
? await writeCodex0138CapabilityArtifacts(root, { codexBin: codexBin || null }).catch((err) => ({ error: err?.message || String(err), report: null }))
|
|
581
632
|
: { skipped: true, report: null };
|
|
@@ -768,6 +819,7 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
768
819
|
auth_readiness: imagegen.auth_readiness || null,
|
|
769
820
|
codex_app_builtin_available: imagegen.codex_app?.available === true
|
|
770
821
|
},
|
|
822
|
+
imagegen_repair: imagegenRepair,
|
|
771
823
|
codex_0138: {
|
|
772
824
|
capability: codex0138Capability.report || null,
|
|
773
825
|
doctor: codex0138Doctor,
|
|
@@ -782,7 +834,7 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
782
834
|
sneakoscope: { ok: await exists(`${root}/.sneakoscope`) },
|
|
783
835
|
package: { bytes: pkgBytes, human: formatBytes(pkgBytes) },
|
|
784
836
|
skills: skillsReconcile,
|
|
785
|
-
repair: { sks_update: sksUpdate, setup: setupRepair, codex_config: configRepair, migration_journal: migrationJournal, global_sks_installs: globalSksInstallCleanup, agent_role_config: agentRoleConfigRepair, zellij: zellijRepair, context7: context7Repair, codex_startup: codexStartupRepair, startup_config: startupConfigRepair, context7_mcp: context7McpRepair, supabase_mcp: supabaseMcpRepair, sks_menubar: sksMenuBar, doctor_transaction: doctorFixTransaction, doctor_dirty_plan: doctorDirtyPlan, doctor_postcheck: doctorFixPostcheck, codex_native: codexNativeRepair, doctor_native_capability: doctorNativeCapabilityRepair, command_aliases: commandAliasCleanup, skills: skillsReconcile, sks_temp_sweep: sksTempSweep }
|
|
837
|
+
repair: { sks_update: sksUpdate, setup: setupRepair, codex_config: configRepair, migration_journal: migrationJournal, global_sks_installs: globalSksInstallCleanup, agent_role_config: agentRoleConfigRepair, zellij: zellijRepair, context7: context7Repair, codex_startup: codexStartupRepair, startup_config: startupConfigRepair, context7_mcp: context7McpRepair, supabase_mcp: supabaseMcpRepair, imagegen: imagegenRepair, hook_trust: hookTrustRepair, sks_menubar: sksMenuBar, doctor_transaction: doctorFixTransaction, doctor_dirty_plan: doctorDirtyPlan, doctor_postcheck: doctorFixPostcheck, codex_native: codexNativeRepair, doctor_native_capability: doctorNativeCapabilityRepair, command_aliases: commandAliasCleanup, skills: skillsReconcile, sks_temp_sweep: sksTempSweep }
|
|
786
838
|
};
|
|
787
839
|
if (reportFile)
|
|
788
840
|
await writeJsonReportFile(reportFile, result);
|
|
@@ -928,6 +980,9 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
928
980
|
console.log(` - ${action}`);
|
|
929
981
|
}
|
|
930
982
|
}
|
|
983
|
+
console.log(`Image Gen repair: ${imagegenRepair.recovered ? 'ok' : imagegenRepair.attempted ? 'blocked' : 'not-needed'}`);
|
|
984
|
+
for (const action of imagegenRepair.manual_actions || [])
|
|
985
|
+
console.log(` - ${action}`);
|
|
931
986
|
const codex0138 = codex0138Capability.report || {};
|
|
932
987
|
console.log('Codex current compatibility:');
|
|
933
988
|
console.log(` target: rust-v0.142.0`);
|
|
@@ -1115,6 +1170,7 @@ function doctorPhaseIdsForProfile(profile) {
|
|
|
1115
1170
|
'startup_config_repair',
|
|
1116
1171
|
'context7_repair',
|
|
1117
1172
|
'context7_mcp_repair',
|
|
1173
|
+
'hook_trust_repair',
|
|
1118
1174
|
'command_alias_cleanup'
|
|
1119
1175
|
];
|
|
1120
1176
|
if (profile === 'migration')
|
package/dist/commands/proof.js
CHANGED
|
@@ -99,6 +99,7 @@ export async function run(_command, args = []) {
|
|
|
99
99
|
const result = await writeRouteCompletionProof(root, {
|
|
100
100
|
missionId,
|
|
101
101
|
route: '$SKS',
|
|
102
|
+
executionClass: 'real',
|
|
102
103
|
status: 'verified_partial',
|
|
103
104
|
evidence,
|
|
104
105
|
summary: {
|
|
@@ -119,8 +120,9 @@ export async function run(_command, args = []) {
|
|
|
119
120
|
if (action === 'smoke') {
|
|
120
121
|
const evidence = await collectProofEvidence(root);
|
|
121
122
|
const result = await writeCompletionProof(root, {
|
|
123
|
+
execution_class: 'mock_fixture',
|
|
122
124
|
route: '$SKS',
|
|
123
|
-
status: '
|
|
125
|
+
status: 'mock_only',
|
|
124
126
|
summary: {
|
|
125
127
|
files_changed: evidence.files?.length || 0,
|
|
126
128
|
commands_run: 1,
|
|
@@ -130,8 +132,9 @@ export async function run(_command, args = []) {
|
|
|
130
132
|
},
|
|
131
133
|
evidence,
|
|
132
134
|
claims: [{ id: 'proof-smoke', status: 'supported', evidence: '.sneakoscope/proof/latest.json' }],
|
|
133
|
-
unverified: ['Smoke proof is fixture evidence, not a real route completion.']
|
|
134
|
-
|
|
135
|
+
unverified: ['Smoke proof is fixture evidence, not a real route completion.'],
|
|
136
|
+
blockers: ['proof_smoke_fixture_cannot_claim_real_completion']
|
|
137
|
+
}, { command: { cmd: 'sks proof smoke', status: 'mock_only' } });
|
|
135
138
|
if (flag(args, '--json'))
|
|
136
139
|
return printJson(result);
|
|
137
140
|
console.log(`Completion proof written: ${result.files.latest_json}`);
|