sneakoscope 6.1.0 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -11
- package/crates/sks-core/Cargo.lock +1 -1
- package/crates/sks-core/Cargo.toml +1 -1
- package/dist/bin/fast-inline.js +18 -9
- package/dist/bin/sks-dispatch.js +2 -2
- package/dist/cli/args.js +2 -0
- package/dist/cli/command-manifest-lite.js +2 -3
- package/dist/cli/command-registry.js +3 -4
- package/dist/cli/help-fast.js +1 -1
- package/dist/cli/install-helpers.js +116 -306
- package/dist/cli/install-tool-helpers.js +287 -0
- package/dist/cli/router.js +40 -4
- package/dist/commands/codex-lb.js +51 -20
- package/dist/commands/codex.js +39 -1
- package/dist/commands/doctor.js +242 -20
- package/dist/commands/tmux.js +5 -1
- package/dist/commands/zellij-monitor-pane.js +2 -0
- package/dist/commands/zellij-viewport-pane.js +3 -1
- package/dist/commands/zellij.js +1 -1
- package/dist/config/skills-manifest.json +59 -59
- package/dist/core/agent-bridge/agent-manifest.js +48 -0
- package/dist/core/agents/agent-command-surface.js +2 -1
- package/dist/core/agents/agent-effort-policy.js +38 -35
- package/dist/core/agents/agent-plan.js +100 -21
- package/dist/core/agents/agent-role-config.js +43 -46
- package/dist/core/agents/agent-runner-codex-exec.js +16 -3
- package/dist/core/agents/agent-schema.js +3 -2
- package/dist/core/agents/native-cli-session-swarm.js +1 -1
- package/dist/core/agents/zellij-right-lane-cockpit.js +2 -2
- package/dist/core/codex/agent-config-file-repair.js +94 -193
- package/dist/core/codex/codex-cli-update.js +723 -0
- package/dist/core/codex/codex-config-guard.js +185 -9
- package/dist/core/codex/codex-config-readability.js +21 -8
- package/dist/core/codex/codex-config-toml.js +14 -11
- package/dist/core/codex/codex-project-config-policy.js +3 -6
- package/dist/core/codex/codex-startup-config-postcheck.js +52 -42
- package/dist/core/codex-adapter.js +35 -22
- package/dist/core/codex-app/codex-agent-role-sync.js +13 -54
- package/dist/core/codex-app/codex-app-launcher.js +48 -17
- package/dist/core/codex-app/codex-app-restart.js +23 -2
- package/dist/core/codex-app/mcp-manager.js +679 -0
- package/dist/core/codex-app/sks-menubar.js +533 -8
- package/dist/core/codex-control/codex-0139-image-path-real-probe.js +15 -4
- package/dist/core/codex-control/codex-0139-web-search-probe.js +17 -6
- package/dist/core/codex-control/codex-lb-launch-recovery.js +293 -0
- package/dist/core/codex-control/codex-reliability-shield.js +89 -29
- package/dist/core/codex-control/codex-sdk-adapter.js +44 -8
- package/dist/core/codex-control/codex-task-runner.js +62 -9
- package/dist/core/codex-control/python-codex-sdk-adapter.js +30 -3
- package/dist/core/codex-exec-output-schema.js +35 -6
- package/dist/core/codex-lb/codex-lb-env.js +1 -1
- package/dist/core/codex-lb/codex-lb-tool-output-recovery.js +291 -0
- package/dist/core/codex-native/codex-native-feature-broker.js +9 -16
- package/dist/core/codex-native/codex-native-repair-transaction.js +1 -1
- package/dist/core/codex-native/core-skill-manifest.js +8 -4
- package/dist/core/codex-runtime/codex-desktop-config-policy.js +2 -3
- package/dist/core/commands/agent-bridge-command.js +23 -2
- package/dist/core/commands/agent-command.js +19 -5
- package/dist/core/commands/basic-cli.js +47 -6
- package/dist/core/commands/command-utils.js +1 -1
- package/dist/core/commands/mad-sks-command.js +76 -10
- package/dist/core/commands/menubar-command.js +94 -0
- package/dist/core/commands/naruto-command.js +645 -1156
- package/dist/core/commands/research-command.js +293 -231
- package/dist/core/commands/run-command.js +100 -23
- package/dist/core/commands/team-command.js +2 -3
- package/dist/core/commands/team-legacy-observe-command.js +94 -359
- package/dist/core/commands/wiki-command.js +11 -5
- package/dist/core/db-safety.js +2 -2
- package/dist/core/decision-lattice.js +6 -6
- package/dist/core/doctor/codex-startup-config-repair.js +8 -3
- package/dist/core/doctor/doctor-codex-startup-repair.js +6 -141
- package/dist/core/feature-fixture-executor.js +71 -7
- package/dist/core/feature-fixture-runner.js +53 -12
- package/dist/core/feature-fixtures.js +47 -14
- package/dist/core/feature-registry.js +28 -27
- package/dist/core/fsx.js +1 -0
- package/dist/core/harness-conflicts.js +18 -9
- package/dist/core/hooks-runtime/code-pack-freshness-preflight.js +14 -8
- package/dist/core/hooks-runtime/hook-io.js +8 -4
- package/dist/core/hooks-runtime/light-turn.js +70 -0
- package/dist/core/hooks-runtime/naruto-decision-gate.js +184 -0
- package/dist/core/hooks-runtime/payload-signals.js +270 -0
- package/dist/core/hooks-runtime/stop-repeat-guard.js +89 -0
- package/dist/core/hooks-runtime/team-digest.js +0 -1
- package/dist/core/hooks-runtime/tool-output-quarantine.js +93 -0
- package/dist/core/hooks-runtime.js +438 -354
- package/dist/core/init/skills.js +16 -30
- package/dist/core/init.js +144 -36
- package/dist/core/managed-assets/managed-assets-manifest.js +566 -10
- package/dist/core/mission.js +24 -1
- package/dist/core/pipeline-internals/runtime-core.js +570 -177
- package/dist/core/pipeline-internals/runtime-gates.js +174 -48
- package/dist/core/preflight/parallel-preflight-engine.js +66 -4
- package/dist/core/proof/route-adapter.js +1 -1
- package/dist/core/proof/route-proof-gate.js +7 -2
- package/dist/core/proof/selftest-proof-fixtures.js +3 -5
- package/dist/core/proof-field.js +1 -1
- package/dist/core/provider/model-router.js +42 -31
- package/dist/core/recallpulse/policy.js +12 -28
- package/dist/core/recallpulse.js +11 -6
- package/dist/core/release/npm-pack-proof.js +247 -0
- package/dist/core/release/package-dist-snapshot.js +151 -0
- package/dist/core/release/package-size-budget.js +4 -1
- package/dist/core/release/release-authorization-snapshot.js +115 -0
- package/dist/core/release/release-gate-affected-selector.js +14 -2
- package/dist/core/release/release-gate-cache-v2.js +30 -0
- package/dist/core/release/release-gate-contract.js +161 -0
- package/dist/core/release/release-gate-dag.js +1 -0
- package/dist/core/release/release-real-contract.js +90 -10
- package/dist/core/release-parallel-full-coverage.js +31 -143
- package/dist/core/research/claim-evidence-matrix.js +41 -6
- package/dist/core/research/experiment-plan.js +14 -10
- package/dist/core/research/falsification.js +9 -2
- package/dist/core/research/implementation-blueprint-densifier.js +82 -60
- package/dist/core/research/implementation-blueprint.js +32 -26
- package/dist/core/research/mock-result.js +122 -11
- package/dist/core/research/replication-pack.js +15 -8
- package/dist/core/research/research-adversarial-review.js +1068 -0
- package/dist/core/research/research-claim-builder.js +69 -17
- package/dist/core/research/research-claim-synthesizer.js +343 -0
- package/dist/core/research/research-cycle-runner.js +53 -3
- package/dist/core/research/research-falsification-runner.js +176 -0
- package/dist/core/research/research-final-reviewer.js +44 -125
- package/dist/core/research/research-plan-markdown.js +123 -0
- package/dist/core/research/research-realistic-report.js +14 -6
- package/dist/core/research/research-review-artifact-digest.js +66 -0
- package/dist/core/research/research-source-evidence.js +144 -0
- package/dist/core/research/research-source-layer-catalog.js +68 -0
- package/dist/core/research/research-source-ledger-merge.js +250 -12
- package/dist/core/research/research-source-shards.js +26 -70
- package/dist/core/research/research-stage-runner.js +237 -247
- package/dist/core/research/research-super-search.js +188 -0
- package/dist/core/research/research-synthesis-prompt.js +20 -1
- package/dist/core/research/research-synthesis-writer.js +86 -5
- package/dist/core/research/research-work-graph.js +25 -18
- package/dist/core/research/source-quality-report.js +21 -0
- package/dist/core/research.js +424 -390
- package/dist/core/retention.js +70 -2
- package/dist/core/routes/constants.js +1 -1
- package/dist/core/routes/dollar-manifest-lite.js +11 -11
- package/dist/core/routes.js +149 -69
- package/dist/core/runtime/task-profile.js +66 -0
- package/dist/core/runtime/verification-budget.js +12 -0
- package/dist/core/security/high-risk-contracts.js +6 -6
- package/dist/core/stop-gate/stop-gate-check.js +49 -12
- package/dist/core/subagents/agent-catalog.js +287 -0
- package/dist/core/subagents/model-policy.js +259 -0
- package/dist/core/subagents/naruto-help-contract.js +47 -0
- package/dist/core/subagents/official-subagent-config.js +488 -0
- package/dist/core/subagents/official-subagent-preparation.js +297 -0
- package/dist/core/subagents/official-subagent-prompt.js +159 -0
- package/dist/core/subagents/official-subagent-runner.js +129 -0
- package/dist/core/subagents/subagent-evidence.js +663 -0
- package/dist/core/subagents/terminology.js +16 -0
- package/dist/core/subagents/thread-budget.js +21 -0
- package/dist/core/subagents/triwiki-attention.js +168 -0
- package/dist/core/super-search/runtime-helpers.js +173 -19
- package/dist/core/super-search/runtime.js +140 -15
- package/dist/core/super-search/source-records.js +49 -8
- package/dist/core/team-review-policy.js +15 -0
- package/dist/core/triwiki/code-pack-head-freshness.js +291 -0
- package/dist/core/triwiki/triwiki-module-card.js +1 -1
- package/dist/core/triwiki-wrongness/wrongness-ledger.js +9 -2
- package/dist/core/version-manager.js +51 -1
- package/dist/core/version.js +1 -1
- package/dist/core/work-order-ledger.js +40 -1
- package/dist/core/zellij/zellij-fake-adapter.js +3 -1
- package/dist/core/zellij/zellij-launcher.js +49 -10
- package/dist/core/zellij/zellij-layout-builder.js +14 -5
- package/dist/core/zellij/zellij-official-subagent-activity.js +477 -0
- package/dist/core/zellij/zellij-official-subagent-telemetry.js +264 -0
- package/dist/core/zellij/zellij-pane-proof.js +9 -1
- package/dist/core/zellij/zellij-slot-pane-renderer.js +17 -5
- package/dist/core/zellij/zellij-slot-telemetry.js +15 -3
- package/dist/core/zellij/zellij-ui-mode.js +1 -1
- package/dist/core/zellij/zellij-update.js +14 -1
- package/dist/core/zellij/zellij-viewport-binder.js +3 -0
- package/dist/scripts/agent-role-config-repair-check.js +14 -16
- package/dist/scripts/architecture-guard-check.js +8 -1
- package/dist/scripts/canonical-test-runner.js +7 -1
- package/dist/scripts/check-route-modularity.js +0 -1
- package/dist/scripts/check-ts-contracts.js +1 -1
- package/dist/scripts/codex-control-all-pipelines-check.js +7 -3
- package/dist/scripts/codex-control-tool-output-continuity-audit-check.js +27 -0
- package/dist/scripts/codex-lb-fast-mode-truth-check.js +11 -1
- package/dist/scripts/codex-lb-fast-ui-preservation-check.js +9 -2
- package/dist/scripts/codex-lb-gpt56-fast-profile-check.js +13 -2
- package/dist/scripts/codex-native-agent-role-content-check.js +27 -7
- package/dist/scripts/codex-native-repair-transaction-check.js +3 -1
- package/dist/scripts/codex-sdk-all-pipelines-check.js +7 -4
- package/dist/scripts/codex-sdk-backend-router-check.js +2 -0
- package/dist/scripts/codex-sdk-research-pipeline-check.js +30 -8
- package/dist/scripts/db-route-materialization-check.js +33 -0
- package/dist/scripts/docs-truthfulness-check.js +3 -1
- package/dist/scripts/doctor-codex-startup-repair-check.js +12 -15
- package/dist/scripts/doctor-fix-production-blackbox.js +12 -2
- package/dist/scripts/doctor-startup-config-repair-blackbox.js +8 -2
- package/dist/scripts/doctor-startup-config-repair-check.js +12 -2
- package/dist/scripts/install-update-preserves-config-check.js +6 -1
- package/dist/scripts/lib/codex-sdk-gate-lib.js +4 -0
- package/dist/scripts/mad-sks-app-ui-no-mutation-check.js +0 -1
- package/dist/scripts/managed-role-manifest-parity-check.js +5 -4
- package/dist/scripts/naruto-codex-e2e-check.js +14 -7
- package/dist/scripts/naruto-shadow-clone-swarm-check.js +4 -201
- package/dist/scripts/npm-publish-performance-check.js +20 -12
- package/dist/scripts/official-subagent-workflow-check.js +145 -0
- package/dist/scripts/package-published-contract-check.js +6 -29
- package/dist/scripts/packlist-performance-check.js +18 -21
- package/dist/scripts/parallel-verification-engine-check.js +2 -2
- package/dist/scripts/prepublish-release-check-or-fast.js +23 -86
- package/dist/scripts/python-codex-sdk-all-pipelines-check.js +8 -0
- package/dist/scripts/release-affected-selector-check.js +74 -1
- package/dist/scripts/release-check-stamp.js +153 -248
- package/dist/scripts/release-dag-full-coverage-check.js +7 -15
- package/dist/scripts/release-dynamic-presets-check.js +2 -1
- package/dist/scripts/release-gate-dag-runner-check.js +0 -1
- package/dist/scripts/release-gate-dag-runner.js +12 -1
- package/dist/scripts/release-gate-existence-audit.js +1 -2
- package/dist/scripts/release-parallel-full-coverage-check.js +12 -6
- package/dist/scripts/release-parallel-speed-budget-check.js +18 -2
- package/dist/scripts/release-real-check.js +26 -4
- package/dist/scripts/release-registry-check.js +61 -16
- package/dist/scripts/research-blueprint-densifier-check.js +2 -2
- package/dist/scripts/research-real-cycle-no-legacy-final-md-check.js +11 -7
- package/dist/scripts/sizecheck.js +2 -2
- package/dist/scripts/sks-3-1-4-directive-check-lib.js +8 -2
- package/dist/scripts/sks-3-1-5-directive-check-lib.js +3 -2
- package/dist/scripts/sks-3-1-6-directive-check-lib.js +5 -3
- package/dist/scripts/sks-menubar-install-check.js +14 -1
- package/dist/scripts/super-search-provider-interface-check.js +31 -18
- package/dist/scripts/trust-fixture-check.js +32 -10
- package/dist/scripts/wrongness-fixture-check.js +1 -1
- package/dist/scripts/zellij-layout-valid-check.js +5 -5
- package/dist/scripts/zellij-spawn-on-demand-layout-check.js +3 -3
- package/docs/demo.tape +1 -1
- package/infra-harness-gates.json +1486 -0
- package/package.json +15 -10
- package/release-gates.v2.json +4060 -0
- package/runtime-required-scripts.json +9 -0
- package/dist/commands/db.js +0 -6
- package/dist/core/commands/db-command.js +0 -146
- package/dist/core/research/prompt.js +0 -15
- package/dist/scripts/codex-0139-feature-probes-check.js +0 -30
- package/dist/scripts/codex-0139-marketplace-source-check.js +0 -13
- package/dist/scripts/codex-control-tool-call-sequence-repair-check.js +0 -14
package/dist/commands/doctor.js
CHANGED
|
@@ -8,6 +8,8 @@ import { getCodexInfo } from '../core/codex-adapter.js';
|
|
|
8
8
|
import { rustInfo } from '../core/rust-accelerator.js';
|
|
9
9
|
import { codexAppIntegrationStatus } from '../core/codex-app.js';
|
|
10
10
|
import { codexLbMetrics, readCodexLbCircuit } from '../core/codex-lb-circuit.js';
|
|
11
|
+
import { codexLbStatus } from '../cli/install-helpers.js';
|
|
12
|
+
import { codexLbToolOutputRecoveryOverrideAcknowledged } from '../core/codex-lb/codex-lb-tool-output-recovery.js';
|
|
11
13
|
import { normalizeInstallScope } from '../core/init.js';
|
|
12
14
|
import { inspectCodexConfigReadability } from '../core/codex/codex-config-readability.js';
|
|
13
15
|
import { checkZellijCapability } from '../core/zellij/zellij-capability.js';
|
|
@@ -26,9 +28,35 @@ import { inspectSksMenuBarStatus, installSksMenuBar } from '../core/codex-app/sk
|
|
|
26
28
|
import { sweepSksTempDirs } from '../core/retention.js';
|
|
27
29
|
import { detectImagegenCapability } from '../core/imagegen/imagegen-capability.js';
|
|
28
30
|
import { CURRENT_CODEX_RELEASE_MANIFEST } from '../core/codex-compat/codex-release-manifest.js';
|
|
29
|
-
|
|
31
|
+
import { formatHarnessConflictReport, scanHarnessConflicts } from '../core/harness-conflicts.js';
|
|
32
|
+
export async function run(_command, args = [], deps = {}) {
|
|
30
33
|
const root = await projectRoot();
|
|
31
34
|
const doctorFix = flag(args, '--fix');
|
|
35
|
+
const globalOnly = doctorFix && flag(args, '--global-only');
|
|
36
|
+
if (doctorFix) {
|
|
37
|
+
const conflictScan = await scanHarnessConflicts(root);
|
|
38
|
+
if (conflictScan.hard_block) {
|
|
39
|
+
const blocked = {
|
|
40
|
+
schema: 'sks.doctor-status.v3',
|
|
41
|
+
ok: false,
|
|
42
|
+
status: 'blocked_harness_conflict',
|
|
43
|
+
diagnostic_depth: 'fix',
|
|
44
|
+
root,
|
|
45
|
+
blockers: conflictScan.hard.map((item) => `${item.name || 'harness'}:${item.path}`),
|
|
46
|
+
conflicts: conflictScan.conflicts,
|
|
47
|
+
cleanup_prompt_command: 'sks conflicts prompt',
|
|
48
|
+
no_fix_writes_performed: true
|
|
49
|
+
};
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
if (flag(args, '--json')) {
|
|
52
|
+
printJson(blocked);
|
|
53
|
+
return blocked;
|
|
54
|
+
}
|
|
55
|
+
console.error(formatHarnessConflictReport(conflictScan, { includePrompt: false }));
|
|
56
|
+
console.error('Run `sks conflicts prompt` and obtain explicit human approval before cleanup.');
|
|
57
|
+
return blocked;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
32
60
|
const doctorProfile = doctorProfileFromArgs(args, doctorFix);
|
|
33
61
|
if (!flag(args, '--json')) {
|
|
34
62
|
cliUi.banner('doctor');
|
|
@@ -36,10 +64,153 @@ export async function run(_command, args = []) {
|
|
|
36
64
|
}
|
|
37
65
|
if (!doctorFix && flag(args, '--json') && doctorProfile === 'fast')
|
|
38
66
|
return runDoctorJsonFastPath(args, root);
|
|
39
|
-
if (doctorFix)
|
|
40
|
-
|
|
67
|
+
if (doctorFix) {
|
|
68
|
+
const guardRoot = globalOnly
|
|
69
|
+
? path.resolve(deps.home || process.env.HOME || os.homedir())
|
|
70
|
+
: root;
|
|
71
|
+
return withSecretPreservationGuard(guardRoot, 'doctor-fix', async () => (globalOnly
|
|
72
|
+
? runDoctorGlobalOnlyFix(args, root, deps)
|
|
73
|
+
: runDoctor(args, root, doctorFix)));
|
|
74
|
+
}
|
|
41
75
|
return runDoctor(args, root, doctorFix);
|
|
42
76
|
}
|
|
77
|
+
export async function executeDoctorGlobalOnlyFix(args = [], root, deps = {}) {
|
|
78
|
+
const startedAtMs = Date.now();
|
|
79
|
+
const home = path.resolve(deps.home || process.env.HOME || os.homedir());
|
|
80
|
+
const reconcileSkillsImpl = deps.reconcileSkillsImpl
|
|
81
|
+
|| (await import('../core/init/skills.js')).reconcileSkills;
|
|
82
|
+
const ensureGlobalFastModeImpl = deps.ensureGlobalCodexFastModeDuringInstallImpl
|
|
83
|
+
|| (await import('../cli/install-helpers.js')).ensureGlobalCodexFastModeDuringInstall;
|
|
84
|
+
const installMenuBarImpl = deps.installSksMenuBarImpl || installSksMenuBar;
|
|
85
|
+
const codexLbStatusImpl = deps.codexLbStatusImpl || codexLbStatus;
|
|
86
|
+
const providerStatus = await codexLbStatusImpl({
|
|
87
|
+
probeToolOutputRecovery: true,
|
|
88
|
+
allowUnverifiedToolOutputRecovery: codexLbToolOutputRecoveryOverrideAcknowledged({ args })
|
|
89
|
+
}).catch((err) => ({
|
|
90
|
+
selected: null,
|
|
91
|
+
provider_ready: false,
|
|
92
|
+
recovery_probe_failed: true,
|
|
93
|
+
tool_output_recovery: {
|
|
94
|
+
ok: false,
|
|
95
|
+
status: 'probe_failed',
|
|
96
|
+
blockers: ['codex_lb_tool_output_recovery_status_probe_failed'],
|
|
97
|
+
operator_actions: []
|
|
98
|
+
},
|
|
99
|
+
error: err?.message || String(err)
|
|
100
|
+
}));
|
|
101
|
+
const globalSkills = await reconcileSkillsImpl({
|
|
102
|
+
targetDir: path.join(home, '.agents', 'skills'),
|
|
103
|
+
scope: 'global',
|
|
104
|
+
fix: true
|
|
105
|
+
}).catch((err) => ({
|
|
106
|
+
schema: 'sks.skill-reconcile.v1',
|
|
107
|
+
scope: 'global',
|
|
108
|
+
target_dir: path.join(home, '.agents', 'skills'),
|
|
109
|
+
fix: true,
|
|
110
|
+
error: err?.message || String(err),
|
|
111
|
+
core_skill_integrity: { ok: false, installed_count: 0, restored_count: 0 }
|
|
112
|
+
}));
|
|
113
|
+
const globalFastMode = await ensureGlobalFastModeImpl().catch((err) => ({
|
|
114
|
+
status: 'failed',
|
|
115
|
+
error: err?.message || String(err)
|
|
116
|
+
}));
|
|
117
|
+
const menuBar = await installMenuBarImpl({
|
|
118
|
+
home,
|
|
119
|
+
root: home,
|
|
120
|
+
apply: true,
|
|
121
|
+
launch: true,
|
|
122
|
+
quiet: flag(args, '--json') || flag(args, '--machine-only')
|
|
123
|
+
}).catch((err) => ({
|
|
124
|
+
schema: 'sks.codex-app-sks-menubar.v1',
|
|
125
|
+
ok: false,
|
|
126
|
+
status: 'blocked',
|
|
127
|
+
blockers: [err?.message || String(err)],
|
|
128
|
+
warnings: []
|
|
129
|
+
}));
|
|
130
|
+
const recoveryReady = codexLbRecoveryStatusReady(providerStatus, true);
|
|
131
|
+
const globalSkillsReady = !globalSkills?.error
|
|
132
|
+
&& globalSkills?.core_skill_integrity?.ok !== false;
|
|
133
|
+
const globalFastModeReady = globalFastMode?.status !== 'failed'
|
|
134
|
+
&& globalFastMode?.ok !== false;
|
|
135
|
+
const menuBarReady = menuBar?.ok !== false;
|
|
136
|
+
const blockers = [...new Set([
|
|
137
|
+
...(!globalSkillsReady ? [`global_skills_reconcile_failed:${globalSkills?.error || 'core_skill_integrity'}`] : []),
|
|
138
|
+
...(!globalFastModeReady ? [`global_fast_mode_repair_failed:${globalFastMode?.error || globalFastMode?.status || 'unknown'}`] : []),
|
|
139
|
+
...(!menuBarReady ? (menuBar?.blockers || ['sks_menubar_repair_failed']) : []),
|
|
140
|
+
...(!recoveryReady ? (providerStatus?.tool_output_recovery?.blockers || ['codex_lb_tool_output_recovery_unverified']) : [])
|
|
141
|
+
].map(String).filter(Boolean))];
|
|
142
|
+
const ok = blockers.length === 0;
|
|
143
|
+
return {
|
|
144
|
+
schema: 'sks.doctor-status.v3',
|
|
145
|
+
elapsed_ms: Date.now() - startedAtMs,
|
|
146
|
+
ok,
|
|
147
|
+
status: ok ? 'global_fix_ok' : 'blocked',
|
|
148
|
+
diagnostic_depth: 'global-only',
|
|
149
|
+
global_only: true,
|
|
150
|
+
install_scope: 'global',
|
|
151
|
+
root,
|
|
152
|
+
home,
|
|
153
|
+
project_root_alias_detected: path.resolve(root) === home,
|
|
154
|
+
no_project_writes_performed: true,
|
|
155
|
+
project_phases_skipped: [
|
|
156
|
+
'project_skills_reconcile',
|
|
157
|
+
'project_codex_config_repair',
|
|
158
|
+
'project_context7_mcp_repair',
|
|
159
|
+
'project_supabase_mcp_repair',
|
|
160
|
+
'project_hook_trust_repair',
|
|
161
|
+
'project_command_alias_cleanup',
|
|
162
|
+
'project_migration_receipt'
|
|
163
|
+
],
|
|
164
|
+
skills: { global: globalSkills, project: { skipped: true, reason: 'global_only_doctor' } },
|
|
165
|
+
codex_app_fast_mode: globalFastMode,
|
|
166
|
+
sks_menubar: menuBar,
|
|
167
|
+
codex_lb: {
|
|
168
|
+
provider_status: providerStatus,
|
|
169
|
+
tool_output_recovery: providerStatus?.tool_output_recovery || null,
|
|
170
|
+
recovery_ok: recoveryReady
|
|
171
|
+
},
|
|
172
|
+
blockers,
|
|
173
|
+
next_actions: [
|
|
174
|
+
...(recoveryReady ? [] : (providerStatus?.tool_output_recovery?.operator_actions || [])),
|
|
175
|
+
'Run `sks doctor --fix --json` from a specific project directory when project-scoped repair is required.'
|
|
176
|
+
]
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
async function runDoctorGlobalOnlyFix(args = [], root, deps = {}) {
|
|
180
|
+
const result = await executeDoctorGlobalOnlyFix(args, root, deps);
|
|
181
|
+
const reportFile = readOption(args, '--report-file', null);
|
|
182
|
+
if (reportFile)
|
|
183
|
+
await writeJsonReportFile(reportFile, result);
|
|
184
|
+
if (flag(args, '--machine-only') && !flag(args, '--json')) {
|
|
185
|
+
if (!result.ok)
|
|
186
|
+
process.exitCode = 1;
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
if (flag(args, '--json')) {
|
|
190
|
+
printJson(result);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
console.log(`SKS Doctor global repair: ${result.ok ? 'ok' : 'blocked'}`);
|
|
194
|
+
console.log(`Global skills: ${result.skills.global?.error ? 'blocked' : 'reconciled'}`);
|
|
195
|
+
console.log(`SKS menu bar: ${result.sks_menubar?.status || (result.sks_menubar?.ok ? 'ok' : 'blocked')}`);
|
|
196
|
+
for (const blocker of result.blockers)
|
|
197
|
+
console.log(`- blocker: ${blocker}`);
|
|
198
|
+
for (const action of result.next_actions)
|
|
199
|
+
console.log(`- ${action}`);
|
|
200
|
+
}
|
|
201
|
+
if (!result.ok)
|
|
202
|
+
process.exitCode = 1;
|
|
203
|
+
return result;
|
|
204
|
+
}
|
|
205
|
+
function codexLbRecoveryStatusReady(status, probeRequired = false) {
|
|
206
|
+
if (status == null)
|
|
207
|
+
return !probeRequired;
|
|
208
|
+
if (status.recovery_probe_failed === true || status.error)
|
|
209
|
+
return false;
|
|
210
|
+
if (status.selected === false)
|
|
211
|
+
return true;
|
|
212
|
+
return status.selected === true && status.tool_output_recovery?.ok === true;
|
|
213
|
+
}
|
|
43
214
|
async function runDoctorJsonFastPath(args = [], root) {
|
|
44
215
|
const startedAtMs = Date.now();
|
|
45
216
|
const codexBin = readOption(args, '--codex-bin', process.env.SKS_DOCTOR_CODEX_BIN || '');
|
|
@@ -359,7 +530,31 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
359
530
|
const codexApp = deepDiagnostics
|
|
360
531
|
? await codexAppIntegrationStatus({ codex }).catch((err) => ({ ok: false, error: err.message }))
|
|
361
532
|
: { ok: false, skipped: true, warnings: ['codex_app_optional_diagnostic_skipped'] };
|
|
362
|
-
const
|
|
533
|
+
const codexLbCircuit = codexLbMetrics(await readCodexLbCircuit(root).catch(() => ({})));
|
|
534
|
+
const codexLbProviderStatus = deepDiagnostics || doctorFix
|
|
535
|
+
? await codexLbStatus({
|
|
536
|
+
probeToolOutputRecovery: true,
|
|
537
|
+
allowUnverifiedToolOutputRecovery: codexLbToolOutputRecoveryOverrideAcknowledged({ args })
|
|
538
|
+
}).catch((err) => ({
|
|
539
|
+
selected: null,
|
|
540
|
+
provider_ready: false,
|
|
541
|
+
recovery_probe_failed: true,
|
|
542
|
+
tool_output_recovery: {
|
|
543
|
+
ok: false,
|
|
544
|
+
status: 'probe_failed',
|
|
545
|
+
blockers: ['codex_lb_tool_output_recovery_status_probe_failed'],
|
|
546
|
+
operator_actions: []
|
|
547
|
+
},
|
|
548
|
+
error: err?.message || String(err)
|
|
549
|
+
}))
|
|
550
|
+
: null;
|
|
551
|
+
const codexLbRecoveryReady = codexLbRecoveryStatusReady(codexLbProviderStatus, deepDiagnostics || doctorFix);
|
|
552
|
+
const codexLb = {
|
|
553
|
+
...codexLbCircuit,
|
|
554
|
+
provider_status: codexLbProviderStatus,
|
|
555
|
+
tool_output_recovery: codexLbProviderStatus?.tool_output_recovery || null,
|
|
556
|
+
recovery_ok: codexLbRecoveryReady
|
|
557
|
+
};
|
|
363
558
|
const providerContext = deepDiagnostics
|
|
364
559
|
? await resolveProviderContext({ root, route: '$Doctor', serviceTier: process.env.SKS_SERVICE_TIER || 'fast' }).catch((err) => ({
|
|
365
560
|
schema: 'sks.provider-context.v1',
|
|
@@ -755,19 +950,30 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
755
950
|
const zellij = await checkZellijCapability({ root, require: process.env.SKS_REQUIRE_ZELLIJ === '1' });
|
|
756
951
|
const localModel = await readLocalModelConfig().catch(() => null);
|
|
757
952
|
const permissionProfiles = await inventoryCodexPermissionProfiles(root, { writeReport: true });
|
|
758
|
-
const
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
953
|
+
const startupRoleRepair = startupConfigRepair?.role_repair;
|
|
954
|
+
const agentRoleConfigRepair = doctorFix && startupRoleRepair
|
|
955
|
+
? startupRoleRepair
|
|
956
|
+
: await repairAgentRoleConfigs({
|
|
957
|
+
root,
|
|
958
|
+
apply: false,
|
|
959
|
+
reportPath: `${root}/.sneakoscope/reports/agent-role-config-repair.json`
|
|
960
|
+
}).catch((err) => ({
|
|
961
|
+
schema: 'sks.agent-role-config-repair.v1',
|
|
962
|
+
ok: false,
|
|
963
|
+
apply: false,
|
|
964
|
+
missing: [],
|
|
965
|
+
existing: [],
|
|
966
|
+
created: [],
|
|
967
|
+
warnings_suppressed: false,
|
|
968
|
+
blockers: [err?.message || String(err)]
|
|
969
|
+
}));
|
|
970
|
+
const officialSubagentConfig = await (await import('../core/subagents/official-subagent-config.js'))
|
|
971
|
+
.readOfficialSubagentConfig(root)
|
|
972
|
+
.catch((err) => ({
|
|
973
|
+
maxThreads: null,
|
|
974
|
+
maxDepth: null,
|
|
975
|
+
blockers: [`official_subagent_config_read_failed:${err?.message || String(err)}`],
|
|
976
|
+
warnings: []
|
|
771
977
|
}));
|
|
772
978
|
const globalSksInstallCleanup = flag(args, '--fix') && !flag(args, '--local-only')
|
|
773
979
|
? await (await import('../core/doctor/global-sks-install-cleanup.js')).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'] }))
|
|
@@ -1056,7 +1262,13 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
1056
1262
|
}
|
|
1057
1263
|
const zellijReadiness = buildZellijReadiness(root, zellij, ready);
|
|
1058
1264
|
const runtimeReadiness = buildRuntimeReadiness(zellijReadiness, codexNativeFeatureMatrix);
|
|
1059
|
-
const resultOk = ready.ready
|
|
1265
|
+
const resultOk = ready.ready
|
|
1266
|
+
&& (!sksUpdate || sksUpdate.ok !== false)
|
|
1267
|
+
&& commandAliasCleanup.ok !== false
|
|
1268
|
+
&& codexStartupRepair.ok !== false
|
|
1269
|
+
&& agentRoleConfigRepair.ok !== false
|
|
1270
|
+
&& (officialSubagentConfig.blockers || []).length === 0
|
|
1271
|
+
&& codexLbRecoveryReady;
|
|
1060
1272
|
const result = {
|
|
1061
1273
|
schema: 'sks.doctor-status.v3',
|
|
1062
1274
|
elapsed_ms: Date.now() - startedAtMs,
|
|
@@ -1064,7 +1276,7 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
1064
1276
|
status: resultOk ? (doctorFix ? 'fix_ok' : deepDiagnostics ? 'full_ok' : 'fast_ok') : 'blocked',
|
|
1065
1277
|
diagnostic_depth: deepDiagnostics ? 'full' : doctorFix ? 'fix' : 'fast',
|
|
1066
1278
|
deep_diagnostics_skipped: !deepDiagnostics,
|
|
1067
|
-
deep_ok: deepDiagnostics ?
|
|
1279
|
+
deep_ok: deepDiagnostics ? resultOk : null,
|
|
1068
1280
|
not_counted_as_full_doctor: !deepDiagnostics,
|
|
1069
1281
|
root,
|
|
1070
1282
|
arg_warnings: argWarnings,
|
|
@@ -1099,6 +1311,7 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
1099
1311
|
} : null,
|
|
1100
1312
|
local_model: localModel,
|
|
1101
1313
|
agent_role_config: agentRoleConfigRepair,
|
|
1314
|
+
official_subagent_config: officialSubagentConfig,
|
|
1102
1315
|
zellij_readiness: zellijReadiness,
|
|
1103
1316
|
codex_permission_profiles: permissionProfiles,
|
|
1104
1317
|
command_aliases: commandAliasCleanup,
|
|
@@ -1151,6 +1364,8 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
1151
1364
|
console.log('SKS Doctor');
|
|
1152
1365
|
for (const warning of argWarnings)
|
|
1153
1366
|
console.log(`Argument warning: ${warning}`);
|
|
1367
|
+
for (const warning of officialSubagentConfig.warnings || [])
|
|
1368
|
+
console.log(`Official subagent warning: ${warning}`);
|
|
1154
1369
|
console.log(`Root: ${root}`);
|
|
1155
1370
|
console.log(`Node: ${result.node.ok ? 'ok' : 'fail'} ${result.node.version}`);
|
|
1156
1371
|
console.log(`Codex: ${codex.bin ? 'ok' : 'missing'} ${codex.version || ''}`);
|
|
@@ -1328,6 +1543,13 @@ async function runDoctor(args = [], root, doctorFix) {
|
|
|
1328
1543
|
if (codex0138Doctor?.fixed?.length)
|
|
1329
1544
|
console.log(` doctor --fix repaired: ${codex0138Doctor.fixed.join(', ')}`);
|
|
1330
1545
|
console.log(`codex-lb: ${codexLb.ok ? 'ok' : `warning ${codexLb.circuit?.state || 'unknown'}`}`);
|
|
1546
|
+
if (codexLb.tool_output_recovery) {
|
|
1547
|
+
const recovery = codexLb.tool_output_recovery;
|
|
1548
|
+
console.log(` interrupted tool-output recovery: ${recovery.ok ? 'ready' : 'blocked'} (${recovery.observed_version || recovery.status}; minimum ${recovery.minimum_version})`);
|
|
1549
|
+
if (!recovery.ok)
|
|
1550
|
+
for (const action of recovery.operator_actions || [])
|
|
1551
|
+
console.log(` action: ${action}`);
|
|
1552
|
+
}
|
|
1331
1553
|
if (localModel) {
|
|
1332
1554
|
console.log('Local LLM:');
|
|
1333
1555
|
console.log(` enabled: ${localModel.enabled ? 'yes' : 'no'}`);
|
|
@@ -1481,7 +1703,7 @@ function unknownDoctorFlags(args = []) {
|
|
|
1481
1703
|
const knownBoolean = new Set([
|
|
1482
1704
|
'--fix', '--yes', '-y', '--machine-only', '--actual-codex', '--require-actual-codex',
|
|
1483
1705
|
'--full', '--capabilities', '--repair-codex-app-ui', '--repair-zellij', '--install-homebrew',
|
|
1484
|
-
'--repair-native-capabilities', '--repair-codex-native', '--local-only', '--project', '--global',
|
|
1706
|
+
'--repair-native-capabilities', '--repair-codex-native', '--local-only', '--global-only', '--project', '--global',
|
|
1485
1707
|
'--dry-run', '--json'
|
|
1486
1708
|
]);
|
|
1487
1709
|
const knownValue = new Set(['--profile', '--report-file', '--codex-bin', '--install-scope']);
|
package/dist/commands/tmux.js
CHANGED
|
@@ -6,7 +6,11 @@ export async function run(_command, args = []) {
|
|
|
6
6
|
runtime: 'tmux',
|
|
7
7
|
status: 'removed_runtime',
|
|
8
8
|
replacement: 'zellij',
|
|
9
|
-
operator_actions: [
|
|
9
|
+
operator_actions: [
|
|
10
|
+
'Use `sks --mad` for the supported SKS Zellij launcher.',
|
|
11
|
+
'Use `sks zellij status` or `npm run zellij:capability` for runtime diagnostics.',
|
|
12
|
+
'Use `sks naruto status|subagents|proof` for official subagent missions.'
|
|
13
|
+
]
|
|
10
14
|
};
|
|
11
15
|
if (json)
|
|
12
16
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { readZellijSlotTelemetrySnapshot } from '../core/zellij/zellij-slot-telemetry.js';
|
|
2
2
|
import { renderZellijMonitor } from '../core/zellij/zellij-monitor-renderer.js';
|
|
3
3
|
import { projectRoot } from '../core/fsx.js';
|
|
4
|
+
import { refreshOfficialSubagentZellijActivity } from '../core/zellij/zellij-official-subagent-activity.js';
|
|
4
5
|
export async function run(_cmd = 'zellij-monitor-pane', args = []) {
|
|
5
6
|
const mission = readOption(args, '--mission', 'latest') || 'latest';
|
|
6
7
|
const root = await projectRoot();
|
|
7
8
|
const intervalMs = Math.max(500, Number(readOption(args, '--interval-ms', String(process.env.SKS_ZELLIJ_REFRESH_MS || '1000')) || 1000));
|
|
8
9
|
const once = !flag(args, '--watch');
|
|
9
10
|
for (;;) {
|
|
11
|
+
await refreshOfficialSubagentZellijActivity({ root, missionId: mission }).catch(() => null);
|
|
10
12
|
const snapshot = await readZellijSlotTelemetrySnapshot(root, mission).catch(() => null);
|
|
11
13
|
const text = renderZellijMonitor({ snapshot, missionId: mission, root });
|
|
12
14
|
process.stdout.write(`\x1b[H${text}\n\x1b[0J`);
|
|
@@ -4,13 +4,14 @@ import { projectRoot, readJson } from '../core/fsx.js';
|
|
|
4
4
|
import { readZellijSlotTelemetrySnapshot } from '../core/zellij/zellij-slot-telemetry.js';
|
|
5
5
|
import { bindViewports } from '../core/zellij/zellij-viewport-binder.js';
|
|
6
6
|
import { renderZellijSlotPaneFromArtifacts } from '../core/zellij/zellij-slot-pane-renderer.js';
|
|
7
|
+
import { refreshOfficialSubagentZellijActivity } from '../core/zellij/zellij-official-subagent-activity.js';
|
|
7
8
|
import { ANSI_CODES, paint, resolveZellijTheme } from '../core/zellij/zellij-theme.js';
|
|
8
9
|
let previousBindings = [];
|
|
9
10
|
export async function run(_cmd = 'zellij-viewport-pane', args = []) {
|
|
10
11
|
const mission = String(readOption(args, '--mission', 'latest') || 'latest');
|
|
11
12
|
const index = Math.max(1, Number(readOption(args, '--index', '1')) || 1);
|
|
12
13
|
const of = Math.max(index, Number(readOption(args, '--of', '4')) || 4);
|
|
13
|
-
const intervalMs = Math.max(500, Number(process.env.SKS_ZELLIJ_REFRESH_MS || 1000));
|
|
14
|
+
const intervalMs = Math.max(500, Number(readOption(args, '--interval-ms', String(process.env.SKS_ZELLIJ_REFRESH_MS || '1000')) || 1000));
|
|
14
15
|
const root = await projectRoot();
|
|
15
16
|
previousBindings = Array.from({ length: of }, () => null);
|
|
16
17
|
const once = !flag(args, '--watch');
|
|
@@ -24,6 +25,7 @@ export async function run(_cmd = 'zellij-viewport-pane', args = []) {
|
|
|
24
25
|
}
|
|
25
26
|
async function renderViewportFrame(root, mission, index, of) {
|
|
26
27
|
const theme = resolveZellijTheme();
|
|
28
|
+
await refreshOfficialSubagentZellijActivity({ root, missionId: mission }).catch(() => null);
|
|
27
29
|
const snapshot = await readZellijSlotTelemetrySnapshot(root, mission).catch(() => null);
|
|
28
30
|
const missionId = snapshot?.mission_id || mission;
|
|
29
31
|
const pins = await readJson(pinsPath(root, missionId), { pins: [] });
|
package/dist/commands/zellij.js
CHANGED
|
@@ -53,7 +53,7 @@ async function zellijStatus(root, args, json) {
|
|
|
53
53
|
ok: ready || !requireReal,
|
|
54
54
|
status,
|
|
55
55
|
version: capability.version || null,
|
|
56
|
-
required_for: ['sks --mad', '
|
|
56
|
+
required_for: ['sks --mad', 'interactive MAD lane UI', 'standalone Zellij diagnostics'],
|
|
57
57
|
blockers: capability.blockers || [],
|
|
58
58
|
warnings: capability.warnings || [],
|
|
59
59
|
install_hint: ready ? null : installHint(),
|