spexcode 0.6.2 → 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/bin/spex.mjs +4 -0
- package/node_modules/@spexcode/spec-cli/bin/spex.mjs +76 -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 +33 -0
- package/node_modules/@spexcode/spec-cli/dist/claude-headless.js +307 -0
- package/node_modules/@spexcode/spec-cli/dist/cli.d.ts +1 -0
- package/node_modules/@spexcode/spec-cli/dist/cli.js +1859 -0
- package/node_modules/@spexcode/spec-cli/dist/client.d.ts +111 -0
- package/node_modules/@spexcode/spec-cli/dist/client.js +476 -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 +53 -0
- package/node_modules/@spexcode/spec-cli/dist/codex-runtime-generations.js +686 -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/delivery-queue.d.ts +23 -0
- package/node_modules/@spexcode/spec-cli/dist/delivery-queue.js +179 -0
- package/node_modules/@spexcode/spec-cli/dist/doctor.d.ts +9 -0
- package/node_modules/@spexcode/spec-cli/dist/doctor.js +547 -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 +361 -0
- package/node_modules/@spexcode/spec-cli/dist/gateway.d.ts +37 -0
- package/node_modules/@spexcode/spec-cli/dist/gateway.js +503 -0
- package/node_modules/@spexcode/spec-cli/dist/graphCache.d.ts +27 -0
- package/node_modules/@spexcode/spec-cli/dist/graphCache.js +716 -0
- package/node_modules/@spexcode/spec-cli/dist/graphSnapshot.d.ts +14 -0
- package/node_modules/@spexcode/spec-cli/dist/graphSnapshot.js +35 -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 +325 -0
- package/node_modules/@spexcode/spec-cli/dist/harness.js +3026 -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 +10 -0
- package/node_modules/@spexcode/spec-cli/dist/help.js +574 -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 +7 -0
- package/{spec-cli/src/listen.ts → node_modules/@spexcode/spec-cli/dist/listen.js} +13 -17
- 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 +4 -0
- package/node_modules/@spexcode/spec-cli/dist/opencode-headless.js +208 -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/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-cursors.d.ts +14 -0
- package/node_modules/@spexcode/spec-cli/dist/session-cursors.js +82 -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 +51 -0
- package/node_modules/@spexcode/spec-cli/dist/session-timeline.js +233 -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 +412 -0
- package/node_modules/@spexcode/spec-cli/dist/sessions.js +4239 -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 +47 -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 +166 -0
- package/node_modules/@spexcode/spec-core/dist/git.js +2736 -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 +183 -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/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,44 @@
|
|
|
1
|
+
export type Units = Map<string, {
|
|
2
|
+
j: string;
|
|
3
|
+
v: unknown;
|
|
4
|
+
}>;
|
|
5
|
+
export type Delta = {
|
|
6
|
+
from: string;
|
|
7
|
+
to: string;
|
|
8
|
+
set: Record<string, unknown>;
|
|
9
|
+
del: string[];
|
|
10
|
+
};
|
|
11
|
+
type Boardish = {
|
|
12
|
+
nodes?: unknown;
|
|
13
|
+
sessions?: unknown;
|
|
14
|
+
[k: string]: unknown;
|
|
15
|
+
};
|
|
16
|
+
export declare function unitize(board: Boardish): {
|
|
17
|
+
units: Units;
|
|
18
|
+
ok: boolean;
|
|
19
|
+
};
|
|
20
|
+
export type UnitKeyKind = {
|
|
21
|
+
kind: 'node';
|
|
22
|
+
id: string;
|
|
23
|
+
} | {
|
|
24
|
+
kind: 'nodes-order';
|
|
25
|
+
} | {
|
|
26
|
+
kind: 'session';
|
|
27
|
+
id: string;
|
|
28
|
+
} | {
|
|
29
|
+
kind: 'sessions-order';
|
|
30
|
+
} | {
|
|
31
|
+
kind: 'meta';
|
|
32
|
+
} | {
|
|
33
|
+
kind: 'unknown';
|
|
34
|
+
key: string;
|
|
35
|
+
};
|
|
36
|
+
export declare function unitKeyKind(key: string): UnitKeyKind;
|
|
37
|
+
export declare function applyDelta(values: Map<string, unknown>, d: Pick<Delta, 'set' | 'del'>): Map<string, unknown>;
|
|
38
|
+
export declare function boardFromUnits(values: Map<string, unknown>): Boardish;
|
|
39
|
+
export declare function diffUnits(prev: Units, next: Units): {
|
|
40
|
+
set: Record<string, unknown>;
|
|
41
|
+
del: string[];
|
|
42
|
+
};
|
|
43
|
+
export declare const unitValues: (units: Units) => Map<string, unknown>;
|
|
44
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// decompose a board into units. `ok` = the bijection precondition held (arrays are arrays, ids unique &
|
|
2
|
+
// non-empty); when false the map is still returned (usable for tagging) but must not seed a delta chain.
|
|
3
|
+
export function unitize(board) {
|
|
4
|
+
const units = new Map();
|
|
5
|
+
let ok = true;
|
|
6
|
+
const keyed = (arr, prefix, orderKey) => {
|
|
7
|
+
const list = Array.isArray(arr) ? arr : (ok = false, []);
|
|
8
|
+
const order = [];
|
|
9
|
+
for (const item of list) {
|
|
10
|
+
const id = item?.id;
|
|
11
|
+
if (typeof id !== 'string' || !id || units.has(`${prefix}${id}`)) {
|
|
12
|
+
ok = false;
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
units.set(`${prefix}${id}`, { j: JSON.stringify(item), v: item });
|
|
16
|
+
order.push(id);
|
|
17
|
+
}
|
|
18
|
+
units.set(orderKey, { j: JSON.stringify(order), v: order });
|
|
19
|
+
};
|
|
20
|
+
const { nodes, sessions, ...meta } = board;
|
|
21
|
+
keyed(nodes, 'node:', 'nodes#order');
|
|
22
|
+
keyed(sessions, 'sess:', 'sess#order');
|
|
23
|
+
units.set('meta', { j: JSON.stringify(meta), v: meta });
|
|
24
|
+
return { units, ok };
|
|
25
|
+
}
|
|
26
|
+
export function unitKeyKind(key) {
|
|
27
|
+
if (key === 'nodes#order')
|
|
28
|
+
return { kind: 'nodes-order' };
|
|
29
|
+
if (key === 'sess#order')
|
|
30
|
+
return { kind: 'sessions-order' };
|
|
31
|
+
if (key === 'meta')
|
|
32
|
+
return { kind: 'meta' };
|
|
33
|
+
if (key.startsWith('node:') && key.length > 'node:'.length)
|
|
34
|
+
return { kind: 'node', id: key.slice(5) };
|
|
35
|
+
if (key.startsWith('sess:') && key.length > 'sess:'.length)
|
|
36
|
+
return { kind: 'session', id: key.slice(5) };
|
|
37
|
+
return { kind: 'unknown', key };
|
|
38
|
+
}
|
|
39
|
+
// apply a patch to a unit-value map — the exact algorithm the dashboard mirrors in data.js, kept here so
|
|
40
|
+
// the round-trip property is provable against the real shape, not a paraphrase of it.
|
|
41
|
+
export function applyDelta(values, d) {
|
|
42
|
+
const out = new Map(values);
|
|
43
|
+
for (const key of d.del)
|
|
44
|
+
out.delete(key);
|
|
45
|
+
for (const [key, v] of Object.entries(d.set))
|
|
46
|
+
out.set(key, v);
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
// reconstruct the board from unit values — R(U(B)) = B on the P-satisfying subspace (the client's render
|
|
50
|
+
// input after every applied patch). Order rides the #order units, so array order survives the round trip.
|
|
51
|
+
export function boardFromUnits(values) {
|
|
52
|
+
const pick = (prefix, orderKey) => {
|
|
53
|
+
const order = values.get(orderKey) || [];
|
|
54
|
+
return order.map((id) => values.get(`${prefix}${id}`));
|
|
55
|
+
};
|
|
56
|
+
const meta = values.get('meta') || {};
|
|
57
|
+
return { ...meta, nodes: pick('node:', 'nodes#order'), sessions: pick('sess:', 'sess#order') };
|
|
58
|
+
}
|
|
59
|
+
export function diffUnits(prev, next) {
|
|
60
|
+
const set = {};
|
|
61
|
+
const del = [];
|
|
62
|
+
for (const [key, u] of next) {
|
|
63
|
+
const p = prev.get(key);
|
|
64
|
+
if (!p || p.j !== u.j)
|
|
65
|
+
set[key] = u.v;
|
|
66
|
+
}
|
|
67
|
+
for (const key of prev.keys())
|
|
68
|
+
if (!next.has(key))
|
|
69
|
+
del.push(key);
|
|
70
|
+
return { set, del };
|
|
71
|
+
}
|
|
72
|
+
export const unitValues = (units) => new Map([...units].map(([k, u]) => [k, u.v]));
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type BoardSnapshot = {
|
|
2
|
+
root: string;
|
|
3
|
+
specs: any[];
|
|
4
|
+
layout: {
|
|
5
|
+
worktrees: any[];
|
|
6
|
+
};
|
|
7
|
+
sessions: any[];
|
|
8
|
+
issues: any[];
|
|
9
|
+
issuesStamp: string;
|
|
10
|
+
forgeRevision: number;
|
|
11
|
+
evalTimelines: Map<string, any>;
|
|
12
|
+
sessionEvalProjections: Map<string, any>;
|
|
13
|
+
};
|
|
14
|
+
export declare function latestPerScenario<T extends {
|
|
15
|
+
scenario: string;
|
|
16
|
+
}>(readings: T[]): T[];
|
|
17
|
+
export declare function nodeEvalSummary(scenarios: {
|
|
18
|
+
name: string;
|
|
19
|
+
}[], readings: any[]): {
|
|
20
|
+
total: number;
|
|
21
|
+
pass: number;
|
|
22
|
+
fail: number;
|
|
23
|
+
stalePass: number;
|
|
24
|
+
staleFail: number;
|
|
25
|
+
empty: number;
|
|
26
|
+
};
|
|
27
|
+
export declare function buildBoard({ root, specs, layout, sessions, issues: merged, issuesStamp, forgeRevision, evalTimelines, sessionEvalProjections }: BoardSnapshot): Promise<{
|
|
28
|
+
nodes: any[];
|
|
29
|
+
sessions: any[];
|
|
30
|
+
identity: import("./project-identity.js").ResolvedIdentity;
|
|
31
|
+
issuesStamp: string;
|
|
32
|
+
}>;
|
|
33
|
+
export declare function spliceSessions(prev: Awaited<ReturnType<typeof buildBoard>>, sessions: any[], sessionEvalProjections: Map<string, any>): Promise<Awaited<ReturnType<typeof buildBoard>>>;
|
|
34
|
+
export declare function rebasePublishedSessions(topology: Awaited<ReturnType<typeof buildBoard>>, published: Awaited<ReturnType<typeof buildBoard>>): Awaited<ReturnType<typeof buildBoard>>;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { deriveStatus } from './specs.js';
|
|
2
|
+
import { resolveProjectIdentity } from './project-identity.js';
|
|
3
|
+
import { publishReviewSnapshot } from './reviewSnapshot.js';
|
|
4
|
+
import { evalReviewState } from './review/reviewFilters.js';
|
|
5
|
+
// a ghost (added) node's parent: the existing node whose directory is the longest prefix of the new one.
|
|
6
|
+
function resolveParent(path, byDir) {
|
|
7
|
+
const dir = path.replace(/\/spec\.md$/, '');
|
|
8
|
+
const segs = dir.split('/');
|
|
9
|
+
for (let k = segs.length - 1; k > 0; k--) {
|
|
10
|
+
const anc = segs.slice(0, k).join('/');
|
|
11
|
+
if (byDir[anc])
|
|
12
|
+
return byDir[anc];
|
|
13
|
+
}
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const OVERLAY_TO_PATH = Symbol('overlay-to-path');
|
|
17
|
+
// The server-only review snapshot keeps latest readings verbatim. Graph JSON receives only counts.
|
|
18
|
+
export function latestPerScenario(readings) {
|
|
19
|
+
const seen = new Set();
|
|
20
|
+
return readings.filter((r) => !seen.has(r.scenario) && (seen.add(r.scenario), true));
|
|
21
|
+
}
|
|
22
|
+
export function nodeEvalSummary(scenarios, readings) {
|
|
23
|
+
const latest = new Map(latestPerScenario(readings).map((reading) => [reading.scenario, reading]));
|
|
24
|
+
const summary = { total: scenarios.length, pass: 0, fail: 0, stalePass: 0, staleFail: 0, empty: 0 };
|
|
25
|
+
for (const scenario of scenarios) {
|
|
26
|
+
const reading = latest.get(scenario.name);
|
|
27
|
+
const state = (reading ? evalReviewState(reading) : 'empty');
|
|
28
|
+
summary[state]++;
|
|
29
|
+
}
|
|
30
|
+
return summary;
|
|
31
|
+
}
|
|
32
|
+
// @@@ a shelved row carries no delta ([[archive]]) - the board has TWO producers (a full buildBoard and the
|
|
33
|
+
// sessions-only spliceSessions), and shelving is a session-scoped write, so it takes the SPLICE path — which
|
|
34
|
+
// reuses the previous board's ops by path. Skipping the delta only in layout's row builder would therefore be
|
|
35
|
+
// invisible exactly when it fires: the splice would carry the stale ops forward forever. The rule belongs to
|
|
36
|
+
// the row, not to one producer, so both decorate through this one function.
|
|
37
|
+
const rowOps = (s, opsByPath) => (s.archived ? [] : opsByPath[s.path] || []);
|
|
38
|
+
export async function buildBoard({ root, specs, layout, sessions, issues: merged, issuesStamp, forgeRevision, evalTimelines, sessionEvalProjections }) {
|
|
39
|
+
const worktrees = layout.worktrees.filter((w) => !w.isMain);
|
|
40
|
+
// resolveLayout already zeroed ops for unmanaged worktrees, so this is just "has pending changes".
|
|
41
|
+
const opWts = worktrees.filter((w) => w.ops && w.ops.length);
|
|
42
|
+
const sessIdByPath = {};
|
|
43
|
+
sessions.forEach((s) => { sessIdByPath[s.path] = s.id; });
|
|
44
|
+
const seedOf = (path) => sessIdByPath[path] || path;
|
|
45
|
+
const byId = Object.fromEntries(specs.map((n) => [n.id, n]));
|
|
46
|
+
const byDir = {};
|
|
47
|
+
specs.forEach((n) => { if (n.path)
|
|
48
|
+
byDir[n.path.replace(/\/spec\.md$/, '')] = n.id; });
|
|
49
|
+
// register each added node's own dir in byDir first, so resolveParent can chain a new node to its new
|
|
50
|
+
// ghost ancestor (a whole added subtree renders as one tree, not a flat scatter of roots).
|
|
51
|
+
for (const w of opWts)
|
|
52
|
+
for (const op of w.ops) {
|
|
53
|
+
if (op.op === 'added')
|
|
54
|
+
byDir[op.path.replace(/\/spec\.md$/, '')] = op.nodeId;
|
|
55
|
+
}
|
|
56
|
+
const overlaysByNode = {};
|
|
57
|
+
const ghostById = {};
|
|
58
|
+
for (const w of opWts) {
|
|
59
|
+
const source = w.path, label = w.node || w.branch || w.path, seed = seedOf(w.path);
|
|
60
|
+
for (const op of w.ops) {
|
|
61
|
+
const ov = {
|
|
62
|
+
op: op.op, source, label, branch: w.branch, seed,
|
|
63
|
+
committed: op.committed, dirty: op.dirty,
|
|
64
|
+
toParent: op.op === 'moved' ? resolveParent(op.toPath || op.path, byDir) : null,
|
|
65
|
+
[OVERLAY_TO_PATH]: op.op === 'moved' ? op.toPath || op.path : null,
|
|
66
|
+
};
|
|
67
|
+
if (op.op === 'added' && !byId[op.nodeId]) {
|
|
68
|
+
if (ghostById[op.nodeId]) {
|
|
69
|
+
ghostById[op.nodeId].overlays.push(ov);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
// a ghost is a node being ADDED by a worktree but not yet on main -> it has a pending op,
|
|
73
|
+
// so its derived status is `active` (live, in-flight), never `pending`.
|
|
74
|
+
ghostById[op.nodeId] = {
|
|
75
|
+
id: op.nodeId, parent: resolveParent(op.path, byDir), path: op.path,
|
|
76
|
+
title: op.nodeId, status: deriveStatus({ version: 0, drift: 0, hasOverlay: true }),
|
|
77
|
+
version: 0, session: null, fmStatus: null,
|
|
78
|
+
desc: '', code: [], related: [], body: '', drift: 0, driftFiles: [], ghost: true, overlays: [ov],
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
(overlaysByNode[op.nodeId] ??= []).push(ov);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// re-derive status WITH the overlay so a node an unmerged worktree is touching reads `active` — the only
|
|
87
|
+
// place in-flight work is known, so the only place `active` is produced.
|
|
88
|
+
const nodes = [
|
|
89
|
+
...specs.map((n) => {
|
|
90
|
+
const overlays = overlaysByNode[n.id] || [];
|
|
91
|
+
// `body` and its derivation `parts` are DROPPED from the board payload ([[graph-lean]]): together ~56% of
|
|
92
|
+
// the bytes, and detail the graph overview never renders. The detail view fetches them per node from
|
|
93
|
+
// `/api/specs/:id/content` on open, and the search palette fetches the body corpus from `/api/specs/lite`
|
|
94
|
+
// once on open — both off this hot poll. `undefined` makes JSON.stringify omit the keys.
|
|
95
|
+
return { ...n, body: undefined, parts: undefined, overlays, status: deriveStatus({ version: n.version, drift: n.drift, hasOverlay: overlays.length > 0, hasCode: (n.code?.length ?? 0) > 0, fmStatus: n.fmStatus ?? undefined }) };
|
|
96
|
+
}),
|
|
97
|
+
...Object.values(ghostById),
|
|
98
|
+
];
|
|
99
|
+
// The outer adapter reads Issues once. Full rows stay in the server-only review snapshot; graph nodes get
|
|
100
|
+
// counts and open identity only, enough for tile/stat/tree glances without reconstructing the list.
|
|
101
|
+
const isOpen = (i) => i.status === 'open';
|
|
102
|
+
// `issuesStamp` above is that ONE board-level freshness stamp, over EVERY thread — noded or nodeless,
|
|
103
|
+
// both stores, BOTH remark hosts. It is folded from the whole store and NOT from the split `merged`: a
|
|
104
|
+
// scenario-hosted remark lands on an eval track the issue read splits out ([[eval-issue-split]]), so a
|
|
105
|
+
// carrier folded over the issue half alone left an open READING blind to every remark on it — the write
|
|
106
|
+
// moved no board byte, [[graph-delta]] correctly suppressed the no-change broadcast, and the push never
|
|
107
|
+
// fired at all. The per-node fold below stays [[graph-lean]]-slim (no reply payloads).
|
|
108
|
+
const issuesByNode = {};
|
|
109
|
+
for (const issue of merged)
|
|
110
|
+
for (const nid of issue.nodes)
|
|
111
|
+
(issuesByNode[nid] ??= []).push(issue);
|
|
112
|
+
for (const n of nodes) {
|
|
113
|
+
const issues = issuesByNode[n.id];
|
|
114
|
+
if (!issues || !issues.length)
|
|
115
|
+
continue;
|
|
116
|
+
const open = issues.filter(isOpen);
|
|
117
|
+
n.reviewSummary = {
|
|
118
|
+
...(n.reviewSummary || {}),
|
|
119
|
+
issues: { open: open.length, closed: issues.length - open.length, openIds: open.map((issue) => issue.id) },
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// The L1 adapter calculates current eval timelines once. Latest rows/declarations stay server-only for
|
|
123
|
+
// paged review; graph nodes receive the explicit per-state count projection and nothing row-shaped.
|
|
124
|
+
const evalReviewNodes = nodes.flatMap((n) => {
|
|
125
|
+
const timeline = evalTimelines.get(n.id);
|
|
126
|
+
if (!timeline?.hasEvalFile)
|
|
127
|
+
return [];
|
|
128
|
+
const latest = latestPerScenario(timeline.readings);
|
|
129
|
+
n.reviewSummary = { ...(n.reviewSummary || {}), evals: nodeEvalSummary(timeline.scenarios, latest) };
|
|
130
|
+
return [{ id: n.id, hue: n.hue, scenarios: timeline.scenarios, evals: latest, readings: timeline.readings }];
|
|
131
|
+
});
|
|
132
|
+
publishReviewSnapshot({ issues: merged, evalNodes: evalReviewNodes, forgeRevision });
|
|
133
|
+
const opsByPath = {};
|
|
134
|
+
opWts.forEach((w) => { opsByPath[w.path] = w.ops; });
|
|
135
|
+
const sess = sessions.map((s) => ({
|
|
136
|
+
...s,
|
|
137
|
+
source: s.path,
|
|
138
|
+
ops: rowOps(s, opsByPath),
|
|
139
|
+
evalSummary: sessionEvalProjections.get(s.id),
|
|
140
|
+
}));
|
|
141
|
+
// One resolved identity projection feeds title, favicon, rail, and catalog compatibility. A worktree
|
|
142
|
+
// backend reads the actual served tree's branch config and identity; endpoint registration uses the
|
|
143
|
+
// same git toplevel, so a linked worktree occupies its own host slot instead of replacing main.
|
|
144
|
+
const identity = resolveProjectIdentity(root, root);
|
|
145
|
+
return { nodes, sessions: sess, identity, issuesStamp };
|
|
146
|
+
}
|
|
147
|
+
// @@@ spliceSessions — the SESSIONS-ONLY producer ([[graph-cache]]). A session-scoped change (a lifecycle
|
|
148
|
+
// write, a liveness/activity poll flip) reshapes only the board's `sessions` rows — the node/meta units are
|
|
149
|
+
// untouched — so the cache re-derives ONLY the sessions and splices them onto the previous board verbatim,
|
|
150
|
+
// skipping the whole loadSpecs/layout/eval assembly a full buildBoard() pays. The adapter supplies every
|
|
151
|
+
// live input:
|
|
152
|
+
// each row is decorated EXACTLY as buildBoard's sess mapping (`{...s, source: s.path, ops}`), and every
|
|
153
|
+
// path's `ops` is REUSED from the previous board (a path→ops map). A session path absent in `prev` gets []
|
|
154
|
+
// — a brand-new worktree has no pending spec ops yet, and any later ops-CHANGING event (a commit, a
|
|
155
|
+
// worktree `.spec` edit) is refs/worktree-scoped, i.e. a FULL rebuild, never a sessions splice. So the
|
|
156
|
+
// splice is byte-indistinguishable from a full rebuild whenever only session state moved.
|
|
157
|
+
export async function spliceSessions(prev, sessions, sessionEvalProjections) {
|
|
158
|
+
const activeSources = new Set(sessions.map((session) => session.path));
|
|
159
|
+
const opsByPath = {};
|
|
160
|
+
for (const s of prev.sessions)
|
|
161
|
+
opsByPath[s.source] = s.ops;
|
|
162
|
+
const sess = sessions.map((s) => ({
|
|
163
|
+
...s,
|
|
164
|
+
source: s.path,
|
|
165
|
+
ops: rowOps(s, opsByPath),
|
|
166
|
+
evalSummary: sessionEvalProjections.get(s.id),
|
|
167
|
+
}));
|
|
168
|
+
// Archive and close are subtractive topology changes: their worktree leaves the working set, so its
|
|
169
|
+
// overlays must leave in the same cheap publication as its row. Filtering the already-built units is exact
|
|
170
|
+
// and forks nothing. A newly-active source is intentionally absent here; graphCache keeps a full obligation
|
|
171
|
+
// for additions/resume so resolveLayout can discover that worktree's current delta.
|
|
172
|
+
let nodeProjectionMoved = false;
|
|
173
|
+
const projectedNodes = prev.nodes.flatMap((node) => {
|
|
174
|
+
const overlays = (node.overlays || []).filter((overlay) => activeSources.has(overlay.source));
|
|
175
|
+
if (node.ghost && overlays.length === 0) {
|
|
176
|
+
nodeProjectionMoved = true;
|
|
177
|
+
return [];
|
|
178
|
+
}
|
|
179
|
+
if (overlays.length === (node.overlays || []).length)
|
|
180
|
+
return [node];
|
|
181
|
+
nodeProjectionMoved = true;
|
|
182
|
+
if (node.ghost)
|
|
183
|
+
return [{ ...node, overlays, status: deriveStatus({ version: 0, drift: 0, hasOverlay: true }) }];
|
|
184
|
+
return [{ ...node, overlays, status: deriveStatus({
|
|
185
|
+
version: node.version,
|
|
186
|
+
drift: node.drift,
|
|
187
|
+
hasOverlay: overlays.length > 0,
|
|
188
|
+
hasCode: (node.code?.length ?? 0) > 0,
|
|
189
|
+
fmStatus: node.fmStatus ?? undefined,
|
|
190
|
+
}) }];
|
|
191
|
+
});
|
|
192
|
+
const nodes = nodeProjectionMoved ? projectedNodes : prev.nodes;
|
|
193
|
+
if (nodeProjectionMoved) {
|
|
194
|
+
const byDir = {};
|
|
195
|
+
for (const node of nodes)
|
|
196
|
+
if (node.path)
|
|
197
|
+
byDir[node.path.replace(/\/spec\.md$/, '')] = node.id;
|
|
198
|
+
const retainedIds = new Set(nodes.map((node) => node.id));
|
|
199
|
+
for (let index = 0; index < nodes.length; index++) {
|
|
200
|
+
const node = nodes[index];
|
|
201
|
+
let changed = false;
|
|
202
|
+
let parent = node.parent;
|
|
203
|
+
if (node.ghost) {
|
|
204
|
+
const next = resolveParent(node.path, byDir);
|
|
205
|
+
if (next !== parent) {
|
|
206
|
+
parent = next;
|
|
207
|
+
changed = true;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
const overlays = (node.overlays || []).map((overlay) => {
|
|
211
|
+
if (!overlay.toParent || retainedIds.has(overlay.toParent))
|
|
212
|
+
return overlay;
|
|
213
|
+
const toPath = overlay[OVERLAY_TO_PATH];
|
|
214
|
+
changed = true;
|
|
215
|
+
return { ...overlay, toParent: typeof toPath === 'string' ? resolveParent(toPath, byDir) : null };
|
|
216
|
+
});
|
|
217
|
+
if (changed)
|
|
218
|
+
nodes[index] = { ...node, parent, overlays };
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return { ...prev, nodes, sessions: sess };
|
|
222
|
+
}
|
|
223
|
+
// A full producer may finish after the session lane has already shown a newer row. Reuse that published
|
|
224
|
+
// projection on the full topology without another store read: topology owns the current per-path ops, while
|
|
225
|
+
// the published row owns lifecycle/eval fields. This is deliberately synchronous so a full completion never
|
|
226
|
+
// waits for a quiet session store.
|
|
227
|
+
export function rebasePublishedSessions(topology, published) {
|
|
228
|
+
const opsByPath = {};
|
|
229
|
+
for (const session of topology.sessions)
|
|
230
|
+
opsByPath[session.source] = session.ops;
|
|
231
|
+
const sessions = published.sessions.map((session) => ({
|
|
232
|
+
...session,
|
|
233
|
+
source: session.path,
|
|
234
|
+
ops: rowOps(session, opsByPath),
|
|
235
|
+
}));
|
|
236
|
+
return { ...topology, sessions };
|
|
237
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
export * from './graph-delta.js';
|
|
3
|
+
// the snapshot tag: a digest over every unit's key + content hash, order-independent (keys sorted). Two
|
|
4
|
+
// builds serializing equal content get equal tags; JSON.stringify equality is conservative (equal strings ⇒
|
|
5
|
+
// equal values; a key-order difference at worst re-sends an unchanged unit, never misses a changed one).
|
|
6
|
+
export function tagOf(units) {
|
|
7
|
+
const h = createHash('sha1');
|
|
8
|
+
for (const key of [...units.keys()].sort()) {
|
|
9
|
+
const u = units.get(key);
|
|
10
|
+
h.update(key).update('\0').update(u.j).update('\0');
|
|
11
|
+
}
|
|
12
|
+
return h.digest('hex');
|
|
13
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const HARNESS_IDENTITIES: readonly [{
|
|
2
|
+
readonly id: "claude";
|
|
3
|
+
readonly sessionEnvVar: "CLAUDE_CODE_SESSION_ID";
|
|
4
|
+
}, {
|
|
5
|
+
readonly id: "codex";
|
|
6
|
+
readonly sessionEnvVar: "CODEX_THREAD_ID";
|
|
7
|
+
}, {
|
|
8
|
+
readonly id: "opencode";
|
|
9
|
+
readonly sessionEnvVar: "OPENCODE_SESSION_ID";
|
|
10
|
+
}, {
|
|
11
|
+
readonly id: "pi";
|
|
12
|
+
readonly sessionEnvVar: "PI_SESSION_ID";
|
|
13
|
+
}, {
|
|
14
|
+
readonly id: "zcode";
|
|
15
|
+
readonly sessionEnvVar: "ZCODE_SESSION_ID";
|
|
16
|
+
}, {
|
|
17
|
+
readonly id: "claude-headless";
|
|
18
|
+
readonly sessionEnvVar: "CLAUDE_CODE_SESSION_ID";
|
|
19
|
+
}, {
|
|
20
|
+
readonly id: "opencode-headless";
|
|
21
|
+
readonly sessionEnvVar: "OPENCODE_SESSION_ID";
|
|
22
|
+
}, {
|
|
23
|
+
readonly id: "pi-headless";
|
|
24
|
+
readonly sessionEnvVar: "PI_SESSION_ID";
|
|
25
|
+
}, {
|
|
26
|
+
readonly id: "codex-headless";
|
|
27
|
+
readonly sessionEnvVar: "CODEX_THREAD_ID";
|
|
28
|
+
}];
|
|
29
|
+
export type HarnessId = typeof HARNESS_IDENTITIES[number]['id'];
|
|
30
|
+
export type HarnessIdentity = typeof HARNESS_IDENTITIES[number];
|
|
31
|
+
export declare function harnessIdentity(id: HarnessId): HarnessIdentity;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Adapter-neutral identity facts. Full harness adapters project these rows; consumers that only resolve an
|
|
2
|
+
// environment identity must not load launchers, runtime transport, or materialization code.
|
|
3
|
+
export const HARNESS_IDENTITIES = [
|
|
4
|
+
{ id: 'claude', sessionEnvVar: 'CLAUDE_CODE_SESSION_ID' },
|
|
5
|
+
{ id: 'codex', sessionEnvVar: 'CODEX_THREAD_ID' },
|
|
6
|
+
{ id: 'opencode', sessionEnvVar: 'OPENCODE_SESSION_ID' },
|
|
7
|
+
{ id: 'pi', sessionEnvVar: 'PI_SESSION_ID' },
|
|
8
|
+
{ id: 'zcode', sessionEnvVar: 'ZCODE_SESSION_ID' },
|
|
9
|
+
{ id: 'claude-headless', sessionEnvVar: 'CLAUDE_CODE_SESSION_ID' },
|
|
10
|
+
{ id: 'opencode-headless', sessionEnvVar: 'OPENCODE_SESSION_ID' },
|
|
11
|
+
{ id: 'pi-headless', sessionEnvVar: 'PI_SESSION_ID' },
|
|
12
|
+
{ id: 'codex-headless', sessionEnvVar: 'CODEX_THREAD_ID' },
|
|
13
|
+
];
|
|
14
|
+
const identityById = new Map(HARNESS_IDENTITIES.map((identity) => [identity.id, identity]));
|
|
15
|
+
export function harnessIdentity(id) {
|
|
16
|
+
const identity = identityById.get(id);
|
|
17
|
+
if (!identity)
|
|
18
|
+
throw new Error(`unknown harness identity '${id}'`);
|
|
19
|
+
return identity;
|
|
20
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
export function resolvedIdentityIcon(value: any, fallback?: string): string;
|
|
2
|
+
export function identityPreset(value: any): {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
bg: string;
|
|
6
|
+
fg: string;
|
|
7
|
+
shapes: {
|
|
8
|
+
tag: string;
|
|
9
|
+
d: string;
|
|
10
|
+
fill: string;
|
|
11
|
+
stroke: string;
|
|
12
|
+
}[];
|
|
13
|
+
} | {
|
|
14
|
+
id: string;
|
|
15
|
+
label: string;
|
|
16
|
+
bg: string;
|
|
17
|
+
fg: string;
|
|
18
|
+
shapes: ({
|
|
19
|
+
tag: string;
|
|
20
|
+
d: string;
|
|
21
|
+
cx?: undefined;
|
|
22
|
+
cy?: undefined;
|
|
23
|
+
r?: undefined;
|
|
24
|
+
} | {
|
|
25
|
+
tag: string;
|
|
26
|
+
cx: number;
|
|
27
|
+
cy: number;
|
|
28
|
+
r: number;
|
|
29
|
+
d?: undefined;
|
|
30
|
+
})[];
|
|
31
|
+
} | {
|
|
32
|
+
id: string;
|
|
33
|
+
label: string;
|
|
34
|
+
bg: string;
|
|
35
|
+
fg: string;
|
|
36
|
+
shapes: ({
|
|
37
|
+
tag: string;
|
|
38
|
+
x: number;
|
|
39
|
+
y: number;
|
|
40
|
+
width: number;
|
|
41
|
+
height: number;
|
|
42
|
+
rx: number;
|
|
43
|
+
d?: undefined;
|
|
44
|
+
} | {
|
|
45
|
+
tag: string;
|
|
46
|
+
d: string;
|
|
47
|
+
x?: undefined;
|
|
48
|
+
y?: undefined;
|
|
49
|
+
width?: undefined;
|
|
50
|
+
height?: undefined;
|
|
51
|
+
rx?: undefined;
|
|
52
|
+
})[];
|
|
53
|
+
} | {
|
|
54
|
+
id: string;
|
|
55
|
+
label: string;
|
|
56
|
+
bg: string;
|
|
57
|
+
fg: string;
|
|
58
|
+
shapes: ({
|
|
59
|
+
tag: string;
|
|
60
|
+
cx: number;
|
|
61
|
+
cy: number;
|
|
62
|
+
rx: number;
|
|
63
|
+
ry: number;
|
|
64
|
+
d?: undefined;
|
|
65
|
+
} | {
|
|
66
|
+
tag: string;
|
|
67
|
+
d: string;
|
|
68
|
+
cx?: undefined;
|
|
69
|
+
cy?: undefined;
|
|
70
|
+
rx?: undefined;
|
|
71
|
+
ry?: undefined;
|
|
72
|
+
})[];
|
|
73
|
+
} | null;
|
|
74
|
+
export function isIconifyIcon(value: any): boolean;
|
|
75
|
+
export function requireIdentityChoice(value: any): string;
|
|
76
|
+
export function identitySvg(value: any, fallback?: string): string;
|
|
77
|
+
export function identityFaviconHref(value: any, fallback?: string): string;
|
|
78
|
+
export const DEFAULT_PROJECT_ICON: "spexcode";
|
|
79
|
+
export const DEFAULT_GATEWAY_ICON: "gateway";
|
|
80
|
+
export const IDENTITY_PRESETS: readonly ({
|
|
81
|
+
id: string;
|
|
82
|
+
label: string;
|
|
83
|
+
bg: string;
|
|
84
|
+
fg: string;
|
|
85
|
+
shapes: {
|
|
86
|
+
tag: string;
|
|
87
|
+
d: string;
|
|
88
|
+
fill: string;
|
|
89
|
+
stroke: string;
|
|
90
|
+
}[];
|
|
91
|
+
} | {
|
|
92
|
+
id: string;
|
|
93
|
+
label: string;
|
|
94
|
+
bg: string;
|
|
95
|
+
fg: string;
|
|
96
|
+
shapes: ({
|
|
97
|
+
tag: string;
|
|
98
|
+
d: string;
|
|
99
|
+
cx?: undefined;
|
|
100
|
+
cy?: undefined;
|
|
101
|
+
r?: undefined;
|
|
102
|
+
} | {
|
|
103
|
+
tag: string;
|
|
104
|
+
cx: number;
|
|
105
|
+
cy: number;
|
|
106
|
+
r: number;
|
|
107
|
+
d?: undefined;
|
|
108
|
+
})[];
|
|
109
|
+
} | {
|
|
110
|
+
id: string;
|
|
111
|
+
label: string;
|
|
112
|
+
bg: string;
|
|
113
|
+
fg: string;
|
|
114
|
+
shapes: ({
|
|
115
|
+
tag: string;
|
|
116
|
+
x: number;
|
|
117
|
+
y: number;
|
|
118
|
+
width: number;
|
|
119
|
+
height: number;
|
|
120
|
+
rx: number;
|
|
121
|
+
d?: undefined;
|
|
122
|
+
} | {
|
|
123
|
+
tag: string;
|
|
124
|
+
d: string;
|
|
125
|
+
x?: undefined;
|
|
126
|
+
y?: undefined;
|
|
127
|
+
width?: undefined;
|
|
128
|
+
height?: undefined;
|
|
129
|
+
rx?: undefined;
|
|
130
|
+
})[];
|
|
131
|
+
} | {
|
|
132
|
+
id: string;
|
|
133
|
+
label: string;
|
|
134
|
+
bg: string;
|
|
135
|
+
fg: string;
|
|
136
|
+
shapes: ({
|
|
137
|
+
tag: string;
|
|
138
|
+
cx: number;
|
|
139
|
+
cy: number;
|
|
140
|
+
rx: number;
|
|
141
|
+
ry: number;
|
|
142
|
+
d?: undefined;
|
|
143
|
+
} | {
|
|
144
|
+
tag: string;
|
|
145
|
+
d: string;
|
|
146
|
+
cx?: undefined;
|
|
147
|
+
cy?: undefined;
|
|
148
|
+
rx?: undefined;
|
|
149
|
+
ry?: undefined;
|
|
150
|
+
})[];
|
|
151
|
+
})[];
|
|
152
|
+
export const IDENTITY_PRESET_IDS: readonly string[];
|