sneakoscope 4.8.6 → 5.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -726
- package/bench/tasks/t01-off-by-one/repo/package.json +9 -0
- package/bench/tasks/t01-off-by-one/repo/src/pagination.js +5 -0
- package/bench/tasks/t01-off-by-one/repo/test.js +5 -0
- package/bench/tasks/t01-off-by-one/task.json +13 -0
- package/bench/tasks/t02-signature-cochange/repo/package.json +9 -0
- package/bench/tasks/t02-signature-cochange/repo/src/admin.js +5 -0
- package/bench/tasks/t02-signature-cochange/repo/src/audit.js +5 -0
- package/bench/tasks/t02-signature-cochange/repo/src/labels.js +3 -0
- package/bench/tasks/t02-signature-cochange/repo/src/profile.js +5 -0
- package/bench/tasks/t02-signature-cochange/repo/test.js +9 -0
- package/bench/tasks/t02-signature-cochange/task.json +12 -0
- package/bench/tasks/t03-type-puzzle/repo/package.json +9 -0
- package/bench/tasks/t03-type-puzzle/repo/src/config.js +4 -0
- package/bench/tasks/t03-type-puzzle/repo/test.js +6 -0
- package/bench/tasks/t03-type-puzzle/task.json +13 -0
- package/bench/tasks/t04-refactor-preserve/repo/package.json +9 -0
- package/bench/tasks/t04-refactor-preserve/repo/src/cart.js +8 -0
- package/bench/tasks/t04-refactor-preserve/repo/test.js +4 -0
- package/bench/tasks/t04-refactor-preserve/task.json +12 -0
- package/bench/tasks/t05-performance/repo/package.json +9 -0
- package/bench/tasks/t05-performance/repo/src/pairs.js +9 -0
- package/bench/tasks/t05-performance/repo/test.js +11 -0
- package/bench/tasks/t05-performance/task.json +12 -0
- package/bench/tasks/t06-mistake-rule/repo/package.json +9 -0
- package/bench/tasks/t06-mistake-rule/repo/src/loader.js +6 -0
- package/bench/tasks/t06-mistake-rule/repo/test.js +7 -0
- package/bench/tasks/t06-mistake-rule/task.json +12 -0
- package/config/bench-baseline.json +7 -0
- package/crates/sks-core/Cargo.lock +1 -1
- package/crates/sks-core/Cargo.toml +1 -1
- package/crates/sks-core/src/main.rs +1 -1
- package/dist/bin/install.js +35 -0
- package/dist/bin/sks.js +1 -1
- package/dist/cli/cli-theme.js +51 -0
- package/dist/cli/command-registry.js +75 -42
- package/dist/cli/help-fast.js +18 -8
- package/dist/cli/insane-search-command.js +36 -8
- package/dist/cli/install-helpers.js +147 -47
- package/dist/cli/router.js +58 -2
- package/dist/commands/codex-lb.js +6 -4
- package/dist/commands/doctor.js +146 -8
- package/dist/commands/proof.js +6 -3
- package/dist/commands/zellij-monitor-pane.js +25 -0
- package/dist/commands/zellij-slot-pane.js +39 -2
- package/dist/commands/zellij-viewport-pane.js +56 -0
- package/dist/commands/zellij.js +55 -2
- package/dist/config/skills-manifest.json +493 -0
- package/dist/core/agents/agent-conflict-graph.js +5 -0
- package/dist/core/agents/agent-lease.js +5 -0
- package/dist/core/agents/agent-ledger-schemas.js +1 -0
- package/dist/core/agents/agent-lifecycle.js +86 -35
- package/dist/core/agents/agent-orchestrator.js +287 -72
- package/dist/core/agents/agent-output-validator.js +14 -3
- package/dist/core/agents/agent-patch-queue-store.js +108 -4
- package/dist/core/agents/agent-patch-queue.js +10 -3
- package/dist/core/agents/agent-patch-schema.js +13 -0
- package/dist/core/agents/agent-proof-evidence.js +6 -1
- package/dist/core/agents/agent-runner-fake.js +40 -0
- package/dist/core/agents/agent-scheduler.js +2 -3
- package/dist/core/agents/agent-worker-pipeline.js +36 -2
- package/dist/core/agents/codex-exec-worker-adapter.js +2 -0
- package/dist/core/agents/native-cli-session-swarm.js +30 -13
- package/dist/core/agents/native-cli-worker.js +2 -1
- package/dist/core/agents/native-worker-backend-router.js +58 -1
- package/dist/core/auto-review.js +25 -4
- package/dist/core/codex/agent-config-file-repair.js +15 -2
- package/dist/core/codex/codex-config-eperm-repair.js +8 -2
- package/dist/core/codex/codex-config-guard.js +289 -0
- package/dist/core/codex/codex-config-toml.js +122 -0
- package/dist/core/codex/codex-project-config-policy.js +59 -7
- package/dist/core/codex-app/sks-menubar.js +780 -122
- package/dist/core/codex-app.js +1 -0
- package/dist/core/codex-control/codex-fake-sdk-adapter.js +6 -4
- package/dist/core/codex-control/codex-sdk-config-policy.js +2 -1
- package/dist/core/codex-control/codex-sdk-env-policy.js +1 -1
- package/dist/core/codex-control/codex-task-runner.js +32 -14
- package/dist/core/codex-control/python-codex-sdk-adapter.js +4 -1
- package/dist/core/codex-control/schemas/agent-worker-result.schema.js +12 -3
- package/dist/core/codex-hooks/codex-hook-managed-install.js +5 -0
- package/dist/core/codex-hooks/codex-hook-state-writer.js +70 -11
- package/dist/core/codex-hooks/codex-hook-trust-doctor.js +2 -2
- package/dist/core/codex-lb/codex-lb-env.js +20 -1
- package/dist/core/codex-lb/codex-lb-setup.js +2 -5
- package/dist/core/codex-native/skill-registry-ledger.js +24 -5
- package/dist/core/commands/basic-cli.js +21 -2
- package/dist/core/commands/check-command.js +37 -5
- package/dist/core/commands/command-utils.js +22 -2
- package/dist/core/commands/computer-use-command.js +62 -7
- package/dist/core/commands/db-command.js +31 -5
- package/dist/core/commands/fast-mode-command.js +39 -11
- package/dist/core/commands/gate-result-contract.js +43 -0
- package/dist/core/commands/gates-command.js +6 -1
- package/dist/core/commands/gc-command.js +29 -2
- package/dist/core/commands/goal-command.js +9 -2
- package/dist/core/commands/gx-command.js +79 -7
- package/dist/core/commands/image-ux-review-command.js +188 -13
- package/dist/core/commands/mad-db-command.js +85 -176
- package/dist/core/commands/mad-sks-command.js +248 -34
- package/dist/core/commands/menubar-command.js +146 -0
- package/dist/core/commands/naruto-command.js +64 -10
- package/dist/core/commands/pipeline-command.js +21 -2
- package/dist/core/commands/plan-command.js +76 -0
- package/dist/core/commands/ppt-command.js +159 -24
- package/dist/core/commands/qa-loop-command.js +6 -2
- package/dist/core/commands/release-command.js +55 -2
- package/dist/core/commands/research-command.js +1 -1
- package/dist/core/commands/review-command.js +217 -0
- package/dist/core/commands/route-command.js +62 -0
- package/dist/core/commands/route-success-helpers.js +59 -0
- package/dist/core/commands/run-command.js +19 -7
- package/dist/core/commands/seo-command.js +49 -1
- package/dist/core/commands/status-command.js +21 -1
- package/dist/core/commands/team-legacy-observe-command.js +221 -3
- package/dist/core/commands/ui-command.js +161 -0
- package/dist/core/commands/uninstall-command.js +312 -0
- package/dist/core/db-safety.js +7 -3
- package/dist/core/doctor/codex-startup-config-repair.js +14 -3
- package/dist/core/doctor/confirm-repair.js +27 -0
- package/dist/core/doctor/context7-mcp-repair.js +35 -7
- package/dist/core/doctor/doctor-codex-startup-repair.js +10 -3
- package/dist/core/doctor/doctor-context7-repair.js +17 -4
- package/dist/core/doctor/doctor-dirty-planner.js +27 -9
- package/dist/core/doctor/doctor-native-capability-repair.js +12 -2
- package/dist/core/doctor/doctor-readiness-matrix.js +27 -2
- package/dist/core/doctor/doctor-repair-postcheck.js +4 -0
- package/dist/core/doctor/doctor-transaction.js +21 -5
- package/dist/core/doctor/doctor-zellij-repair.js +1 -0
- package/dist/core/doctor/imagegen-repair.js +161 -0
- package/dist/core/doctor/supabase-mcp-repair.js +23 -5
- package/dist/core/feature-fixture-runner.js +2 -2
- package/dist/core/feature-fixtures.js +65 -37
- package/dist/core/feature-registry.js +106 -3
- package/dist/core/fsx.js +91 -2
- package/dist/core/hooks-runtime/skill-reconcile-preflight.js +43 -0
- package/dist/core/hooks-runtime.js +86 -46
- package/dist/core/image-ux-review/imagegen-adapter.js +48 -11
- package/dist/core/image-ux-review.js +16 -0
- package/dist/core/imagegen/imagegen-capability.js +11 -5
- package/dist/core/imagegen/require-imagegen.js +57 -0
- package/dist/core/init/skills.js +271 -14
- package/dist/core/init.js +13 -10
- package/dist/core/mad-db/mad-db-coordinator.js +96 -20
- package/dist/core/mad-db/mad-db-policy.js +12 -10
- package/dist/core/mad-sks/executors/executor-base.js +8 -2
- package/dist/core/mad-sks/executors/index.js +4 -0
- package/dist/core/mad-sks/executors/sql-plane-executor.js +194 -0
- package/dist/core/mission.js +138 -5
- package/dist/core/naruto/naruto-active-pool.js +84 -30
- package/dist/core/naruto/naruto-backpressure.js +5 -1
- package/dist/core/naruto/naruto-real-worker-child.js +10 -0
- package/dist/core/naruto/naruto-real-worker-runtime.js +9 -7
- package/dist/core/naruto/naruto-role-policy.js +3 -0
- package/dist/core/naruto/naruto-task-hints.js +10 -0
- package/dist/core/naruto/naruto-work-graph.js +8 -2
- package/dist/core/naruto/naruto-work-item.js +6 -0
- package/dist/core/naruto/resource-pressure-monitor.js +33 -15
- package/dist/core/naruto/solution-tournament.js +101 -0
- package/dist/core/permission-gates.js +30 -0
- package/dist/core/pipeline-internals/runtime-core.js +72 -222
- package/dist/core/pipeline-internals/runtime-gates.js +140 -24
- package/dist/core/ppt-review/index.js +6 -1
- package/dist/core/ppt-review/slide-imagegen-review.js +75 -10
- package/dist/core/ppt.js +70 -2
- package/dist/core/proof/auto-finalize.js +70 -11
- package/dist/core/proof/proof-schema.js +2 -0
- package/dist/core/proof/route-adapter.js +5 -1
- package/dist/core/proof/route-finalizer.js +8 -5
- package/dist/core/proof/selftest-proof-fixtures.js +18 -5
- package/dist/core/proof/validation.js +2 -0
- package/dist/core/provider/model-router.js +53 -0
- package/dist/core/questions.js +1 -1
- package/dist/core/recallpulse.js +1 -1
- package/dist/core/release/gate-manifest.js +2 -2
- package/dist/core/release/release-gate-affected-selector.js +3 -10
- package/dist/core/release/release-gate-batch-runner.js +4 -2
- package/dist/core/release/release-gate-cache-v2.js +27 -14
- package/dist/core/release/release-gate-dag.js +6 -1
- package/dist/core/release/release-gate-hermetic-env.js +10 -0
- package/dist/core/release/release-gate-node.js +3 -0
- package/dist/core/release/release-gate-resource-governor.js +1 -0
- package/dist/core/retention.js +89 -4
- package/dist/core/routes/constants.js +1 -1
- package/dist/core/routes/diagnostic-allowlist.js +55 -0
- package/dist/core/routes.js +83 -33
- package/dist/core/safety/mutation-guard.js +5 -1
- package/dist/core/skill-forge.js +9 -4
- package/dist/core/stop-gate/gate-evaluator.js +102 -0
- package/dist/core/stop-gate/stop-gate-check.js +26 -4
- package/dist/core/stop-gate/stop-gate-resolver.js +19 -3
- package/dist/core/stop-gate/stop-gate-writer.js +20 -1
- package/dist/core/team-dag.js +12 -465
- package/dist/core/team-dashboard-renderer.js +13 -94
- package/dist/core/team-live.js +68 -804
- package/dist/core/triwiki/agents-md-projector.js +184 -0
- package/dist/core/triwiki-wrongness/wrongness-schema.js +3 -1
- package/dist/core/trust-kernel/trust-kernel-schema.js +1 -0
- package/dist/core/trust-kernel/trust-report.js +1 -1
- package/dist/core/trust-kernel/trust-status.js +2 -0
- package/dist/core/ui/dashboard-html.js +111 -0
- package/dist/core/update/update-migration-state.js +383 -42
- package/dist/core/update-check.js +201 -78
- package/dist/core/verification/diff-quality.js +100 -0
- package/dist/core/verification/impact-scan.js +164 -0
- package/dist/core/verification/machine-feedback.js +146 -0
- package/dist/core/verification/mistake-rule-compiler.js +195 -0
- package/dist/core/version.js +1 -1
- package/dist/core/zellij/zellij-layout-builder.js +44 -16
- package/dist/core/zellij/zellij-monitor-renderer.js +53 -0
- package/dist/core/zellij/zellij-self-heal.js +27 -32
- package/dist/core/zellij/zellij-slot-pane-renderer.js +162 -153
- package/dist/core/zellij/zellij-slot-telemetry.js +2 -0
- package/dist/core/zellij/zellij-theme.js +67 -0
- package/dist/core/zellij/zellij-ui-mode.js +16 -0
- package/dist/core/zellij/zellij-viewport-binder.js +59 -0
- package/dist/core/zellij/zellij-worker-pane-manager.js +53 -5
- package/dist/scripts/agent-patch-swarm-gate-lib.js +2 -2
- package/dist/scripts/build-dist.js +8 -0
- package/dist/scripts/check-feature-quality.js +2 -2
- package/dist/scripts/cli-output-consistency-check.js +57 -0
- package/dist/scripts/codex-lb-fast-ui-preservation-check.js +106 -0
- package/dist/scripts/codex-lb-gpt55-fast-profile-check.js +105 -0
- package/dist/scripts/codex-lb-missing-env-regression.js +2 -3
- package/dist/scripts/codex-project-config-policy-merge-regression.js +3 -3
- package/dist/scripts/coding-bench-check.js +136 -0
- package/dist/scripts/concurrent-session-collision-check.js +67 -0
- package/dist/scripts/docs-truthfulness-check.js +1 -1
- package/dist/scripts/doctor-imagegen-repair-check.js +62 -0
- package/dist/scripts/ensure-bin-executable.js +11 -3
- package/dist/scripts/gate-policy-audit-check.js +130 -0
- package/dist/scripts/harness-benchmark-check.js +104 -0
- package/dist/scripts/hook-latency-budget-check.js +45 -0
- package/dist/scripts/legacy-update-e2e-check.js +228 -0
- package/dist/scripts/lib/codex-sdk-gate-lib.js +2 -2
- package/dist/scripts/lib/real-codex-parallel-gate.js +2 -2
- package/dist/scripts/loop-directive-check-lib.js +1 -1
- package/dist/scripts/mad-db-command-check.js +11 -8
- package/dist/scripts/mad-db-real-supabase-e2e.js +2 -2
- package/dist/scripts/mad-db-route-identity-check.js +8 -6
- package/dist/scripts/mad-db-safety-conflict-matrix-check.js +31 -8
- package/dist/scripts/mad-db-skill-policy-snapshot-check.js +4 -5
- package/dist/scripts/mad-sks-zellij-default-pane-worker-check.js +3 -2
- package/dist/scripts/mad-sks-zellij-launch-check.js +1 -1
- package/dist/scripts/naruto-zellij-dynamic-right-column-check.js +7 -7
- package/dist/scripts/parallel-claim-enforcement-check.js +14 -5
- package/dist/scripts/ppt-real-imagegen-wiring-check.js +5 -1
- package/dist/scripts/project-skill-dedupe-check.js +23 -5
- package/dist/scripts/proof-root-cause-policy-check.js +2 -0
- package/dist/scripts/release-affected-selector-check.js +2 -2
- package/dist/scripts/release-cache-glob-hashing-check.js +1 -0
- package/dist/scripts/release-dag-full-coverage-check.js +13 -4
- package/dist/scripts/release-gate-dag-runner-check.js +10 -2
- package/dist/scripts/release-gate-dag-runner.js +22 -0
- package/dist/scripts/release-gate-existence-audit.js +2 -1
- package/dist/scripts/release-gate-planner.js +2 -1
- package/dist/scripts/release-gate-script-parity-check.js +1 -1
- package/dist/scripts/release-metadata-1-19-check.js +2 -1
- package/dist/scripts/release-readiness-report.js +38 -7
- package/dist/scripts/release-stability-report-check.js +12 -8
- package/dist/scripts/search-visibility-gate-lib.js +2 -2
- package/dist/scripts/seo-geo-feature-fixture-quality-check.js +1 -1
- package/dist/scripts/skills-manifest-continuity-check.js +46 -0
- package/dist/scripts/sks-1-11-gate-lib.js +8 -6
- package/dist/scripts/sks-menubar-install-check.js +87 -21
- package/dist/scripts/sks-uninstall-regression-check.js +54 -0
- package/dist/scripts/uninstall-inventory-check.js +3 -0
- package/dist/scripts/ux-review-real-loop-fixture-check.js +9 -4
- package/dist/scripts/ux-review-run-wires-imagegen-check.js +4 -0
- package/dist/scripts/zellij-layout-valid-check.js +18 -11
- package/dist/scripts/zellij-right-column-geometry-proof.js +2 -4
- package/dist/scripts/zellij-slot-pane-renderer-check.js +9 -9
- package/dist/scripts/zellij-slot-pane-stale-detection-check.js +3 -4
- package/dist/scripts/zellij-slot-pane-telemetry-renderer-check.js +3 -2
- package/dist/scripts/zellij-slot-telemetry-renderer-check.js +4 -2
- package/dist/scripts/zellij-spawn-on-demand-layout-check.js +8 -2
- package/dist/scripts/zellij-viewport-binder-check.js +9 -0
- package/docs/assets/sneakoscope-architecture-pipeline.jpg +0 -0
- package/docs/demo.tape +28 -0
- package/package.json +70 -3
- package/schemas/codex/completion-proof.schema.json +3 -2
- package/schemas/release/release-gate-node.schema.json +2 -1
- package/dist/scripts/agent-backfill-route-blackbox.js +0 -5
- package/dist/scripts/agent-dynamic-pool-route-blackbox.js +0 -5
- package/dist/scripts/agent-parallel-write-blackbox.js +0 -56
- package/dist/scripts/agent-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/agent-route-blackbox-lib.js +0 -132
- package/dist/scripts/blackbox-command-import-smoke.js +0 -143
- package/dist/scripts/blackbox-global-shim.js +0 -77
- package/dist/scripts/blackbox-matrix.js +0 -70
- package/dist/scripts/blackbox-npx-one-shot.js +0 -69
- package/dist/scripts/blackbox-pack-install.js +0 -174
- package/dist/scripts/brand-neutrality-zero-leakage-blackbox.js +0 -4
- package/dist/scripts/build-once-runner-blackbox.js +0 -34
- package/dist/scripts/codex-0140-integration-blackbox.js +0 -13
- package/dist/scripts/codex-agent-type-blackbox.js +0 -4
- package/dist/scripts/codex-app-harness-blackbox.js +0 -4
- package/dist/scripts/codex-app-skill-agent-blackbox.js +0 -4
- package/dist/scripts/codex-hook-approval-blackbox.js +0 -4
- package/dist/scripts/codex-init-deep-directory-local-blackbox.js +0 -4
- package/dist/scripts/codex-native-feature-broker-blackbox.js +0 -4
- package/dist/scripts/codex-native-pattern-analysis-blackbox.js +0 -4
- package/dist/scripts/codex-native-read-repair-split-blackbox.js +0 -55
- package/dist/scripts/codex-native-reference-cache-blackbox.js +0 -41
- package/dist/scripts/core-skill-integrity-blackbox.js +0 -33
- package/dist/scripts/dfix-fast-blackbox-check.js +0 -37
- package/dist/scripts/dfix-parallel-write-blackbox.js +0 -48
- package/dist/scripts/dfix-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/doctor-context7-mcp-repair-blackbox.js +0 -16
- package/dist/scripts/doctor-dirty-repair-blackbox.js +0 -22
- package/dist/scripts/doctor-dirty-semantic-blackbox.js +0 -8
- package/dist/scripts/doctor-fix-production-blackbox.js +0 -26
- package/dist/scripts/doctor-native-capability-repair-blackbox.js +0 -39
- package/dist/scripts/doctor-startup-config-repair-blackbox.js +0 -13
- package/dist/scripts/doctor-supabase-mcp-repair-blackbox.js +0 -14
- package/dist/scripts/doctor-transaction-engine-blackbox.js +0 -28
- package/dist/scripts/doctor-zellij-fix-blackbox.js +0 -4
- package/dist/scripts/doctor-zellij-no-homebrew-blackbox.js +0 -4
- package/dist/scripts/doctor-zellij-upgrade-blackbox.js +0 -4
- package/dist/scripts/gate-pack-runner-blackbox.js +0 -27
- package/dist/scripts/gate-pack-v2-blackbox.js +0 -18
- package/dist/scripts/geo-cli-blackbox-check.js +0 -18
- package/dist/scripts/loop-collision-blackbox.js +0 -3
- package/dist/scripts/loop-concurrency-oversubscription-blackbox.js +0 -3
- package/dist/scripts/loop-fixture-production-misuse-blackbox.js +0 -3
- package/dist/scripts/loop-kill-interrupt-real-blackbox.js +0 -3
- package/dist/scripts/loop-merge-strategy-blackbox.js +0 -3
- package/dist/scripts/loop-mesh-production-e2e-blackbox.js +0 -3
- package/dist/scripts/loop-side-effect-blackbox.js +0 -3
- package/dist/scripts/mad-db-operation-lifecycle-blackbox.js +0 -29
- package/dist/scripts/mad-sks-actual-executor-blackbox.js +0 -5
- package/dist/scripts/mad-zellij-headless-fallback-blackbox.js +0 -4
- package/dist/scripts/mad-zellij-self-heal-blackbox.js +0 -4
- package/dist/scripts/naruto-loop-mesh-blackbox.js +0 -3
- package/dist/scripts/naruto-real-parallelism-blackbox.js +0 -307
- package/dist/scripts/naruto-worktree-coding-blackbox.js +0 -29
- package/dist/scripts/parallel-runtime-real-blackbox.js +0 -44
- package/dist/scripts/pipeline-codex-native-doctor-mad-routing-real-blackbox.js +0 -77
- package/dist/scripts/pipeline-codex-native-e2e-blackbox.js +0 -13
- package/dist/scripts/pipeline-codex-native-image-routing-real-blackbox.js +0 -50
- package/dist/scripts/pipeline-codex-native-loop-routing-real-blackbox.js +0 -74
- package/dist/scripts/pipeline-codex-native-qa-routing-real-blackbox.js +0 -51
- package/dist/scripts/pipeline-codex-native-research-routing-real-blackbox.js +0 -45
- package/dist/scripts/pipeline-execution-profile-routing-blackbox.js +0 -4
- package/dist/scripts/postinstall-global-doctor-blackbox.js +0 -12
- package/dist/scripts/ppt-full-e2e-blackbox-check.js +0 -109
- package/dist/scripts/ppt-imagegen-blackbox-check.js +0 -46
- package/dist/scripts/project-skill-dedupe-blackbox.js +0 -36
- package/dist/scripts/qa-backfill-route-blackbox.js +0 -5
- package/dist/scripts/qa-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/release-full-parallelism-blackbox.js +0 -41
- package/dist/scripts/release-triwiki-first-runner-blackbox.js +0 -48
- package/dist/scripts/release-wiring-3110-blackbox.js +0 -27
- package/dist/scripts/release-wiring-3112-blackbox.js +0 -17
- package/dist/scripts/release-wiring-3113-blackbox.js +0 -17
- package/dist/scripts/research-backfill-route-blackbox.js +0 -5
- package/dist/scripts/research-final-reviewer-blackbox.js +0 -70
- package/dist/scripts/research-stage-cycle-runtime-blackbox.js +0 -40
- package/dist/scripts/research-synthesis-writer-blackbox.js +0 -24
- package/dist/scripts/route-blackbox-realism-check.js +0 -21
- package/dist/scripts/scheduler-resource-claim-blackbox.js +0 -24
- package/dist/scripts/seo-cli-blackbox-check.js +0 -18
- package/dist/scripts/sks-3110-all-feature-regression-blackbox.js +0 -116
- package/dist/scripts/sks-3112-all-feature-regression-blackbox.js +0 -29
- package/dist/scripts/sks-3113-all-feature-regression-blackbox.js +0 -17
- package/dist/scripts/sks-400-all-feature-regression-blackbox.js +0 -21
- package/dist/scripts/sks-400-extreme-parallel-blackbox.js +0 -8
- package/dist/scripts/sks-400-five-minute-blackbox.js +0 -9
- package/dist/scripts/sks-400-legacy-purge-blackbox.js +0 -8
- package/dist/scripts/sks-401-all-feature-regression-blackbox.js +0 -46
- package/dist/scripts/sks-401-five-minute-actual-blackbox.js +0 -23
- package/dist/scripts/sks-402-all-feature-regression-blackbox.js +0 -9
- package/dist/scripts/sks-402-five-minute-real-blackbox.js +0 -22
- package/dist/scripts/sksd-warm-cache-blackbox.js +0 -12
- package/dist/scripts/supabase-secret-preservation-blackbox.js +0 -29
- package/dist/scripts/team-backfill-route-blackbox.js +0 -5
- package/dist/scripts/team-parallel-write-blackbox.js +0 -55
- package/dist/scripts/team-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/triwiki-affected-graph-blackbox.js +0 -28
- package/dist/scripts/triwiki-proof-bank-blackbox.js +0 -30
- package/dist/scripts/triwiki-proof-bank-lock-blackbox.js +0 -7
- package/dist/scripts/update-preserves-supabase-keys-blackbox.js +0 -27
- package/dist/scripts/ux-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/ux-review-imagegen-blackbox-check.js +0 -67
- package/dist/scripts/zellij-initial-main-only-blackbox.js +0 -28
- package/dist/scripts/zellij-pane-lock-concurrency-blackbox.js +0 -80
- package/dist/scripts/zellij-pane-lock-open-worker-integration-blackbox.js +0 -137
- package/dist/scripts/zellij-self-heal-typed-blackbox.js +0 -4
- package/dist/scripts/zellij-slot-telemetry-real-blackbox.js +0 -20
- package/dist/scripts/zellij-stacked-fallback-integration-blackbox.js +0 -81
- package/dist/scripts/zellij-worker-pane-real-ui-blackbox.js +0 -202
|
@@ -2,7 +2,7 @@ import { PACKAGE_VERSION } from './fsx.js';
|
|
|
2
2
|
export const FEATURE_FIXTURE_SCHEMA = 'sks.feature-fixtures.v1';
|
|
3
3
|
export const FEATURE_QUALITY_LEVELS = Object.freeze([
|
|
4
4
|
'runtime_verified',
|
|
5
|
-
'
|
|
5
|
+
'wiring_only',
|
|
6
6
|
'integration_optional',
|
|
7
7
|
'static_contract',
|
|
8
8
|
'missing'
|
|
@@ -12,21 +12,31 @@ const FIXTURES = Object.freeze({
|
|
|
12
12
|
'cli-version': fixture('execute', 'sks --version', [], 'pass'),
|
|
13
13
|
'cli-root': fixture('execute', 'sks root --json', [], 'pass'),
|
|
14
14
|
'cli-doctor': fixture('real_optional', 'sks doctor --json', [], 'pass'),
|
|
15
|
+
'doctor:imagegen-repair': fixture('execute_and_validate_artifacts', 'sks doctor --json', [{ path: '.sneakoscope/reports/feature-fixtures/doctor-imagegen-repair.json', schema: 'sks.doctor-imagegen-repair.v1', optional: true }], 'pass', {
|
|
16
|
+
quality: 'runtime_verified',
|
|
17
|
+
validates_json_fields: ['imagegen_repair', 'repair.imagegen']
|
|
18
|
+
}),
|
|
15
19
|
'cli-paths': fixture('execute_and_validate_artifacts', 'sks paths managed --json', ['.sneakoscope/managed-paths.json'], 'pass'),
|
|
16
20
|
'cli-rollback': fixture('execute', 'sks rollback list --json', [], 'pass'),
|
|
17
21
|
'cli-setup': fixture('real_optional', 'sks setup --json --local-only', [], 'pass'),
|
|
18
22
|
'cli-codex': fixture('execute', 'sks codex compatibility --json', [], 'pass'),
|
|
19
23
|
'cli-codex-app': fixture('real_optional', 'sks codex-app check --json', [], 'pass'),
|
|
20
24
|
'cli-codex-lb': fixture('execute_and_validate_artifacts', 'sks codex-lb metrics --json', [], 'pass'),
|
|
21
|
-
'cli-hooks': fixture('
|
|
25
|
+
'cli-hooks': fixture('execute', 'sks hooks trust-report --json', [], 'pass'),
|
|
22
26
|
'cli-features': fixture('execute', 'sks features check --json', [], 'pass'),
|
|
23
27
|
'cli-commands': fixture('execute', 'sks commands --json', [], 'pass'),
|
|
24
28
|
'cli-check': fixture('execute', 'sks check --tier confidence --sla 5m --plan --json', [], 'pass'),
|
|
29
|
+
'cli-plan': fixture('execute', 'sks plan "fixture" --json', [], 'pass'),
|
|
30
|
+
'cli-review': fixture('execute', 'sks review --diff HEAD --json', [], 'pass'),
|
|
31
|
+
'cli-ui': fixture('static', 'sks ui [--port 4477] [--mission latest] [--once] [--json]', [], 'pass', {
|
|
32
|
+
quality: 'static_contract',
|
|
33
|
+
reason: 'UI command opens a localhost dashboard; release fixture tracks the CLI contract without launching a server.'
|
|
34
|
+
}),
|
|
25
35
|
'cli-run': fixture('execute_and_validate_artifacts', 'sks run "fixture" --mock --json', ['run-classification.json', 'completion-proof.json', 'evidence-index.json', 'route-completion-contract.json', 'trust-report.json'], 'pass'),
|
|
26
36
|
'cli-status': fixture('execute', 'sks status --json', [], 'pass'),
|
|
27
37
|
'cli-usage': fixture('execute', 'sks usage overview', [], 'pass'),
|
|
28
38
|
'cli-quickstart': fixture('execute', 'sks quickstart', [], 'pass'),
|
|
29
|
-
'cli-update': fixture('
|
|
39
|
+
'cli-update': fixture('execute', 'sks update now --dry-run --json', [], 'pass'),
|
|
30
40
|
'cli-update-check': fixture('static', 'sks update-check --json', [], 'pass'),
|
|
31
41
|
'cli-guard': fixture('execute', 'sks guard check --json', [], 'pass'),
|
|
32
42
|
'cli-conflicts': fixture('execute', 'sks conflicts check --json', [], 'pass'),
|
|
@@ -35,20 +45,21 @@ const FIXTURES = Object.freeze({
|
|
|
35
45
|
'cli-fix-path': fixture('execute', 'sks fix-path --json', [], 'pass'),
|
|
36
46
|
'cli-selftest': fixture('execute', 'sks selftest --mock', [], 'pass'),
|
|
37
47
|
'cli-git': fixture('execute', 'sks git policy --json', [], 'pass'),
|
|
38
|
-
'cli-
|
|
48
|
+
'cli-uninstall': fixture('execute', 'sks uninstall --dry-run --json', [], 'pass'),
|
|
49
|
+
'cli-goal': fixture('execute_and_validate_artifacts', 'sks goal status latest --json', ['goal-workflow.json'], 'pass'),
|
|
39
50
|
'cli-seo-geo-optimizer': fixture('execute_and_validate_artifacts', 'sks seo-geo-optimizer fixture --mode seo --json', ['search-visibility/site-inventory.json', 'search-visibility/seo-findings.json', 'search-visibility/verification-report.json', 'seo-gate.json', 'completion-proof.json'], 'pass'),
|
|
40
|
-
'cli-research': fixture('
|
|
41
|
-
'cli-qa-loop': fixture('
|
|
42
|
-
'cli-ppt': fixture('
|
|
43
|
-
'cli-image-ux-review': fixture('
|
|
51
|
+
'cli-research': fixture('execute_and_validate_artifacts', 'sks research status latest --json', ['research-gate.json', 'completion-proof.json'], 'pass'),
|
|
52
|
+
'cli-qa-loop': fixture('execute_and_validate_artifacts', 'sks qa-loop status latest --json', ['qa-loop-proof.json', 'completion-proof.json'], 'pass'),
|
|
53
|
+
'cli-ppt': fixture('execute_and_validate_artifacts', 'sks ppt fixture --mock --json', ['ppt-imagegen-review-gate.json', 'completion-proof.json'], 'pass'),
|
|
54
|
+
'cli-image-ux-review': fixture('execute_and_validate_artifacts', 'sks image-ux-review status latest --json', ['image-ux-generated-review-ledger.json', 'image-voxel-ledger.json'], 'pass'),
|
|
44
55
|
'cli-computer-use': fixture('real_optional', 'sks computer-use status --json', [], 'pass'),
|
|
45
|
-
'cli-pipeline': fixture('
|
|
46
|
-
'cli-validate-artifacts': fixture('
|
|
47
|
-
'cli-hproof': fixture('
|
|
56
|
+
'cli-pipeline': fixture('execute_and_validate_artifacts', 'sks pipeline status latest --json', ['pipeline-plan.json'], 'pass'),
|
|
57
|
+
'cli-validate-artifacts': fixture('execute_and_validate_artifacts', 'sks validate-artifacts latest --json', ['validation-report.json'], 'pass'),
|
|
58
|
+
'cli-hproof': fixture('execute_and_validate_artifacts', 'sks hproof check latest', ['completion-proof.json'], 'pass'),
|
|
48
59
|
'cli-proof-field': fixture('execute', 'sks proof-field scan --json --intent fixture', [], 'pass'),
|
|
49
|
-
'cli-recallpulse': fixture('
|
|
60
|
+
'cli-recallpulse': fixture('execute_and_validate_artifacts', 'sks recallpulse status latest --json', ['recallpulse-report.json'], 'pass'),
|
|
50
61
|
'cli-agent': fixture('execute_and_validate_artifacts', 'sks agent run fixture --mock --json', ['agents/agent-central-ledger.json', 'agents/agent-task-board.json', 'agents/agent-leases.json', 'agents/agent-no-overlap-proof.json', 'agents/agent-session-cleanup.json', 'agents/agent-proof-evidence.json', 'agents/agent-effort-policy.json'], 'pass'),
|
|
51
|
-
'cli-gx': fixture('
|
|
62
|
+
'cli-gx': fixture('execute_and_validate_artifacts', 'sks gx validate fixture', ['gx-validation.json'], 'pass'),
|
|
52
63
|
'cli-perf': fixture('execute', 'sks perf cold-start --json --iterations 1', [], 'pass'),
|
|
53
64
|
'cli-bench': fixture('execute_and_validate_artifacts', 'sks bench core --tier npx-one-shot --json --iterations 1', ['.sneakoscope/reports/performance/core-bench.json'], 'pass'),
|
|
54
65
|
'cli-code-structure': fixture('execute', 'sks code-structure scan --json', [], 'pass'),
|
|
@@ -63,40 +74,56 @@ const FIXTURES = Object.freeze({
|
|
|
63
74
|
'cli-dfix': fixture('execute_and_validate_artifacts', 'sks dfix fixture --json', ['completion-proof.json', 'dfix-gate.json', 'dfix-verification.json'], 'pass'),
|
|
64
75
|
'cli-wiki': fixture('execute_and_validate_artifacts', 'sks wiki image-ingest test/fixtures/images/one-by-one.png --json', [{ path: '.sneakoscope/wiki/image-voxel-ledger.json', schema: 'sks.image-voxel-ledger.v1', require_anchors: false }], 'pass'),
|
|
65
76
|
'cli-db': fixture('execute', 'sks db policy', [], 'pass'),
|
|
66
|
-
'cli-wizard': fixture('
|
|
67
|
-
'cli-bootstrap': fixture('
|
|
68
|
-
'cli-deps': fixture('
|
|
69
|
-
'cli-auth': fixture('
|
|
70
|
-
'cli-codex-native': fixture('
|
|
77
|
+
'cli-wizard': fixture('execute', 'sks wizard', [], 'pass'),
|
|
78
|
+
'cli-bootstrap': fixture('execute', 'sks bootstrap --dry-run', [], 'pass'),
|
|
79
|
+
'cli-deps': fixture('execute', 'sks deps check --json', [], 'pass'),
|
|
80
|
+
'cli-auth': fixture('execute', 'sks auth status --json', [], 'pass'),
|
|
81
|
+
'cli-codex-native': fixture('execute', 'sks codex-native status --json', [], 'pass'),
|
|
71
82
|
'cli-zellij': fixture('mock', 'npm run zellij:capability --silent', [], 'pass'),
|
|
72
83
|
'cli-tmux': fixture('mock', 'removed runtime migration notice: sks tmux --json', [], 'pass'),
|
|
73
|
-
'cli-mad': fixture('
|
|
84
|
+
'cli-mad': fixture('execute', 'sks mad --help', [], 'pass'),
|
|
74
85
|
'cli-mad-sks': fixture('static', 'sks mad-sks status --json', [], 'pass'),
|
|
75
|
-
'cli-auto-review': fixture('
|
|
86
|
+
'cli-auto-review': fixture('execute', 'sks auto-review status --json', [], 'pass'),
|
|
76
87
|
'cli-commit': fixture('mock', 'sks commit --dry-run', [], 'pass'),
|
|
77
88
|
'cli-commit-and-push': fixture('mock', 'sks commit-and-push --dry-run', [], 'pass'),
|
|
78
89
|
'cli-context7': fixture('real_optional', 'sks context7 check --json', [], 'pass'),
|
|
79
90
|
'cli-insane-search': fixture('execute', 'sks insane-search doctor --json', [], 'pass'),
|
|
80
91
|
'cli-ultra-search': fixture('execute', 'sks ultra-search doctor --json', [], 'pass'),
|
|
81
92
|
'cli-xai': fixture('real_optional', 'sks xai check --json', [], 'pass'),
|
|
82
|
-
'cli-
|
|
83
|
-
'cli-
|
|
84
|
-
'cli-
|
|
85
|
-
'cli-
|
|
86
|
-
'cli-
|
|
87
|
-
'cli-
|
|
88
|
-
'cli-
|
|
89
|
-
'
|
|
90
|
-
'
|
|
91
|
-
'
|
|
92
|
-
'
|
|
93
|
+
'cli-task': fixture('execute', 'sks task instant --plan --json', [], 'pass'),
|
|
94
|
+
'cli-release': fixture('execute', 'sks release affected --json', [], 'pass'),
|
|
95
|
+
'cli-triwiki': fixture('execute', 'sks triwiki index --json', [], 'pass'),
|
|
96
|
+
'cli-daemon': fixture('execute', 'sks daemon status --json', [], 'pass'),
|
|
97
|
+
'cli-all-features': fixture('execute_and_validate_artifacts', 'sks all-features complete --json', [`.sneakoscope/reports/all-feature-completion-${PACKAGE_VERSION}.json`], 'pass'),
|
|
98
|
+
'cli-init': fixture('execute', 'sks init --local-only --dry-run', [], 'pass'),
|
|
99
|
+
'cli-eval': fixture('execute', 'sks eval run --mock --json', [], 'pass'),
|
|
100
|
+
'cli-harness': fixture('execute', 'sks harness fixture --mock --json', [], 'pass'),
|
|
101
|
+
'cli-naruto': fixture('execute_and_validate_artifacts', 'sks naruto run "fixture" --backend fake --work-items 4 --json', ['completion-proof.json', 'naruto-gate.json'], 'pass'),
|
|
102
|
+
'cli-team': fixture('execute_and_validate_artifacts', 'sks team "fixture" --mock --clones 4 --backend fake --work-items 4 --json', ['naruto-gate.json', 'team-alias-to-naruto.json'], 'pass'),
|
|
103
|
+
'cli-reasoning': fixture('execute', 'sks reasoning status --json', [], 'pass'),
|
|
104
|
+
'cli-profile': fixture('execute', 'sks profile status --json', [], 'pass'),
|
|
105
|
+
'skill-db-safety-guard': fixture('execute_and_validate_artifacts', 'sks db check --sql "SELECT 1" --json', ['db-operation-report.json', 'completion-proof.json'], 'pass'),
|
|
106
|
+
'skill-honest-mode': fixture('execute_and_validate_artifacts', 'sks proof smoke --json', ['completion-proof.json', 'trust-report.json'], 'pass'),
|
|
107
|
+
'skill-imagegen': fixture('execute_and_validate_artifacts', 'sks image-ux-review fixture --mock --json', ['image-ux-generated-review-ledger.json', 'image-voxel-ledger.json'], 'pass'),
|
|
108
|
+
'ux-review:run-wires-imagegen': fixture('execute_and_validate_artifacts', 'npm run ux-review:run-wires-imagegen --silent', [{ path: 'image-ux-review-gate.json', schema: 'sks.image-ux-review-gate.v2', optional: true }], 'pass', {
|
|
109
|
+
validates_source_contracts: ['requireCodexImagegen', 'generateGptImage2CalloutReview', 'evidence_class', 'output_sha256']
|
|
110
|
+
}),
|
|
111
|
+
'ppt:real-imagegen-wiring': fixture('execute_and_validate_artifacts', 'npm run ppt:real-imagegen-wiring --silent', [{ path: 'ppt-imagegen-review-gate.json', schema: 'sks.ppt-imagegen-review-gate.v1', optional: true }], 'pass', {
|
|
112
|
+
validates_source_contracts: ['generateGptImage2CalloutReview', 'buildSlideImagegenEvidence', 'imagegen_evidence']
|
|
113
|
+
}),
|
|
114
|
+
'skill-gx-visual-validate': fixture('execute_and_validate_artifacts', 'sks gx validate fixture --mock --json', ['gx-validation.json'], 'pass'),
|
|
93
115
|
'skill-context7-docs': fixture('real_optional', 'sks context7 check --json', [], 'pass'),
|
|
94
|
-
'skill-seo-geo-optimizer': fixture('
|
|
116
|
+
'skill-seo-geo-optimizer': fixture('execute_and_validate_artifacts', 'sks seo-geo-optimizer fixture --mode geo --json', ['search-visibility/site-inventory.json', 'search-visibility/geo-findings.json', 'geo-gate.json', 'completion-proof.json'], 'pass'),
|
|
95
117
|
'cli-proof': fixture('execute_and_validate_artifacts', 'sks proof smoke --json', ['.sneakoscope/proof/latest.json'], 'pass'),
|
|
96
118
|
'cli-trust': fixture('execute_and_validate_artifacts', 'sks trust report latest --json', ['trust-report.json'], 'pass'),
|
|
97
119
|
'cli-wrongness': fixture('execute_and_validate_artifacts', 'sks wrongness add --kind missing_evidence --claim "fixture wrongness" --json', ['.sneakoscope/wiki/wrongness-ledger.json'], 'pass'),
|
|
98
|
-
'route-team': fixture('execute_and_validate_artifacts', 'sks team "fixture" --mock --
|
|
120
|
+
'route-team': fixture('execute_and_validate_artifacts', 'sks team "fixture" --mock --clones 4 --backend fake --work-items 4 --json', ['naruto-gate.json', 'team-alias-to-naruto.json'], 'pass'),
|
|
121
|
+
'route-team-alias': fixture('execute_and_validate_artifacts', 'sks team "fixture" --mock --clones 4 --backend fake --work-items 4 --json', ['naruto-gate.json', 'team-alias-to-naruto.json'], 'pass'),
|
|
99
122
|
'route-naruto': fixture('execute_and_validate_artifacts', 'sks naruto run "fixture" --clones 4 --backend fake --work-items 4 --json', ['agents/agent-proof-evidence.json', 'agents/agent-scheduler-state.json'], 'pass'),
|
|
123
|
+
'route-work': fixture('execute_and_validate_artifacts', 'sks naruto run "fixture" --backend fake --work-items 4 --json', ['completion-proof.json', 'naruto-gate.json'], 'pass'),
|
|
124
|
+
'route-swarm': fixture('execute_and_validate_artifacts', 'sks naruto run "fixture" --backend fake --work-items 4 --json', ['completion-proof.json', 'naruto-gate.json'], 'pass'),
|
|
125
|
+
'route-plan': fixture('execute', 'sks plan "fixture" --json', [], 'pass'),
|
|
126
|
+
'route-review': fixture('execute', 'sks review --diff HEAD --json', [], 'pass'),
|
|
100
127
|
'route-shadowclone': fixture('mock', '$ShadowClone alias of $Naruto shadow-clone swarm route', [], 'pass'),
|
|
101
128
|
'route-kagebunshin': fixture('mock', '$Kagebunshin alias of $Naruto shadow-clone swarm route', [], 'pass'),
|
|
102
129
|
'route-qa-loop': fixture('execute_and_validate_artifacts', 'sks qa-loop run latest --mock --json', ['completion-proof.json', 'qa-gate.json'], 'pass'),
|
|
@@ -114,11 +141,11 @@ const FIXTURES = Object.freeze({
|
|
|
114
141
|
'route-ultrasearch': fixture('execute', 'sks run "$UltraSearch source intelligence fixture" --execute --json', [], 'pass'),
|
|
115
142
|
'route-seo-geo-optimizer': fixture('execute_and_validate_artifacts', 'sks seo-geo-optimizer fixture --mode geo --json', ['search-visibility/site-inventory.json', 'search-visibility/geo-findings.json', 'search-visibility/verification-report.json', 'geo-gate.json', 'completion-proof.json'], 'pass'),
|
|
116
143
|
'route-autoresearch': fixture('mock', '$AutoResearch fixture route', ['research-gate.json', 'completion-proof.json'], 'pass'),
|
|
117
|
-
'route-mad-sks': fixture('mock', '$MAD-SKS permission gate route', ['mad-sks-gate.json', 'completion-proof.json'], 'pass'),
|
|
144
|
+
'route-mad-sks': fixture('mock', '$MAD-SKS permission gate + sql_plane route', [{ path: 'mad-sks-gate.json', schema: 'sks.mad-sks-gate.v1' }, 'completion-proof.json'], 'pass'),
|
|
118
145
|
'route-from-chat-img': fixture('mock', '$From-Chat-IMG visual work order route', ['from-chat-img-work-order.md', 'image-voxel-ledger.json', 'completion-proof.json'], 'pass'),
|
|
119
146
|
'route-ux-review': fixture('mock', '$UX-Review image UX alias route', ['image-ux-generated-review-ledger.json', 'image-voxel-ledger.json'], 'pass'),
|
|
120
147
|
'route-db': fixture('execute_and_validate_artifacts', 'sks db check --sql "SELECT 1" --json', ['completion-proof.json', 'db-operation-report.json'], 'pass'),
|
|
121
|
-
'route-mad-db': fixture('mock', '$MAD-DB
|
|
148
|
+
'route-mad-db': fixture('mock', '$MAD-DB deprecated alias to $MAD-SKS sql-plane contract', ['mad-sks-gate.json', 'completion-proof.json'], 'pass'),
|
|
122
149
|
'route-wiki': fixture('execute_and_validate_artifacts', 'sks wiki image-ingest test/fixtures/images/one-by-one.png --json', [{ path: 'completion-proof.json', schema: 'sks.completion-proof.v1' }, { path: 'image-voxel-ledger.json', schema: 'sks.image-voxel-ledger.v1' }], 'pass'),
|
|
123
150
|
'route-gx': fixture('execute_and_validate_artifacts', 'sks gx validate fixture --mock --json', ['completion-proof.json', { path: 'image-voxel-ledger.json', schema: 'sks.image-voxel-ledger.v1' }, 'gx-validation.json'], 'pass'),
|
|
124
151
|
'route-sks': fixture('mock', '$SKS control-surface route', ['completion-proof.json'], 'pass'),
|
|
@@ -133,7 +160,7 @@ const FIXTURES = Object.freeze({
|
|
|
133
160
|
'route-commit-and-push': fixture('mock', '$Commit-And-Push git route', ['completion-proof.json'], 'pass'),
|
|
134
161
|
'route-release-review': fixture('mock', 'sks agent run "release audit" --route "$Release-Review" --agents 10 --concurrency 5 --mock --json', ['release-review-native-agent-plan.json', 'agents/agent-proof-evidence.json', 'agents/agent-effort-policy.json'], 'pass'),
|
|
135
162
|
'route-native-agent-intake': fixture('mock', 'sks agent run "fixture" --route "$Team" --agents 5 --concurrency 5 --mock --json', ['agents/agent-central-ledger.json', 'agents/agent-task-board.json', 'agents/agent-leases.json', 'agents/agent-no-overlap-proof.json', 'agents/agent-session-cleanup.json', 'agents/agent-proof-evidence.json', 'agents/agent-effort-policy.json'], 'pass'),
|
|
136
|
-
'proof-agent-evidence': fixture('mock', 'sks
|
|
163
|
+
'proof-agent-evidence': fixture('mock', 'sks naruto run "fixture" --backend fake --work-items 4 --json', ['naruto-gate.json', 'agents/agent-proof-evidence.json'], 'pass')
|
|
137
164
|
});
|
|
138
165
|
const STATIC_CONTRACT_FEATURES = new Set([
|
|
139
166
|
'cli-wizard',
|
|
@@ -151,6 +178,7 @@ const STATIC_CONTRACT_FEATURES = new Set([
|
|
|
151
178
|
'cli-all-features',
|
|
152
179
|
'cli-eval',
|
|
153
180
|
'cli-harness',
|
|
181
|
+
'cli-naruto',
|
|
154
182
|
'cli-team',
|
|
155
183
|
'cli-reasoning',
|
|
156
184
|
'cli-profile',
|
|
@@ -242,7 +270,7 @@ function qualityForKind(kind) {
|
|
|
242
270
|
if (kind === 'execute' || kind === 'execute_and_validate_artifacts')
|
|
243
271
|
return 'runtime_verified';
|
|
244
272
|
if (kind === 'mock')
|
|
245
|
-
return '
|
|
273
|
+
return 'wiring_only';
|
|
246
274
|
if (kind === 'real_optional')
|
|
247
275
|
return 'integration_optional';
|
|
248
276
|
if (kind === 'not_available')
|
|
@@ -2,6 +2,7 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { spawnSync } from 'node:child_process';
|
|
5
|
+
import { COMMANDS } from '../cli/command-registry.js';
|
|
5
6
|
import { COMMAND_CATALOG, DOLLAR_COMMAND_ALIASES, DOLLAR_COMMANDS, ROUTES } from './routes.js';
|
|
6
7
|
import { FEATURE_QUALITY_LEVELS, fixtureForFeature, fixtureSummary, validateFeatureFixtures } from './feature-fixtures.js';
|
|
7
8
|
import { runFeatureFixture, writeFeatureFixtureReports } from './feature-fixture-runner.js';
|
|
@@ -51,6 +52,8 @@ export async function buildFeatureRegistry({ root = packageRoot(), generatedAt =
|
|
|
51
52
|
}
|
|
52
53
|
features.push(nativeAgentIntakeFeature());
|
|
53
54
|
features.push(agentProofEvidenceFeature());
|
|
55
|
+
features.push(doctorImagegenRepairFeature());
|
|
56
|
+
features.push(...imagegenWiringFeatures());
|
|
54
57
|
for (const skillName of skillNames) {
|
|
55
58
|
if (!skillCoveredByRoute(skillName))
|
|
56
59
|
features.push(skillFeature(skillName));
|
|
@@ -102,7 +105,8 @@ export function validateFeatureRegistry(registry = {}) {
|
|
|
102
105
|
const blockers = [
|
|
103
106
|
...Object.entries(unmapped).flatMap(([kind, values]) => values.map((value) => `${kind}:${value}`)),
|
|
104
107
|
...duplicateFeatureIds.map((id) => `duplicate_feature_id:${id}`),
|
|
105
|
-
...routeMentionsWithoutRoute.map((mention) => `doc_route_mention_without_route:${mention}`)
|
|
108
|
+
...routeMentionsWithoutRoute.map((mention) => `doc_route_mention_without_route:${mention}`),
|
|
109
|
+
...routeGateConsistencyBlockers()
|
|
106
110
|
];
|
|
107
111
|
return {
|
|
108
112
|
ok: blockers.length === 0,
|
|
@@ -118,6 +122,7 @@ export function validateFeatureRegistry(registry = {}) {
|
|
|
118
122
|
unmapped,
|
|
119
123
|
duplicate_feature_ids: duplicateFeatureIds,
|
|
120
124
|
doc_route_mentions_without_route: routeMentionsWithoutRoute,
|
|
125
|
+
route_gate_consistency_blockers: routeGateConsistencyBlockers(),
|
|
121
126
|
blockers,
|
|
122
127
|
nonblocking_known_gaps: [
|
|
123
128
|
'feature fixtures remain progressive',
|
|
@@ -127,6 +132,41 @@ export function validateFeatureRegistry(registry = {}) {
|
|
|
127
132
|
feature_quality_summary: featureQualitySummary(features)
|
|
128
133
|
};
|
|
129
134
|
}
|
|
135
|
+
export function routeGateConsistencyBlockers() {
|
|
136
|
+
const blockers = [];
|
|
137
|
+
for (const route of ROUTES) {
|
|
138
|
+
const cliName = routeCliCommandName(route);
|
|
139
|
+
if (!cliName)
|
|
140
|
+
continue;
|
|
141
|
+
const entry = COMMANDS[cliName];
|
|
142
|
+
if (!entry?.ownsGates)
|
|
143
|
+
continue;
|
|
144
|
+
const routeGates = stopGateFiles(route.stopGate);
|
|
145
|
+
const owned = new Set((entry.ownedGateFiles || []).map((file) => String(file)));
|
|
146
|
+
if (!routeGates.length && owned.size > 0)
|
|
147
|
+
blockers.push(`route_gate_mismatch:${route.id}:routes_none_registry_${[...owned].join('|')}`);
|
|
148
|
+
for (const gate of routeGates) {
|
|
149
|
+
if (!owned.has(gate))
|
|
150
|
+
blockers.push(`route_gate_mismatch:${route.id}:${gate}_not_owned_by_${cliName}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return blockers;
|
|
154
|
+
}
|
|
155
|
+
function routeCliCommandName(route) {
|
|
156
|
+
const command = String(route.command || '').replace(/^\$/, '').toLowerCase();
|
|
157
|
+
if (Object.hasOwn(COMMANDS, command))
|
|
158
|
+
return command;
|
|
159
|
+
const alias = (route.dollarAliases || [])
|
|
160
|
+
.map((value) => String(value || '').replace(/^\$/, '').toLowerCase())
|
|
161
|
+
.find((value) => Object.hasOwn(COMMANDS, value));
|
|
162
|
+
return alias || null;
|
|
163
|
+
}
|
|
164
|
+
function stopGateFiles(stopGate) {
|
|
165
|
+
const text = String(stopGate || '');
|
|
166
|
+
if (!text || text === 'none' || text === 'honest_mode' || text === 'plan-only')
|
|
167
|
+
return [];
|
|
168
|
+
return text.split('|').map((part) => part.trim()).filter((part) => part.endsWith('.json'));
|
|
169
|
+
}
|
|
130
170
|
export async function writeFeatureInventoryDocs({ root = packageRoot(), outFile = path.join(root, 'docs', 'feature-inventory.md') } = {}) {
|
|
131
171
|
const registry = await buildFeatureRegistry({ root });
|
|
132
172
|
const markdown = renderFeatureInventoryMarkdown(registry);
|
|
@@ -484,9 +524,12 @@ const SAFE_EXECUTABLE_FIXTURE_ARGS = Object.freeze({
|
|
|
484
524
|
'cli-stats': ['stats', '--json'],
|
|
485
525
|
'cli-dollar-commands': ['dollar-commands', '--json'],
|
|
486
526
|
'cli-fast-mode': ['fast-mode', 'status', '--json'],
|
|
527
|
+
'cli-task': ['task', 'instant', '--plan', '--json'],
|
|
528
|
+
'cli-triwiki': ['triwiki', 'index', '--json'],
|
|
529
|
+
'cli-daemon': ['daemon', 'status', '--json'],
|
|
487
530
|
'cli-dfix': ['dfix', 'fixture', '--json'],
|
|
488
531
|
'cli-all-features': ['all-features', 'complete', '--json'],
|
|
489
|
-
'route-team': ['team', 'fixture', '--mock', '--json'],
|
|
532
|
+
'route-team': ['team', 'fixture', '--mock', '--clones', '4', '--backend', 'fake', '--work-items', '4', '--json'],
|
|
490
533
|
'route-naruto': ['naruto', 'run', 'fixture', '--clones', '4', '--backend', 'fake', '--work-items', '4', '--json'],
|
|
491
534
|
'route-qa-loop': { setup: [['qa-loop', 'prepare', 'fixture API QA', '--json']], command: ['qa-loop', 'run', 'latest', '--mock', '--json'] },
|
|
492
535
|
'route-research': { setup: [['research', 'prepare', 'fixture research topic', '--json']], command: ['research', 'run', 'latest', '--mock', '--json'] },
|
|
@@ -671,6 +714,66 @@ function agentProofEvidenceFeature() {
|
|
|
671
714
|
}
|
|
672
715
|
});
|
|
673
716
|
}
|
|
717
|
+
function doctorImagegenRepairFeature() {
|
|
718
|
+
return baseFeature({
|
|
719
|
+
id: 'doctor:imagegen-repair',
|
|
720
|
+
commands: ['sks doctor --json', 'sks doctor --fix --json'],
|
|
721
|
+
aliases: ['repair.imagegen', 'imagegen_repair'],
|
|
722
|
+
category: 'safety',
|
|
723
|
+
maturity: 'beta',
|
|
724
|
+
intent: 'Doctor repair path that detects Codex App imagegen, attempts repair when requested, and reports imagegen_repair evidence without claiming success unless re-detection passes.',
|
|
725
|
+
voxel_triwiki_integration: 'policy voxel required for visual/image routes that depend on Codex App imagegen',
|
|
726
|
+
completion_proof_integration: 'doctor report imagegen_repair is consumed by imagegen route blockers before visual route proof',
|
|
727
|
+
known_gaps: ['live Codex App feature enablement remains environment-dependent and reports manual actions when unavailable'],
|
|
728
|
+
source_refs: {
|
|
729
|
+
cli_command_names: ['doctor'],
|
|
730
|
+
handler_keys: ['doctor'],
|
|
731
|
+
dollar_commands: [],
|
|
732
|
+
app_skill_aliases: [],
|
|
733
|
+
skills: ['imagegen']
|
|
734
|
+
}
|
|
735
|
+
});
|
|
736
|
+
}
|
|
737
|
+
function imagegenWiringFeatures() {
|
|
738
|
+
return [
|
|
739
|
+
baseFeature({
|
|
740
|
+
id: 'ux-review:run-wires-imagegen',
|
|
741
|
+
commands: ['npm run ux-review:run-wires-imagegen', 'sks ux-review run --image <screenshot> --generate-callouts --json'],
|
|
742
|
+
aliases: ['$Image-UX-Review', '$UX-Review'],
|
|
743
|
+
category: 'visual-memory',
|
|
744
|
+
maturity: 'beta',
|
|
745
|
+
intent: 'Image UX route start gate, shared gpt-image-2 adapter, callout extraction, and Codex App evidence validation wiring.',
|
|
746
|
+
voxel_triwiki_integration: 'image/source/bbox voxel required',
|
|
747
|
+
completion_proof_integration: 'image-ux-review-gate and Completion Proof must separate real Codex image evidence from mock/API fallback evidence',
|
|
748
|
+
known_gaps: ['live Codex App image generation remains environment-dependent'],
|
|
749
|
+
source_refs: {
|
|
750
|
+
cli_command_names: ['image-ux-review'],
|
|
751
|
+
handler_keys: ['image-ux-review', 'ux-review'],
|
|
752
|
+
dollar_commands: ['$Image-UX-Review', '$UX-Review'],
|
|
753
|
+
app_skill_aliases: ['$image-ux-review', '$ux-review'],
|
|
754
|
+
skills: ['image-ux-review', 'ux-review', 'imagegen']
|
|
755
|
+
}
|
|
756
|
+
}),
|
|
757
|
+
baseFeature({
|
|
758
|
+
id: 'ppt:real-imagegen-wiring',
|
|
759
|
+
commands: ['npm run ppt:real-imagegen-wiring', 'sks ppt review --deck <pptx> --json'],
|
|
760
|
+
aliases: ['$PPT'],
|
|
761
|
+
category: 'visual-memory',
|
|
762
|
+
maturity: 'beta',
|
|
763
|
+
intent: 'PPT slide callout review path reuses the shared gpt-image-2 adapter and records imagegen_evidence in PPT gates.',
|
|
764
|
+
voxel_triwiki_integration: 'image/source/bbox voxel required',
|
|
765
|
+
completion_proof_integration: 'ppt-imagegen-review-gate and ppt-gate must include Codex App imagegen evidence classes and hashes',
|
|
766
|
+
known_gaps: ['live deck export and live Codex App image generation remain environment-dependent'],
|
|
767
|
+
source_refs: {
|
|
768
|
+
cli_command_names: ['ppt'],
|
|
769
|
+
handler_keys: ['ppt'],
|
|
770
|
+
dollar_commands: ['$PPT'],
|
|
771
|
+
app_skill_aliases: ['$ppt'],
|
|
772
|
+
skills: ['ppt', 'imagegen']
|
|
773
|
+
}
|
|
774
|
+
})
|
|
775
|
+
];
|
|
776
|
+
}
|
|
674
777
|
function skillFeature(skillName) {
|
|
675
778
|
return baseFeature({
|
|
676
779
|
id: `skill-${slug(skillName)}`,
|
|
@@ -873,7 +976,7 @@ function routeKnownGaps(command) {
|
|
|
873
976
|
if (command === '$MAD-SKS')
|
|
874
977
|
return ['permission closed by owning gate'];
|
|
875
978
|
if (command === '$MAD-DB')
|
|
876
|
-
return ['
|
|
979
|
+
return ['deprecated alias; SQL-plane execution is merged into $MAD-SKS and must still read back postconditions and close the mission-local write profile'];
|
|
877
980
|
return [];
|
|
878
981
|
}
|
|
879
982
|
function checkRow(id, ok, blockers = []) {
|
package/dist/core/fsx.js
CHANGED
|
@@ -5,12 +5,42 @@ import os from 'node:os';
|
|
|
5
5
|
import crypto from 'node:crypto';
|
|
6
6
|
import { spawn } from 'node:child_process';
|
|
7
7
|
import { fileURLToPath } from 'node:url';
|
|
8
|
-
export const PACKAGE_VERSION = '
|
|
8
|
+
export const PACKAGE_VERSION = '5.1.2';
|
|
9
9
|
export const DEFAULT_PROCESS_TAIL_BYTES = 256 * 1024;
|
|
10
10
|
export const DEFAULT_PROCESS_TIMEOUT_MS = 30 * 60 * 1000;
|
|
11
11
|
export function nowIso() {
|
|
12
12
|
return new Date().toISOString();
|
|
13
13
|
}
|
|
14
|
+
export function lastLine(chunk) {
|
|
15
|
+
const lines = String(chunk || '').split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
|
|
16
|
+
return lines[lines.length - 1] || '';
|
|
17
|
+
}
|
|
18
|
+
export function throttleLines(fn, ms = 500) {
|
|
19
|
+
let lastAt = 0;
|
|
20
|
+
let pending = null;
|
|
21
|
+
let timer = null;
|
|
22
|
+
const flush = () => {
|
|
23
|
+
timer = null;
|
|
24
|
+
if (!pending)
|
|
25
|
+
return;
|
|
26
|
+
lastAt = Date.now();
|
|
27
|
+
const line = pending;
|
|
28
|
+
pending = null;
|
|
29
|
+
fn(line);
|
|
30
|
+
};
|
|
31
|
+
return (chunk) => {
|
|
32
|
+
const line = lastLine(chunk);
|
|
33
|
+
if (!line)
|
|
34
|
+
return;
|
|
35
|
+
pending = line;
|
|
36
|
+
const now = Date.now();
|
|
37
|
+
const wait = Math.max(0, ms - (now - lastAt));
|
|
38
|
+
if (wait === 0)
|
|
39
|
+
flush();
|
|
40
|
+
else if (!timer)
|
|
41
|
+
timer = setTimeout(flush, wait);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
14
44
|
export function sha256(input) {
|
|
15
45
|
return crypto.createHash('sha256').update(input).digest('hex');
|
|
16
46
|
}
|
|
@@ -101,6 +131,30 @@ export async function readJson(p, fallback) {
|
|
|
101
131
|
export async function writeJsonAtomic(p, data) {
|
|
102
132
|
await writeTextAtomic(p, `${JSON.stringify(data, null, 2)}\n`);
|
|
103
133
|
}
|
|
134
|
+
export async function writeReceiptRotated(p, data, opts = {}) {
|
|
135
|
+
await ensureDir(path.dirname(p));
|
|
136
|
+
const keep = Math.max(1, opts.keep ?? 5);
|
|
137
|
+
const prior = await fsp.readdir(path.dirname(p), { withFileTypes: true }).catch(() => []);
|
|
138
|
+
const base = path.basename(p);
|
|
139
|
+
const rotated = prior
|
|
140
|
+
.filter((entry) => entry.isFile() && entry.name.startsWith(`${base}.`) && entry.name.endsWith('.json'))
|
|
141
|
+
.map((entry) => path.join(path.dirname(p), entry.name));
|
|
142
|
+
const rotatedFiles = new Set(rotated);
|
|
143
|
+
const existing = await fsp.stat(p).catch(() => null);
|
|
144
|
+
if (existing) {
|
|
145
|
+
const stamp = new Date(existing.mtimeMs).toISOString().replace(/[:.]/g, '-');
|
|
146
|
+
const rotatedPath = path.join(path.dirname(p), `${base}.${stamp}.json`);
|
|
147
|
+
await fsp.rename(p, rotatedPath).catch(() => undefined);
|
|
148
|
+
rotatedFiles.add(rotatedPath);
|
|
149
|
+
}
|
|
150
|
+
await writeJsonAtomic(p, data);
|
|
151
|
+
const rows = await Promise.all([...rotatedFiles].map(async (file) => ({ file, stat: await fsp.stat(file).catch(() => null) })));
|
|
152
|
+
const removable = rows
|
|
153
|
+
.filter((row) => Boolean(row.stat))
|
|
154
|
+
.sort((a, b) => b.stat.mtimeMs - a.stat.mtimeMs)
|
|
155
|
+
.slice(keep);
|
|
156
|
+
await Promise.all(removable.map((row) => fsp.rm(row.file, { force: true }).catch(() => undefined)));
|
|
157
|
+
}
|
|
104
158
|
export async function writeBinaryAtomic(p, data) {
|
|
105
159
|
await ensureDir(path.dirname(p));
|
|
106
160
|
try {
|
|
@@ -129,6 +183,12 @@ export async function appendJsonl(p, obj) {
|
|
|
129
183
|
await ensureDir(path.dirname(p));
|
|
130
184
|
await fsp.appendFile(p, `${JSON.stringify(obj)}\n`, 'utf8');
|
|
131
185
|
}
|
|
186
|
+
export async function appendJsonlMany(p, rows) {
|
|
187
|
+
if (!rows.length)
|
|
188
|
+
return;
|
|
189
|
+
await ensureDir(path.dirname(p));
|
|
190
|
+
await fsp.appendFile(p, rows.map((row) => JSON.stringify(row)).join('\n') + '\n', 'utf8');
|
|
191
|
+
}
|
|
132
192
|
export async function appendJsonlBounded(p, obj, maxBytes = 5 * 1024 * 1024) {
|
|
133
193
|
await appendJsonl(p, obj);
|
|
134
194
|
try {
|
|
@@ -426,8 +486,37 @@ export async function readStdin() {
|
|
|
426
486
|
process.stdin.on('end', () => resolve(data));
|
|
427
487
|
});
|
|
428
488
|
}
|
|
489
|
+
export function managedSksTmpRoot(baseDir = os.tmpdir()) {
|
|
490
|
+
return path.join(baseDir, 'sks');
|
|
491
|
+
}
|
|
429
492
|
export function tmpdir(prefix = 'sks-') {
|
|
430
|
-
|
|
493
|
+
const base = managedSksTmpRoot();
|
|
494
|
+
fs.mkdirSync(base, { recursive: true });
|
|
495
|
+
return fs.mkdtempSync(path.join(base, prefix));
|
|
496
|
+
}
|
|
497
|
+
export async function withScratchDir(prefix = 'sks-', fn, opts = {}) {
|
|
498
|
+
const base = opts.baseDir || managedSksTmpRoot();
|
|
499
|
+
await fsp.mkdir(base, { recursive: true });
|
|
500
|
+
const dir = await fsp.mkdtemp(path.join(base, prefix));
|
|
501
|
+
try {
|
|
502
|
+
return await fn(dir);
|
|
503
|
+
}
|
|
504
|
+
finally {
|
|
505
|
+
if (!opts.keep)
|
|
506
|
+
await fsp.rm(dir, { recursive: true, force: true }).catch(() => undefined);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
export function withScratchDirSync(prefix = 'sks-', fn, opts = {}) {
|
|
510
|
+
const base = opts.baseDir || managedSksTmpRoot();
|
|
511
|
+
fs.mkdirSync(base, { recursive: true });
|
|
512
|
+
const dir = fs.mkdtempSync(path.join(base, prefix));
|
|
513
|
+
try {
|
|
514
|
+
return fn(dir);
|
|
515
|
+
}
|
|
516
|
+
finally {
|
|
517
|
+
if (!opts.keep)
|
|
518
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
519
|
+
}
|
|
431
520
|
}
|
|
432
521
|
export async function fileSize(p) {
|
|
433
522
|
try {
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fsp from 'node:fs/promises';
|
|
3
|
+
import { PACKAGE_VERSION, readJson, readText } from '../fsx.js';
|
|
4
|
+
import { loadSkillsManifest, reconcileSkills } from '../init/skills.js';
|
|
5
|
+
export async function maybeReconcileProjectSkillsPreflight(root) {
|
|
6
|
+
const manifestPath = path.join(root, '.agents', 'skills', '.sks-generated.json');
|
|
7
|
+
const manifest = await readJson(manifestPath, null);
|
|
8
|
+
const needsByManifest = manifest?.version && manifest.version !== PACKAGE_VERSION;
|
|
9
|
+
const needsByResidue = await hasProjectOfficialResidue(root);
|
|
10
|
+
if (!needsByManifest && !needsByResidue)
|
|
11
|
+
return null;
|
|
12
|
+
return reconcileSkills({
|
|
13
|
+
targetDir: path.join(root, '.agents', 'skills'),
|
|
14
|
+
scope: 'project',
|
|
15
|
+
fix: true
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
async function hasProjectOfficialResidue(root) {
|
|
19
|
+
const manifest = await loadSkillsManifest().catch(() => null);
|
|
20
|
+
const official = new Set([
|
|
21
|
+
...(manifest?.skills || []).map((skill) => canonical(skill.canonical_name)),
|
|
22
|
+
...(manifest?.skills || []).flatMap((skill) => (skill.deprecated_aliases || []).map((name) => canonical(name))),
|
|
23
|
+
...((manifest?.removed_skills || []).map((name) => canonical(name)))
|
|
24
|
+
]);
|
|
25
|
+
for (const dir of [path.join(root, '.agents', 'skills'), path.join(root, '.codex', 'skills')]) {
|
|
26
|
+
const rows = await fsp.readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
27
|
+
for (const row of rows) {
|
|
28
|
+
if (!row.isDirectory())
|
|
29
|
+
continue;
|
|
30
|
+
const text = await readText(path.join(dir, row.name, 'SKILL.md'), null);
|
|
31
|
+
if (typeof text !== 'string')
|
|
32
|
+
continue;
|
|
33
|
+
const display = /^name:\s*(.+)\s*$/m.exec(text)?.[1] || row.name;
|
|
34
|
+
if (official.has(canonical(display)))
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
function canonical(value) {
|
|
41
|
+
return String(value || '').trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=skill-reconcile-preflight.js.map
|