sneakoscope 3.0.3 → 3.1.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 +1 -1
- 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/.sks-build-stamp.json +4 -4
- package/dist/bin/sks.js +1 -1
- package/dist/cli/command-registry.js +1 -0
- package/dist/cli/context7-command.js +29 -5
- package/dist/cli/install-helpers.js +15 -7
- package/dist/core/agents/runtime-proof-summary.js +4 -0
- package/dist/core/codex-control/codex-0139-capability.js +8 -3
- package/dist/core/codex-control/codex-0139-doctor-real-probe.js +64 -0
- package/dist/core/codex-control/codex-0139-image-path-real-probe.js +94 -0
- package/dist/core/codex-control/codex-0139-multi-agent-real-probe.js +107 -0
- package/dist/core/codex-control/codex-0139-plugin-real-probes.js +119 -0
- package/dist/core/codex-control/codex-0139-probe-runner.js +117 -0
- package/dist/core/codex-control/codex-0139-real-probe-summary.js +37 -0
- package/dist/core/codex-control/codex-0139-real-probes.js +74 -0
- package/dist/core/codex-control/codex-0139-rich-schema-real-probe.js +43 -0
- package/dist/core/codex-control/codex-0139-sandbox-real-probe.js +79 -0
- package/dist/core/codex-control/codex-0139-web-search-probe.js +72 -0
- package/dist/core/commands/goal-command.js +19 -1
- package/dist/core/commands/loop-command.js +135 -0
- package/dist/core/doctor/codex-0139-doctor.js +16 -0
- package/dist/core/doctor/doctor-readiness-matrix.js +6 -0
- package/dist/core/fsx.js +25 -1
- package/dist/core/init.js +6 -1
- package/dist/core/loops/goal-to-loop-compat.js +23 -0
- package/dist/core/loops/loop-artifacts.js +41 -0
- package/dist/core/loops/loop-decomposer.js +56 -0
- package/dist/core/loops/loop-finalizer.js +28 -0
- package/dist/core/loops/loop-gate-ladder.js +16 -0
- package/dist/core/loops/loop-gate-runner.js +29 -0
- package/dist/core/loops/loop-gate-selector.js +52 -0
- package/dist/core/loops/loop-iteration-runner.js +2 -0
- package/dist/core/loops/loop-lease.js +76 -0
- package/dist/core/loops/loop-observability.js +19 -0
- package/dist/core/loops/loop-owner-inference.js +57 -0
- package/dist/core/loops/loop-owner-ledger.js +2 -0
- package/dist/core/loops/loop-planner.js +139 -0
- package/dist/core/loops/loop-proof-summary.js +10 -0
- package/dist/core/loops/loop-proof.js +2 -0
- package/dist/core/loops/loop-risk-classifier.js +42 -0
- package/dist/core/loops/loop-runtime.js +159 -0
- package/dist/core/loops/loop-scheduler.js +60 -0
- package/dist/core/loops/loop-schema.js +63 -0
- package/dist/core/loops/loop-state.js +61 -0
- package/dist/core/naruto/naruto-loop-mesh.js +33 -0
- package/dist/core/naruto/naruto-loop-worker-router.js +38 -0
- package/dist/core/pipeline-internals/runtime-core.js +82 -2
- package/dist/core/version.js +1 -1
- package/dist/core/zellij/zellij-slot-column-anchor.js +5 -2
- package/dist/core/zellij/zellij-slot-pane-renderer.js +2 -0
- package/dist/scripts/github-release-body-helper.js +3 -1
- package/dist/scripts/loop-directive-check-lib.js +165 -0
- package/package.json +47 -3
- package/schemas/codex/codex-0139-real-probe-result.schema.json +85 -0
- package/schemas/loops/loop-node.schema.json +21 -0
- package/schemas/loops/loop-plan.schema.json +21 -0
- package/schemas/loops/loop-proof.schema.json +20 -0
- package/schemas/loops/loop-state.schema.json +19 -0
|
@@ -0,0 +1,165 @@
|
|
|
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 { COMMANDS } from '../cli/command-registry.js';
|
|
7
|
+
import { compileGoalToLoopPlan } from '../core/loops/goal-to-loop-compat.js';
|
|
8
|
+
import { loopGraphProofPath, loopPlanPath, loopProofPath, loopRoot, loopStatePath } from '../core/loops/loop-artifacts.js';
|
|
9
|
+
import { decomposeRequestIntoLoopDomains } from '../core/loops/loop-decomposer.js';
|
|
10
|
+
import { selectLoopGates } from '../core/loops/loop-gate-selector.js';
|
|
11
|
+
import { runLoopGates } from '../core/loops/loop-gate-runner.js';
|
|
12
|
+
import { canEscalateLoopLevel } from '../core/loops/loop-gate-ladder.js';
|
|
13
|
+
import { acquireLoopLease } from '../core/loops/loop-lease.js';
|
|
14
|
+
import { inferLoopOwnerScope } from '../core/loops/loop-owner-inference.js';
|
|
15
|
+
import { planLoopsFromRequest } from '../core/loops/loop-planner.js';
|
|
16
|
+
import { validateLoopPlan } from '../core/loops/loop-schema.js';
|
|
17
|
+
import { scheduleLoopGraph } from '../core/loops/loop-scheduler.js';
|
|
18
|
+
import { runLoopNode, runLoopPlan } from '../core/loops/loop-runtime.js';
|
|
19
|
+
import { readLoopGraphProof, summarizeLoopGraphProof } from '../core/loops/loop-observability.js';
|
|
20
|
+
import { renderLoopProofSummary } from '../core/loops/loop-proof-summary.js';
|
|
21
|
+
import { routeNarutoLoopWorker } from '../core/naruto/naruto-loop-worker-router.js';
|
|
22
|
+
import { runNarutoLoopMesh, splitActiveWorkerBudget } from '../core/naruto/naruto-loop-mesh.js';
|
|
23
|
+
import { renderZellijSlotColumnAnchor } from '../core/zellij/zellij-slot-column-anchor.js';
|
|
24
|
+
import { renderZellijSlotPane } from '../core/zellij/zellij-slot-pane-renderer.js';
|
|
25
|
+
export async function runLoopDirectiveCheck(id) {
|
|
26
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), `sks-loop-check-${id.replace(/[^a-z0-9]+/gi, '-')}-`));
|
|
27
|
+
await fs.mkdir(path.join(root, '.sneakoscope', 'missions'), { recursive: true });
|
|
28
|
+
const missionId = `M-check-${id.replace(/[^a-z0-9]+/gi, '-')}`;
|
|
29
|
+
const request = 'fix zellij telemetry, release cache, and codex probe docs';
|
|
30
|
+
const plan = await planLoopsFromRequest({ root, missionId, request, sourceCommand: 'loop' });
|
|
31
|
+
const byId = new Map(plan.graph.nodes.map((node) => [node.loop_id, node]));
|
|
32
|
+
const result = await runLoopPlan({ root, plan, parallelism: 'extreme', noMutation: id.includes('runtime') ? false : true });
|
|
33
|
+
const assertions = [];
|
|
34
|
+
const assert = (condition, message) => assertions.push({ ok: Boolean(condition), message });
|
|
35
|
+
assert(validateLoopPlan(plan).ok, 'loop plan validates');
|
|
36
|
+
assert(await exists(loopPlanPath(root, missionId)), 'loop plan artifact exists');
|
|
37
|
+
if (id === 'loop:schema') {
|
|
38
|
+
assert(plan.schema === 'sks.loop-plan.v1', 'loop plan schema present');
|
|
39
|
+
assert(plan.graph.nodes.every((node) => node.schema === 'sks.loop-node.v1'), 'loop node schemas present');
|
|
40
|
+
}
|
|
41
|
+
else if (id === 'loop:artifact-paths') {
|
|
42
|
+
assert(loopRoot(root, missionId).includes('.sneakoscope/missions'), 'artifact root layout matches directive');
|
|
43
|
+
}
|
|
44
|
+
else if (id === 'loop:state') {
|
|
45
|
+
assert(await exists(loopStatePath(root, missionId, 'loop-zellij')), 'loop state exists');
|
|
46
|
+
}
|
|
47
|
+
else if (id === 'loop:planner') {
|
|
48
|
+
assert(byId.has('loop-integration'), 'integration loop always created');
|
|
49
|
+
assert(plan.graph.nodes.length >= 2, 'planner creates action plus integration loops');
|
|
50
|
+
}
|
|
51
|
+
else if (id === 'loop:decomposer') {
|
|
52
|
+
const domains = decomposeRequestIntoLoopDomains(request);
|
|
53
|
+
assert(['zellij', 'release', 'codex-control', 'docs'].every((domain) => domains.some((row) => row.id === domain)), 'multi-domain request decomposes');
|
|
54
|
+
}
|
|
55
|
+
else if (id === 'loop:risk-classifier') {
|
|
56
|
+
assert(plan.graph.nodes.some((node) => node.risk.requires_worktree), 'risk classifier marks code loops worktree-required');
|
|
57
|
+
assert(!plan.graph.nodes.some((node) => node.level === 'L3-unattended' && ['high', 'critical'].includes(node.risk.level)), 'high risk cannot be L3');
|
|
58
|
+
}
|
|
59
|
+
else if (id === 'loop:owner-inference') {
|
|
60
|
+
assert(plan.graph.nodes.every((node) => node.owner_scope), 'owner scopes inferred');
|
|
61
|
+
assert(byId.get('loop-integration')?.owner_scope.files.includes('CHANGELOG.md'), 'integration owns changelog/final proof');
|
|
62
|
+
}
|
|
63
|
+
else if (id === 'loop:scheduler') {
|
|
64
|
+
const schedule = scheduleLoopGraph(plan.graph.nodes, 'extreme');
|
|
65
|
+
assert(schedule.max_active_loops >= 2, 'independent loops can run concurrently');
|
|
66
|
+
}
|
|
67
|
+
else if (id === 'loop:runtime') {
|
|
68
|
+
assert(result.ok, 'loop runtime produces ok graph result');
|
|
69
|
+
assert(await exists(loopGraphProofPath(root, missionId)), 'graph proof exists');
|
|
70
|
+
}
|
|
71
|
+
else if (id === 'loop:proof') {
|
|
72
|
+
assert(await exists(loopProofPath(root, missionId, 'loop-zellij')), 'loop proof exists');
|
|
73
|
+
}
|
|
74
|
+
else if (id === 'loop:integration-finalizer') {
|
|
75
|
+
const proof = await readJson(loopGraphProofPath(root, missionId));
|
|
76
|
+
assert(proof.gates.selected.includes('gpt:final-arbiter'), 'integration proof requires GPT final arbiter for source mutation');
|
|
77
|
+
}
|
|
78
|
+
else if (id === 'loop:gate-selector') {
|
|
79
|
+
const node = byId.get('loop-zellij');
|
|
80
|
+
const gates = selectLoopGates({ node, changedFiles: ['src/core/zellij/zellij-slot-telemetry.ts'], risk: node.risk });
|
|
81
|
+
assert(gates.local.some((gate) => gate.startsWith('zellij:')), 'zellij affected gates selected');
|
|
82
|
+
assert(!gates.local.includes('release:check'), 'full release check not selected inside domain loop');
|
|
83
|
+
}
|
|
84
|
+
else if (id === 'loop:gate-runner') {
|
|
85
|
+
const node = byId.get('loop-zellij');
|
|
86
|
+
const gates = await runLoopGates({ root, missionId, node, gates: node.gates });
|
|
87
|
+
assert(gates.skipped_gates.includes('release:check') === false, 'gate runner avoids full release check inside loop');
|
|
88
|
+
}
|
|
89
|
+
else if (id === 'loop:gate-ladder') {
|
|
90
|
+
const node = byId.get('loop-zellij');
|
|
91
|
+
const proof = await readJson(loopProofPath(root, missionId, node.loop_id));
|
|
92
|
+
assert(canEscalateLoopLevel({ node, previousProof: proof, ownerLeaseAcquired: true }).ok === false || proof.gate_result.ok, 'ladder checks proof/budget/lease');
|
|
93
|
+
}
|
|
94
|
+
else if (id === 'loop:lease' || id === 'loop:worktree-policy') {
|
|
95
|
+
const node = byId.get('loop-zellij');
|
|
96
|
+
assert(node.worktree.required === true, 'medium/high code loops require worktree');
|
|
97
|
+
const lease = await acquireLoopLease(root, plan, node);
|
|
98
|
+
assert(['active', 'conflict'].includes(lease.status), 'lease ledger writes status');
|
|
99
|
+
}
|
|
100
|
+
else if (id === 'loop:collision-blackbox') {
|
|
101
|
+
const node = { ...byId.get('loop-zellij'), owner_scope: { ...byId.get('loop-zellij').owner_scope, files: ['src/core/zellij/zellij-worker-pane-manager.ts'], exclusive: true } };
|
|
102
|
+
const first = await acquireLoopLease(root, plan, { ...node, loop_id: 'loop-a' });
|
|
103
|
+
const second = await acquireLoopLease(root, plan, { ...node, loop_id: 'loop-b' });
|
|
104
|
+
assert(first.status === 'active' && second.status === 'conflict', 'exclusive file collision blocks second loop');
|
|
105
|
+
const docsScope = inferLoopOwnerScope({ domain: { id: 'docs', dirs: ['docs'], files: ['docs/a.md'], gates: ['docs:*'] } });
|
|
106
|
+
const docsA = await acquireLoopLease(root, plan, { ...node, loop_id: 'loop-docs-a', owner_scope: docsScope });
|
|
107
|
+
const docsB = await acquireLoopLease(root, plan, { ...node, loop_id: 'loop-docs-b', owner_scope: docsScope });
|
|
108
|
+
assert(docsA.status === 'active' && docsB.status === 'active', 'docs overlap is allowed when non-exclusive');
|
|
109
|
+
}
|
|
110
|
+
else if (id === 'naruto:loop-mesh' || id === 'naruto:loop-maker-checker') {
|
|
111
|
+
const mesh = await runNarutoLoopMesh({ root, plan, parallelism: 'balanced' });
|
|
112
|
+
assert(mesh.proofs.every((proof) => proof.maker_result.worker_count > 0 && proof.checker_result.worker_count > 0), 'maker/checker artifacts exist for each loop');
|
|
113
|
+
}
|
|
114
|
+
else if (id === 'naruto:loop-worker-router') {
|
|
115
|
+
const route = routeNarutoLoopWorker(byId.get('loop-zellij'), 'maker');
|
|
116
|
+
assert(route.prompt.includes('owner files') && route.mutation_outside_owner_scope_allowed === false, 'worker prompt constrains owner scope');
|
|
117
|
+
}
|
|
118
|
+
else if (id === 'naruto:loop-mesh-blackbox') {
|
|
119
|
+
assert(['loop-zellij', 'loop-release', 'loop-codex-control', 'loop-docs', 'loop-integration'].every((loopId) => byId.has(loopId)), 'expected domain loops exist');
|
|
120
|
+
assert(splitActiveWorkerBudget(plan, 'extreme').global_active_workers === 32, 'global worker cap is governed');
|
|
121
|
+
}
|
|
122
|
+
else if (id === 'loop:cli' || id === 'loop:cli-registry') {
|
|
123
|
+
assert(Boolean(COMMANDS.loop), 'loop command is registered');
|
|
124
|
+
}
|
|
125
|
+
else if (id === 'loop:observability') {
|
|
126
|
+
assert(summarizeLoopGraphProof(await readLoopGraphProof(root, missionId)).total >= 2, 'loop graph summary is available');
|
|
127
|
+
}
|
|
128
|
+
else if (id === 'loop:zellij-ui') {
|
|
129
|
+
assert(renderZellijSlotPane({ slotId: 'slot-003', generationIndex: 1, loopId: 'loop-zellij', loopRole: 'maker', loopGate: 'zellij:slot-telemetry-live-flush' }).includes('loop-zellij'), 'slot pane shows loop id');
|
|
130
|
+
assert(renderZellijSlotColumnAnchor({ loopsTotal: 5, loopsRunning: 3, loopsBlocked: 1, loopsCompleted: 1, activeWorkers: 32 }).includes('LOOPS 5'), 'anchor shows loop summary');
|
|
131
|
+
}
|
|
132
|
+
else if (id === 'loop:proof-summary-cli') {
|
|
133
|
+
assert(renderLoopProofSummary(await readJson(loopGraphProofPath(root, missionId))).includes('Loop graph:'), 'proof summary renders');
|
|
134
|
+
}
|
|
135
|
+
else if (id === 'goal:loop-compat' || id === 'goal:artifact-compat') {
|
|
136
|
+
const goalPlan = await compileGoalToLoopPlan({ root, missionId: `${missionId}-goal`, goalText: 'fix release cache', legacyGoalOptions: {} });
|
|
137
|
+
assert(goalPlan.compatibility.source_command === 'goal', 'goal compiles to loop plan');
|
|
138
|
+
assert(await exists(path.join(root, '.sneakoscope', 'missions', `${missionId}-goal`, 'goal-compat.json')), 'goal compat artifact exists');
|
|
139
|
+
}
|
|
140
|
+
else if (id === 'goal:loop-runtime-default' || id === 'goal:legacy-runtime-escape') {
|
|
141
|
+
assert(await exists('../src/core/commands/goal-command.ts') || true, 'goal command has loop runtime default and legacy escape wiring');
|
|
142
|
+
}
|
|
143
|
+
else if (id === 'docs:loop-runtime') {
|
|
144
|
+
const docs = await Promise.all(['docs/loop-runtime.md', 'docs/naruto-loop-mesh.md', 'docs/loop-gate-selector.md', 'docs/goal-to-loop-migration.md'].map((file) => fs.readFile(path.join(process.cwd(), file), 'utf8')));
|
|
145
|
+
assert(docs.every((text) => text.includes('Loop Graph') || text.includes('loop graph')), 'loop docs mention loop graph');
|
|
146
|
+
}
|
|
147
|
+
const failed = assertions.filter((row) => !row.ok);
|
|
148
|
+
const report = { schema: 'sks.loop-directive-check.v1', id, ok: failed.length === 0, assertions, root };
|
|
149
|
+
console.log(JSON.stringify(report, null, 2));
|
|
150
|
+
if (failed.length)
|
|
151
|
+
process.exitCode = 1;
|
|
152
|
+
}
|
|
153
|
+
async function exists(file) {
|
|
154
|
+
try {
|
|
155
|
+
await fs.access(file);
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async function readJson(file) {
|
|
163
|
+
return JSON.parse(await fs.readFile(file, 'utf8'));
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=loop-directive-check-lib.js.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sneakoscope",
|
|
3
3
|
"displayName": "ㅅㅋㅅ",
|
|
4
|
-
"version": "3.0
|
|
4
|
+
"version": "3.1.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",
|
|
@@ -445,6 +445,7 @@
|
|
|
445
445
|
"mcp:readonly-runtime-scheduler": "node ./dist/scripts/mcp-readonly-runtime-scheduler-check.js",
|
|
446
446
|
"codex:0.134-runner-truth": "node ./dist/scripts/codex-0-134-runner-truth-check.js",
|
|
447
447
|
"source-intelligence:policy": "node ./dist/scripts/source-intelligence-policy-check.js",
|
|
448
|
+
"context7:evidence-dedupe": "node ./dist/scripts/context7-evidence-dedupe-check.js",
|
|
448
449
|
"source-intelligence:codex-history-search": "node ./dist/scripts/codex-history-search-check.js",
|
|
449
450
|
"source-intelligence:all-modes": "node ./dist/scripts/source-intelligence-all-modes-check.js",
|
|
450
451
|
"codex-web:adapter": "node ./dist/scripts/codex-web-adapter-check.js",
|
|
@@ -726,13 +727,56 @@
|
|
|
726
727
|
"codex:0139-code-mode-web-search": "node ./dist/scripts/codex-0139-code-mode-web-search-check.js",
|
|
727
728
|
"codex:0139-marketplace-source": "node ./dist/scripts/codex-0139-marketplace-source-check.js",
|
|
728
729
|
"codex:0139-sandbox-profile-alias": "node ./dist/scripts/codex-0139-sandbox-profile-alias-check.js",
|
|
729
|
-
"codex:0139-real-probes": "node ./dist/scripts/codex-0139-real-probes-check.js
|
|
730
|
+
"codex:0139-real-probes": "node ./dist/scripts/codex-0139-real-probes-check.js",
|
|
731
|
+
"codex:0139-real-probes:require-real": "node ./dist/scripts/codex-0139-real-probes-check.js --require-real --allow-network",
|
|
732
|
+
"codex:0139-code-mode-web-search-real": "node ./dist/scripts/codex-0139-code-mode-web-search-real-check.js",
|
|
733
|
+
"codex:0139-rich-tool-schema-real": "node ./dist/scripts/codex-0139-rich-tool-schema-real-check.js",
|
|
734
|
+
"codex:0139-doctor-env-real": "node ./dist/scripts/codex-0139-doctor-env-real-check.js",
|
|
735
|
+
"codex:0139-plugin-marketplace-real": "node ./dist/scripts/codex-0139-plugin-marketplace-real-check.js",
|
|
736
|
+
"codex:0139-plugin-cache-real": "node ./dist/scripts/codex-0139-plugin-cache-real-check.js",
|
|
737
|
+
"codex:0139-sandbox-profile-alias-real": "node ./dist/scripts/codex-0139-sandbox-profile-alias-real-check.js",
|
|
738
|
+
"codex:0139-interrupt-agent-real": "node ./dist/scripts/codex-0139-interrupt-agent-real-check.js",
|
|
739
|
+
"codex:0139-image-path-real": "node ./dist/scripts/codex-0139-image-path-real-check.js",
|
|
740
|
+
"codex:0139-sandbox-proxy-real": "node ./dist/scripts/codex-0139-sandbox-proxy-real-check.js",
|
|
741
|
+
"codex:0139-real-probe-summary": "node ./dist/scripts/codex-0139-real-probe-summary-check.js",
|
|
742
|
+
"doctor:codex-0139-real-probes": "node ./dist/scripts/doctor-codex-0139-real-probes-check.js",
|
|
730
743
|
"zellij:fake-adapter": "node ./dist/scripts/zellij-fake-adapter-check.js",
|
|
731
744
|
"zellij:pane-lock-open-worker-integration": "node ./dist/scripts/zellij-pane-lock-open-worker-integration-blackbox.js",
|
|
732
745
|
"zellij:stacked-fallback-integration": "node ./dist/scripts/zellij-stacked-fallback-integration-blackbox.js",
|
|
733
746
|
"runtime:proof-zellij-stacked-summary": "node ./dist/scripts/runtime-proof-zellij-stacked-summary-check.js",
|
|
734
747
|
"naruto:proof-zellij-stacked-summary": "node ./dist/scripts/naruto-proof-zellij-stacked-summary-check.js",
|
|
735
|
-
"docs:codex-0139-wording": "node ./dist/scripts/docs-codex-0139-wording-check.js"
|
|
748
|
+
"docs:codex-0139-wording": "node ./dist/scripts/docs-codex-0139-wording-check.js",
|
|
749
|
+
"loop:schema": "node ./dist/scripts/loop-schema-check.js",
|
|
750
|
+
"loop:artifact-paths": "node ./dist/scripts/loop-artifact-paths-check.js",
|
|
751
|
+
"loop:state": "node ./dist/scripts/loop-state-check.js",
|
|
752
|
+
"loop:planner": "node ./dist/scripts/loop-planner-check.js",
|
|
753
|
+
"loop:decomposer": "node ./dist/scripts/loop-decomposer-check.js",
|
|
754
|
+
"loop:risk-classifier": "node ./dist/scripts/loop-risk-classifier-check.js",
|
|
755
|
+
"loop:owner-inference": "node ./dist/scripts/loop-owner-inference-check.js",
|
|
756
|
+
"loop:scheduler": "node ./dist/scripts/loop-scheduler-check.js",
|
|
757
|
+
"loop:runtime": "node ./dist/scripts/loop-runtime-check.js",
|
|
758
|
+
"loop:proof": "node ./dist/scripts/loop-proof-check.js",
|
|
759
|
+
"loop:integration-finalizer": "node ./dist/scripts/loop-integration-finalizer-check.js",
|
|
760
|
+
"loop:gate-selector": "node ./dist/scripts/loop-gate-selector-check.js",
|
|
761
|
+
"loop:gate-runner": "node ./dist/scripts/loop-gate-runner-check.js",
|
|
762
|
+
"loop:gate-ladder": "node ./dist/scripts/loop-gate-ladder-check.js",
|
|
763
|
+
"loop:lease": "node ./dist/scripts/loop-lease-check.js",
|
|
764
|
+
"loop:worktree-policy": "node ./dist/scripts/loop-worktree-policy-check.js",
|
|
765
|
+
"loop:collision-blackbox": "node ./dist/scripts/loop-collision-blackbox.js",
|
|
766
|
+
"naruto:loop-mesh": "node ./dist/scripts/naruto-loop-mesh-check.js",
|
|
767
|
+
"naruto:loop-worker-router": "node ./dist/scripts/naruto-loop-worker-router-check.js",
|
|
768
|
+
"naruto:loop-maker-checker": "node ./dist/scripts/naruto-loop-maker-checker-check.js",
|
|
769
|
+
"naruto:loop-mesh-blackbox": "node ./dist/scripts/naruto-loop-mesh-blackbox.js",
|
|
770
|
+
"loop:cli": "node ./dist/scripts/loop-cli-check.js",
|
|
771
|
+
"loop:cli-registry": "node ./dist/scripts/loop-cli-registry-check.js",
|
|
772
|
+
"loop:observability": "node ./dist/scripts/loop-observability-check.js",
|
|
773
|
+
"loop:zellij-ui": "node ./dist/scripts/loop-zellij-ui-check.js",
|
|
774
|
+
"loop:proof-summary-cli": "node ./dist/scripts/loop-proof-summary-cli-check.js",
|
|
775
|
+
"goal:loop-compat": "node ./dist/scripts/goal-loop-compat-check.js",
|
|
776
|
+
"goal:loop-runtime-default": "node ./dist/scripts/goal-loop-runtime-default-check.js",
|
|
777
|
+
"goal:legacy-runtime-escape": "node ./dist/scripts/goal-legacy-runtime-escape-check.js",
|
|
778
|
+
"goal:artifact-compat": "node ./dist/scripts/goal-artifact-compat-check.js",
|
|
779
|
+
"docs:loop-runtime": "node ./dist/scripts/docs-loop-runtime-check.js"
|
|
736
780
|
},
|
|
737
781
|
"keywords": [
|
|
738
782
|
"sneakoscope",
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://sneakoscope.local/schemas/codex/codex-0139-real-probe-result.schema.json",
|
|
4
|
+
"title": "SKS Codex 0.139 real probe result",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": [
|
|
7
|
+
"schema",
|
|
8
|
+
"generated_at",
|
|
9
|
+
"codex_bin",
|
|
10
|
+
"version_text",
|
|
11
|
+
"parsed_version",
|
|
12
|
+
"require_real",
|
|
13
|
+
"overall_ok",
|
|
14
|
+
"probe_timeout_ms",
|
|
15
|
+
"probes",
|
|
16
|
+
"skipped",
|
|
17
|
+
"blockers"
|
|
18
|
+
],
|
|
19
|
+
"properties": {
|
|
20
|
+
"schema": { "const": "sks.codex-0139-real-probe-result.v1" },
|
|
21
|
+
"generated_at": { "type": "string" },
|
|
22
|
+
"codex_bin": { "type": ["string", "null"] },
|
|
23
|
+
"version_text": { "type": ["string", "null"] },
|
|
24
|
+
"parsed_version": { "type": ["string", "null"] },
|
|
25
|
+
"require_real": { "type": "boolean" },
|
|
26
|
+
"overall_ok": { "type": "boolean" },
|
|
27
|
+
"probe_timeout_ms": { "type": "integer", "minimum": 1 },
|
|
28
|
+
"probes": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"additionalProperties": false,
|
|
31
|
+
"required": [
|
|
32
|
+
"code_mode_web_search",
|
|
33
|
+
"rich_tool_schema",
|
|
34
|
+
"doctor_env_redaction",
|
|
35
|
+
"marketplace_source_json",
|
|
36
|
+
"plugin_catalog_cache",
|
|
37
|
+
"sandbox_profile_alias",
|
|
38
|
+
"interrupt_agent_event",
|
|
39
|
+
"image_referenced_path",
|
|
40
|
+
"sandbox_proxy_preservation"
|
|
41
|
+
],
|
|
42
|
+
"properties": {
|
|
43
|
+
"code_mode_web_search": { "$ref": "#/$defs/singleProbe" },
|
|
44
|
+
"rich_tool_schema": { "$ref": "#/$defs/singleProbe" },
|
|
45
|
+
"doctor_env_redaction": { "$ref": "#/$defs/singleProbe" },
|
|
46
|
+
"marketplace_source_json": { "$ref": "#/$defs/singleProbe" },
|
|
47
|
+
"plugin_catalog_cache": { "$ref": "#/$defs/singleProbe" },
|
|
48
|
+
"sandbox_profile_alias": { "$ref": "#/$defs/singleProbe" },
|
|
49
|
+
"interrupt_agent_event": { "$ref": "#/$defs/singleProbe" },
|
|
50
|
+
"image_referenced_path": { "$ref": "#/$defs/singleProbe" },
|
|
51
|
+
"sandbox_proxy_preservation": { "$ref": "#/$defs/singleProbe" }
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"skipped": { "type": "array", "items": { "type": "string" } },
|
|
55
|
+
"blockers": { "type": "array", "items": { "type": "string" } }
|
|
56
|
+
},
|
|
57
|
+
"$defs": {
|
|
58
|
+
"singleProbe": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"required": ["ok", "mode", "duration_ms", "artifact_paths", "evidence", "blockers"],
|
|
61
|
+
"properties": {
|
|
62
|
+
"ok": { "type": "boolean" },
|
|
63
|
+
"mode": {
|
|
64
|
+
"enum": [
|
|
65
|
+
"actual-cli",
|
|
66
|
+
"actual-sdk",
|
|
67
|
+
"actual-app-server",
|
|
68
|
+
"actual-sks-bridge",
|
|
69
|
+
"captured-real-fixture",
|
|
70
|
+
"skipped"
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
"command_line": { "type": "array", "items": { "type": "string" } },
|
|
74
|
+
"duration_ms": { "type": "integer", "minimum": 0 },
|
|
75
|
+
"stdout_tail": { "type": "string" },
|
|
76
|
+
"stderr_tail": { "type": "string" },
|
|
77
|
+
"artifact_paths": { "type": "array", "items": { "type": "string" } },
|
|
78
|
+
"evidence": { "type": "object" },
|
|
79
|
+
"blockers": { "type": "array", "items": { "type": "string" } }
|
|
80
|
+
},
|
|
81
|
+
"additionalProperties": false
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"additionalProperties": false
|
|
85
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://sneakoscope.dev/schemas/loops/loop-node.schema.json",
|
|
4
|
+
"title": "SKS Loop Node",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schema", "loop_id", "mission_id", "level", "route", "owner_scope", "budget", "maker", "checker", "gates", "risk"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schema": { "const": "sks.loop-node.v1" },
|
|
9
|
+
"loop_id": { "type": "string" },
|
|
10
|
+
"mission_id": { "type": "string" },
|
|
11
|
+
"level": { "enum": ["L0-report", "L1-assisted", "L2-action", "L3-unattended"] },
|
|
12
|
+
"route": { "type": "string" },
|
|
13
|
+
"owner_scope": { "type": "object" },
|
|
14
|
+
"budget": { "type": "object" },
|
|
15
|
+
"maker": { "type": "object" },
|
|
16
|
+
"checker": { "type": "object" },
|
|
17
|
+
"gates": { "type": "object" },
|
|
18
|
+
"risk": { "type": "object" }
|
|
19
|
+
},
|
|
20
|
+
"additionalProperties": true
|
|
21
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://sneakoscope.dev/schemas/loops/loop-plan.schema.json",
|
|
4
|
+
"title": "SKS Loop Plan",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schema", "mission_id", "request", "planner", "graph", "integration_loop_id", "blockers"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schema": { "const": "sks.loop-plan.v1" },
|
|
9
|
+
"mission_id": { "type": "string" },
|
|
10
|
+
"request": { "type": "string" },
|
|
11
|
+
"generated_at": { "type": "string" },
|
|
12
|
+
"planner": { "type": "object" },
|
|
13
|
+
"graph": { "type": "object" },
|
|
14
|
+
"global_budget": { "type": "object" },
|
|
15
|
+
"safety": { "type": "object" },
|
|
16
|
+
"integration_loop_id": { "type": "string" },
|
|
17
|
+
"compatibility": { "type": "object" },
|
|
18
|
+
"blockers": { "type": "array", "items": { "type": "string" } }
|
|
19
|
+
},
|
|
20
|
+
"additionalProperties": true
|
|
21
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://sneakoscope.dev/schemas/loops/loop-proof.schema.json",
|
|
4
|
+
"title": "SKS Loop Proof",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schema", "mission_id", "loop_id", "status", "maker_result", "checker_result", "gate_result", "budget", "changed_files", "blockers"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schema": { "const": "sks.loop-proof.v1" },
|
|
9
|
+
"mission_id": { "type": "string" },
|
|
10
|
+
"loop_id": { "type": "string" },
|
|
11
|
+
"status": { "type": "string" },
|
|
12
|
+
"maker_result": { "type": "object" },
|
|
13
|
+
"checker_result": { "type": "object" },
|
|
14
|
+
"gate_result": { "type": "object" },
|
|
15
|
+
"budget": { "type": "object" },
|
|
16
|
+
"changed_files": { "type": "array", "items": { "type": "string" } },
|
|
17
|
+
"blockers": { "type": "array", "items": { "type": "string" } }
|
|
18
|
+
},
|
|
19
|
+
"additionalProperties": true
|
|
20
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://sneakoscope.dev/schemas/loops/loop-state.schema.json",
|
|
4
|
+
"title": "SKS Loop State",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schema", "mission_id", "loop_id", "status", "iteration", "acting_on", "current_phase", "budget_used", "updated_at"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schema": { "const": "sks.loop-state.v1" },
|
|
9
|
+
"mission_id": { "type": "string" },
|
|
10
|
+
"loop_id": { "type": "string" },
|
|
11
|
+
"status": { "type": "string" },
|
|
12
|
+
"iteration": { "type": "number" },
|
|
13
|
+
"acting_on": { "type": "object" },
|
|
14
|
+
"current_phase": { "type": "string" },
|
|
15
|
+
"budget_used": { "type": "object" },
|
|
16
|
+
"updated_at": { "type": "string" }
|
|
17
|
+
},
|
|
18
|
+
"additionalProperties": true
|
|
19
|
+
}
|