spexcode 0.6.2 → 0.6.6
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 +3 -1
- package/bin/spex.mjs +4 -0
- package/node_modules/@spexcode/session-core/dist/delivery-queue.d.ts +23 -0
- package/node_modules/@spexcode/session-core/dist/delivery-queue.js +195 -0
- package/node_modules/@spexcode/session-core/dist/index.d.ts +5 -0
- package/node_modules/@spexcode/session-core/dist/index.js +5 -0
- package/node_modules/@spexcode/session-core/dist/internal.d.ts +3 -0
- package/node_modules/@spexcode/session-core/dist/internal.js +3 -0
- package/node_modules/@spexcode/session-core/dist/message.d.ts +22 -0
- package/node_modules/@spexcode/session-core/dist/message.js +52 -0
- package/node_modules/@spexcode/session-core/dist/record-lock.d.ts +7 -0
- package/node_modules/@spexcode/session-core/dist/record-lock.js +152 -0
- package/node_modules/@spexcode/session-core/dist/runtime-session.d.ts +50 -0
- package/node_modules/@spexcode/session-core/dist/runtime-session.js +286 -0
- package/node_modules/@spexcode/session-core/dist/session-cursors.d.ts +14 -0
- package/node_modules/@spexcode/session-core/dist/session-cursors.js +82 -0
- package/node_modules/@spexcode/session-core/dist/session-timeline.d.ts +46 -0
- package/node_modules/@spexcode/session-core/dist/session-timeline.js +216 -0
- package/node_modules/@spexcode/session-core/package.json +33 -0
- package/node_modules/@spexcode/spec-cli/bin/spex.mjs +77 -0
- package/node_modules/@spexcode/spec-cli/dist/attach.d.ts +2 -0
- package/node_modules/@spexcode/spec-cli/dist/attach.js +48 -0
- package/node_modules/@spexcode/spec-cli/dist/claude-headless.d.ts +36 -0
- package/node_modules/@spexcode/spec-cli/dist/claude-headless.js +316 -0
- package/node_modules/@spexcode/spec-cli/dist/cli.d.ts +1 -0
- package/node_modules/@spexcode/spec-cli/dist/cli.js +1908 -0
- package/node_modules/@spexcode/spec-cli/dist/client.d.ts +112 -0
- package/node_modules/@spexcode/spec-cli/dist/client.js +481 -0
- package/node_modules/@spexcode/spec-cli/dist/cockpit.d.ts +7 -0
- package/node_modules/@spexcode/spec-cli/dist/cockpit.js +26 -0
- package/node_modules/@spexcode/spec-cli/dist/codex-headless.d.ts +1 -0
- package/{spec-cli/src/codex-headless.ts → node_modules/@spexcode/spec-cli/dist/codex-headless.js} +3 -9
- package/node_modules/@spexcode/spec-cli/dist/codex-runtime-generations.d.ts +58 -0
- package/node_modules/@spexcode/spec-cli/dist/codex-runtime-generations.js +798 -0
- package/node_modules/@spexcode/spec-cli/dist/commit-surgery.d.ts +1 -0
- package/node_modules/@spexcode/spec-cli/dist/commit-surgery.js +90 -0
- package/node_modules/@spexcode/spec-cli/dist/contract-filter.d.ts +14 -0
- package/node_modules/@spexcode/spec-cli/dist/contract-filter.js +219 -0
- package/node_modules/@spexcode/spec-cli/dist/dashboard-assets.d.ts +6 -0
- package/node_modules/@spexcode/spec-cli/dist/dashboard-assets.js +50 -0
- package/node_modules/@spexcode/spec-cli/dist/doctor.d.ts +9 -0
- package/node_modules/@spexcode/spec-cli/dist/doctor.js +553 -0
- package/node_modules/@spexcode/spec-cli/dist/eval-host.d.ts +1 -0
- package/node_modules/@spexcode/spec-cli/dist/eval-host.js +19 -0
- package/node_modules/@spexcode/spec-cli/dist/execution-trace.d.ts +26 -0
- package/node_modules/@spexcode/spec-cli/dist/execution-trace.js +475 -0
- package/node_modules/@spexcode/spec-cli/dist/file-write.d.ts +2 -0
- package/node_modules/@spexcode/spec-cli/dist/file-write.js +26 -0
- package/node_modules/@spexcode/spec-cli/dist/flat.d.ts +89 -0
- package/node_modules/@spexcode/spec-cli/dist/flat.js +1076 -0
- package/node_modules/@spexcode/spec-cli/dist/gateway-auth.d.ts +56 -0
- package/node_modules/@spexcode/spec-cli/dist/gateway-auth.js +168 -0
- package/node_modules/@spexcode/spec-cli/dist/gateway-hub.d.ts +28 -0
- package/node_modules/@spexcode/spec-cli/dist/gateway-hub.js +363 -0
- package/node_modules/@spexcode/spec-cli/dist/gateway.d.ts +38 -0
- package/node_modules/@spexcode/spec-cli/dist/gateway.js +527 -0
- package/node_modules/@spexcode/spec-cli/dist/graphCache.d.ts +27 -0
- package/node_modules/@spexcode/spec-cli/dist/graphCache.js +717 -0
- package/node_modules/@spexcode/spec-cli/dist/graphSnapshot.d.ts +14 -0
- package/node_modules/@spexcode/spec-cli/dist/graphSnapshot.js +36 -0
- package/node_modules/@spexcode/spec-cli/dist/graphStream.d.ts +85 -0
- package/node_modules/@spexcode/spec-cli/dist/graphStream.js +1195 -0
- package/node_modules/@spexcode/spec-cli/dist/guidance-catalog.d.ts +64 -0
- package/node_modules/@spexcode/spec-cli/dist/guidance-catalog.js +166 -0
- package/node_modules/@spexcode/spec-cli/dist/guide.d.ts +8 -0
- package/{spec-cli/src/guide.ts → node_modules/@spexcode/spec-cli/dist/guide.js} +36 -32
- package/node_modules/@spexcode/spec-cli/dist/harness-select.d.ts +18 -0
- package/node_modules/@spexcode/spec-cli/dist/harness-select.js +62 -0
- package/node_modules/@spexcode/spec-cli/dist/harness.d.ts +338 -0
- package/node_modules/@spexcode/spec-cli/dist/harness.js +3146 -0
- package/node_modules/@spexcode/spec-cli/dist/headless-controller.d.ts +9 -0
- package/node_modules/@spexcode/spec-cli/dist/headless-controller.js +47 -0
- package/node_modules/@spexcode/spec-cli/dist/help.d.ts +15 -0
- package/node_modules/@spexcode/spec-cli/dist/help.js +594 -0
- package/node_modules/@spexcode/spec-cli/dist/hook-prompts.d.ts +18 -0
- package/node_modules/@spexcode/spec-cli/dist/hook-prompts.js +122 -0
- package/node_modules/@spexcode/spec-cli/dist/hooks.d.ts +1 -0
- package/{spec-cli/src/hooks.ts → node_modules/@spexcode/spec-cli/dist/hooks.js} +15 -15
- package/node_modules/@spexcode/spec-cli/dist/host-resources.d.ts +97 -0
- package/node_modules/@spexcode/spec-cli/dist/host-resources.js +795 -0
- package/node_modules/@spexcode/spec-cli/dist/host.d.ts +88 -0
- package/node_modules/@spexcode/spec-cli/dist/host.js +663 -0
- package/node_modules/@spexcode/spec-cli/dist/index.d.ts +1 -0
- package/node_modules/@spexcode/spec-cli/dist/index.js +899 -0
- package/node_modules/@spexcode/spec-cli/dist/init.d.ts +1 -0
- package/node_modules/@spexcode/spec-cli/dist/init.js +284 -0
- package/node_modules/@spexcode/spec-cli/dist/issues-cli.d.ts +6 -0
- package/node_modules/@spexcode/spec-cli/dist/issues-cli.js +334 -0
- package/node_modules/@spexcode/spec-cli/dist/issues.d.ts +69 -0
- package/node_modules/@spexcode/spec-cli/dist/issues.js +189 -0
- package/node_modules/@spexcode/spec-cli/dist/lint.d.ts +34 -0
- package/node_modules/@spexcode/spec-cli/dist/lint.js +476 -0
- package/node_modules/@spexcode/spec-cli/dist/listen.d.ts +8 -0
- package/node_modules/@spexcode/spec-cli/dist/listen.js +24 -0
- package/node_modules/@spexcode/spec-cli/dist/localIssues.d.ts +65 -0
- package/node_modules/@spexcode/spec-cli/dist/localIssues.js +582 -0
- package/node_modules/@spexcode/spec-cli/dist/login-page.d.ts +5 -0
- package/{spec-cli/src/login-page.ts → node_modules/@spexcode/spec-cli/dist/login-page.js} +7 -7
- package/node_modules/@spexcode/spec-cli/dist/loop-in.d.ts +23 -0
- package/{spec-cli/src/loop-in.ts → node_modules/@spexcode/spec-cli/dist/loop-in.js} +35 -45
- package/node_modules/@spexcode/spec-cli/dist/machine-peer.d.ts +69 -0
- package/node_modules/@spexcode/spec-cli/dist/machine-peer.js +603 -0
- package/node_modules/@spexcode/spec-cli/dist/materialize.d.ts +18 -0
- package/node_modules/@spexcode/spec-cli/dist/materialize.js +468 -0
- package/node_modules/@spexcode/spec-cli/dist/mentions.d.ts +50 -0
- package/node_modules/@spexcode/spec-cli/dist/mentions.js +117 -0
- package/node_modules/@spexcode/spec-cli/dist/opencode-headless.d.ts +5 -0
- package/node_modules/@spexcode/spec-cli/dist/opencode-headless.js +215 -0
- package/node_modules/@spexcode/spec-cli/dist/opencode.d.ts +3 -0
- package/{spec-cli/src/opencode.ts → node_modules/@spexcode/spec-cli/dist/opencode.js} +9 -13
- package/node_modules/@spexcode/spec-cli/dist/pi-harness.d.ts +3 -0
- package/{spec-cli/src/pi-harness.ts → node_modules/@spexcode/spec-cli/dist/pi-harness.js} +45 -40
- package/node_modules/@spexcode/spec-cli/dist/pi-headless.d.ts +25 -0
- package/node_modules/@spexcode/spec-cli/dist/pi-headless.js +196 -0
- package/node_modules/@spexcode/spec-cli/dist/plugin-harness.d.ts +21 -0
- package/node_modules/@spexcode/spec-cli/dist/plugin-harness.js +146 -0
- package/node_modules/@spexcode/spec-cli/dist/pty-bridge.d.ts +10 -0
- package/node_modules/@spexcode/spec-cli/dist/pty-bridge.js +404 -0
- package/node_modules/@spexcode/spec-cli/dist/pty-helper.d.mts +1 -0
- package/node_modules/@spexcode/spec-cli/dist/pty-helper.mjs +101 -0
- package/node_modules/@spexcode/spec-cli/dist/pty-native-helper.d.mts +2 -0
- package/node_modules/@spexcode/spec-cli/dist/pty-native-helper.mjs +23 -0
- package/node_modules/@spexcode/spec-cli/dist/public-graph.d.ts +46 -0
- package/node_modules/@spexcode/spec-cli/dist/public-graph.js +56 -0
- package/node_modules/@spexcode/spec-cli/dist/ranker.d.ts +15 -0
- package/node_modules/@spexcode/spec-cli/dist/ranker.js +188 -0
- package/node_modules/@spexcode/spec-cli/dist/reaper.d.ts +6 -0
- package/node_modules/@spexcode/spec-cli/dist/reaper.js +81 -0
- package/node_modules/@spexcode/spec-cli/dist/reviews.d.ts +189 -0
- package/node_modules/@spexcode/spec-cli/dist/reviews.js +350 -0
- package/node_modules/@spexcode/spec-cli/dist/runtime-guard.d.ts +6 -0
- package/node_modules/@spexcode/spec-cli/dist/runtime-guard.js +37 -0
- package/node_modules/@spexcode/spec-cli/dist/runtime-ownership.d.ts +21 -0
- package/node_modules/@spexcode/spec-cli/dist/runtime-ownership.js +84 -0
- package/node_modules/@spexcode/spec-cli/dist/runtime-rotate.d.ts +1 -0
- package/node_modules/@spexcode/spec-cli/dist/runtime-rotate.js +58 -0
- package/node_modules/@spexcode/spec-cli/dist/search.bench.d.mts +1 -0
- package/node_modules/@spexcode/spec-cli/dist/search.bench.mjs +75 -0
- package/node_modules/@spexcode/spec-cli/dist/search.d.ts +20 -0
- package/node_modules/@spexcode/spec-cli/dist/search.js +61 -0
- package/node_modules/@spexcode/spec-cli/dist/session-declarations.d.ts +13 -0
- package/node_modules/@spexcode/spec-cli/dist/session-declarations.js +126 -0
- package/node_modules/@spexcode/spec-cli/dist/session-execution.d.ts +10 -0
- package/node_modules/@spexcode/spec-cli/dist/session-execution.js +70 -0
- package/node_modules/@spexcode/spec-cli/dist/session-files.d.ts +28 -0
- package/node_modules/@spexcode/spec-cli/dist/session-files.js +130 -0
- package/node_modules/@spexcode/spec-cli/dist/session-follow.d.ts +31 -0
- package/node_modules/@spexcode/spec-cli/dist/session-follow.js +179 -0
- package/node_modules/@spexcode/spec-cli/dist/session-reparent.d.ts +10 -0
- package/node_modules/@spexcode/spec-cli/dist/session-reparent.js +33 -0
- package/node_modules/@spexcode/spec-cli/dist/session-timeline.d.ts +11 -0
- package/node_modules/@spexcode/spec-cli/dist/session-timeline.js +20 -0
- package/node_modules/@spexcode/spec-cli/dist/session-web.d.ts +24 -0
- package/node_modules/@spexcode/spec-cli/dist/session-web.js +141 -0
- package/node_modules/@spexcode/spec-cli/dist/sessions.d.ts +433 -0
- package/node_modules/@spexcode/spec-cli/dist/sessions.js +4667 -0
- package/node_modules/@spexcode/spec-cli/dist/sh.d.ts +1 -0
- package/node_modules/@spexcode/spec-cli/dist/sh.js +3 -0
- package/node_modules/@spexcode/spec-cli/dist/shim-runtime.d.ts +1 -0
- package/{spec-cli/src/shim-runtime.ts → node_modules/@spexcode/spec-cli/dist/shim-runtime.js} +3 -4
- package/node_modules/@spexcode/spec-cli/dist/slash-commands.d.ts +9 -0
- package/node_modules/@spexcode/spec-cli/dist/slash-commands.js +307 -0
- package/node_modules/@spexcode/spec-cli/dist/source-files.d.ts +9 -0
- package/node_modules/@spexcode/spec-cli/dist/source-files.js +113 -0
- package/node_modules/@spexcode/spec-cli/dist/supervise.d.ts +1 -0
- package/node_modules/@spexcode/spec-cli/dist/supervise.js +308 -0
- package/node_modules/@spexcode/spec-cli/dist/tree.d.ts +25 -0
- package/node_modules/@spexcode/spec-cli/dist/tree.js +98 -0
- package/node_modules/@spexcode/spec-cli/dist/tsx-bin.d.ts +3 -0
- package/node_modules/@spexcode/spec-cli/dist/tsx-bin.js +41 -0
- package/node_modules/@spexcode/spec-cli/dist/uninstall.d.ts +3 -0
- package/node_modules/@spexcode/spec-cli/dist/uninstall.js +177 -0
- package/node_modules/@spexcode/spec-cli/dist/uploads.d.ts +36 -0
- package/node_modules/@spexcode/spec-cli/dist/uploads.js +243 -0
- package/node_modules/@spexcode/spec-cli/dist/worktree-sources.d.ts +1 -0
- package/node_modules/@spexcode/spec-cli/dist/worktree-sources.js +47 -0
- package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/dispatch.sh +5 -5
- package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/harness.sh +1 -1
- package/node_modules/@spexcode/spec-cli/package.json +49 -0
- package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/commands/supervisor/spec.md +8 -0
- package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-first/spec-first.sh +1 -1
- package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-of-file/spec-of-file.sh +1 -0
- package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/stop-gate/spec.md +2 -2
- package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/stop-gate/stop-gate.sh +31 -29
- package/node_modules/@spexcode/spec-core/dist/anchors.d.ts +94 -0
- package/node_modules/@spexcode/spec-core/dist/anchors.js +730 -0
- package/node_modules/@spexcode/spec-core/dist/git.d.ts +170 -0
- package/node_modules/@spexcode/spec-core/dist/git.js +2768 -0
- package/node_modules/@spexcode/spec-core/dist/graph-delta.d.ts +44 -0
- package/node_modules/@spexcode/spec-core/dist/graph-delta.js +72 -0
- package/node_modules/@spexcode/spec-core/dist/graph.d.ts +34 -0
- package/node_modules/@spexcode/spec-core/dist/graph.js +237 -0
- package/node_modules/@spexcode/spec-core/dist/graphDelta.d.ts +3 -0
- package/node_modules/@spexcode/spec-core/dist/graphDelta.js +13 -0
- package/node_modules/@spexcode/spec-core/dist/harness-identity.d.ts +31 -0
- package/node_modules/@spexcode/spec-core/dist/harness-identity.js +20 -0
- package/node_modules/@spexcode/spec-core/dist/identity-presets.d.ts +152 -0
- package/node_modules/@spexcode/spec-core/dist/identity-presets.js +132 -0
- package/node_modules/@spexcode/spec-core/dist/index.d.ts +45 -0
- package/node_modules/@spexcode/spec-core/dist/index.js +19 -0
- package/node_modules/@spexcode/spec-core/dist/layout.d.ts +187 -0
- package/node_modules/@spexcode/spec-core/dist/layout.js +548 -0
- package/node_modules/@spexcode/spec-core/dist/process-identity.d.ts +37 -0
- package/node_modules/@spexcode/spec-core/dist/process-identity.js +214 -0
- package/node_modules/@spexcode/spec-core/dist/project-identity.d.ts +12 -0
- package/node_modules/@spexcode/spec-core/dist/project-identity.js +71 -0
- package/node_modules/@spexcode/spec-core/dist/project-store.d.ts +3 -0
- package/node_modules/@spexcode/spec-core/dist/project-store.js +14 -0
- package/node_modules/@spexcode/spec-core/dist/resilience.d.ts +2 -0
- package/node_modules/@spexcode/spec-core/dist/resilience.js +40 -0
- package/node_modules/@spexcode/spec-core/dist/review/index.d.ts +3 -0
- package/node_modules/@spexcode/spec-core/dist/review/index.js +5 -0
- package/node_modules/@spexcode/spec-core/dist/review/reviewFilters.d.ts +77 -0
- package/node_modules/@spexcode/spec-core/dist/review/reviewFilters.js +308 -0
- package/node_modules/@spexcode/spec-core/dist/review/reviewQuery.d.ts +66 -0
- package/node_modules/@spexcode/spec-core/dist/review/reviewQuery.js +180 -0
- package/node_modules/@spexcode/spec-core/dist/review/session.d.ts +4 -0
- package/node_modules/@spexcode/spec-core/dist/review/session.js +8 -0
- package/node_modules/@spexcode/spec-core/dist/reviewSnapshot.d.ts +15 -0
- package/node_modules/@spexcode/spec-core/dist/reviewSnapshot.js +12 -0
- package/node_modules/@spexcode/spec-core/dist/root-lru.d.ts +4 -0
- package/{spec-cli/src/root-lru.ts → node_modules/@spexcode/spec-core/dist/root-lru.js} +26 -30
- package/node_modules/@spexcode/spec-core/dist/specs.d.ts +117 -0
- package/node_modules/@spexcode/spec-core/dist/specs.js +489 -0
- package/node_modules/@spexcode/spec-core/package.json +28 -0
- package/node_modules/@spexcode/spec-eval/dist/cache.d.ts +10 -0
- package/node_modules/@spexcode/spec-eval/dist/cache.js +50 -0
- package/node_modules/@spexcode/spec-eval/dist/cli.d.ts +22 -0
- package/node_modules/@spexcode/spec-eval/dist/cli.js +981 -0
- package/node_modules/@spexcode/spec-eval/dist/evaltab.d.ts +98 -0
- package/node_modules/@spexcode/spec-eval/dist/evaltab.js +176 -0
- package/node_modules/@spexcode/spec-eval/dist/filing.d.ts +16 -0
- package/node_modules/@spexcode/spec-eval/dist/filing.js +36 -0
- package/node_modules/@spexcode/spec-eval/dist/freshness.d.ts +48 -0
- package/node_modules/@spexcode/spec-eval/dist/freshness.js +799 -0
- package/node_modules/@spexcode/spec-eval/dist/host.d.ts +46 -0
- package/node_modules/@spexcode/spec-eval/dist/host.js +53 -0
- package/node_modules/@spexcode/spec-eval/dist/humanok.d.ts +11 -0
- package/node_modules/@spexcode/spec-eval/dist/humanok.js +27 -0
- package/node_modules/@spexcode/spec-eval/dist/index.d.ts +4 -0
- package/node_modules/@spexcode/spec-eval/dist/index.js +4 -0
- package/node_modules/@spexcode/spec-eval/dist/remarks.d.ts +31 -0
- package/node_modules/@spexcode/spec-eval/dist/remarks.js +1 -0
- package/node_modules/@spexcode/spec-eval/dist/scenariofresh.d.ts +13 -0
- package/node_modules/@spexcode/spec-eval/dist/scenariofresh.js +303 -0
- package/node_modules/@spexcode/spec-eval/dist/scenarios.d.ts +99 -0
- package/node_modules/@spexcode/spec-eval/dist/scenarios.js +650 -0
- package/node_modules/@spexcode/spec-eval/dist/sessioneval.d.ts +307 -0
- package/node_modules/@spexcode/spec-eval/dist/sessioneval.js +1883 -0
- package/node_modules/@spexcode/spec-eval/dist/sidecar.d.ts +55 -0
- package/node_modules/@spexcode/spec-eval/dist/sidecar.js +82 -0
- package/node_modules/@spexcode/spec-eval/dist/timeline.d.ts +25 -0
- package/node_modules/@spexcode/spec-eval/dist/timeline.js +65 -0
- package/node_modules/@spexcode/spec-eval/dist/ui-path.d.ts +1 -0
- package/node_modules/@spexcode/spec-eval/dist/ui-path.js +2 -0
- package/node_modules/@spexcode/spec-eval/package.json +36 -0
- package/node_modules/@spexcode/spec-forge/dist/cache.d.ts +29 -0
- package/node_modules/@spexcode/spec-forge/dist/cache.js +59 -0
- package/node_modules/@spexcode/spec-forge/dist/cli.d.ts +1 -0
- package/node_modules/@spexcode/spec-forge/dist/cli.js +100 -0
- package/node_modules/@spexcode/spec-forge/dist/drivers/github.d.ts +2 -0
- package/node_modules/@spexcode/spec-forge/dist/drivers/github.js +116 -0
- package/node_modules/@spexcode/spec-forge/dist/drivers/gitlab.d.ts +7 -0
- package/node_modules/@spexcode/spec-forge/dist/drivers/gitlab.js +144 -0
- package/node_modules/@spexcode/spec-forge/dist/drivers.d.ts +10 -0
- package/node_modules/@spexcode/spec-forge/dist/drivers.js +83 -0
- package/node_modules/@spexcode/spec-forge/dist/index.d.ts +4 -0
- package/node_modules/@spexcode/spec-forge/dist/index.js +4 -0
- package/node_modules/@spexcode/spec-forge/dist/links.d.ts +15 -0
- package/node_modules/@spexcode/spec-forge/dist/links.js +65 -0
- package/node_modules/@spexcode/spec-forge/dist/needs-eval.d.ts +10 -0
- package/node_modules/@spexcode/spec-forge/dist/needs-eval.js +20 -0
- package/node_modules/@spexcode/spec-forge/dist/port.d.ts +53 -0
- package/node_modules/@spexcode/spec-forge/dist/port.js +1 -0
- package/node_modules/@spexcode/spec-forge/dist/resident.d.ts +7 -0
- package/node_modules/@spexcode/spec-forge/dist/resident.js +43 -0
- package/node_modules/@spexcode/spec-forge/package.json +32 -0
- package/package.json +33 -19
- package/spec-cli/bin/spex.mjs +0 -69
- package/spec-cli/src/anchors.ts +0 -728
- package/spec-cli/src/attach.ts +0 -43
- package/spec-cli/src/claude-headless.ts +0 -321
- package/spec-cli/src/cli.ts +0 -1258
- package/spec-cli/src/client.ts +0 -414
- package/spec-cli/src/cockpit.ts +0 -43
- package/spec-cli/src/codex-runtime-generations.ts +0 -646
- package/spec-cli/src/commit-surgery.ts +0 -68
- package/spec-cli/src/contract-filter.ts +0 -202
- package/spec-cli/src/delivery-queue.ts +0 -165
- package/spec-cli/src/doctor.ts +0 -516
- package/spec-cli/src/execution-trace.ts +0 -444
- package/spec-cli/src/file-write.ts +0 -22
- package/spec-cli/src/gateway-auth.ts +0 -181
- package/spec-cli/src/gateway-hub.ts +0 -358
- package/spec-cli/src/gateway.ts +0 -461
- package/spec-cli/src/git.ts +0 -2556
- package/spec-cli/src/graph.ts +0 -271
- package/spec-cli/src/graphCache.ts +0 -710
- package/spec-cli/src/graphDelta.ts +0 -77
- package/spec-cli/src/graphStream.ts +0 -1019
- package/spec-cli/src/harness-select.ts +0 -77
- package/spec-cli/src/harness.ts +0 -3025
- package/spec-cli/src/headless-controller.ts +0 -63
- package/spec-cli/src/help.ts +0 -492
- package/spec-cli/src/host-resources.ts +0 -762
- package/spec-cli/src/host.ts +0 -611
- package/spec-cli/src/identity-presets.d.ts +0 -13
- package/spec-cli/src/identity-presets.js +0 -138
- package/spec-cli/src/index.ts +0 -818
- package/spec-cli/src/init.ts +0 -258
- package/spec-cli/src/issues-cli.ts +0 -276
- package/spec-cli/src/issues.ts +0 -237
- package/spec-cli/src/layout.ts +0 -640
- package/spec-cli/src/lint.ts +0 -488
- package/spec-cli/src/listen.ts +0 -28
- package/spec-cli/src/localIssues.ts +0 -538
- package/spec-cli/src/materialize.ts +0 -417
- package/spec-cli/src/mentions.ts +0 -81
- package/spec-cli/src/opencode-headless.ts +0 -205
- package/spec-cli/src/pi-headless.ts +0 -153
- package/spec-cli/src/plugin-harness.ts +0 -157
- package/spec-cli/src/process-identity.ts +0 -207
- package/spec-cli/src/project-identity.ts +0 -73
- package/spec-cli/src/project-store.ts +0 -17
- package/spec-cli/src/pty-bridge.ts +0 -396
- package/spec-cli/src/pty-helper.mjs +0 -96
- package/spec-cli/src/pty-native-helper.mjs +0 -22
- package/spec-cli/src/ranker.ts +0 -191
- package/spec-cli/src/reaper.ts +0 -125
- package/spec-cli/src/resilience.ts +0 -41
- package/spec-cli/src/reviewSnapshot.ts +0 -28
- package/spec-cli/src/reviews.ts +0 -434
- package/spec-cli/src/runtime-guard.ts +0 -35
- package/spec-cli/src/runtime-ownership.ts +0 -88
- package/spec-cli/src/search.bench.mjs +0 -80
- package/spec-cli/src/search.ts +0 -63
- package/spec-cli/src/session-cursors.ts +0 -91
- package/spec-cli/src/session-execution.ts +0 -68
- package/spec-cli/src/session-files.ts +0 -121
- package/spec-cli/src/session-follow.ts +0 -182
- package/spec-cli/src/session-reparent.ts +0 -33
- package/spec-cli/src/session-timeline.ts +0 -247
- package/spec-cli/src/session-web.ts +0 -135
- package/spec-cli/src/sessions.ts +0 -3883
- package/spec-cli/src/sh.ts +0 -3
- package/spec-cli/src/slash-commands.ts +0 -318
- package/spec-cli/src/source-files.ts +0 -104
- package/spec-cli/src/specs.ts +0 -498
- package/spec-cli/src/supervise.ts +0 -245
- package/spec-cli/src/tree.ts +0 -118
- package/spec-cli/src/tsx-bin.ts +0 -18
- package/spec-cli/src/uninstall.ts +0 -171
- package/spec-cli/src/uploads.ts +0 -253
- package/spec-cli/src/worktree-sources.ts +0 -42
- package/spec-cli/templates/spec/project/.plugins/commands/supervisor/spec.md +0 -8
- package/spec-dashboard/dist/assets/App-B6IbFbGu.js +0 -2
- package/spec-dashboard/dist/assets/Dashboard-C5ap-Sga.css +0 -1
- package/spec-dashboard/dist/assets/Dashboard-_sDk7Rcg.js +0 -27
- package/spec-dashboard/dist/assets/EvalsPage-BT357Lyt.js +0 -2
- package/spec-dashboard/dist/assets/IssuesPage-BG9rNOgV.js +0 -1
- package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/spec-dashboard/dist/assets/MobileApp-D9yPMR3A.js +0 -2
- package/spec-dashboard/dist/assets/Modal-B3EcgeA3.js +0 -1
- package/spec-dashboard/dist/assets/PageScroll-CNZOugWV.js +0 -1
- package/spec-dashboard/dist/assets/ProjectsPage-C2CRHmvs.js +0 -1
- package/spec-dashboard/dist/assets/SessionInterface-6GBZ9nXN.css +0 -32
- package/spec-dashboard/dist/assets/SessionInterface-DOEjuT3l.js +0 -40
- package/spec-dashboard/dist/assets/SessionWindow-1nYgZ4CL.js +0 -1
- package/spec-dashboard/dist/assets/Settings-7WeTJn0V.js +0 -1
- package/spec-dashboard/dist/assets/Thread-CEbzAFQn.js +0 -13
- package/spec-dashboard/dist/assets/bindings-BC9vqpYU.js +0 -1
- package/spec-dashboard/dist/assets/data-SlvxNA2r.js +0 -1
- package/spec-dashboard/dist/assets/index-DLVeOHL-.js +0 -41
- package/spec-dashboard/dist/assets/index-DYLGfPjx.css +0 -1
- package/spec-dashboard/dist/assets/launch-Cp579UoJ.css +0 -1
- package/spec-dashboard/dist/assets/launch-yxCYr64x.js +0 -276
- package/spec-dashboard/dist/assets/sessionSurface--7l69h4F.js +0 -1
- package/spec-dashboard/dist/index.html +0 -29
- package/spec-dashboard/src/reviewFilters.js +0 -322
- package/spec-dashboard/src/reviewQuery.js +0 -174
- package/spec-dashboard/src/session.js +0 -199
- package/spec-eval/src/cache.ts +0 -57
- package/spec-eval/src/cli.ts +0 -894
- package/spec-eval/src/evaltab.ts +0 -264
- package/spec-eval/src/filing.ts +0 -39
- package/spec-eval/src/freshness.ts +0 -836
- package/spec-eval/src/humanok.ts +0 -28
- package/spec-eval/src/scenariofresh.ts +0 -244
- package/spec-eval/src/scenarios.ts +0 -672
- package/spec-eval/src/sessioneval.ts +0 -2220
- package/spec-eval/src/sidecar.ts +0 -93
- package/spec-eval/src/timeline.ts +0 -54
- package/spec-forge/src/__fixtures__/github-forge.json +0 -63
- package/spec-forge/src/cache.ts +0 -66
- package/spec-forge/src/cli.ts +0 -99
- package/spec-forge/src/drivers/github.ts +0 -132
- package/spec-forge/src/drivers/gitlab.ts +0 -153
- package/spec-forge/src/drivers.ts +0 -73
- package/spec-forge/src/links.ts +0 -72
- package/spec-forge/src/needs-eval.ts +0 -29
- package/spec-forge/src/port.ts +0 -36
- package/spec-forge/src/resident.ts +0 -46
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/README.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/compat/mark-active-0.5.2-eef1.fixture +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/compat/mark-active-sed-v0.fixture +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/commit-msg +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/post-checkout +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/post-merge +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/pre-commit +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/prepare-commit-msg +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/reference-transaction +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/extract/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/regroup/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/rename/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/tidy/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/comment-altitude/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/idle/idle.sh +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/idle/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/mark-active/mark-active.sh +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/mark-active/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/session-fail/fail.sh +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/session-fail/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-first/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-of-file/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/prompts/atomic-landing/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/prompts/forge-link/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/prompts/memory-hygiene/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/prompts/reproduce-before-fix/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/prompts/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/skills/distill/digest.mjs +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/skills/distill/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/skills/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/spec.md +0 -0
- /package/{spec-cli → node_modules/@spexcode/spec-core}/templates/spexcode.json +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { ForgeIssue, ForgeLabel, ForgePR } from '@spexcode/spec-forge/port';
|
|
2
|
+
import { type DispatchOutcome } from './mentions.js';
|
|
3
|
+
import type { Reply, Issue, RemarkTrack } from '@spexcode/spec-eval/remarks';
|
|
4
|
+
export type { Reply, Issue } from '@spexcode/spec-eval/remarks';
|
|
5
|
+
export declare const isRemark: (r: Reply) => boolean;
|
|
6
|
+
export type IssueLabel = ForgeLabel;
|
|
7
|
+
export type ForgeState = {
|
|
8
|
+
issues: ForgeIssue[];
|
|
9
|
+
prs: ForgePR[];
|
|
10
|
+
};
|
|
11
|
+
export type ForgeSlice = {
|
|
12
|
+
host: string;
|
|
13
|
+
state: ForgeState;
|
|
14
|
+
};
|
|
15
|
+
export type IssueStore = {
|
|
16
|
+
id: string;
|
|
17
|
+
label: string;
|
|
18
|
+
kind: 'local' | 'forge';
|
|
19
|
+
writable: true;
|
|
20
|
+
};
|
|
21
|
+
export declare function issueStores(): IssueStore[];
|
|
22
|
+
export declare const trackKey: (node: string, scenario: string) => string;
|
|
23
|
+
export declare const isEvalConcern: (concern: string) => boolean;
|
|
24
|
+
export declare function loadEvalRemarkTracks(): Map<string, RemarkTrack>;
|
|
25
|
+
export declare function fromForge(slice: ForgeSlice, nodeIds: string[]): Issue[];
|
|
26
|
+
export declare function mergedIssues(forge: ForgeSlice | null, nodeIds: string[]): Issue[];
|
|
27
|
+
export declare function boardThreads(forge: ForgeSlice | null, nodeIds: string[]): {
|
|
28
|
+
issues: Issue[];
|
|
29
|
+
stamp: string;
|
|
30
|
+
};
|
|
31
|
+
export declare function threadStamp(threads: Issue[]): string;
|
|
32
|
+
export declare function createIssue(concern: string, opts?: {
|
|
33
|
+
store?: string;
|
|
34
|
+
nodes?: string[];
|
|
35
|
+
body?: string;
|
|
36
|
+
evidence?: string[];
|
|
37
|
+
author?: string;
|
|
38
|
+
}): Promise<{
|
|
39
|
+
store: string;
|
|
40
|
+
id: string;
|
|
41
|
+
nodes: string[];
|
|
42
|
+
url?: string;
|
|
43
|
+
outcomes: DispatchOutcome[];
|
|
44
|
+
}>;
|
|
45
|
+
export declare function promote(id: string, opts?: {
|
|
46
|
+
author?: string;
|
|
47
|
+
}): Promise<{
|
|
48
|
+
url: string;
|
|
49
|
+
number: number;
|
|
50
|
+
host: string;
|
|
51
|
+
}>;
|
|
52
|
+
export declare function replyIssue(id: string, body: string, opts?: {
|
|
53
|
+
author?: string;
|
|
54
|
+
node?: string | null;
|
|
55
|
+
evidence?: string[];
|
|
56
|
+
}): Promise<{
|
|
57
|
+
store: string;
|
|
58
|
+
replies?: Reply[];
|
|
59
|
+
url?: string;
|
|
60
|
+
thread?: Issue;
|
|
61
|
+
author: string;
|
|
62
|
+
outcomes: DispatchOutcome[];
|
|
63
|
+
}>;
|
|
64
|
+
export declare function closeIssue(id: string): Promise<{
|
|
65
|
+
store: string;
|
|
66
|
+
status: string;
|
|
67
|
+
url?: string;
|
|
68
|
+
}>;
|
|
69
|
+
export declare function findIssue(id: string, forge: ForgeSlice | null, nodeIds: string[]): Issue | undefined;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { resolveLinks } from '@spexcode/spec-forge/links';
|
|
2
|
+
import { FORGE_DRIVERS, forgeDriverFor, forgeIssueStores, resolveForgeHost } from '@spexcode/spec-forge/drivers';
|
|
3
|
+
import { closeLocalIssue, loadLocalIssues, loadOne, postLocalIssue, reply, replyLocalIssue, parseEvalConcern } from './localIssues.js';
|
|
4
|
+
import { dispatchNewMentions, parseMentions } from './mentions.js';
|
|
5
|
+
import { envSessionId } from '@spexcode/spec-core';
|
|
6
|
+
// A Reply is a plain thread post `{by, at, body}` — OR, when it carries the fields below, a REMARK
|
|
7
|
+
// ([[remark-substrate]]): a reply that pins a RESOLVABLE concern to its host (an issue or a scenario). A
|
|
8
|
+
// remark is not a new record type: it is a reply with the mutable `resolved` bit, a stable `rid` (so it is
|
|
9
|
+
// addressable across retracts), and the `targetCodeSha` it was authored against (the reading it judges). A
|
|
10
|
+
// plain reply omits them all and parses/serializes unchanged (backward compatible). `isRemark` = rid set.
|
|
11
|
+
export const isRemark = (r) => r.rid !== undefined;
|
|
12
|
+
export function issueStores() {
|
|
13
|
+
return [
|
|
14
|
+
{ id: 'local', label: 'local', kind: 'local', writable: true },
|
|
15
|
+
...forgeIssueStores().map((s) => ({ ...s, writable: true })),
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
function inferNodes(concern, body, explicit = []) {
|
|
19
|
+
return [...new Set([...explicit, ...parseMentions(`${concern}\n${body || ''}`).nodes])];
|
|
20
|
+
}
|
|
21
|
+
function forgeIssueBody(concern, body, nodes, evidence = []) {
|
|
22
|
+
return [
|
|
23
|
+
(body || `(no detail given — ${concern})`).trim(),
|
|
24
|
+
nodes.length ? `Spec: ${nodes.join(', ')}` : '',
|
|
25
|
+
evidence.length ? `Evidence: ${evidence.join(', ')} (evidence content hashes)` : '',
|
|
26
|
+
].filter(Boolean).join('\n\n');
|
|
27
|
+
}
|
|
28
|
+
// ── the (node, scenario) ↔ eval-thread join ([[remark-teeth]]) ────────────────────────────────────────
|
|
29
|
+
// A scenario's remark track lives ONCE in trunk, keyed by its `eval: <node> · <scenario>` concern thread
|
|
30
|
+
// (R4). This is the ONE server-side overlay: the same join the dashboard's Annotator used to compute
|
|
31
|
+
// client-side (concern-key matching), lifted here so the CLI, the board fold, the session proof, and the
|
|
32
|
+
// annotator all read ONE join. It returns, per pair, the thread plus its REMARK replies (the resolvable
|
|
33
|
+
// ones — a plain comment on the thread is not a remark). The teeth ([[remark-teeth]]) read the remark
|
|
34
|
+
// signals; the annotator reads the thread.
|
|
35
|
+
// `eval: <node> · <scenario>` — node first (never contains ' · '), then the scenario (may). One thread per
|
|
36
|
+
// pair (EventDetail.jsx evalConcern / localIssues.ts resolveRemarkHost mint it), so the last write wins is fine.
|
|
37
|
+
export const trackKey = (node, scenario) => `${node} · ${scenario}`;
|
|
38
|
+
// an eval-remark thread is the eval scoreboard's data, NOT a drain-worthy issue (I1: a scenario-scoped
|
|
39
|
+
// concern is a remark, never an issue). Its `eval: <node> · <scenario>` concern is the tell — the SAME key
|
|
40
|
+
// loadEvalRemarkTracks isolates them by. The two reads are complementary over one store: mergedIssues (the
|
|
41
|
+
// ISSUE surfaces) excludes these; loadEvalRemarkTracks (the EVAL surfaces) keeps only these.
|
|
42
|
+
export const isEvalConcern = (concern) => !!parseEvalConcern(concern);
|
|
43
|
+
// read the whole local store ONCE and split the eval-concern threads out (directive 3): trunk-scoped,
|
|
44
|
+
// read-time, no branch write. A remark whose scenario no longer exists still LOADS here (it just keys a pair
|
|
45
|
+
// no reading joins) — never a crash, per [[remark-teeth]]'s dangling clause.
|
|
46
|
+
export function loadEvalRemarkTracks() {
|
|
47
|
+
const out = new Map();
|
|
48
|
+
for (const t of loadLocalIssues()) {
|
|
49
|
+
const parsed = parseEvalConcern(t.concern);
|
|
50
|
+
if (!parsed)
|
|
51
|
+
continue;
|
|
52
|
+
const { node, scenario } = parsed;
|
|
53
|
+
out.set(trackKey(node, scenario), { threadId: t.id, node, scenario, thread: t, remarks: t.replies.filter(isRemark) });
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
// forge → Issue, at the adapter boundary: the host's node-naming conventions (`Spec:` body marker +
|
|
58
|
+
// transitive PR links — spec-forge links.ts) become plain `nodes[]` HERE, validated against the real node
|
|
59
|
+
// ids, so nothing downstream ever knows a marker existed. Every raw issue maps — linked or not — because
|
|
60
|
+
// the merged list is the whole set, not just the per-node view.
|
|
61
|
+
export function fromForge(slice, nodeIds) {
|
|
62
|
+
const nodesByNumber = new Map();
|
|
63
|
+
for (const link of resolveLinks(slice.state.issues, slice.state.prs, nodeIds))
|
|
64
|
+
for (const i of link.issues) {
|
|
65
|
+
const arr = nodesByNumber.get(i.number) ?? [];
|
|
66
|
+
arr.push(link.node);
|
|
67
|
+
nodesByNumber.set(i.number, arr);
|
|
68
|
+
}
|
|
69
|
+
return slice.state.issues.map((i) => ({
|
|
70
|
+
id: `${slice.host}#${i.number}`,
|
|
71
|
+
store: slice.host,
|
|
72
|
+
concern: i.title,
|
|
73
|
+
by: i.author,
|
|
74
|
+
status: (i.state || '').toLowerCase(),
|
|
75
|
+
nodes: nodesByNumber.get(i.number) ?? [],
|
|
76
|
+
created: i.createdAt,
|
|
77
|
+
body: i.body,
|
|
78
|
+
// the forge comments ARE the thread — the same Reply shape a local thread carries, so nothing
|
|
79
|
+
// downstream renders two kinds of discussion.
|
|
80
|
+
replies: (i.comments ?? []).map((c) => ({ by: c.author, at: c.createdAt, body: c.body })),
|
|
81
|
+
evidence: [],
|
|
82
|
+
labels: i.labels,
|
|
83
|
+
url: i.url,
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
// the one merged read: local issue-store threads + the caller-supplied forge slice, ONE time line — the
|
|
87
|
+
// stores are the same abstraction, so they interleave by creation time, newest first (never
|
|
88
|
+
// store-grouped; a reader's eye lands on what just happened, whatever store holds it). CALLERS own
|
|
89
|
+
// freshness — the server passes the resident cache's state (instant, background reconcile), the CLI a
|
|
90
|
+
// live pull — so the merge itself stays pure. Eval-remark threads are SPLIT OUT read-time (isEvalConcern):
|
|
91
|
+
// they are the eval scoreboard's data, not issues, so every issue surface this feeds — the Threads tab, the
|
|
92
|
+
// board issue badge, the `spex issue ls` drain — is free of them by construction (they reach the EVAL side
|
|
93
|
+
// through loadEvalRemarkTracks / the reading overlay instead).
|
|
94
|
+
export function mergedIssues(forge, nodeIds) {
|
|
95
|
+
return allThreads(forge, nodeIds).filter((i) => !isEvalConcern(i.concern));
|
|
96
|
+
}
|
|
97
|
+
// the same one merged read BEFORE the read-time split: every thread in the store, both halves, one walk.
|
|
98
|
+
// Deliberately NOT exported — the split above is what every SURFACE read owes ([[eval-issue-split]]), and
|
|
99
|
+
// an unsplit set escaping to a surface would put eval remarks back in the issue drain. The one consumer
|
|
100
|
+
// whose question is about the STORE ITSELF reaches it through boardThreads below.
|
|
101
|
+
function allThreads(forge, nodeIds) {
|
|
102
|
+
const remote = forge ? fromForge(forge, nodeIds) : [];
|
|
103
|
+
return [...loadLocalIssues(), ...remote].sort((a, b) => b.created.localeCompare(a.created));
|
|
104
|
+
}
|
|
105
|
+
export function boardThreads(forge, nodeIds) {
|
|
106
|
+
const threads = allThreads(forge, nodeIds);
|
|
107
|
+
return { issues: threads.filter((i) => !isEvalConcern(i.concern)), stamp: threadStamp(threads) };
|
|
108
|
+
}
|
|
109
|
+
export function threadStamp(threads) {
|
|
110
|
+
return [
|
|
111
|
+
threads.filter((i) => i.status === 'open').length,
|
|
112
|
+
threads.length,
|
|
113
|
+
threads.reduce((n, i) => n + i.replies.length, 0),
|
|
114
|
+
threads.flatMap((i) => [i.created, ...i.replies.flatMap((r) => [r.at, r.resolvedAt ?? ''])]).reduce((a, b) => (b > a ? b : a), ''),
|
|
115
|
+
].join(':');
|
|
116
|
+
}
|
|
117
|
+
export async function createIssue(concern, opts = {}) {
|
|
118
|
+
const store = opts.store || 'local';
|
|
119
|
+
const author = opts.author || envSessionId() || 'unknown';
|
|
120
|
+
if (store === 'local') {
|
|
121
|
+
const { thread, outcomes } = await postLocalIssue(concern, {
|
|
122
|
+
nodes: opts.nodes,
|
|
123
|
+
body: opts.body,
|
|
124
|
+
evidence: opts.evidence,
|
|
125
|
+
author,
|
|
126
|
+
});
|
|
127
|
+
return { store: 'local', id: thread.id, nodes: thread.nodes, outcomes };
|
|
128
|
+
}
|
|
129
|
+
const driver = forgeDriverFor(store);
|
|
130
|
+
if (!driver)
|
|
131
|
+
throw new Error(`unknown issue store '${store}' (known: ${issueStores().map((s) => s.id).join(', ')})`);
|
|
132
|
+
const nodes = inferNodes(concern, opts.body, opts.nodes);
|
|
133
|
+
const { number, url } = await driver.createIssue({
|
|
134
|
+
title: concern,
|
|
135
|
+
body: forgeIssueBody(concern, opts.body, nodes, opts.evidence),
|
|
136
|
+
});
|
|
137
|
+
const id = `${driver.host}#${number}`;
|
|
138
|
+
return { store: driver.host, id, nodes, url, outcomes: await dispatchNewMentions(opts.body || concern, { threadId: id, node: nodes[0] || null, author, status: 'open' }) };
|
|
139
|
+
}
|
|
140
|
+
export async function promote(id, opts = {}) {
|
|
141
|
+
const author = opts.author || envSessionId() || 'unknown';
|
|
142
|
+
const t = loadOne(id);
|
|
143
|
+
if (t.status !== 'open')
|
|
144
|
+
throw new Error(`'${id}' is ${t.status} — only an open local issue promotes`);
|
|
145
|
+
const host = resolveForgeHost();
|
|
146
|
+
const driver = forgeDriverFor(host);
|
|
147
|
+
if (!driver)
|
|
148
|
+
throw new Error(`no driver for this repo's forge host '${host}' (known: ${FORGE_DRIVERS.map((d) => d.host).join(', ')}) — promotion needs one`);
|
|
149
|
+
const body = [
|
|
150
|
+
t.body,
|
|
151
|
+
t.nodes.length ? `\nSpec: ${t.nodes.join(', ')}` : '',
|
|
152
|
+
t.evidence.length ? `\nEvidence: ${t.evidence.join(', ')} (evidence content hashes)` : '',
|
|
153
|
+
`\n---\nPromoted from the local issue \`${id}\` (opened by ${t.by} @ ${t.created}; promoted by ${author}).`,
|
|
154
|
+
].filter(Boolean).join('\n');
|
|
155
|
+
const { number, url } = await driver.createIssue({ title: t.concern, body });
|
|
156
|
+
reply(id, `promoted to the forge: ${url}`, author);
|
|
157
|
+
closeLocalIssue(id);
|
|
158
|
+
return { url, number, host: driver.host };
|
|
159
|
+
}
|
|
160
|
+
export async function replyIssue(id, body, opts = {}) {
|
|
161
|
+
const author = opts.author || envSessionId() || 'unknown';
|
|
162
|
+
const forge = /^([A-Za-z0-9-]+)#(\d+)$/.exec(id);
|
|
163
|
+
if (!forge) {
|
|
164
|
+
// evidence hashes accrue onto the local thread's typed evidence[] (a forge thread has no such field —
|
|
165
|
+
// an annotation's frame rides its comment body's image link there, the driver the only network toucher);
|
|
166
|
+
const { thread, outcomes } = await replyLocalIssue(id, body, author, opts.evidence);
|
|
167
|
+
// the thread rides along so [[loop-in]] can resolve this reply's originator chain without a second read.
|
|
168
|
+
return { store: 'local', replies: thread.replies, thread, author, outcomes };
|
|
169
|
+
}
|
|
170
|
+
const driver = forgeDriverFor(forge[1]);
|
|
171
|
+
if (!driver)
|
|
172
|
+
throw new Error(`unknown forge host '${forge[1]}' — known: ${FORGE_DRIVERS.map((d) => d.host).join(', ')}`);
|
|
173
|
+
const { url } = await driver.createComment({ number: parseInt(forge[2], 10), body });
|
|
174
|
+
return { store: forge[1], url, author, outcomes: await dispatchNewMentions(body, { threadId: id, node: opts.node ?? null, author }) };
|
|
175
|
+
}
|
|
176
|
+
export async function closeIssue(id) {
|
|
177
|
+
const forge = /^([A-Za-z0-9-]+)#(\d+)$/.exec(id);
|
|
178
|
+
if (!forge)
|
|
179
|
+
return { store: 'local', status: closeLocalIssue(id).status };
|
|
180
|
+
const driver = forgeDriverFor(forge[1]);
|
|
181
|
+
if (!driver)
|
|
182
|
+
throw new Error(`unknown forge host '${forge[1]}' — known: ${FORGE_DRIVERS.map((d) => d.host).join(', ')}`);
|
|
183
|
+
const { url } = await driver.closeIssue({ number: parseInt(forge[2], 10) });
|
|
184
|
+
return { store: forge[1], status: 'closed', url };
|
|
185
|
+
}
|
|
186
|
+
// ───────────────────────── CLI ─────────────────────────
|
|
187
|
+
export function findIssue(id, forge, nodeIds) {
|
|
188
|
+
return mergedIssues(id.includes('#') ? forge : null, nodeIds).find((i) => i.id === id);
|
|
189
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type Finding = {
|
|
2
|
+
level: 'error' | 'warn';
|
|
3
|
+
rule: string;
|
|
4
|
+
spec?: string;
|
|
5
|
+
file?: string;
|
|
6
|
+
msg: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const SPEC_LINT_REPORT_PROJECTION = "spex.spec-lint.report";
|
|
9
|
+
export declare const SPEC_LINT_REPORT_SCHEMA_VERSION = 1;
|
|
10
|
+
export type SpecLintReport = {
|
|
11
|
+
projection: typeof SPEC_LINT_REPORT_PROJECTION;
|
|
12
|
+
schemaVersion: typeof SPEC_LINT_REPORT_SCHEMA_VERSION;
|
|
13
|
+
sourceFiles: string[];
|
|
14
|
+
findings: Finding[];
|
|
15
|
+
};
|
|
16
|
+
export type LintConfig = {
|
|
17
|
+
governedRoots: string[];
|
|
18
|
+
sourceIncludeGlobs: string[] | null;
|
|
19
|
+
sourceExcludeGlobs: string[];
|
|
20
|
+
sourceExtensions: string[] | null;
|
|
21
|
+
testGlobs: string[];
|
|
22
|
+
maxOwners: number;
|
|
23
|
+
scenarioTags: string[];
|
|
24
|
+
scopedCodeMiss: 'warn' | 'ignore';
|
|
25
|
+
};
|
|
26
|
+
export declare function loadConfig(root: string, pendingSource?: string | null): LintConfig;
|
|
27
|
+
export declare function normalizeConfig(cfg: LintConfig): LintConfig;
|
|
28
|
+
export type SpecLintOptions = {
|
|
29
|
+
tip?: string;
|
|
30
|
+
};
|
|
31
|
+
export declare function pendingTouchesGoverned(root: string, tip: string): Promise<boolean>;
|
|
32
|
+
export declare function specLint(root?: string, regs?: import("@spexcode/spec-core").Extractor[], options?: SpecLintOptions): Promise<Finding[]>;
|
|
33
|
+
export declare function specLintReport(root?: string, regs?: import("@spexcode/spec-core").Extractor[], options?: SpecLintOptions): Promise<SpecLintReport>;
|
|
34
|
+
export declare const DRIFT_GUIDANCE = "DRIFT \u2014 a governed file has moved ahead of its spec. A CHECKPOINT, not a chore: find WHERE the truth\nbroke along raw intent \u2192 expanded spec \u2192 code: link \u2192 code structure \u2192 implementation, fix THAT layer.\n\n Inspect: spex spec lint which files, against which spec\n the node's spec.md its raw source + expanded spec\n git diff $(git log -1 --format=%H -- <spec.md>)..HEAD -- <file> the code delta since the spec\n\nDiagnose, then apply the one honest remedy:\n \u2022 contract changed \u2192 rewrite the spec body to the new intent, commit it (re-versions the node)\n \u2022 only mechanics changed \u2192 spex spec ack <node> \"checked \u2014 spec still valid\" (give a real reason)\n \u2022 implementation is WRONG \u2192 the spec is right; fix the CODE back toward it, then ack\n \u2022 wrong code: link \u2192 the node shouldn't own this file (or owns it too broadly); fix frontmatter\n \u2022 expanded spec \u2260 raw \u2192 the spec drifted from human intent; fix the expanded spec to serve the raw\n \u2022 structural mismatch \u2192 one file owned by many specs / a feature with no home: refactor so a file\n maps to a node, or file an issue and link it (defer honestly)\n\nNever patch. A reasoned ack or a real fix are recorded and re-judged at review; a blind ack is a lie.";
|