sneakoscope 2.0.2 → 2.0.5

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 (126) hide show
  1. package/README.md +12 -8
  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/.sks-build-stamp.json +4 -4
  6. package/dist/bin/sks.js +1 -1
  7. package/dist/build-manifest.json +86 -8
  8. package/dist/commands/doctor.js +14 -0
  9. package/dist/core/agents/agent-orchestrator.js +70 -4
  10. package/dist/core/agents/agent-patch-proof.js +5 -0
  11. package/dist/core/agents/agent-proof-evidence.js +61 -0
  12. package/dist/core/agents/agent-roster.js +35 -6
  13. package/dist/core/agents/agent-schema.js +1 -1
  14. package/dist/core/agents/native-worker-backend-router.js +31 -9
  15. package/dist/core/agents/ollama-worker-config.js +164 -15
  16. package/dist/core/codex/codex-0-137-compat.js +119 -0
  17. package/dist/core/codex-control/codex-control-proof.js +4 -1
  18. package/dist/core/codex-control/codex-fake-sdk-adapter.js +20 -0
  19. package/dist/core/codex-control/codex-output-schemas.js +5 -1
  20. package/dist/core/codex-control/codex-sdk-capability.js +1 -1
  21. package/dist/core/codex-control/codex-task-runner.js +329 -5
  22. package/dist/core/codex-control/gpt-final-arbiter.js +160 -0
  23. package/dist/core/codex-control/gpt-final-context-compressor.js +17 -0
  24. package/dist/core/codex-control/gpt-final-proof-pack.js +120 -0
  25. package/dist/core/codex-control/gpt-final-review-schema.js +71 -0
  26. package/dist/core/codex-control/python-codex-sdk-adapter.js +197 -0
  27. package/dist/core/codex-control/python-codex-sdk-event-translator.js +14 -0
  28. package/dist/core/commands/local-model-command.js +79 -18
  29. package/dist/core/commands/naruto-command.js +195 -12
  30. package/dist/core/commands/run-command.js +6 -2
  31. package/dist/core/doctor/doctor-readiness-matrix.js +34 -0
  32. package/dist/core/feature-fixtures.js +4 -0
  33. package/dist/core/fsx.js +1 -1
  34. package/dist/core/git-simple.js +143 -4
  35. package/dist/core/local-llm/local-collaboration-policy.js +93 -0
  36. package/dist/core/local-llm/local-llm-backpressure.js +20 -0
  37. package/dist/core/local-llm/local-llm-capability.js +29 -0
  38. package/dist/core/local-llm/local-llm-client.js +100 -0
  39. package/dist/core/local-llm/local-llm-config.js +20 -0
  40. package/dist/core/local-llm/local-llm-context-cache.js +21 -0
  41. package/dist/core/local-llm/local-llm-control-adapter.js +101 -0
  42. package/dist/core/local-llm/local-llm-json-repair.js +52 -0
  43. package/dist/core/local-llm/local-llm-metrics.js +42 -0
  44. package/dist/core/local-llm/local-llm-ollama-client.js +67 -0
  45. package/dist/core/local-llm/local-llm-openai-compatible-client.js +30 -0
  46. package/dist/core/local-llm/local-llm-prompt-cache.js +12 -0
  47. package/dist/core/local-llm/local-llm-scheduler.js +29 -0
  48. package/dist/core/local-llm/local-llm-schema-enforcer.js +15 -0
  49. package/dist/core/local-llm/local-llm-smoke.js +83 -0
  50. package/dist/core/local-llm/local-llm-warmup.js +20 -0
  51. package/dist/core/local-llm/local-worker-eligibility.js +27 -0
  52. package/dist/core/naruto/hardware-capacity-probe.js +36 -0
  53. package/dist/core/naruto/naruto-active-pool.js +118 -0
  54. package/dist/core/naruto/naruto-backpressure.js +13 -0
  55. package/dist/core/naruto/naruto-concurrency-governor.js +65 -0
  56. package/dist/core/naruto/naruto-finalizer.js +18 -0
  57. package/dist/core/naruto/naruto-generation-scheduler.js +18 -0
  58. package/dist/core/naruto/naruto-gpt-final-pack.js +49 -0
  59. package/dist/core/naruto/naruto-parallel-patch-apply.js +95 -0
  60. package/dist/core/naruto/naruto-patch-transaction-batch.js +42 -0
  61. package/dist/core/naruto/naruto-role-policy.js +107 -0
  62. package/dist/core/naruto/naruto-verification-dag.js +42 -0
  63. package/dist/core/naruto/naruto-verification-pool.js +18 -0
  64. package/dist/core/naruto/naruto-work-graph.js +198 -0
  65. package/dist/core/naruto/naruto-work-item.js +40 -0
  66. package/dist/core/naruto/naruto-work-stealing.js +11 -0
  67. package/dist/core/naruto/resource-pressure-monitor.js +32 -0
  68. package/dist/core/pipeline/final-gpt-patch-stage.js +31 -0
  69. package/dist/core/pipeline/final-gpt-review-stage.js +5 -0
  70. package/dist/core/pipeline/finalize-pipeline-result.js +58 -0
  71. package/dist/core/pipeline/gpt-final-required.js +12 -0
  72. package/dist/core/prompt/prompt-placeholder-guard.js +30 -0
  73. package/dist/core/router/capability-card.js +13 -0
  74. package/dist/core/router/route-cache.js +3 -0
  75. package/dist/core/router/ultra-router.js +2 -1
  76. package/dist/core/routes.js +4 -4
  77. package/dist/core/safety/mutation-guard.js +2 -0
  78. package/dist/core/update-check.js +60 -25
  79. package/dist/core/version.js +1 -1
  80. package/dist/core/zellij/zellij-lane-runtime.js +2 -2
  81. package/dist/core/zellij/zellij-naruto-dashboard.js +36 -0
  82. package/dist/core/zellij/zellij-worker-pane-manager.js +4 -4
  83. package/dist/scripts/blackbox-command-import-smoke.js +10 -1
  84. package/dist/scripts/check-package-boundary.js +12 -3
  85. package/dist/scripts/codex-0-137-compat-check.js +27 -0
  86. package/dist/scripts/codex-environment-scoped-approvals-check.js +10 -0
  87. package/dist/scripts/codex-plugin-list-json-check.js +8 -0
  88. package/dist/scripts/codex-sdk-team-naruto-agent-pipeline-check.js +2 -1
  89. package/dist/scripts/codex-thread-runtime-choice-check.js +10 -0
  90. package/dist/scripts/gpt-final-arbiter-check.js +63 -0
  91. package/dist/scripts/gpt-final-arbiter-performance-check.js +36 -0
  92. package/dist/scripts/local-collab-all-pipelines-final-gpt-check.js +21 -0
  93. package/dist/scripts/local-collab-gpt-final-availability-check.js +58 -0
  94. package/dist/scripts/local-collab-no-local-only-final-check.js +27 -0
  95. package/dist/scripts/local-collab-policy-check.js +17 -0
  96. package/dist/scripts/local-llm-all-pipelines-check.js +11 -0
  97. package/dist/scripts/local-llm-cache-performance-check.js +10 -0
  98. package/dist/scripts/local-llm-capability-check.js +14 -0
  99. package/dist/scripts/local-llm-smoke-check.js +23 -0
  100. package/dist/scripts/local-llm-structured-output-check.js +11 -0
  101. package/dist/scripts/local-llm-throughput-check.js +10 -0
  102. package/dist/scripts/local-llm-tool-call-repair-check.js +10 -0
  103. package/dist/scripts/local-llm-warmup-check.js +11 -0
  104. package/dist/scripts/naruto-active-pool-check.js +27 -0
  105. package/dist/scripts/naruto-concurrency-governor-check.js +52 -0
  106. package/dist/scripts/naruto-gpt-final-pack-check.js +34 -0
  107. package/dist/scripts/naruto-parallel-patch-apply-check.js +41 -0
  108. package/dist/scripts/naruto-real-local-gpt-final-smoke.js +16 -0
  109. package/dist/scripts/naruto-role-distribution-check.js +23 -0
  110. package/dist/scripts/naruto-shadow-clone-swarm-check.js +6 -0
  111. package/dist/scripts/naruto-verification-pool-check.js +36 -0
  112. package/dist/scripts/naruto-work-graph-check.js +24 -0
  113. package/dist/scripts/naruto-zellij-massive-ui-check.js +23 -0
  114. package/dist/scripts/prompt-placeholder-guard-check.js +33 -0
  115. package/dist/scripts/python-codex-sdk-all-pipelines-check.js +47 -0
  116. package/dist/scripts/python-codex-sdk-capability-check.js +75 -0
  117. package/dist/scripts/python-codex-sdk-sandbox-policy-check.js +10 -0
  118. package/dist/scripts/python-codex-sdk-stream-bridge-check.js +12 -0
  119. package/dist/scripts/release-parallel-check.js +1 -1
  120. package/dist/scripts/release-real-check.js +5 -0
  121. package/dist/scripts/zellij-worker-pane-manager-check.js +1 -1
  122. package/package.json +38 -4
  123. package/schemas/local-llm/local-collaboration-policy.schema.json +57 -0
  124. package/schemas/local-llm/local-model-config.schema.json +74 -0
  125. package/schemas/naruto/naruto-concurrency-governor.schema.json +21 -0
  126. package/schemas/naruto/naruto-work-graph.schema.json +22 -0
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist, root } from './lib/codex-sdk-gate-lib.js';
4
+ const cfg = await importDist('core/agents/ollama-worker-config.js');
5
+ const smokeMod = await importDist('core/local-llm/local-llm-smoke.js');
6
+ const config = cfg.normalizeLocalModelConfig({ enabled: true, status: 'enabled_unverified' });
7
+ if (process.env.SKS_REQUIRE_LOCAL_LLM !== '1' && !process.argv.includes('--require-real')) {
8
+ const skipped = cfg.applyLocalLlmSmokeResult(config, { ok: false, skipped: true, status: 'enabled_unverified', reason: 'release_check_no_real_smoke', schema_valid: false });
9
+ assertGate(skipped.status === 'enabled_unverified', '--skip-smoke or hermetic mode must not verify local LLM');
10
+ emitGate('local-llm:smoke', { status: 'hermetic_skip', config_status: skipped.status });
11
+ }
12
+ else {
13
+ const reportPath = `${root}/.sneakoscope/reports/local-llm-smoke-real.json`;
14
+ const realConfig = await cfg.readLocalModelConfig();
15
+ const first = await smokeMod.runLocalLlmGenerationSmoke(realConfig, { reportPath, timeoutMs: 60_000 });
16
+ const shouldRetry = first.ok !== true && String(first.blockers || []).match(/aborted|timeout|local_llm_generate_failed/i);
17
+ const smoke = shouldRetry
18
+ ? await smokeMod.runLocalLlmGenerationSmoke(realConfig, { reportPath, timeoutMs: 90_000 })
19
+ : first;
20
+ assertGate(smoke.ok === true && smoke.schema_valid === true, 'real local LLM smoke failed', { smoke, retry_count: shouldRetry ? 1 : 0, first_failure_blockers: first.blockers || [] });
21
+ emitGate('local-llm:smoke', { status: 'real_verified', latency_ms: smoke.latency_ms, tokens_per_second: smoke.tokens_per_second, retry_count: shouldRetry ? 1 : 0 });
22
+ }
23
+ //# sourceMappingURL=local-llm-smoke-check.js.map
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './lib/codex-sdk-gate-lib.js';
4
+ const mod = await importDist('core/local-llm/local-llm-schema-enforcer.js');
5
+ const schema = { type: 'object', required: ['status'], properties: { status: { type: 'string' } }, additionalProperties: false };
6
+ const good = mod.enforceLocalLlmJsonSchema('{"status":"ok"}', schema);
7
+ const bad = mod.enforceLocalLlmJsonSchema('plain words', schema);
8
+ assertGate(good.ok === true && good.schema_valid === true, 'valid local JSON should pass');
9
+ assertGate(bad.ok === false, 'natural language local output must not pass');
10
+ emitGate('local-llm:structured-output', { good: good.ok, bad: bad.ok });
11
+ //# sourceMappingURL=local-llm-structured-output-check.js.map
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './lib/codex-sdk-gate-lib.js';
4
+ const scheduler = await importDist('core/local-llm/local-llm-scheduler.js');
5
+ const plan = scheduler.planLocalLlmSchedule({ workItems: Array.from({ length: 20 }, (_, i) => ({ id: i })), maxParallelRequests: 4 });
6
+ assertGate(plan.ok === true, 'local scheduler must not exceed max parallel requests');
7
+ assertGate(plan.active_requests <= plan.max_parallel_requests, 'active requests exceeded max_parallel_requests');
8
+ assertGate(plan.queued_count === 16, '20 worker fixture should queue work beyond max parallel requests');
9
+ emitGate('local-llm:throughput', { active_requests: plan.active_requests, queued_count: plan.queued_count, backpressure: plan.backpressure });
10
+ //# sourceMappingURL=local-llm-throughput-check.js.map
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './lib/codex-sdk-gate-lib.js';
4
+ const mod = await importDist('core/local-llm/local-llm-json-repair.js');
5
+ const repaired = mod.parseOrRepairLocalLlmJson('Here is JSON: {"status":"ok","summary":"done"} thanks');
6
+ const failed = mod.parseOrRepairLocalLlmJson('not json at all');
7
+ assertGate(repaired.ok === true && repaired.repaired === true && repaired.attempts === 1, 'bounded JSON repair should recover one object');
8
+ assertGate(failed.ok === false && failed.attempts === 1, 'invalid local JSON must fail after one repair attempt');
9
+ emitGate('local-llm:tool-call-repair', { repaired: repaired.ok, failed: failed.ok });
10
+ //# sourceMappingURL=local-llm-tool-call-repair-check.js.map
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './lib/codex-sdk-gate-lib.js';
4
+ const cfg = await importDist('core/agents/ollama-worker-config.js');
5
+ const warmup = await importDist('core/local-llm/local-llm-warmup.js');
6
+ const state = warmup.buildLocalLlmWarmupState(cfg.normalizeLocalModelConfig({ enabled: true, status: 'enabled_unverified' }), { ok: true, ttlMs: 1000 });
7
+ assertGate(state.explicit_only === true, 'local warmup must be explicit only');
8
+ assertGate(state.postinstall_allowed === false, 'postinstall must not run local warmup');
9
+ assertGate(state.release_check_real_warmup_allowed === false, 'release:check must not run real warmup');
10
+ emitGate('local-llm:warmup', { explicit_only: state.explicit_only, expires_at: state.expires_at });
11
+ //# sourceMappingURL=local-llm-warmup-check.js.map
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
4
+ const workGraph = await importDist('core/naruto/naruto-work-graph.js');
5
+ const governorMod = await importDist('core/naruto/naruto-concurrency-governor.js');
6
+ const activePool = await importDist('core/naruto/naruto-active-pool.js');
7
+ const graph = workGraph.buildNarutoWorkGraph({ requestedClones: 20, totalWorkItems: 20, writeCapable: true, maxActiveWorkers: 5 });
8
+ const governor = governorMod.decideNarutoConcurrency({
9
+ requestedClones: 20,
10
+ totalWorkItems: 20,
11
+ pendingWorkQueueSize: 20,
12
+ backend: 'fake',
13
+ hardware: { remoteApiRateLimitBudget: 5, fileDescriptorLimit: 4096, freeMemoryBytes: 8 * 1024 * 1024 * 1024, totalMemoryBytes: 16 * 1024 * 1024 * 1024 }
14
+ });
15
+ const report = activePool.simulateNarutoActivePool({ graph, governor: { ...governor, safe_active_workers: 5 } });
16
+ assertGate(report.ok === true, 'active pool must drain cleanly', report);
17
+ assertGate(report.max_observed_active_workers <= 5, 'active pool must never exceed safe cap', report);
18
+ assertGate(report.completed_count >= graph.total_work_items, 'active pool must complete all base work items', report);
19
+ assertGate(report.refill_events >= 5, 'active pool must refill slots as work drains', report);
20
+ assertGate(report.duplicate_execution_count === 0, 'active pool must not duplicate work without retry', report);
21
+ emitGate('naruto:active-pool', {
22
+ safe_active_workers: report.safe_active_workers,
23
+ completed_count: report.completed_count,
24
+ refill_events: report.refill_events,
25
+ max_observed_active_workers: report.max_observed_active_workers
26
+ });
27
+ //# sourceMappingURL=naruto-active-pool-check.js.map
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
4
+ const governorMod = await importDist('core/naruto/naruto-concurrency-governor.js');
5
+ const normal = governorMod.decideNarutoConcurrency({
6
+ requestedClones: 200,
7
+ totalWorkItems: 340,
8
+ pendingWorkQueueSize: 340,
9
+ backend: 'codex-sdk',
10
+ zellijVisiblePaneCap: 12,
11
+ hardware: {
12
+ cores: 32,
13
+ freeMemoryBytes: 48 * 1024 * 1024 * 1024,
14
+ totalMemoryBytes: 64 * 1024 * 1024 * 1024,
15
+ fileDescriptorLimit: 4096,
16
+ localLlmMaxParallelRequests: 4,
17
+ remoteApiRateLimitBudget: 32,
18
+ terminalRows: 40,
19
+ terminalColumns: 140
20
+ }
21
+ });
22
+ const pressure = governorMod.decideNarutoConcurrency({
23
+ requestedClones: 200,
24
+ totalWorkItems: 340,
25
+ pendingWorkQueueSize: 340,
26
+ backend: 'codex-sdk',
27
+ zellijVisiblePaneCap: 12,
28
+ hardware: {
29
+ cores: 8,
30
+ loadAverage: [16, 16, 16],
31
+ freeMemoryBytes: 256 * 1024 * 1024,
32
+ totalMemoryBytes: 4 * 1024 * 1024 * 1024,
33
+ fileDescriptorLimit: 128,
34
+ localLlmMaxParallelRequests: 4,
35
+ remoteApiRateLimitBudget: 32,
36
+ zellijPaneCount: 12,
37
+ diskIoPressure: 0.9
38
+ }
39
+ });
40
+ assertGate(normal.safe_active_workers <= 32, 'requested_clones=200 fixture must cap active workers safely', { normal });
41
+ assertGate(normal.safe_zellij_visible_panes === 12 && normal.headless_workers === normal.safe_active_workers - 12, 'zellij visible panes must stay within UI cap', { normal });
42
+ assertGate(normal.local_llm_parallel <= 4, 'local LLM active requests must respect max_parallel_requests=4', { normal });
43
+ assertGate(pressure.safe_active_workers < normal.safe_active_workers, 'memory/load pressure fixture must decrease active workers', { normal: normal.safe_active_workers, pressure: pressure.safe_active_workers });
44
+ assertGate(pressure.backpressure === 'saturated' || pressure.backpressure === 'throttled', 'pressure fixture must report backpressure', { pressure });
45
+ emitGate('naruto:concurrency-governor', {
46
+ requested_clones: normal.requested_clones,
47
+ total_work_items: normal.total_work_items,
48
+ safe_active_workers: normal.safe_active_workers,
49
+ safe_zellij_visible_panes: normal.safe_zellij_visible_panes,
50
+ pressure_safe_active_workers: pressure.safe_active_workers
51
+ });
52
+ //# sourceMappingURL=naruto-concurrency-governor-check.js.map
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
4
+ const workGraph = await importDist('core/naruto/naruto-work-graph.js');
5
+ const roles = await importDist('core/naruto/naruto-role-policy.js');
6
+ const packMod = await importDist('core/naruto/naruto-gpt-final-pack.js');
7
+ const graph = workGraph.buildNarutoWorkGraph({ requestedClones: 100, totalWorkItems: 120, writeCapable: true });
8
+ const roleDistribution = roles.buildNarutoRoleDistribution(graph.work_items);
9
+ const patchEnvelopes = Array.from({ length: 120 }, (_, index) => ({ id: index, token: 'sk-testsecret1234567890', file: `f-${index}.ts` }));
10
+ const logs = Array.from({ length: 40 }, (_, index) => `log ${index} api_key=secret-${index}`);
11
+ const pack = packMod.buildNarutoGptFinalPack({
12
+ missionId: 'M-naruto-pack',
13
+ graph,
14
+ roleDistribution,
15
+ changedFiles: ['src/a.ts', 'src/a.ts', 'src/b.ts'],
16
+ patchEnvelopes,
17
+ verificationResults: [{ ok: true }],
18
+ failedShards: [{ id: 'failed-1' }],
19
+ conflictMap: [{ path: 'src/a.ts' }],
20
+ rollbackPlan: { token: 'sk-abc12345678901234567' },
21
+ logs
22
+ });
23
+ const serialized = JSON.stringify(pack);
24
+ assertGate(pack.bounded === true && pack.secrets_redacted === true, 'GPT final pack must be bounded and redacted', pack);
25
+ assertGate(pack.patch_envelopes.length === 100, '100 worker results must compress to bounded patch envelope count', { count: pack.patch_envelopes.length });
26
+ assertGate(pack.representative_logs.length === 12, 'representative logs must be bounded', { count: pack.representative_logs.length });
27
+ assertGate(!serialized.includes('secret-') && !serialized.includes('sk-testsecret'), 'secrets must be redacted from final pack', pack);
28
+ assertGate(pack.role_distribution.ok === true && pack.work_graph_summary.write_allowed_count > 0, 'final pack must include role distribution and write work summary', pack);
29
+ emitGate('naruto:gpt-final-pack', {
30
+ patch_envelopes: pack.patch_envelopes.length,
31
+ representative_logs: pack.representative_logs.length,
32
+ changed_files: pack.changed_files
33
+ });
34
+ //# sourceMappingURL=naruto-gpt-final-pack-check.js.map
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import fs from 'node:fs/promises';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
7
+ const patchApply = await importDist('core/naruto/naruto-parallel-patch-apply.js');
8
+ const root = await fs.mkdtemp(path.join(os.tmpdir(), 'sks-naruto-patch-'));
9
+ const envelopes = Array.from({ length: 10 }, (_, index) => {
10
+ const file = `file-${index}.txt`;
11
+ return envelope(index + 1, file, `after-${index}`);
12
+ });
13
+ const result = await patchApply.applyNarutoPatchEnvelopes(root, envelopes, { dryRun: false });
14
+ assertGate(result.ok === true, 'non-overlapping patch fixture must apply', result);
15
+ assertGate(result.batch_count === 1 && result.parallel_apply_count === 1, 'non-overlapping patch fixture must group into a parallel batch', result);
16
+ assertGate(result.results.every((row) => row.changed_files.length === 1 && Object.keys(row.before_hashes).length === 1 && Object.keys(row.after_hashes).length === 1), 'patch results must include before/after hashes and changed files', result);
17
+ const rollback = await patchApply.rollbackNarutoPatchResult(root, result.results[0]);
18
+ assertGate(rollback.ok === true && rollback.restored.length === 1, 'rollback must restore before content for a patch result', rollback);
19
+ const conflict = await patchApply.applyNarutoPatchEnvelopes(root, [envelope(99, 'same.txt', 'a'), envelope(100, 'same.txt', 'b')], { dryRun: true });
20
+ assertGate(conflict.conflicts.length >= 1, 'overlapping patch fixture must serialize or mark conflict', conflict);
21
+ emitGate('naruto:parallel-patch-apply', {
22
+ batch_count: result.batch_count,
23
+ parallel_apply_count: result.parallel_apply_count,
24
+ conflict_count: conflict.conflicts.length,
25
+ rollback_restored: rollback.restored.length
26
+ });
27
+ function envelope(index, file, content) {
28
+ return {
29
+ schema: 'sks.agent-patch-envelope.v1',
30
+ source: 'fixture',
31
+ agent_id: `naruto-${index}`,
32
+ session_id: `session-${index}`,
33
+ slot_id: `slot-${index}`,
34
+ generation_index: 1,
35
+ task_slice_id: `NW-${index}`,
36
+ lease_id: `lease-${index}`,
37
+ allowed_paths: [file],
38
+ operations: [{ op: 'write', path: file, content }]
39
+ };
40
+ }
41
+ //# sourceMappingURL=naruto-parallel-patch-apply-check.js.map
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
4
+ const finalizer = await importDist('core/naruto/naruto-finalizer.js');
5
+ const draft = finalizer.evaluateNarutoFinalizer({ localParticipated: true, gptFinalStatus: null, applyPatches: true });
6
+ const approved = finalizer.evaluateNarutoFinalizer({ localParticipated: true, gptFinalStatus: 'approved', applyPatches: true });
7
+ const deterministic = finalizer.evaluateNarutoFinalizer({ localParticipated: false, applyPatches: true });
8
+ assertGate(draft.ok === false && draft.blockers.includes('naruto_local_worker_output_needs_gpt_final_arbiter'), 'local worker patch must be blocked until GPT final arbiter', draft);
9
+ assertGate(approved.ok === true && approved.final_patch_source === 'gpt_final_arbiter', 'GPT-approved local output must become final patch source', approved);
10
+ assertGate(deterministic.ok === true && deterministic.gpt_final_required === false, 'no-local deterministic run must not require GPT final', deterministic);
11
+ emitGate('naruto:real-local-gpt-final-smoke', {
12
+ require_real_env: process.env.SKS_REQUIRE_LOCAL_LLM === '1' || process.env.SKS_REQUIRE_GPT_FINAL === '1',
13
+ draft_status: draft.final_status,
14
+ approved_status: approved.final_status
15
+ });
16
+ //# sourceMappingURL=naruto-real-local-gpt-final-smoke.js.map
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
4
+ const workGraph = await importDist('core/naruto/naruto-work-graph.js');
5
+ const roles = await importDist('core/naruto/naruto-role-policy.js');
6
+ const roster = await importDist('core/agents/agent-roster.js');
7
+ const graph = workGraph.buildNarutoWorkGraph({ requestedClones: 30, totalWorkItems: 30, writeCapable: true });
8
+ const distribution = roles.buildNarutoRoleDistribution(graph.work_items);
9
+ const cloneRoster = roster.buildNarutoCloneRoster({ clones: 30, prompt: 'implement, modify, test, verify, document, and resolve conflicts' });
10
+ const writeCapableRoster = cloneRoster.roster.filter((row) => row.write_allowed === true);
11
+ assertGate(distribution.ok === true, 'write-capable Naruto role distribution must pass', distribution);
12
+ assertGate(distribution.verifier_only === false, 'default Naruto must not be verifier-only', distribution);
13
+ assertGate(distribution.implementation_like_ratio >= 0.4, 'default Naruto must keep at least 40% implementation/modification/test roles', distribution);
14
+ assertGate(writeCapableRoster.length >= Math.floor(cloneRoster.roster.length * 0.4), 'Naruto roster must include write-capable clone roles by default', { writeCapableRoster: writeCapableRoster.length, total: cloneRoster.roster.length });
15
+ const readonlyGraph = workGraph.buildNarutoWorkGraph({ requestedClones: 8, readonly: true, writeCapable: false });
16
+ const readonlyDistribution = roles.buildNarutoRoleDistribution(readonlyGraph.work_items, { readonly: true });
17
+ assertGate(readonlyDistribution.ok === true, 'readonly Naruto route may use read-only verifier/research roles', readonlyDistribution);
18
+ emitGate('naruto:role-distribution', {
19
+ implementation_like_ratio: distribution.implementation_like_ratio,
20
+ entries: distribution.entries,
21
+ write_capable_roster_count: writeCapableRoster.length
22
+ });
23
+ //# sourceMappingURL=naruto-role-distribution-check.js.map
@@ -71,6 +71,9 @@ assertGate(bigMemoryHost.cap >= 64, 'a 64 GB host must allow >= 64 parallel code
71
71
  const proofClones = 24;
72
72
  const cli = path.join(root, 'dist', 'bin', 'sks.js');
73
73
  assertGate(exists('dist/bin/sks.js'), 'dist/bin/sks.js missing (build first)');
74
+ const helpRun = spawnSync(process.execPath, [cli, 'naruto', '--help', '--json'], { cwd: root, encoding: 'utf8', timeout: 30000, maxBuffer: 1024 * 1024 });
75
+ const helpParsed = parseJson(helpRun.stdout);
76
+ assertGate(helpRun.status === 0 && helpParsed?.action === 'help', 'sks naruto --help must emit help instead of launching a run', { status: helpRun.status, stdout: tail(helpRun.stdout), stderr: tail(helpRun.stderr) });
74
77
  const run = spawnSync(process.execPath, [
75
78
  cli, 'naruto', 'run', 'shadow clone swarm gate proof',
76
79
  '--clones', String(proofClones),
@@ -94,6 +97,9 @@ assertGate(parsed.target_active_slots <= fakeSafe.cap, 'active slots must be thr
94
97
  assertGate(typeof parsed.concurrency_capped === 'boolean', 'naruto run must report concurrency_capped', { concurrency_capped: parsed.concurrency_capped });
95
98
  assertGate(parsed.concurrency_capped === (parsed.clones > parsed.target_active_slots), 'concurrency_capped must reflect clones > live slots', { clones: parsed.clones, target_active_slots: parsed.target_active_slots, concurrency_capped: parsed.concurrency_capped });
96
99
  assertGate(parsed.system && Number(parsed.system.safe_concurrency) >= 1, 'naruto run must report system safe_concurrency (host-derived cap)', { system: parsed.system });
100
+ assertGate(parsed.work_graph?.write_allowed_count > 0 && parsed.work_graph?.mixed_work_kinds?.length > 1, 'naruto run must report a mixed work graph with write-capable items', { work_graph: parsed.work_graph });
101
+ assertGate(parsed.role_distribution?.verifier_only === false, 'naruto run proof/status must distinguish active worker roles beyond verifier-only', { role_distribution: parsed.role_distribution });
102
+ assertGate(Number(parsed.role_distribution?.implementation_like_ratio || 0) >= 0.4, 'naruto run must include implementation-like role distribution', { role_distribution: parsed.role_distribution });
97
103
  const state = parsed.run?.scheduler?.state || parsed.run?.scheduler || {};
98
104
  assertGate(Number(state.completed_count) === proofClones, 'all clone work items must complete despite throttling', { completed_count: state.completed_count });
99
105
  const explicitConcurrency = spawnSync(process.execPath, [cli, 'naruto', 'run', 'explicit concurrency', '--clones', '6', '--backend', 'fake', '--work-items', '6', '--concurrency', '6', '--json'], { cwd: root, encoding: 'utf8', timeout: 120000, maxBuffer: 4 * 1024 * 1024 });
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist, root } from './sks-1-18-gate-lib.js';
4
+ const workGraph = await importDist('core/naruto/naruto-work-graph.js');
5
+ const governorMod = await importDist('core/naruto/naruto-concurrency-governor.js');
6
+ const verificationDag = await importDist('core/naruto/naruto-verification-dag.js');
7
+ const verificationPool = await importDist('core/naruto/naruto-verification-pool.js');
8
+ const graph = workGraph.buildNarutoWorkGraph({ requestedClones: 8, totalWorkItems: 12, writeCapable: true });
9
+ const governor = governorMod.decideNarutoConcurrency({
10
+ requestedClones: 8,
11
+ totalWorkItems: 12,
12
+ backend: 'fake',
13
+ hardware: {
14
+ cores: 4,
15
+ loadAverage: [0, 0, 0],
16
+ remoteApiRateLimitBudget: 8,
17
+ fileDescriptorLimit: 4096,
18
+ processCount: 1,
19
+ zellijPaneCount: 0,
20
+ diskIoPressure: 0,
21
+ freeMemoryBytes: 8 * 1024 * 1024 * 1024,
22
+ totalMemoryBytes: 16 * 1024 * 1024 * 1024
23
+ }
24
+ });
25
+ const dag = verificationDag.buildNarutoVerificationDag(graph, { cwd: root, command: 'node -e "process.exit(0)"' });
26
+ const report = await verificationPool.runNarutoVerificationPool(dag, { ...governor, verification_parallel: 4 }, { cwd: root });
27
+ assertGate(report.ok === true, 'verification pool must pass all fixture shards', report);
28
+ assertGate(report.safe_concurrency === 4, 'verification pool must use its own safe concurrency', report);
29
+ assertGate(report.task_count > 1, 'verification pool must run multiple shards', report);
30
+ assertGate(report.cpu_heavy_cap_respected && report.io_heavy_cap_respected && report.api_rate_cap_respected, 'verification pool must respect resource caps', report);
31
+ emitGate('naruto:verification-pool', {
32
+ task_count: report.task_count,
33
+ safe_concurrency: report.safe_concurrency,
34
+ passed: report.passed
35
+ });
36
+ //# sourceMappingURL=naruto-verification-pool-check.js.map
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
4
+ const workGraph = await importDist('core/naruto/naruto-work-graph.js');
5
+ const graph = workGraph.buildNarutoWorkGraph({
6
+ requestedClones: 24,
7
+ totalWorkItems: 30,
8
+ writeCapable: true,
9
+ targetPaths: Array.from({ length: 30 }, (_, index) => `src/fixture-${index}.ts`),
10
+ maxActiveWorkers: 8
11
+ });
12
+ const validation = workGraph.validateNarutoWorkGraph(graph);
13
+ assertGate(graph.ok === true && validation.ok === true, 'Naruto work graph must validate', { graph_blockers: graph.blockers, validation });
14
+ assertGate(graph.total_work_items >= graph.requested_clones, 'work graph must create at least requested clone count', { total: graph.total_work_items, requested: graph.requested_clones });
15
+ assertGate(graph.mixed_work_kinds.length > 4, 'work graph must contain mixed work kinds, not only verification', { kinds: graph.mixed_work_kinds });
16
+ assertGate(graph.write_allowed_count > 0, 'write-capable Naruto graph must include write_allowed work items', { write_allowed_count: graph.write_allowed_count });
17
+ assertGate(graph.active_waves.every((wave) => wave.conflict_count === 0), 'active waves must not overlap write leases', { waves: graph.active_waves });
18
+ emitGate('naruto:work-graph', {
19
+ total_work_items: graph.total_work_items,
20
+ mixed_work_kinds: graph.mixed_work_kinds,
21
+ write_allowed_count: graph.write_allowed_count,
22
+ wave_count: graph.active_waves.length
23
+ });
24
+ //# sourceMappingURL=naruto-work-graph-check.js.map
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
4
+ const dashboardMod = await importDist('core/zellij/zellij-naruto-dashboard.js');
5
+ const plan = dashboardMod.planNarutoZellijDashboard({
6
+ targetActiveWorkers: 32,
7
+ visiblePaneCap: 12,
8
+ completed: 8,
9
+ failed: 1,
10
+ backpressure: 'normal',
11
+ roles: ['implementer', 'modifier', 'test_writer', 'verifier'],
12
+ backend: 'codex-sdk'
13
+ });
14
+ assertGate(plan.ok === true, 'Naruto Zellij dashboard plan must pass', plan);
15
+ assertGate(plan.visible_worker_panes === 12, 'targetActiveWorkers=32 and visiblePaneCap=12 must create 12 visible panes', plan);
16
+ assertGate(plan.headless_workers === 20, 'remaining active workers must be listed as headless', plan);
17
+ assertGate(plan.pane_titles.every((title) => /slot-\d+\/gen-1 · .+ · codex-sdk · active/.test(title)), 'pane titles must include slot/gen/role/backend/status', plan);
18
+ emitGate('naruto:zellij-massive-ui', {
19
+ visible_worker_panes: plan.visible_worker_panes,
20
+ headless_workers: plan.headless_workers,
21
+ dashboard: plan.dashboard
22
+ });
23
+ //# sourceMappingURL=naruto-zellij-massive-ui-check.js.map
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
4
+ const guardMod = await importDist('core/prompt/prompt-placeholder-guard.js');
5
+ const blocked = guardMod.checkPromptPlaceholders({
6
+ prompt: 'Use @filename and INSERT_PATH_HERE to patch the bug',
7
+ writeCapable: true,
8
+ targetPaths: ['src/core/example.ts']
9
+ });
10
+ const emptyTarget = guardMod.checkPromptPlaceholders({
11
+ prompt: 'Patch the bug',
12
+ writeCapable: true,
13
+ targetPaths: []
14
+ });
15
+ const pass = guardMod.checkPromptPlaceholders({
16
+ prompt: 'Patch src/core/example.ts',
17
+ writeCapable: true,
18
+ targetPaths: ['src/core/example.ts']
19
+ });
20
+ const readonlyWarn = guardMod.checkPromptPlaceholders({
21
+ prompt: 'Inspect @filename',
22
+ writeCapable: false
23
+ });
24
+ assertGate(blocked.ok === false && blocked.blockers.some((item) => String(item).startsWith('unresolved_prompt_placeholder')), 'write-capable Naruto prompt with @filename must block', blocked);
25
+ assertGate(emptyTarget.ok === false && emptyTarget.blockers.includes('write_capable_prompt_target_paths_empty'), 'write-capable Naruto route with empty target paths must block', emptyTarget);
26
+ assertGate(pass.ok === true, 'resolved write-capable prompt must pass placeholder guard', pass);
27
+ assertGate(readonlyWarn.ok === true && readonlyWarn.warnings.length > 0, 'read-only route may warn on placeholders instead of blocking', readonlyWarn);
28
+ emitGate('prompt:placeholder-guard', {
29
+ blocked_placeholders: blocked.placeholders,
30
+ empty_target_blockers: emptyTarget.blockers,
31
+ readonly_warnings: readonlyWarn.warnings
32
+ });
33
+ //# sourceMappingURL=prompt-placeholder-guard-check.js.map
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import fs from 'node:fs/promises';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import { assertGate, emitGate, readText } from './lib/codex-sdk-gate-lib.js';
7
+ import { importDist, root } from './lib/codex-sdk-gate-lib.js';
8
+ const plane = readText('src/core/codex-control/codex-control-plane.ts');
9
+ const adapter = readText('src/core/codex-control/python-codex-sdk-adapter.ts');
10
+ assertGate(plane.includes("'python-codex-sdk'"), 'Codex Control backend union must include python-codex-sdk');
11
+ assertGate(adapter.includes('runPythonCodexSdkTask'), 'Python SDK adapter must expose a task runner');
12
+ const mod = await importDist('core/codex-control/codex-control-plane.js');
13
+ const schema = await importDist('core/codex-control/schemas/agent-worker-result.schema.js');
14
+ const tmp = await fs.mkdtemp(path.join(os.tmpdir(), 'sks-python-codex-sdk-pipeline-'));
15
+ const oldFake = process.env.SKS_PYTHON_CODEX_SDK_FAKE;
16
+ process.env.SKS_PYTHON_CODEX_SDK_FAKE = '1';
17
+ try {
18
+ const result = await mod.runCodexTask({
19
+ route: '$Agent',
20
+ missionId: 'M-python-sdk-all-pipelines',
21
+ workItemId: 'python-sdk-fixture',
22
+ slotId: 'slot-python-fixture',
23
+ generationIndex: 1,
24
+ sessionId: 'python-sdk-fixture-session',
25
+ cwd: root,
26
+ prompt: 'Hermetic Python Codex SDK backend fixture.',
27
+ inputFiles: [],
28
+ inputImages: [],
29
+ outputSchemaId: schema.CODEX_AGENT_WORKER_RESULT_SCHEMA_ID,
30
+ outputSchema: schema.codexAgentWorkerResultSchema,
31
+ sandboxPolicy: 'read-only',
32
+ requestedScopeContract: { id: 'python-sdk-fixture', read_only: true, allowed_paths: [], write_paths: [] },
33
+ backendPreference: ['python-codex-sdk'],
34
+ mutationLedgerRoot: tmp
35
+ });
36
+ assertGate(result.ok === true, 'Python SDK backend fixture must pass', result);
37
+ assertGate(result.backend === 'python-codex-sdk', 'Python SDK backend fixture must select python-codex-sdk', result);
38
+ assertGate(result.pythonSdkProofPath && result.streamEventCount > 0, 'Python SDK backend fixture must write proof and events', result);
39
+ emitGate('python-sdk:all-pipelines', { backend: result.backend, backend_family: result.backend_family, stream_event_count: result.streamEventCount });
40
+ }
41
+ finally {
42
+ if (oldFake === undefined)
43
+ delete process.env.SKS_PYTHON_CODEX_SDK_FAKE;
44
+ else
45
+ process.env.SKS_PYTHON_CODEX_SDK_FAKE = oldFake;
46
+ }
47
+ //# sourceMappingURL=python-codex-sdk-all-pipelines-check.js.map
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './lib/codex-sdk-gate-lib.js';
4
+ const mod = await importDist('core/codex-control/python-codex-sdk-adapter.js');
5
+ const cap = await mod.detectPythonCodexSdkCapability();
6
+ assertGate(['codex-app-server', 'openai-codex', 'openai-codex-sdk'].includes(cap.package_name), 'Python Codex SDK package name mismatch');
7
+ assertGate(cap.ok === true || cap.blockers.includes('python_codex_sdk_unavailable') || cap.blockers.includes('python_missing') || cap.blockers.includes('python_version_below_3_10'), 'Python SDK unavailable must be a capability blocker');
8
+ const requireReal = process.env.SKS_REQUIRE_PYTHON_CODEX_SDK === '1' || process.argv.includes('--require-real');
9
+ if (requireReal && !cap.ok) {
10
+ console.log(JSON.stringify({
11
+ schema: 'sks.release-gate.v1',
12
+ ok: false,
13
+ gate: 'python-sdk:real-smoke',
14
+ capability_ok: cap.ok,
15
+ capability_blockers: cap.blockers,
16
+ setup_action: cap.setup_action,
17
+ python_bin: cap.python_bin,
18
+ python_version: cap.python_version,
19
+ blockers: cap.blockers
20
+ }, null, 2));
21
+ process.exit(1);
22
+ }
23
+ if (requireReal) {
24
+ const plane = await importDist('core/codex-control/codex-control-plane.js');
25
+ const smokeSchema = {
26
+ type: 'object',
27
+ required: ['status', 'summary', 'blockers'],
28
+ properties: {
29
+ status: { type: 'string', enum: ['done'] },
30
+ summary: { type: 'string' },
31
+ blockers: { type: 'array', items: { type: 'string' } }
32
+ },
33
+ additionalProperties: false
34
+ };
35
+ const result = await plane.runCodexTask({
36
+ route: '$Agent',
37
+ missionId: 'M-python-codex-sdk-real-smoke',
38
+ workItemId: 'python-real-smoke',
39
+ slotId: 'slot-python-real',
40
+ generationIndex: 1,
41
+ sessionId: 'python-real-smoke-session',
42
+ cwd: process.cwd(),
43
+ prompt: 'Read-only Python Codex SDK smoke. Do not edit files. Return exactly JSON: {"status":"done","summary":"python-codex-sdk real smoke passed","blockers":[]}',
44
+ inputFiles: [],
45
+ inputImages: [],
46
+ outputSchemaId: 'sks.python-codex-sdk-real-smoke-result.v1',
47
+ outputSchema: smokeSchema,
48
+ sandboxPolicy: 'read-only',
49
+ requestedScopeContract: { id: 'python-real-smoke', read_only: true, allowed_paths: [], write_paths: [] },
50
+ backendPreference: ['python-codex-sdk'],
51
+ mutationLedgerRoot: '.sneakoscope/reports/python-codex-sdk-real-smoke'
52
+ });
53
+ assertGate(result.ok === true, 'real Python Codex SDK smoke failed', result);
54
+ emitGate('python-sdk:real-smoke', {
55
+ status: 'proven',
56
+ capability_ok: cap.ok,
57
+ package_name: cap.package_name,
58
+ import_name: cap.import_name,
59
+ python_bin: cap.python_bin,
60
+ sdk_thread_id: result.sdkThreadId,
61
+ stream_event_count: result.streamEventCount,
62
+ backend: result.backend,
63
+ backend_family: result.backend_family
64
+ });
65
+ }
66
+ else {
67
+ emitGate('python-sdk:capability', {
68
+ capability_ok: cap.ok,
69
+ capability_blockers: cap.blockers,
70
+ package_name: cap.package_name,
71
+ import_name: cap.import_name,
72
+ setup_action: cap.setup_action
73
+ });
74
+ }
75
+ //# sourceMappingURL=python-codex-sdk-capability-check.js.map
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, readText } from './lib/codex-sdk-gate-lib.js';
4
+ const adapter = readText('src/core/codex-control/python-codex-sdk-adapter.ts');
5
+ const runner = readText('pytools/codex_sdk_runner.py');
6
+ assertGate(adapter.includes("workspace_write"), 'TS -> Python sandbox mapping must include workspace_write');
7
+ assertGate(adapter.includes("full_access"), 'TS -> Python sandbox mapping must include full_access');
8
+ assertGate(runner.includes('Sandbox.workspace_write'), 'Python runner must use SDK Sandbox presets');
9
+ emitGate('python-sdk:sandbox-policy', { sandboxes: ['read_only', 'workspace_write', 'full_access'] });
10
+ //# sourceMappingURL=python-codex-sdk-sandbox-policy-check.js.map
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import { assertGate, emitGate, importDist } from './lib/codex-sdk-gate-lib.js';
4
+ const mod = await importDist('core/codex-control/python-codex-sdk-event-translator.js');
5
+ const events = mod.translatePythonCodexSdkEvents([
6
+ { event: 'thread_started', thread_id: 't' },
7
+ { event: 'turn_completed', turn_id: 'u', status: 'completed', final_response: '{}' }
8
+ ]);
9
+ assertGate(events.length === 2, 'Python SDK event translator must preserve stream events');
10
+ assertGate(events[1].event_type === 'turn_completed', 'Python SDK turn completion event missing');
11
+ emitGate('python-sdk:stream-bridge', { event_count: events.length });
12
+ //# sourceMappingURL=python-codex-sdk-stream-bridge-check.js.map
@@ -23,7 +23,7 @@ const deterministicReleaseEnv = {
23
23
  SKS_REQUIRE_REAL_COMPUTER_USE: '0'
24
24
  };
25
25
  const tasks = [
26
- task('build', 'npm run build --silent', { outputs: ['dist'] }),
26
+ task('build', 'npm run release:dist-freshness --silent', { outputs: ['dist'] }),
27
27
  task('runtime:no-src-mjs', 'npm run runtime:no-src-mjs --silent', { dependencies: ['build'] }),
28
28
  task('runtime:ts-source-of-truth', 'npm run runtime:ts-source-of-truth --silent', { dependencies: ['build'] }),
29
29
  task('architecture:guard', 'npm run architecture:guard --silent', { dependencies: ['build', 'runtime:ts-source-of-truth'] }),
@@ -30,6 +30,7 @@ else {
30
30
  }
31
31
  for (const [script, extraArgs] of [
32
32
  ['codex:actual-config-load-probe', []],
33
+ ['codex:0.137-compat:require-real', []],
33
34
  ['codex:0.136-compat:require-real', []],
34
35
  ['codex:0.135-compat:require-real', []],
35
36
  ['doctor:codex-doctor-parity:actual', []],
@@ -49,6 +50,10 @@ if (report.environment_required_checks.some((row) => !row.ok))
49
50
  finish(false);
50
51
  for (const [script, extraArgs] of [
51
52
  ['codex-sdk:real-smoke', ['--require-real']],
53
+ ['local-llm:smoke', ['--require-real']],
54
+ ['local-llm:throughput', []],
55
+ ['local-llm:cache-performance', []],
56
+ ['python-sdk:real-smoke', []],
52
57
  ['codex:0.134-runner-truth', []],
53
58
  ['agent:real-codex-patch-envelope-smoke', []],
54
59
  ['agent:real-codex-parallel-workers', []],
@@ -65,7 +65,7 @@ const sourceOk = source.includes("action', 'new-pane'")
65
65
  && source.includes('zellij_worker_list_panes')
66
66
  && source.includes('provider_context');
67
67
  const ok = artifact.ok
68
- && artifact.pane_name === 'slot-001/gen-7 · codex-sdk · fast · codex-lb'
68
+ && artifact.pane_name === 'slot-001/gen-7 · codex-sdk · fast · codex-lb · running'
69
69
  && artifact.pane_kind === 'worker_codex_sdk'
70
70
  && artifact.provider === 'codex-lb'
71
71
  && artifact.service_tier === 'fast'