sneakoscope 4.2.0 → 4.4.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 +9 -8
- 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/sks.js +1 -1
- package/dist/cli/command-registry.js +2 -1
- package/dist/cli/ultra-search-command.js +163 -0
- package/dist/cli/xai-command.js +28 -168
- package/dist/core/agents/agent-codex-cockpit.js +3 -3
- package/dist/core/agents/agent-wrongness.js +1 -1
- package/dist/core/codex-control/codex-app-server-v2-client.js +86 -2
- package/dist/core/codex-control/codex-reliability-shield.js +26 -5
- package/dist/core/codex-control/codex-task-runner.js +7 -1
- package/dist/core/codex-control/model-call-concurrency.js +1 -1
- package/dist/core/commands/qa-loop-command.js +23 -7
- package/dist/core/fsx.js +1 -1
- package/dist/core/hooks-runtime.js +1 -1
- package/dist/core/qa-loop/qa-app-server-driver.js +134 -0
- package/dist/core/qa-loop/qa-contract-v2.js +231 -0
- package/dist/core/qa-loop/qa-gate-v2.js +132 -0
- package/dist/core/qa-loop/qa-runtime-artifacts.js +53 -0
- package/dist/core/qa-loop/qa-surface-router.js +114 -0
- package/dist/core/qa-loop/qa-types.js +18 -0
- package/dist/core/qa-loop.js +83 -26
- package/dist/core/release/gate-manifest.js +1 -0
- package/dist/core/release/sla-scheduler.js +1 -1
- package/dist/core/release-parallel-full-coverage.js +1 -1
- package/dist/core/routes.js +22 -6
- package/dist/core/source-intelligence/source-intelligence-policy.js +45 -26
- package/dist/core/source-intelligence/source-intelligence-proof.js +10 -16
- package/dist/core/source-intelligence/source-intelligence-runner.js +56 -42
- package/dist/core/triwiki/triwiki-affected-graph.js +3 -2
- package/dist/core/trust-kernel/trust-report.js +3 -5
- package/dist/core/ultra-search/index.js +3 -0
- package/dist/core/ultra-search/runtime.js +502 -0
- package/dist/core/ultra-search/types.js +3 -0
- package/dist/core/version.js +1 -1
- package/dist/scripts/agent-visual-consistency-check.js +1 -1
- package/dist/scripts/codex-control-all-pipelines-check.js +1 -0
- package/dist/scripts/codex-control-model-capacity-fallback-check.js +53 -0
- package/dist/scripts/config-managed-merge-callsite-coverage-check.js +7 -1
- package/dist/scripts/loop-directive-check-lib.js +78 -1
- package/dist/scripts/qa-loop-app-server-driver-check.js +74 -0
- package/dist/scripts/qa-loop-surface-router-check.js +49 -0
- package/dist/scripts/release-check-dynamic-execute.js +1 -1
- package/dist/scripts/release-metadata-1-19-check.js +2 -2
- package/dist/scripts/release-parallel-check.js +2 -2
- package/dist/scripts/release-parallel-full-coverage-check.js +1 -1
- package/dist/scripts/release-readiness-report.js +6 -6
- package/dist/scripts/runtime-ts-rust-boundary-check.js +1 -1
- package/dist/scripts/sks-1-18-gate-lib.js +2 -2
- package/dist/scripts/source-intelligence-all-modes-check.js +9 -19
- package/dist/scripts/source-intelligence-policy-check.js +6 -6
- package/dist/scripts/triwiki-affected-graph-check.js +2 -2
- package/dist/scripts/ultra-search-provider-interface-check.js +27 -0
- package/package.json +7 -4
- package/dist/core/mcp/xai-mcp-detector.js +0 -157
- package/dist/core/mcp/xai-search-adapter.js +0 -100
- package/dist/scripts/xai-mcp-capability-check.js +0 -14
|
@@ -41,7 +41,12 @@ export async function runLoopDirectiveCheck(id) {
|
|
|
41
41
|
process.env.SKS_LOOP_RUNTIME_FIXTURE = '1';
|
|
42
42
|
}
|
|
43
43
|
const fixtureMode = process.env.SKS_LOOP_RUNTIME_FIXTURE === '1' || process.env.SKS_LOOP_GATE_FIXTURE === '1';
|
|
44
|
-
const
|
|
44
|
+
const needsRuntime = loopDirectiveNeedsRuntime(id);
|
|
45
|
+
if (!needsRuntime)
|
|
46
|
+
await writeLightweightLoopArtifacts(root, missionId, plan);
|
|
47
|
+
const result = needsRuntime
|
|
48
|
+
? await runLoopPlan({ root, plan, parallelism: 'extreme', noMutation: fixtureMode ? true : !realRuntimeMode })
|
|
49
|
+
: { ok: true, proofs: [], graph_proof: await readJson(loopGraphProofPath(root, missionId)) };
|
|
45
50
|
const assertions = [];
|
|
46
51
|
const assert = (condition, message) => assertions.push({ ok: Boolean(condition), message });
|
|
47
52
|
assert(validateLoopPlan(plan).ok, 'loop plan validates');
|
|
@@ -321,6 +326,78 @@ export async function runLoopDirectiveCheck(id) {
|
|
|
321
326
|
if (failed.length)
|
|
322
327
|
process.exitCode = 1;
|
|
323
328
|
}
|
|
329
|
+
function loopDirectiveNeedsRuntime(id) {
|
|
330
|
+
return new Set([
|
|
331
|
+
'loop:runtime',
|
|
332
|
+
'loop:worker-runtime',
|
|
333
|
+
'loop:checker-freshness',
|
|
334
|
+
'loop:runtime-real-workers',
|
|
335
|
+
'loop:maker-checker-real',
|
|
336
|
+
'loop:gate-runner-real',
|
|
337
|
+
'loop:gate-artifacts',
|
|
338
|
+
'loop:worktree-runtime',
|
|
339
|
+
'loop:integration-merge',
|
|
340
|
+
'loop:integration-finalizer-real',
|
|
341
|
+
'loop:real-maker-checker-blackbox',
|
|
342
|
+
'naruto:loop-mesh-real-blackbox',
|
|
343
|
+
'goal:loop-runtime-real-blackbox',
|
|
344
|
+
'loop:integration-finalizer'
|
|
345
|
+
]).has(id);
|
|
346
|
+
}
|
|
347
|
+
async function writeLightweightLoopArtifacts(root, missionId, plan) {
|
|
348
|
+
const node = plan.graph.nodes.find((row) => row.loop_id === 'loop-zellij') || plan.graph.nodes[0];
|
|
349
|
+
if (!node)
|
|
350
|
+
return;
|
|
351
|
+
const stateFile = loopStatePath(root, missionId, node.loop_id);
|
|
352
|
+
const proofFile = loopProofPath(root, missionId, node.loop_id);
|
|
353
|
+
const graphFile = loopGraphProofPath(root, missionId);
|
|
354
|
+
await fs.mkdir(path.dirname(stateFile), { recursive: true });
|
|
355
|
+
await fs.writeFile(stateFile, JSON.stringify({
|
|
356
|
+
schema: 'sks.loop-state.v1',
|
|
357
|
+
mission_id: missionId,
|
|
358
|
+
loop_id: node.loop_id,
|
|
359
|
+
status: 'completed',
|
|
360
|
+
current_phase: 'static-fixture',
|
|
361
|
+
updated_at: new Date().toISOString()
|
|
362
|
+
}, null, 2));
|
|
363
|
+
await fs.writeFile(proofFile, JSON.stringify({
|
|
364
|
+
schema: 'sks.loop-proof.v1',
|
|
365
|
+
mission_id: missionId,
|
|
366
|
+
loop_id: node.loop_id,
|
|
367
|
+
status: 'completed',
|
|
368
|
+
iterations: 1,
|
|
369
|
+
owner_scope: node.owner_scope,
|
|
370
|
+
maker_result: { backend: 'static-fixture', worker_count: 0, artifacts: [], patch_candidates: [], changed_files: [], blockers: [], ok: true },
|
|
371
|
+
checker_result: { backend: 'static-fixture', worker_count: 0, artifacts: [], checker_findings: [], fresh_session: true, blockers: [], ok: true },
|
|
372
|
+
gate_result: { ok: true, selected_gates: [], passed_gates: [], failed_gates: [], skipped_gates: [], blockers: [] },
|
|
373
|
+
budget: { used: { iterations: 1 } },
|
|
374
|
+
handoff: { required: false, reason: null },
|
|
375
|
+
worktree: { id: null, path: null, branch: null },
|
|
376
|
+
changed_files: [],
|
|
377
|
+
patch_bytes: 0,
|
|
378
|
+
blockers: []
|
|
379
|
+
}, null, 2));
|
|
380
|
+
await fs.mkdir(path.dirname(graphFile), { recursive: true });
|
|
381
|
+
await fs.writeFile(graphFile, JSON.stringify({
|
|
382
|
+
schema: 'sks.loop-graph-proof.v1',
|
|
383
|
+
mission_id: missionId,
|
|
384
|
+
ok: true,
|
|
385
|
+
total_loops: plan.graph.nodes.length,
|
|
386
|
+
completed_loops: plan.graph.nodes.length,
|
|
387
|
+
blocked_loops: 0,
|
|
388
|
+
failed_loops: 0,
|
|
389
|
+
handoff_loops: 0,
|
|
390
|
+
parallelism: {
|
|
391
|
+
max_active_loops: Math.min(plan.graph.nodes.length, 4),
|
|
392
|
+
max_active_workers: 0,
|
|
393
|
+
wall_ms: 1,
|
|
394
|
+
sequential_estimate_ms: Math.max(1, plan.graph.nodes.length),
|
|
395
|
+
speedup_ratio: Math.max(1, plan.graph.nodes.length)
|
|
396
|
+
},
|
|
397
|
+
gates: { selected: [], passed: [], failed: [], skipped: [] },
|
|
398
|
+
blockers: []
|
|
399
|
+
}, null, 2));
|
|
400
|
+
}
|
|
324
401
|
async function exists(file) {
|
|
325
402
|
try {
|
|
326
403
|
await fs.access(file);
|
|
@@ -0,0 +1,74 @@
|
|
|
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 } from './sks-1-18-gate-lib.js';
|
|
7
|
+
import { runQaAppServerDriver } from '../core/qa-loop/qa-app-server-driver.js';
|
|
8
|
+
import { selectQaSurface } from '../core/qa-loop/qa-surface-router.js';
|
|
9
|
+
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), 'sks-qa-app-server-driver-'));
|
|
10
|
+
const calls = [];
|
|
11
|
+
const fakeClient = {
|
|
12
|
+
listeners: [],
|
|
13
|
+
async initialize() {
|
|
14
|
+
calls.push('initialize');
|
|
15
|
+
},
|
|
16
|
+
onEvent(listener) {
|
|
17
|
+
this.listeners.push(listener);
|
|
18
|
+
return () => {
|
|
19
|
+
this.listeners = this.listeners.filter((item) => item !== listener);
|
|
20
|
+
};
|
|
21
|
+
},
|
|
22
|
+
async startThread(params) {
|
|
23
|
+
calls.push(['thread/start', params]);
|
|
24
|
+
const event = { method: 'thread/started', params: { threadId: 'thread-qa-driver', thread: { id: 'thread-qa-driver' } } };
|
|
25
|
+
this.listeners.forEach((listener) => listener(event));
|
|
26
|
+
return { thread: { id: 'thread-qa-driver' }, cwd: params.cwd };
|
|
27
|
+
},
|
|
28
|
+
async startTurn(params) {
|
|
29
|
+
calls.push(['turn/start', params]);
|
|
30
|
+
this.listeners.forEach((listener) => listener({ method: 'turn/started', params: { threadId: params.threadId, turn: { id: 'turn-qa-driver' } } }));
|
|
31
|
+
this.listeners.forEach((listener) => listener({
|
|
32
|
+
method: 'item/tool/call',
|
|
33
|
+
params: {
|
|
34
|
+
threadId: params.threadId,
|
|
35
|
+
turnId: 'turn-qa-driver',
|
|
36
|
+
itemId: 'item-click-1',
|
|
37
|
+
tool: '@Browser',
|
|
38
|
+
action: 'click',
|
|
39
|
+
cookie: 'secret-cookie-value'
|
|
40
|
+
}
|
|
41
|
+
}));
|
|
42
|
+
return { turn: { id: 'turn-qa-driver' } };
|
|
43
|
+
},
|
|
44
|
+
async waitForTurnCompletion(threadId, turnId) {
|
|
45
|
+
calls.push(['wait', { threadId, turnId }]);
|
|
46
|
+
return { threadId, turnId, status: 'completed' };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const surface = selectQaSurface({ missionId: 'M-qa-driver', targetUrl: 'http://localhost:3000', prompt: 'local Browser QA' });
|
|
50
|
+
const session = await runQaAppServerDriver({
|
|
51
|
+
missionDir: tmp,
|
|
52
|
+
missionId: 'M-qa-driver',
|
|
53
|
+
client: fakeClient,
|
|
54
|
+
cwd: process.cwd(),
|
|
55
|
+
prompt: '@Browser open http://localhost:3000 and click Save',
|
|
56
|
+
surfaceSelection: surface,
|
|
57
|
+
timeoutMs: 500
|
|
58
|
+
});
|
|
59
|
+
assertGate(session.status === 'completed', 'QA App Server driver fake session must complete', session);
|
|
60
|
+
assertGate(session.thread_id === 'thread-qa-driver', 'thread id must be correlated', session);
|
|
61
|
+
assertGate(session.turn_id === 'turn-qa-driver', 'turn id must be correlated', session);
|
|
62
|
+
assertGate(session.action_event_count >= 1, 'action-like tool event must be counted', session);
|
|
63
|
+
const runtimeEvents = await fs.readFile(path.join(tmp, 'qa-loop', 'runtime-events.jsonl'), 'utf8');
|
|
64
|
+
const actionLedger = await fs.readFile(path.join(tmp, 'qa-loop', 'action-ledger.jsonl'), 'utf8');
|
|
65
|
+
assertGate(runtimeEvents.includes('thread-qa-driver') && runtimeEvents.includes('turn-qa-driver'), 'runtime events must include thread/turn IDs', runtimeEvents);
|
|
66
|
+
assertGate(actionLedger.includes('item-click-1'), 'action ledger must include item id', actionLedger);
|
|
67
|
+
assertGate(!runtimeEvents.includes('secret-cookie-value') && !actionLedger.includes('secret-cookie-value'), 'driver must redact cookie/token-like fields from artifacts');
|
|
68
|
+
emitGate('qa-loop:app-server-driver', {
|
|
69
|
+
calls: calls.map((call) => Array.isArray(call) ? call[0] : call),
|
|
70
|
+
action_event_count: session.action_event_count,
|
|
71
|
+
event_count: session.event_count,
|
|
72
|
+
redaction: true
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=qa-loop-app-server-driver-check.js.map
|
|
@@ -0,0 +1,49 @@
|
|
|
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 } from './sks-1-18-gate-lib.js';
|
|
7
|
+
import { buildQaContractV2 } from '../core/qa-loop/qa-contract-v2.js';
|
|
8
|
+
import { evaluateQaGateV2 } from '../core/qa-loop/qa-gate-v2.js';
|
|
9
|
+
import { initializeQaRuntimeArtifacts } from '../core/qa-loop/qa-runtime-artifacts.js';
|
|
10
|
+
import { selectQaSurface } from '../core/qa-loop/qa-surface-router.js';
|
|
11
|
+
const cases = [
|
|
12
|
+
['localhost no auth chooses Browser', selectQaSurface({ targetUrl: 'http://localhost:3000/settings', prompt: 'test local web settings' }).selected_surface, 'codex_in_app_browser'],
|
|
13
|
+
['public no auth chooses Browser', selectQaSurface({ targetUrl: 'https://example.com', prompt: 'public marketing page QA' }).selected_surface, 'codex_in_app_browser'],
|
|
14
|
+
['signed-in browser state chooses Chrome', selectQaSurface({ targetUrl: 'https://example.com/app', prompt: 'verify logged-in cookie profile flow' }).selected_surface, 'codex_chrome_extension'],
|
|
15
|
+
['extension-dependent site chooses Chrome', selectQaSurface({ targetUrl: 'https://example.com', prompt: 'browser extension dependent QA' }).selected_surface, 'codex_chrome_extension'],
|
|
16
|
+
['native macOS GUI chooses Computer Use', selectQaSurface({ prompt: 'native macOS Settings GUI bug' }).selected_surface, 'codex_computer_use'],
|
|
17
|
+
['native Windows GUI chooses Computer Use', selectQaSurface({ prompt: 'Windows desktop app dialog bug' }).selected_surface, 'codex_computer_use'],
|
|
18
|
+
['structured data without UI chooses MCP', selectQaSurface({ prompt: 'Gmail data sync check', uiRequired: false, targetKind: 'structured_data' }).selected_surface, 'structured_mcp']
|
|
19
|
+
];
|
|
20
|
+
for (const [label, actual, expected] of cases) {
|
|
21
|
+
assertGate(actual === expected, `${label}: expected ${expected}, got ${actual}`, { actual, expected });
|
|
22
|
+
}
|
|
23
|
+
const contract = buildQaContractV2({
|
|
24
|
+
prompt: 'QA local settings form at http://localhost:3000',
|
|
25
|
+
answers: {
|
|
26
|
+
QA_SCOPE: 'ui_e2e_only',
|
|
27
|
+
TARGET_BASE_URL: 'http://localhost:3000',
|
|
28
|
+
LOGIN_REQUIRED: 'no',
|
|
29
|
+
MAX_QA_CYCLES: ''
|
|
30
|
+
}
|
|
31
|
+
}, { missionId: 'M-router-check' });
|
|
32
|
+
assertGate(contract.runtime.max_cycles === 5, 'QA contract v2 default max cycles must be 5', contract.runtime);
|
|
33
|
+
assertGate(contract.mutation.source_code_patch_policy === 'enabled', 'safe local source fixes must default on unless report-only', contract.mutation);
|
|
34
|
+
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), 'sks-qa-router-'));
|
|
35
|
+
await initializeQaRuntimeArtifacts(tmp, contract, { missionId: 'M-router-check' });
|
|
36
|
+
let gate = await evaluateQaGateV2(tmp);
|
|
37
|
+
assertGate(gate.passed === false, 'UI-required QA cannot pass with zero real actions', gate);
|
|
38
|
+
assertGate(gate.blockers.includes('ui_required_but_real_action_count_zero'), 'zero-action blocker missing', gate);
|
|
39
|
+
await fs.appendFile(path.join(tmp, 'qa-loop', 'action-ledger.jsonl'), `${JSON.stringify({ schema: 'sks.qa-loop-action.v2', status: 'completed', real: true, journey_fingerprint: 'J', kind: 'click' })}\n`);
|
|
40
|
+
await fs.appendFile(path.join(tmp, 'qa-loop', 'observation-ledger.jsonl'), `${JSON.stringify({ schema: 'sks.qa-loop-observation.v2', status: 'observed', real: true, journey_fingerprint: 'J', kind: 'visual_delta' })}\n`);
|
|
41
|
+
gate = await evaluateQaGateV2(tmp);
|
|
42
|
+
assertGate(gate.real_action_count === 1 && gate.observation_count === 1, 'real action and observation ledgers must be counted', gate);
|
|
43
|
+
emitGate('qa-loop:surface-router', {
|
|
44
|
+
matrix_cases: cases.length,
|
|
45
|
+
default_max_cycles: contract.runtime.max_cycles,
|
|
46
|
+
zero_action_blocked: true,
|
|
47
|
+
selected_surface: contract.target.kind
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=qa-loop-surface-router-check.js.map
|
|
@@ -60,7 +60,7 @@ for (const gate of plan.selected) {
|
|
|
60
60
|
continue;
|
|
61
61
|
}
|
|
62
62
|
const command = `npm run ${gate.id}`;
|
|
63
|
-
if (FORBIDDEN_RECURSIVE_GATES.has(gate.id) || /npm\s+run\s+(release:check|release:real-check|release:publish|publish:npm|publish:dry|prepublishOnly)\b/.test(command)) {
|
|
63
|
+
if (FORBIDDEN_RECURSIVE_GATES.has(gate.id) || /npm\s+run\s+(release:check|release:real-check|release:publish|publish:ignore-scripts|publish:npm|publish:dry|prepublishOnly)\b/.test(command)) {
|
|
64
64
|
failures.push({ id: gate.id, exit_code: null, stdout_tail: '', stderr_tail: 'forbidden_recursive_gate_spawn' });
|
|
65
65
|
continue;
|
|
66
66
|
}
|
|
@@ -21,7 +21,7 @@ const requiredDocs = [
|
|
|
21
21
|
'README.md',
|
|
22
22
|
'CHANGELOG.md',
|
|
23
23
|
'docs/source-intelligence-layer.md',
|
|
24
|
-
'docs/
|
|
24
|
+
'docs/ultra-search-source-intelligence-policy.md',
|
|
25
25
|
'docs/main-no-scout-worker-scout-policy.md',
|
|
26
26
|
'docs/agent-terminal-lanes.md',
|
|
27
27
|
'docs/migration/tmux-to-zellij.md',
|
|
@@ -97,7 +97,7 @@ const requiredScripts = [
|
|
|
97
97
|
'agent:janitor',
|
|
98
98
|
'agent:multi-project-isolation',
|
|
99
99
|
'verification:parallel-engine',
|
|
100
|
-
'
|
|
100
|
+
'ultra-search:provider-interface',
|
|
101
101
|
'source-intelligence:policy',
|
|
102
102
|
'source-intelligence:all-modes',
|
|
103
103
|
'codex-web:adapter',
|
|
@@ -34,9 +34,9 @@ const tasks = [
|
|
|
34
34
|
task('agent:janitor', 'npm run agent:janitor --silent', { dependencies: ['build'] }),
|
|
35
35
|
task('agent:multi-project-isolation', 'npm run agent:multi-project-isolation --silent', { dependencies: ['build'] }),
|
|
36
36
|
task('verification:parallel-engine', 'npm run verification:parallel-engine --silent', { dependencies: ['build'] }),
|
|
37
|
-
task('
|
|
37
|
+
task('ultra-search:provider-interface', 'npm run ultra-search:provider-interface --silent', { dependencies: ['build'] }),
|
|
38
38
|
task('source-intelligence:policy', 'npm run source-intelligence:policy --silent', { dependencies: ['build'] }),
|
|
39
|
-
task('source-intelligence:all-modes', 'npm run source-intelligence:all-modes --silent', { dependencies: ['build', 'source-intelligence:policy', '
|
|
39
|
+
task('source-intelligence:all-modes', 'npm run source-intelligence:all-modes --silent', { dependencies: ['build', 'source-intelligence:policy', 'ultra-search:provider-interface', 'codex-web:adapter'] }),
|
|
40
40
|
task('codex-web:adapter', 'npm run codex-web:adapter --silent', { dependencies: ['build'] }),
|
|
41
41
|
task('doctor:codex-doctor-parity', 'npm run doctor:codex-doctor-parity --silent', { dependencies: ['build'] }),
|
|
42
42
|
task('codex:permission-profiles', 'npm run codex:permission-profiles --silent', { dependencies: ['build'] }),
|
|
@@ -6,7 +6,7 @@ import { assertGate, emitGate, importDist, packageScripts, root } from './sks-1-
|
|
|
6
6
|
const mod = await importDist('core/release-parallel-full-coverage.js');
|
|
7
7
|
const pkgScripts = packageScripts();
|
|
8
8
|
const parallelSource = fs.readFileSync(path.join(root, 'src/scripts/release-parallel-check.ts'), 'utf8');
|
|
9
|
-
const current = [...new Set(Object.keys(pkgScripts).filter((name) => parallelSource.includes(name)).concat(Object.keys(pkgScripts).filter((name) => /^
|
|
9
|
+
const current = [...new Set(Object.keys(pkgScripts).filter((name) => parallelSource.includes(name)).concat(Object.keys(pkgScripts).filter((name) => /^ultra-search|^source-intelligence|^codex-web|^goal-mode|^agent:main-no-scout|^agent:worker-scout-limited|^agent:background-terminals|^agent:zellij-runtime|^agent:visual-consistency|^release:parallel-full-coverage|^priority:full-closure/.test(name))))];
|
|
10
10
|
const report = mod.evaluateReleaseParallelFullCoverage(current);
|
|
11
11
|
assertGate(report.ok === true, 'release parallel DAG must preserve previous gates and include 1.18 gates', report);
|
|
12
12
|
emitGate('release:parallel-full-coverage', { previous_gate_count: report.previous_gate_count, current_gate_count: report.current_gate_count });
|
|
@@ -103,7 +103,7 @@ const checks = {
|
|
|
103
103
|
computer_use_live_evidence: scriptContains('release:check', 'computer-use:live-evidence'),
|
|
104
104
|
docs_truthfulness: scriptContains('release:check', 'docs:truthfulness'),
|
|
105
105
|
release_readiness: scriptContains('release:check:parallel', 'release:readiness'),
|
|
106
|
-
|
|
106
|
+
ultra_search_provider_interface: scriptContains('release:check:parallel', 'ultra-search:provider-interface'),
|
|
107
107
|
source_intelligence_policy: scriptContains('release:check:parallel', 'source-intelligence:policy'),
|
|
108
108
|
source_intelligence_all_modes: scriptContains('release:check:parallel', 'source-intelligence:all-modes'),
|
|
109
109
|
codex_web_adapter: scriptContains('release:check:parallel', 'codex-web:adapter'),
|
|
@@ -318,7 +318,7 @@ for (const [name, ok] of Object.entries({
|
|
|
318
318
|
verification_parallel_engine: checks.verification_parallel_engine,
|
|
319
319
|
release_metadata: checks.release_metadata,
|
|
320
320
|
release_readiness: checks.release_readiness,
|
|
321
|
-
|
|
321
|
+
ultra_search_provider_interface: checks.ultra_search_provider_interface,
|
|
322
322
|
source_intelligence_policy: checks.source_intelligence_policy,
|
|
323
323
|
source_intelligence_all_modes: checks.source_intelligence_all_modes,
|
|
324
324
|
codex_web_adapter: checks.codex_web_adapter,
|
|
@@ -809,13 +809,13 @@ const report = {
|
|
|
809
809
|
flagship_proof_graph_v4_report_ok: runtimeChecks.flagship_proof_graph_v4
|
|
810
810
|
},
|
|
811
811
|
source_intelligence_1_18: {
|
|
812
|
-
status: checks.
|
|
812
|
+
status: checks.ultra_search_provider_interface
|
|
813
813
|
&& checks.source_intelligence_policy
|
|
814
814
|
&& checks.source_intelligence_all_modes
|
|
815
815
|
&& checks.codex_web_adapter ? 'present' : 'missing',
|
|
816
|
-
mode_default: '
|
|
817
|
-
|
|
818
|
-
|
|
816
|
+
mode_default: 'ultra_balanced',
|
|
817
|
+
x_search_public_discovery: checks.ultra_search_provider_interface,
|
|
818
|
+
no_xai_runtime_dependency: checks.source_intelligence_all_modes,
|
|
819
819
|
codex_web_adapter: checks.codex_web_adapter
|
|
820
820
|
},
|
|
821
821
|
agent_terminal_zellij_1_18: {
|
|
@@ -13,7 +13,7 @@ import { root, assertGate, emitGate, importDist, readText, readJson } from './sk
|
|
|
13
13
|
assertGate(!/cargo|rustc/.test(readText('src/scripts/build-dist.ts')), 'build-dist must not invoke cargo/rustc');
|
|
14
14
|
assertGate(!/cargo|rustc/.test(readText('src/scripts/clean-dist.ts')), 'clean-dist must not invoke cargo/rustc');
|
|
15
15
|
const pkg = readJson('package.json');
|
|
16
|
-
for (const s of ['prepack', 'prepublishOnly', 'publish:dry', 'publish:npm']) {
|
|
16
|
+
for (const s of ['prepack', 'prepublishOnly', 'publish:dry', 'publish:ignore-scripts', 'publish:npm']) {
|
|
17
17
|
assertGate(!String(pkg.scripts?.[s] || '').includes('cargo'), `publish_script_compiles_rust:${s}`);
|
|
18
18
|
}
|
|
19
19
|
// 2) The published binary is JS; no prebuilt native artifact is shipped or required.
|
|
@@ -41,8 +41,8 @@ export const SOURCE_INTELLIGENCE_FILES = [
|
|
|
41
41
|
'src/core/source-intelligence/source-intelligence-policy.ts',
|
|
42
42
|
'src/core/source-intelligence/source-intelligence-runner.ts',
|
|
43
43
|
'src/core/source-intelligence/source-intelligence-proof.ts',
|
|
44
|
-
'src/core/
|
|
45
|
-
'src/core/
|
|
44
|
+
'src/core/ultra-search/types.ts',
|
|
45
|
+
'src/core/ultra-search/runtime.ts',
|
|
46
46
|
'src/core/codex/codex-web-search-adapter.ts'
|
|
47
47
|
];
|
|
48
48
|
export const AGENT_118_FILES = [
|
|
@@ -6,27 +6,17 @@ import path from 'node:path';
|
|
|
6
6
|
import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
|
|
7
7
|
const mod = await importDist('core/source-intelligence/source-intelligence-runner.js');
|
|
8
8
|
const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'sks-source-intelligence-'));
|
|
9
|
-
const
|
|
10
|
-
missionDir: dir,
|
|
11
|
-
route: '$Team',
|
|
12
|
-
query: 'fixture',
|
|
13
|
-
context7: async () => [{ title: 'docs' }],
|
|
14
|
-
codexWebSearch: async () => [{ title: 'web', url: 'https://example.com' }],
|
|
15
|
-
xaiDetection: { configured: false, search_capable: false, configured_but_unverified: false, status: 'missing' },
|
|
16
|
-
env: { SKS_CODEX_WEB_SEARCH_AVAILABLE: '1' }
|
|
17
|
-
});
|
|
18
|
-
const withXai = await mod.runSourceIntelligence({
|
|
9
|
+
const common = {
|
|
19
10
|
missionDir: dir,
|
|
20
11
|
route: '$Research',
|
|
21
|
-
|
|
22
|
-
context7: async () => [{ title: 'docs' }],
|
|
12
|
+
context7: async () => [{ title: 'docs', url: 'https://docs.example.com' }],
|
|
23
13
|
codexWebSearch: async () => [{ title: 'web', url: 'https://example.com' }],
|
|
24
|
-
xaiSearch: async () => [{ title: 'x', url: 'https://x.ai' }],
|
|
25
|
-
xaiDetection: { configured: true, search_capable: true, configured_but_unverified: false, status: 'search_capable' },
|
|
26
14
|
env: { SKS_CODEX_WEB_SEARCH_AVAILABLE: '1' }
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
assertGate(
|
|
31
|
-
|
|
15
|
+
};
|
|
16
|
+
const balanced = await mod.runSourceIntelligence({ ...common, query: 'fixture' });
|
|
17
|
+
const xSearch = await mod.runSourceIntelligence({ ...common, query: 'site:x.com product launch', xaiDetection: { configured: true, search_capable: true } });
|
|
18
|
+
assertGate(balanced.ok === true && balanced.mode === 'ultra_balanced', 'balanced UltraSearch mode must pass with provider-independent proof', balanced);
|
|
19
|
+
assertGate(xSearch.ok === false && xSearch.mode === 'x_search' && xSearch.blockers.includes('x_search_parity_not_proven'), 'X mode must not treat discovery-only public X evidence as parity', xSearch);
|
|
20
|
+
assertGate(xSearch.parallel.providers_requested.includes('x_public'), 'X public provider must be capability-selected', xSearch.parallel);
|
|
21
|
+
emitGate('source-intelligence:all-modes', { modes: [balanced.mode, xSearch.mode], x_parity_claim: 'not_proven_without_real_corpus' });
|
|
32
22
|
//# sourceMappingURL=source-intelligence-all-modes-check.js.map
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
import { assertFiles, assertGate, emitGate, importDist, SOURCE_INTELLIGENCE_FILES } from './sks-1-18-gate-lib.js';
|
|
4
4
|
assertFiles(SOURCE_INTELLIGENCE_FILES);
|
|
5
5
|
const mod = await importDist('core/source-intelligence/source-intelligence-policy.js');
|
|
6
|
-
const base = mod.buildSourceIntelligencePolicy({ context7Available: true, codexWebCapability: { available: true, status: 'available', reason: 'fixture' }
|
|
7
|
-
const
|
|
8
|
-
const blocked = mod.buildSourceIntelligencePolicy({ context7Available: false });
|
|
9
|
-
assertGate(base.mode === '
|
|
10
|
-
assertGate(
|
|
6
|
+
const base = mod.buildSourceIntelligencePolicy({ query: 'current release notes', context7Available: true, codexWebCapability: { available: true, status: 'available', reason: 'fixture' } });
|
|
7
|
+
const xSearch = mod.buildSourceIntelligencePolicy({ query: 'site:x.com product launch', context7Available: true, codexWebCapability: { available: true, status: 'available', reason: 'fixture' }, xaiDetection: { configured: true, search_capable: true } });
|
|
8
|
+
const blocked = mod.buildSourceIntelligencePolicy({ query: 'npm package docs', context7Available: false });
|
|
9
|
+
assertGate(base.mode === 'ultra_balanced', 'default mode must be ultra_balanced', base);
|
|
10
|
+
assertGate(xSearch.mode === 'x_search' && xSearch.selected_providers.includes('x_public') && !Object.hasOwn(xSearch, ['xai', 'mcp'].join('_')), 'X-search mode must be provider-independent and ignore xAI detection', xSearch);
|
|
11
11
|
assertGate(blocked.mode === 'blocked' && blocked.blockers.includes('docs_context_missing'), 'Context7 missing must block docs context');
|
|
12
|
-
emitGate('source-intelligence:policy', { modes: [base.mode,
|
|
12
|
+
emitGate('source-intelligence:policy', { modes: [base.mode, xSearch.mode, blocked.mode] });
|
|
13
13
|
//# sourceMappingURL=source-intelligence-policy-check.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
import { assertGate, emitGate, importDist, root } from './sks-1-18-gate-lib.js';
|
|
3
3
|
const mod = await importDist('core/triwiki/triwiki-affected-graph.js');
|
|
4
|
-
const graph = mod.computeTriWikiAffectedGraph({ root, changedFiles: ['src/core/triwiki/triwiki-proof-bank.ts'], tier: 'affected' });
|
|
4
|
+
const graph = mod.computeTriWikiAffectedGraph({ root, changedFiles: ['src/core/triwiki/triwiki-proof-bank.ts'], tier: 'affected', includeProofLookup: false });
|
|
5
5
|
assertGate(graph.schema === 'sks.triwiki-affected-graph.v1', 'affected graph schema mismatch', graph);
|
|
6
6
|
assertGate(graph.affected_modules.includes('triwiki') && graph.gate_packs.includes('triwiki') && graph.release_equivalent_within_scope === true, 'triwiki file must select triwiki release-equivalent pack', graph);
|
|
7
|
-
const full = mod.computeTriWikiAffectedGraph({ root, full: true, tier: 'release' });
|
|
7
|
+
const full = mod.computeTriWikiAffectedGraph({ root, full: true, tier: 'release', includeProofLookup: false });
|
|
8
8
|
assertGate(full.gates.length > graph.gates.length && full.gate_packs.length >= graph.gate_packs.length && full.conservative_reason === 'full_release_requested', 'full release graph must select the full gate surface', full);
|
|
9
9
|
emitGate('triwiki:affected-graph', { gates: graph.gates.length, packs: graph.gate_packs, full_gates: full.gates.length });
|
|
10
10
|
//# sourceMappingURL=triwiki-affected-graph-check.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
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 mod = await importDist('core/ultra-search/index.js');
|
|
8
|
+
const missionDir = await fs.mkdtemp(path.join(os.tmpdir(), 'sks-ultra-search-'));
|
|
9
|
+
const result = await mod.runUltraSearch({
|
|
10
|
+
missionDir,
|
|
11
|
+
query: 'npm package docs',
|
|
12
|
+
mode: 'balanced',
|
|
13
|
+
context7: async () => [{ title: 'npm docs', url: 'https://docs.npmjs.com', snippet: 'official docs' }],
|
|
14
|
+
codexWebSearch: async () => [{ title: 'npm registry', url: 'https://www.npmjs.com/package/npm', snippet: 'registry' }],
|
|
15
|
+
env: { SKS_CODEX_WEB_SEARCH_AVAILABLE: '1' }
|
|
16
|
+
});
|
|
17
|
+
assertGate(result.proof.provider_independent === true, 'UltraSearch proof must be provider-independent', result.proof);
|
|
18
|
+
assertGate(result.proof.xai_runtime_dependency === false, 'UltraSearch must not require xAI runtime', result.proof);
|
|
19
|
+
assertGate(result.sources.some((source) => source.acquisition_verdict === 'verified_content'), 'UltraSearch must normalize verified source evidence', result.sources);
|
|
20
|
+
assertGate(result.convergence.schema === 'sks.ultra-search-convergence.v1', 'UltraSearch convergence artifact must be typed', result.convergence);
|
|
21
|
+
emitGate('ultra-search:provider-interface', {
|
|
22
|
+
mode: result.mode,
|
|
23
|
+
sources: result.sources.length,
|
|
24
|
+
verified: result.proof.verified_source_count,
|
|
25
|
+
xai_runtime_dependency: result.proof.xai_runtime_dependency
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=ultra-search-provider-interface-check.js.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sneakoscope",
|
|
3
3
|
"displayName": "ㅅㅋㅅ",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.4.0",
|
|
5
5
|
"description": "Sneakoscope Codex: fast proof-first Codex trust layer with image-based Voxel TriWiki.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"homepage": "https://github.com/mandarange/Sneakoscope-Codex#readme",
|
|
@@ -323,6 +323,7 @@
|
|
|
323
323
|
"codex-control:side-effect-scope": "node ./dist/scripts/codex-control-side-effect-scope-check.js",
|
|
324
324
|
"codex-control:all-pipelines": "node ./dist/scripts/codex-control-all-pipelines-check.js",
|
|
325
325
|
"codex-control:empty-result-retry": "node ./dist/scripts/codex-control-empty-result-retry-check.js",
|
|
326
|
+
"codex-control:model-capacity-fallback": "node ./dist/scripts/codex-control-model-capacity-fallback-check.js",
|
|
326
327
|
"codex-control:stream-idle-watchdog": "node ./dist/scripts/codex-control-stream-idle-watchdog-check.js",
|
|
327
328
|
"codex-control:tool-call-sequence-repair": "node ./dist/scripts/codex-control-tool-call-sequence-repair-check.js",
|
|
328
329
|
"codex-control:keepalive-no-cot-leak": "node ./dist/scripts/codex-control-keepalive-no-cot-leak-check.js",
|
|
@@ -359,9 +360,10 @@
|
|
|
359
360
|
"coverage": "node --experimental-test-coverage --test \"test/**/*.test.mjs\"",
|
|
360
361
|
"release:check": "npm run release:check:affected",
|
|
361
362
|
"release:real-check": "node ./dist/scripts/release-real-check.js",
|
|
362
|
-
"release:publish": "npm run publish:
|
|
363
|
+
"release:publish": "npm run publish:ignore-scripts",
|
|
363
364
|
"publish:dry": "npm run release:metadata && npm run release:version-truth && npm run publish:packlist-performance && npm run release:check:full && node ./dist/scripts/check-publish-tag.js && node ./dist/scripts/release-check-stamp.js verify && npm run release:provenance -- --publish && npm run release:dist-freshness && node ./dist/scripts/release-registry-check.js --require-unpublished && npm --cache /tmp/sks-npm-cache publish --dry-run --ignore-scripts --registry https://registry.npmjs.org/ --access public",
|
|
364
|
-
"publish:
|
|
365
|
+
"publish:ignore-scripts": "npm run prepublishOnly && npm --cache /tmp/sks-npm-cache publish --ignore-scripts --registry https://registry.npmjs.org/ --access public",
|
|
366
|
+
"publish:npm": "npm run publish:ignore-scripts",
|
|
365
367
|
"publish:fast": "node -e \"console.error('publish:fast is quarantined; use publish:dry and publish:npm with the release gates.'); process.exit(1)\"",
|
|
366
368
|
"prepack": "npm run build",
|
|
367
369
|
"prepublishOnly": "npm run release:metadata && npm run release:version-truth && npm run release:dist-freshness && npm run publish:packlist-performance && node ./dist/scripts/prepublish-release-check-or-fast.js && node ./dist/scripts/check-publish-tag.js && node ./dist/scripts/release-check-stamp.js verify && npm run release:provenance -- --publish && node ./dist/scripts/release-registry-check.js --require-unpublished --require-publish-auth",
|
|
@@ -474,12 +476,12 @@
|
|
|
474
476
|
"qa:native-agent-backend": "node ./dist/scripts/agent-native-release-gate.js qa-native-agent-backend",
|
|
475
477
|
"agent:non-recursive-pipeline-report": "node ./dist/scripts/non-recursive-pipeline-check.js --json",
|
|
476
478
|
"agent:legacy-multiagent-removed": "node ./dist/scripts/legacy-multiagent-removal-check.js",
|
|
477
|
-
"xai-mcp:capability": "node ./dist/scripts/xai-mcp-capability-check.js",
|
|
478
479
|
"mcp:0.134-modernization": "node ./dist/scripts/mcp-0-134-modernization-check.js",
|
|
479
480
|
"mcp:readonly-concurrency": "node ./dist/scripts/mcp-readonly-concurrency-check.js",
|
|
480
481
|
"mcp:readonly-runtime-scheduler": "node ./dist/scripts/mcp-readonly-runtime-scheduler-check.js",
|
|
481
482
|
"codex:0.134-runner-truth": "node ./dist/scripts/codex-0-134-runner-truth-check.js",
|
|
482
483
|
"source-intelligence:policy": "node ./dist/scripts/source-intelligence-policy-check.js",
|
|
484
|
+
"ultra-search:provider-interface": "node ./dist/scripts/ultra-search-provider-interface-check.js",
|
|
483
485
|
"context7:evidence-dedupe": "node ./dist/scripts/context7-evidence-dedupe-check.js",
|
|
484
486
|
"source-intelligence:codex-history-search": "node ./dist/scripts/codex-history-search-check.js",
|
|
485
487
|
"source-intelligence:all-modes": "node ./dist/scripts/source-intelligence-all-modes-check.js",
|
|
@@ -619,6 +621,7 @@
|
|
|
619
621
|
"qa-loop:effort-escalation": "node ./dist/scripts/qa-loop-effort-escalation-check.js",
|
|
620
622
|
"codex:account-usage": "node ./dist/scripts/codex-account-usage-check.js",
|
|
621
623
|
"qa-loop:budget-policy": "node ./dist/scripts/qa-loop-budget-policy-check.js",
|
|
624
|
+
"qa-loop:surface-router": "node ./dist/scripts/qa-loop-surface-router-check.js",
|
|
622
625
|
"naruto:parallel-gate-consistency": "node ./dist/scripts/naruto-parallel-gate-consistency-check.js",
|
|
623
626
|
"codex:0138-doctor": "node ./dist/scripts/codex-0138-doctor-check.js",
|
|
624
627
|
"doctor:codex-0138-fix": "node ./dist/scripts/doctor-codex-0138-fix-check.js",
|