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,10 @@
|
|
|
1
|
+
import { type SessionReparentResult } from './sessions.js';
|
|
2
|
+
export declare class SessionReparentRequestError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare function parseReparentRequest(body: unknown): {
|
|
6
|
+
children: string[];
|
|
7
|
+
parent: string | null;
|
|
8
|
+
};
|
|
9
|
+
export declare function reparentRequest(body: unknown): Promise<SessionReparentResult>;
|
|
10
|
+
export declare function reparentSessions(children: string[], parent: string | null): Promise<SessionReparentResult>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { apiBaseInfo, reparentSessionRecords } from './sessions.js';
|
|
2
|
+
import { BackendError, backendConnectionRefused, clientReparent } from './client.js';
|
|
3
|
+
export class SessionReparentRequestError extends Error {
|
|
4
|
+
constructor(message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = 'SessionReparentRequestError';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function parseReparentRequest(body) {
|
|
10
|
+
if (!body || typeof body !== 'object')
|
|
11
|
+
throw new SessionReparentRequestError('reparent body must be JSON');
|
|
12
|
+
const raw = body;
|
|
13
|
+
if (!Array.isArray(raw.children) || !raw.children.length || raw.children.some((id) => typeof id !== 'string' || !id.trim()))
|
|
14
|
+
throw new SessionReparentRequestError('reparent children must be one or more session ids');
|
|
15
|
+
if (raw.parent !== null && (typeof raw.parent !== 'string' || !raw.parent.trim()))
|
|
16
|
+
throw new SessionReparentRequestError('reparent parent must be a session id or null');
|
|
17
|
+
return { children: raw.children.map((id) => id.trim()), parent: raw.parent === null ? null : raw.parent.trim() };
|
|
18
|
+
}
|
|
19
|
+
export async function reparentRequest(body) {
|
|
20
|
+
const request = parseReparentRequest(body);
|
|
21
|
+
return reparentSessionRecords(request.children, request.parent);
|
|
22
|
+
}
|
|
23
|
+
export async function reparentSessions(children, parent) {
|
|
24
|
+
try {
|
|
25
|
+
return await clientReparent(children, parent);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (!(error instanceof BackendError) || (await apiBaseInfo()).source === 'flag' || !backendConnectionRefused(error))
|
|
29
|
+
throw error;
|
|
30
|
+
console.error('spex: no backend reachable — reparenting in-process under the session record locks');
|
|
31
|
+
return reparentSessionRecords(children, parent);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type SessionLifecycle, type SessionProposal } from '@spexcode/spec-core';
|
|
2
|
+
import { type TimelineEvent } from '@spexcode/session-core';
|
|
3
|
+
export * from '@spexcode/session-core';
|
|
4
|
+
type DisplayWord = 'working' | 'idle' | 'review' | 'done' | 'close-pending' | 'parked' | 'error' | 'asking' | 'queued';
|
|
5
|
+
export declare const timelineDisplay: (event: {
|
|
6
|
+
status: SessionLifecycle;
|
|
7
|
+
proposal: SessionProposal | null;
|
|
8
|
+
}) => DisplayWord;
|
|
9
|
+
export declare function readTimeline(id: string, limit?: number): {
|
|
10
|
+
events: TimelineEvent[];
|
|
11
|
+
} | null;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { readAliasedRawRecord } from '@spexcode/spec-core';
|
|
2
|
+
import { timelineTail } from '@spexcode/session-core';
|
|
3
|
+
export * from '@spexcode/session-core';
|
|
4
|
+
const PROPOSAL_DISPLAY = { merge: 'review', nothing: 'done', close: 'close-pending' };
|
|
5
|
+
export const timelineDisplay = (event) => event.status === 'awaiting' ? (PROPOSAL_DISPLAY[event.proposal ?? 'nothing'] ?? 'done')
|
|
6
|
+
: event.status === 'active' ? 'working' : event.status;
|
|
7
|
+
// The HTTP projection remains a SpexCode concern: it resolves aliases, hides unmanaged records, and adds the
|
|
8
|
+
// board's display vocabulary. The package beneath it only reads the durable file protocol.
|
|
9
|
+
export function readTimeline(id, limit = 500) {
|
|
10
|
+
let raw;
|
|
11
|
+
try {
|
|
12
|
+
raw = readAliasedRawRecord(id);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
if (!raw || !raw.governed)
|
|
18
|
+
return null;
|
|
19
|
+
return { events: timelineTail(raw.session_id, limit).map((event) => event.kind === 'status' ? { ...event, display: timelineDisplay(event) } : event) };
|
|
20
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare class SessionWebError extends Error {
|
|
2
|
+
readonly status: 400 | 403 | 404 | 500;
|
|
3
|
+
constructor(status: 400 | 403 | 404 | 500, message: string);
|
|
4
|
+
}
|
|
5
|
+
type SessionWebLock = <T>(id: string, body: () => T) => T;
|
|
6
|
+
export type SessionWeb = {
|
|
7
|
+
url: string;
|
|
8
|
+
key: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function canonicalSessionWebUrl(input: string): string;
|
|
11
|
+
export declare function sessionWebKey(url: string): string;
|
|
12
|
+
export declare function listSessionWebs(id: string, projectRoot?: string): SessionWeb[];
|
|
13
|
+
export declare function readSessionWebs(id: string, projectRoot?: string): SessionWeb[];
|
|
14
|
+
export declare function addSessionWeb(id: string, input: string, lock: SessionWebLock): {
|
|
15
|
+
url: string;
|
|
16
|
+
added: boolean;
|
|
17
|
+
};
|
|
18
|
+
export declare function retractSessionWeb(id: string, input: string, lock: SessionWebLock): {
|
|
19
|
+
url: string;
|
|
20
|
+
removed: boolean;
|
|
21
|
+
};
|
|
22
|
+
export declare function postedSessionWeb(id: string, key: string, projectRoot?: string): URL;
|
|
23
|
+
export declare const sessionWebsPath: (id: string) => string;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { readRecordEntry, sessionArtifactPath, sessionStoreDir } from '@spexcode/spec-core';
|
|
5
|
+
import { projectRuntimeRoot } from '@spexcode/spec-core';
|
|
6
|
+
export class SessionWebError extends Error {
|
|
7
|
+
status;
|
|
8
|
+
constructor(status, message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.status = status;
|
|
11
|
+
this.name = 'SessionWebError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const webPath = (id, projectRoot) => projectRoot
|
|
15
|
+
? join(projectRuntimeRoot(join(projectRoot, '.git')), 'sessions', id, 'web.json')
|
|
16
|
+
: sessionArtifactPath(id, 'web.json');
|
|
17
|
+
const recordPath = (id, projectRoot) => projectRoot
|
|
18
|
+
? join(projectRuntimeRoot(join(projectRoot, '.git')), 'sessions', id, 'session.json')
|
|
19
|
+
: join(sessionStoreDir(id), 'session.json');
|
|
20
|
+
function validSessionId(id) {
|
|
21
|
+
return /^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(id);
|
|
22
|
+
}
|
|
23
|
+
function requireSession(id, projectRoot) {
|
|
24
|
+
if (!validSessionId(id))
|
|
25
|
+
throw new SessionWebError(404, `session ${id} does not exist`);
|
|
26
|
+
if (!projectRoot) {
|
|
27
|
+
const record = readRecordEntry(id);
|
|
28
|
+
if (record.kind === 'absent')
|
|
29
|
+
throw new SessionWebError(404, `session ${id} does not exist`);
|
|
30
|
+
if (record.kind === 'corrupt')
|
|
31
|
+
throw new SessionWebError(500, `session ${id} has an unreadable record: ${record.error}`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const path = recordPath(id, projectRoot);
|
|
35
|
+
let record;
|
|
36
|
+
try {
|
|
37
|
+
record = JSON.parse(readFileSync(path, 'utf8'));
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (error.code === 'ENOENT')
|
|
41
|
+
throw new SessionWebError(404, `session ${id} does not exist`);
|
|
42
|
+
throw new SessionWebError(500, `session ${id} has an unreadable record: ${error instanceof Error ? error.message : String(error)}`);
|
|
43
|
+
}
|
|
44
|
+
if (!record || typeof record !== 'object' || record.session_id !== id)
|
|
45
|
+
throw new SessionWebError(500, `session ${id} has an unreadable record`);
|
|
46
|
+
}
|
|
47
|
+
export function canonicalSessionWebUrl(input) {
|
|
48
|
+
let url;
|
|
49
|
+
try {
|
|
50
|
+
url = new URL(input.trim());
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
throw new SessionWebError(400, `invalid local web URL: ${input}`);
|
|
54
|
+
}
|
|
55
|
+
const host = url.hostname.toLowerCase().replace(/^\[|\]$/g, '');
|
|
56
|
+
if (url.protocol !== 'http:' || !['127.0.0.1', 'localhost', '::1'].includes(host) || !url.port || url.username || url.password) {
|
|
57
|
+
throw new SessionWebError(400, 'web URL must be http://127.0.0.1:<port>/..., http://localhost:<port>/..., or http://[::1]:<port>/...');
|
|
58
|
+
}
|
|
59
|
+
if (url.search || url.hash)
|
|
60
|
+
throw new SessionWebError(400, 'web URL must not include a query or fragment; publish the service base URL');
|
|
61
|
+
return url.href;
|
|
62
|
+
}
|
|
63
|
+
export function sessionWebKey(url) {
|
|
64
|
+
return createHash('sha256').update(url).digest('base64url');
|
|
65
|
+
}
|
|
66
|
+
function readWebs(id, projectRoot) {
|
|
67
|
+
const path = webPath(id, projectRoot);
|
|
68
|
+
let parsed;
|
|
69
|
+
try {
|
|
70
|
+
parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
if (error.code === 'ENOENT')
|
|
74
|
+
return [];
|
|
75
|
+
throw new SessionWebError(500, `session web list is unreadable: ${path} — ${error instanceof Error ? error.message : String(error)}`);
|
|
76
|
+
}
|
|
77
|
+
if (!Array.isArray(parsed) || parsed.some((value) => typeof value !== 'string'))
|
|
78
|
+
throw new SessionWebError(500, `session web list is invalid: ${path}`);
|
|
79
|
+
try {
|
|
80
|
+
if (parsed.some((value) => canonicalSessionWebUrl(value) !== value))
|
|
81
|
+
throw new Error('not canonical');
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
throw new SessionWebError(500, `session web list is invalid: ${path}`);
|
|
85
|
+
}
|
|
86
|
+
return [...new Set(parsed)];
|
|
87
|
+
}
|
|
88
|
+
function writeWebs(id, webs) {
|
|
89
|
+
const path = webPath(id);
|
|
90
|
+
const tmp = `${path}.${process.pid}.tmp`;
|
|
91
|
+
try {
|
|
92
|
+
writeFileSync(tmp, `${JSON.stringify(webs, null, 2)}\n`);
|
|
93
|
+
renameSync(tmp, path);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
try {
|
|
97
|
+
unlinkSync(tmp);
|
|
98
|
+
}
|
|
99
|
+
catch { /* rename already consumed the temporary file */ }
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const toWeb = (url) => ({ url, key: sessionWebKey(url) });
|
|
103
|
+
export function listSessionWebs(id, projectRoot) {
|
|
104
|
+
requireSession(id, projectRoot);
|
|
105
|
+
return readSessionWebs(id, projectRoot);
|
|
106
|
+
}
|
|
107
|
+
// Session projections already hold a parsed record; re-checking session.json here would make an in-memory
|
|
108
|
+
// projection depend on the public route's existence guard. The route-facing list keeps that guard above.
|
|
109
|
+
export function readSessionWebs(id, projectRoot) {
|
|
110
|
+
return readWebs(id, projectRoot).map(toWeb);
|
|
111
|
+
}
|
|
112
|
+
export function addSessionWeb(id, input, lock) {
|
|
113
|
+
const url = canonicalSessionWebUrl(input);
|
|
114
|
+
return lock(id, () => {
|
|
115
|
+
requireSession(id);
|
|
116
|
+
const webs = readWebs(id);
|
|
117
|
+
if (webs.includes(url))
|
|
118
|
+
return { url, added: false };
|
|
119
|
+
writeWebs(id, [...webs, url]);
|
|
120
|
+
return { url, added: true };
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
export function retractSessionWeb(id, input, lock) {
|
|
124
|
+
const url = canonicalSessionWebUrl(input);
|
|
125
|
+
return lock(id, () => {
|
|
126
|
+
requireSession(id);
|
|
127
|
+
const webs = readWebs(id);
|
|
128
|
+
if (!webs.includes(url))
|
|
129
|
+
return { url, removed: false };
|
|
130
|
+
writeWebs(id, webs.filter((web) => web !== url));
|
|
131
|
+
return { url, removed: true };
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
export function postedSessionWeb(id, key, projectRoot) {
|
|
135
|
+
requireSession(id, projectRoot);
|
|
136
|
+
const web = readWebs(id, projectRoot).map(toWeb).find((entry) => entry.key === key);
|
|
137
|
+
if (!web)
|
|
138
|
+
throw new SessionWebError(403, 'that web service was not posted by this session');
|
|
139
|
+
return new URL(web.url);
|
|
140
|
+
}
|
|
141
|
+
export const sessionWebsPath = (id) => webPath(id);
|
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
import { type ReviewDiffFile } from '@spexcode/spec-core';
|
|
2
|
+
import { type ConfigPreset, type SpecLite } from '@spexcode/spec-core';
|
|
3
|
+
import { type Harness, type TurnFailure, type DispatchResult, type PaneProbe, type ProcTable } from './harness.js';
|
|
4
|
+
import { envSessionId, type RawRecord, type SessionLifecycle, type SessionProposal } from '@spexcode/spec-core';
|
|
5
|
+
import { type SessionWeb } from './session-web.js';
|
|
6
|
+
import { type MessageIdempotency } from '@spexcode/session-core';
|
|
7
|
+
export declare const TMUX_SOCK: string;
|
|
8
|
+
export type { DispatchResult };
|
|
9
|
+
export type Lifecycle = SessionLifecycle;
|
|
10
|
+
export type Proposal = SessionProposal;
|
|
11
|
+
export type DisplayStatus = 'working' | 'idle' | 'offline' | 'starting' | 'review' | 'done' | 'close-pending' | 'parked' | 'error' | 'asking' | 'queued' | 'unknown' | 'corrupt' | 'retired';
|
|
12
|
+
export type Liveness = 'online' | 'starting' | 'offline' | 'unknown';
|
|
13
|
+
export type Session = {
|
|
14
|
+
id: string;
|
|
15
|
+
node: string | null;
|
|
16
|
+
branch: string | null;
|
|
17
|
+
path: string;
|
|
18
|
+
label: string;
|
|
19
|
+
title: string;
|
|
20
|
+
raw: {
|
|
21
|
+
name: string | null;
|
|
22
|
+
title: string | null;
|
|
23
|
+
};
|
|
24
|
+
parent: string | null;
|
|
25
|
+
harness: string;
|
|
26
|
+
capabilities: {
|
|
27
|
+
headless: boolean;
|
|
28
|
+
};
|
|
29
|
+
launcher: string | null;
|
|
30
|
+
lifecycle: Lifecycle;
|
|
31
|
+
proposal: Proposal | null;
|
|
32
|
+
merges: number;
|
|
33
|
+
status: DisplayStatus;
|
|
34
|
+
liveness: Liveness;
|
|
35
|
+
note: string | null;
|
|
36
|
+
archived: boolean;
|
|
37
|
+
archiveHazard?: string | null;
|
|
38
|
+
prompt: string | null;
|
|
39
|
+
promptPreview: string | null;
|
|
40
|
+
created: number;
|
|
41
|
+
activity: string | null;
|
|
42
|
+
sortKey: number | null;
|
|
43
|
+
files?: string[];
|
|
44
|
+
web?: SessionWeb[];
|
|
45
|
+
zcodeChildSessionIds?: string[];
|
|
46
|
+
};
|
|
47
|
+
export type CloseSource = {
|
|
48
|
+
kind: 'unverified-session-claim';
|
|
49
|
+
id: string;
|
|
50
|
+
} | {
|
|
51
|
+
kind: 'user';
|
|
52
|
+
};
|
|
53
|
+
export type SessionClosure = {
|
|
54
|
+
id: string;
|
|
55
|
+
closedAt: string;
|
|
56
|
+
};
|
|
57
|
+
export declare function findSessionClosure(selector: string): SessionClosure | null;
|
|
58
|
+
export declare const HEADLINE_PREVIEW_COLUMNS = 60;
|
|
59
|
+
export declare const deriveLabel: (r: {
|
|
60
|
+
name?: string | null;
|
|
61
|
+
node?: string | null;
|
|
62
|
+
title?: string | null;
|
|
63
|
+
branch?: string | null;
|
|
64
|
+
id: string;
|
|
65
|
+
}) => string;
|
|
66
|
+
export declare const deriveTitle: (r: {
|
|
67
|
+
name?: string | null;
|
|
68
|
+
activity?: string | null;
|
|
69
|
+
note?: string | null;
|
|
70
|
+
promptPreview?: string | null;
|
|
71
|
+
node?: string | null;
|
|
72
|
+
title?: string | null;
|
|
73
|
+
branch?: string | null;
|
|
74
|
+
id: string;
|
|
75
|
+
}) => string;
|
|
76
|
+
export declare const deriveHeadline: (r: {
|
|
77
|
+
name?: string | null;
|
|
78
|
+
activity?: string | null;
|
|
79
|
+
note?: string | null;
|
|
80
|
+
promptPreview?: string | null;
|
|
81
|
+
node?: string | null;
|
|
82
|
+
title?: string | null;
|
|
83
|
+
branch?: string | null;
|
|
84
|
+
id: string;
|
|
85
|
+
}) => string;
|
|
86
|
+
export declare const sessionLabel: (s: Session) => string;
|
|
87
|
+
export declare const sessionTitle: (s: Session) => string;
|
|
88
|
+
export declare const sessionHeadline: (s: Session) => string;
|
|
89
|
+
export declare function alive(id: string): Promise<boolean>;
|
|
90
|
+
export type SessRec = {
|
|
91
|
+
session: string;
|
|
92
|
+
governed: boolean;
|
|
93
|
+
worktreePath: string;
|
|
94
|
+
branch: string | null;
|
|
95
|
+
node: string | null;
|
|
96
|
+
title: string | null;
|
|
97
|
+
name: string | null;
|
|
98
|
+
parent: string | null;
|
|
99
|
+
status: Lifecycle;
|
|
100
|
+
proposal: Proposal | null;
|
|
101
|
+
merges: number;
|
|
102
|
+
note: string | null;
|
|
103
|
+
sortKey: number | null;
|
|
104
|
+
createdAt: number;
|
|
105
|
+
harness: string;
|
|
106
|
+
harnessSessionId: string | null;
|
|
107
|
+
stopped: boolean;
|
|
108
|
+
archived: boolean;
|
|
109
|
+
coldProof?: string | null;
|
|
110
|
+
adapterRecovery?: string | null;
|
|
111
|
+
launcher: string | null;
|
|
112
|
+
launchCmd: string | null;
|
|
113
|
+
launchOwner: string | null;
|
|
114
|
+
createRequestId?: string | null;
|
|
115
|
+
createPayloadHash?: string | null;
|
|
116
|
+
zcodeChildSessionIds?: string[];
|
|
117
|
+
base?: string | null;
|
|
118
|
+
launchReadinessPending?: LaunchReadinessPending | null;
|
|
119
|
+
};
|
|
120
|
+
type LaunchReadinessOriginal = Pick<SessRec, 'status' | 'proposal' | 'note' | 'stopped' | 'archived' | 'coldProof' | 'adapterRecovery'>;
|
|
121
|
+
type LaunchReadinessPending = {
|
|
122
|
+
version: 1;
|
|
123
|
+
startedAt: number;
|
|
124
|
+
original: LaunchReadinessOriginal;
|
|
125
|
+
};
|
|
126
|
+
export declare const OWNED_QUEUE_RAW_STATUS = "launch-queued";
|
|
127
|
+
export declare function backendLaunchAuthority(env?: {
|
|
128
|
+
SPEXCODE_API_URL?: string;
|
|
129
|
+
PORT?: string;
|
|
130
|
+
}): string;
|
|
131
|
+
export declare function rawLifecycleStatus(rec: Pick<SessRec, 'status' | 'launchOwner'>): string;
|
|
132
|
+
export declare function canDrainQueued(rec: Pick<SessRec, 'status' | 'launchOwner' | 'stopped'>, authority?: string): boolean;
|
|
133
|
+
export declare class SessionRecordUnusable extends Error {
|
|
134
|
+
readonly code: 'corrupt' | 'retired';
|
|
135
|
+
readonly session: string;
|
|
136
|
+
constructor(code: 'corrupt' | 'retired', session: string, message: string);
|
|
137
|
+
}
|
|
138
|
+
export declare function withSessionRecordLockSync<T>(id: string, body: () => T): T;
|
|
139
|
+
export declare function withSessionInputLock<T>(id: string, body: () => T): T | null;
|
|
140
|
+
export declare function fromRaw(raw: RawRecord & {
|
|
141
|
+
launch_owner?: string;
|
|
142
|
+
}): SessRec;
|
|
143
|
+
export type WatchSource = 'manual' | 'parent';
|
|
144
|
+
export type SessionWatch = {
|
|
145
|
+
target: string;
|
|
146
|
+
createdAt: string;
|
|
147
|
+
};
|
|
148
|
+
export declare function subscribeSessionWatch(watcher: string, targets: string[], source?: WatchSource): Promise<{
|
|
149
|
+
watched: string[];
|
|
150
|
+
}>;
|
|
151
|
+
export declare function listSessionWatches(watcher: string): SessionWatch[];
|
|
152
|
+
export declare function cancelSessionWatch(watcher: string, targets: string[]): number;
|
|
153
|
+
export type SessionReparentResult = {
|
|
154
|
+
children: string[];
|
|
155
|
+
parent: string | null;
|
|
156
|
+
notified: string[];
|
|
157
|
+
};
|
|
158
|
+
export declare function reparentSessionRecords(rawChildren: string[], parent: string | null): Promise<SessionReparentResult>;
|
|
159
|
+
export type LiveSnap = {
|
|
160
|
+
probeFailed: boolean;
|
|
161
|
+
windows: Map<string, PaneProbe>;
|
|
162
|
+
titles: Map<string, string>;
|
|
163
|
+
sockets: Set<string>;
|
|
164
|
+
unproven: Set<string>;
|
|
165
|
+
};
|
|
166
|
+
export declare const TMUX_PANE_FORMAT = "#{session_name}\\037#{pane_pid}\\037#{pane_title}";
|
|
167
|
+
export declare function parseLivePanes(out: string): Map<string, {
|
|
168
|
+
panePid?: number;
|
|
169
|
+
title?: string;
|
|
170
|
+
}>;
|
|
171
|
+
export declare function needsCodexProcScan(windowed: {
|
|
172
|
+
harness: string;
|
|
173
|
+
hasPid: boolean;
|
|
174
|
+
}[]): boolean;
|
|
175
|
+
export declare function hotSignature(): Promise<string>;
|
|
176
|
+
export declare function warmSignature(): Promise<string>;
|
|
177
|
+
export declare function paneActivity(harness: Harness, paneTitle: string | null | undefined): string | null;
|
|
178
|
+
export declare function selfSummary(paneTitle: string): string | null;
|
|
179
|
+
export declare const BOOT_GRACE_MS = 45000;
|
|
180
|
+
export declare function liveness(rec: SessRec, snap: LiveSnap): Liveness;
|
|
181
|
+
export type ReviewIdentity = {
|
|
182
|
+
id: string;
|
|
183
|
+
node: string | null;
|
|
184
|
+
branch: string | null;
|
|
185
|
+
label: string;
|
|
186
|
+
};
|
|
187
|
+
export declare function reviewIdentity(id: string): ReviewIdentity | null;
|
|
188
|
+
export declare function toSession(rec: SessRec, status: DisplayStatus, lv: Liveness, activity?: string | null): Session;
|
|
189
|
+
export type ZCodeChildSessionLink = {
|
|
190
|
+
sessionId: string;
|
|
191
|
+
childSessionId: string;
|
|
192
|
+
alreadyLinked: boolean;
|
|
193
|
+
};
|
|
194
|
+
export declare function linkZCodeChildSession(sessionId: string, childSessionId: unknown): Promise<ZCodeChildSessionLink | null>;
|
|
195
|
+
export declare function renameSession(id: string, name: string): Promise<boolean>;
|
|
196
|
+
export declare function setSessionSort(id: string, key: number | null): Promise<boolean>;
|
|
197
|
+
export declare function sessionPrompt(id: string): Promise<string | null>;
|
|
198
|
+
export declare function listSessions(includeArchived?: boolean): Promise<Session[]>;
|
|
199
|
+
export type ApiBaseSource = 'flag' | 'worker-env' | 'record' | 'env-fallback' | 'default';
|
|
200
|
+
export type ApiBaseInfo = {
|
|
201
|
+
url: string;
|
|
202
|
+
source: ApiBaseSource;
|
|
203
|
+
};
|
|
204
|
+
export declare function optionArgv(argv?: readonly string[]): readonly string[];
|
|
205
|
+
export declare const apiBaseInfo: () => Promise<ApiBaseInfo>;
|
|
206
|
+
export declare const apiBase: () => Promise<string>;
|
|
207
|
+
export declare const ownSessionId: typeof envSessionId;
|
|
208
|
+
export type MsgSender = {
|
|
209
|
+
id: string;
|
|
210
|
+
label: string | null;
|
|
211
|
+
};
|
|
212
|
+
export declare function withSenderHint(text: string, sender: MsgSender | null): string;
|
|
213
|
+
export declare function withPeerSenderHint(text: string, sender: MsgSender | null, sshAddress: string, machineId: string): string;
|
|
214
|
+
export declare const withNoteReplyHint: (text: string) => string;
|
|
215
|
+
export declare const withTerminalReplyHint: (text: string) => string;
|
|
216
|
+
export declare const slugify: (s: string | null) => string;
|
|
217
|
+
export declare const nodeFromPrompt: (prompt: string) => string | null;
|
|
218
|
+
type CommandPreset = Pick<ConfigPreset, 'name' | 'body'>;
|
|
219
|
+
type CommandSpec = Pick<SpecLite, 'id' | 'path'>;
|
|
220
|
+
export declare function composeCommandPrompt(raw: string, presets: CommandPreset[], specs: CommandSpec[]): string;
|
|
221
|
+
export declare function resolveCommandPrompt(raw: string, loadedSpecs?: CommandSpec[]): Promise<string>;
|
|
222
|
+
type SessionPromptTarget = Pick<SessRec, 'session' | 'harness'>;
|
|
223
|
+
type SessionPromptOptions = {
|
|
224
|
+
from?: string;
|
|
225
|
+
replyVia?: 'note';
|
|
226
|
+
loadedSpecs?: CommandSpec[];
|
|
227
|
+
suffix?: string;
|
|
228
|
+
};
|
|
229
|
+
export type ComposedSessionPrompt = {
|
|
230
|
+
text: string;
|
|
231
|
+
replyVia?: 'note';
|
|
232
|
+
};
|
|
233
|
+
export declare function composeSessionPrompt(raw: string, target: SessionPromptTarget, opts?: SessionPromptOptions): Promise<ComposedSessionPrompt>;
|
|
234
|
+
export declare function titleFromPrompt(prompt: string): string | null;
|
|
235
|
+
export declare function launcherCmd(rec: SessRec): string | undefined;
|
|
236
|
+
export type LaunchBlock = {
|
|
237
|
+
code: 'no-worktree' | 'no-branch' | 'no-launcher';
|
|
238
|
+
message: string;
|
|
239
|
+
};
|
|
240
|
+
export declare function launchPreflight(rec: SessRec): LaunchBlock | null;
|
|
241
|
+
export declare function launchScript(id: string, tail: string, harness?: Harness, cmd?: string): string;
|
|
242
|
+
export declare const drainQueue: () => Promise<void>;
|
|
243
|
+
export declare function superviseQueue(intervalMs?: number): void;
|
|
244
|
+
export declare function superviseDelivery(intervalMs?: number): void;
|
|
245
|
+
export declare function turnFailureNote(harness: string, failure: TurnFailure): string;
|
|
246
|
+
export declare function turnFailureRetryDelay(failures: number): number;
|
|
247
|
+
export declare function reconcileTurnFailureObservers(): void;
|
|
248
|
+
export declare function superviseTurnFailures(intervalMs?: number): void;
|
|
249
|
+
export declare function assertProjectMatch(verb: string): Promise<void>;
|
|
250
|
+
export type SessionCreateFailureCode = 'session_create_timeout' | 'session_create_cancelled' | 'session_create_failed' | 'session_create_cleanup_failed' | 'session_create_key_reused';
|
|
251
|
+
type SessionCreateFailureStatus = 400 | 408 | 409 | 500 | 504;
|
|
252
|
+
type SessionCreatePhase = 'request' | 'creation-lock' | 'launcher-resolution' | 'target-resolution' | 'git-worktree' | 'materialize' | 'record-write' | 'launcher-queue' | 'cleanup';
|
|
253
|
+
export declare class SessionCreateError extends Error {
|
|
254
|
+
readonly code: SessionCreateFailureCode;
|
|
255
|
+
readonly phase: SessionCreatePhase;
|
|
256
|
+
readonly status: SessionCreateFailureStatus;
|
|
257
|
+
constructor(code: SessionCreateFailureCode, phase: SessionCreatePhase, message: string, status: SessionCreateFailureStatus);
|
|
258
|
+
}
|
|
259
|
+
type SessionCreateRequestOptions = {
|
|
260
|
+
requestKey?: string;
|
|
261
|
+
signal?: AbortSignal;
|
|
262
|
+
timeoutMs?: number;
|
|
263
|
+
};
|
|
264
|
+
export type SessionCreateRequestResult = {
|
|
265
|
+
status: 201;
|
|
266
|
+
session: Session;
|
|
267
|
+
} | {
|
|
268
|
+
status: SessionCreateFailureStatus;
|
|
269
|
+
error: string;
|
|
270
|
+
code?: SessionCreateFailureCode;
|
|
271
|
+
phase?: SessionCreatePhase;
|
|
272
|
+
};
|
|
273
|
+
export declare function sessionCreateTimeoutMs(env?: NodeJS.ProcessEnv): number;
|
|
274
|
+
export declare function sessionIdForCreateKey(key: string): string;
|
|
275
|
+
export declare function sessionCreateRequest(body: unknown, options?: SessionCreateRequestOptions): Promise<SessionCreateRequestResult>;
|
|
276
|
+
export declare function createSession(prompt: string, launcher?: string, name?: string, base?: string): Promise<Session>;
|
|
277
|
+
export declare function spawnerClause(p: SessRec | null): string;
|
|
278
|
+
export declare function pendingSessionCreateWorktreePaths(): Set<string>;
|
|
279
|
+
export declare function bootstrapMaterialize(rec: SessRec, doMaterialize?: (proj: string) => unknown): void;
|
|
280
|
+
type ResumeOptions = {
|
|
281
|
+
force?: boolean;
|
|
282
|
+
guard?: boolean;
|
|
283
|
+
};
|
|
284
|
+
export declare const resumeSession: (id: string, opts?: ResumeOptions) => Promise<{
|
|
285
|
+
ok: boolean;
|
|
286
|
+
error?: string;
|
|
287
|
+
refused?: boolean;
|
|
288
|
+
info?: string;
|
|
289
|
+
}>;
|
|
290
|
+
export declare function markState(status: Lifecycle, opts?: {
|
|
291
|
+
proposal?: Proposal;
|
|
292
|
+
note?: string;
|
|
293
|
+
sessionId?: string;
|
|
294
|
+
}): boolean;
|
|
295
|
+
export declare const markDone: (proposal?: Proposal, sessionId?: string, note?: string) => boolean;
|
|
296
|
+
export declare const markError: (sessionId?: string) => boolean;
|
|
297
|
+
export declare function markTurnFailure(sessionId: string | undefined, note: string): boolean;
|
|
298
|
+
export declare function markHeadlessTurnFailure(sessionId: string, harness: string, exitCode: string): boolean;
|
|
299
|
+
export declare function stageHarnessLaunchProof(sessionId: string | undefined, harnessSessionId: string | undefined, launchPayload: string): boolean;
|
|
300
|
+
export declare function markHarnessSessionId(sessionId: string | undefined, harnessSessionId: string | undefined): boolean;
|
|
301
|
+
export declare function markIdle(sessionId?: string): boolean;
|
|
302
|
+
export declare function mergeReadiness(proposal?: 'merge' | 'nothing'): {
|
|
303
|
+
ready: boolean;
|
|
304
|
+
reason?: string;
|
|
305
|
+
};
|
|
306
|
+
export type ReviewEvalFacts = {
|
|
307
|
+
freshPass: number;
|
|
308
|
+
freshFail: number;
|
|
309
|
+
needReview: number;
|
|
310
|
+
blind: number;
|
|
311
|
+
};
|
|
312
|
+
export type ReviewEvalGate = ({
|
|
313
|
+
phase: 'ready';
|
|
314
|
+
} & ReviewEvalFacts) | {
|
|
315
|
+
phase: 'unavailable' | 'loading' | 'updating' | 'error';
|
|
316
|
+
};
|
|
317
|
+
export type ReviewGates = {
|
|
318
|
+
conflictsWithMain: boolean;
|
|
319
|
+
lint: {
|
|
320
|
+
errorCount: number;
|
|
321
|
+
warningCount: number;
|
|
322
|
+
};
|
|
323
|
+
};
|
|
324
|
+
export type ReviewPayload = {
|
|
325
|
+
id: string;
|
|
326
|
+
node: string | null;
|
|
327
|
+
branch: string | null;
|
|
328
|
+
label: string;
|
|
329
|
+
ahead: number;
|
|
330
|
+
dirtyNonRuntime: number;
|
|
331
|
+
diff: ReviewDiffFile[];
|
|
332
|
+
gates: ReviewGates;
|
|
333
|
+
proposal: {
|
|
334
|
+
kind: Proposal | null;
|
|
335
|
+
note: string | null;
|
|
336
|
+
};
|
|
337
|
+
};
|
|
338
|
+
export declare function reviewPayload(id: string): Promise<ReviewPayload | null>;
|
|
339
|
+
export type MergeSessionResult = {
|
|
340
|
+
dispatched: true;
|
|
341
|
+
} | {
|
|
342
|
+
dispatched: false;
|
|
343
|
+
reason: string;
|
|
344
|
+
code?: 'session_merge_not_proposed';
|
|
345
|
+
status?: 409;
|
|
346
|
+
};
|
|
347
|
+
export declare function mergeSession(id: string): Promise<MergeSessionResult>;
|
|
348
|
+
export type SessionLeafReceipt = {
|
|
349
|
+
version: 1;
|
|
350
|
+
kind: 'session-leaf';
|
|
351
|
+
sessionId: string;
|
|
352
|
+
pid: number;
|
|
353
|
+
startToken: string;
|
|
354
|
+
};
|
|
355
|
+
type SessionLeafReceiptCandidate = {
|
|
356
|
+
ok: boolean;
|
|
357
|
+
receipt?: SessionLeafReceipt;
|
|
358
|
+
reason?: string;
|
|
359
|
+
};
|
|
360
|
+
export declare function parseSessionLeafReceipt(raw: string, sessionId: string): SessionLeafReceipt | null;
|
|
361
|
+
export declare function sessionLeafReceiptCandidate(sessionId: string, pid: number, panePid: number | null, procs: ProcTable | null, startBefore: string | null, startAfter: string | null): SessionLeafReceiptCandidate;
|
|
362
|
+
export declare function sessionLeafReceiptIdentityState(receipt: SessionLeafReceipt, registeredPid: number | null, currentStartToken: string | null, liveness: 'alive' | 'dead' | 'unknown'): 'same-live' | 'gone' | 'pid-reused' | 'unknown' | 'registration-changed' | 'registration-missing';
|
|
363
|
+
export type SessionLeafProcessProbe = Readonly<{
|
|
364
|
+
startToken(pid: number): string | null;
|
|
365
|
+
liveness(pid: number): 'alive' | 'dead' | 'unknown';
|
|
366
|
+
}>;
|
|
367
|
+
export declare function installSessionLeafProcessProbeForTest(probe: SessionLeafProcessProbe): () => void;
|
|
368
|
+
export declare const stopSession: (id: string) => Promise<boolean>;
|
|
369
|
+
export declare const archiveSession: (id: string, on?: boolean) => Promise<boolean>;
|
|
370
|
+
export declare const closeSession: (id: string, rawSource?: unknown) => Promise<boolean>;
|
|
371
|
+
export type CorruptRecordQuarantineWitness = {
|
|
372
|
+
adapter: string;
|
|
373
|
+
thread: string | null;
|
|
374
|
+
tmux: string;
|
|
375
|
+
worktree: string;
|
|
376
|
+
branch: string;
|
|
377
|
+
};
|
|
378
|
+
export type CorruptRecordQuarantineResult = {
|
|
379
|
+
id: string;
|
|
380
|
+
bundle: string;
|
|
381
|
+
sha256: string;
|
|
382
|
+
observedAt: string;
|
|
383
|
+
};
|
|
384
|
+
export declare function quarantineCorruptRecord(id: string, rawWitness: unknown): Promise<CorruptRecordQuarantineResult>;
|
|
385
|
+
export declare function restoreQuarantinedRecord(id: string): Promise<CorruptRecordQuarantineResult>;
|
|
386
|
+
export type CaptureResult = {
|
|
387
|
+
ok: true;
|
|
388
|
+
pane: string;
|
|
389
|
+
} | {
|
|
390
|
+
ok: false;
|
|
391
|
+
reason: 'unknown' | 'offline' | 'capture-failed';
|
|
392
|
+
};
|
|
393
|
+
export declare function captureSessionResult(id: string): Promise<CaptureResult>;
|
|
394
|
+
export declare const STATUS_GLYPH: Record<DisplayStatus, string>;
|
|
395
|
+
export declare function matchesSelector(s: Session, q: string, own?: string | null, cwd?: string): boolean;
|
|
396
|
+
export declare function selectSessions(all: Session[], selectors: string[], statuses?: string[], own?: string | null, cwd?: string): Session[];
|
|
397
|
+
export declare function selectChildren(all: Session[], parent: string): Session[];
|
|
398
|
+
export type Resolved = {
|
|
399
|
+
ok: Session;
|
|
400
|
+
} | {
|
|
401
|
+
ambiguous: Session[];
|
|
402
|
+
} | {
|
|
403
|
+
none: true;
|
|
404
|
+
};
|
|
405
|
+
export declare function resolveSession(selector: string, sessions: Session[], own?: string | null, cwd?: string): Resolved;
|
|
406
|
+
export declare function displayWidth(s: string): number;
|
|
407
|
+
export declare function truncWidth(s: string, max: number): string;
|
|
408
|
+
export declare const padWidth: (s: string, w: number) => string;
|
|
409
|
+
export declare const NOTE_BOARD_LIMIT = 50;
|
|
410
|
+
export declare function statusLegend(color?: boolean): string;
|
|
411
|
+
export type SessionTableScope = {
|
|
412
|
+
kind: 'sessions';
|
|
413
|
+
} | {
|
|
414
|
+
kind: 'children';
|
|
415
|
+
parent: string;
|
|
416
|
+
};
|
|
417
|
+
export declare function formatTable(sessions: Session[], color?: boolean, scope?: SessionTableScope): string;
|
|
418
|
+
type DispatchIdempotency = MessageIdempotency;
|
|
419
|
+
type DispatchAcceptCode = 'dispatch_key_reused' | 'session_merge_not_proposed';
|
|
420
|
+
type AcceptedDispatch = DispatchResult & {
|
|
421
|
+
replayed?: boolean;
|
|
422
|
+
code?: DispatchAcceptCode;
|
|
423
|
+
};
|
|
424
|
+
type SendTextOptions = {
|
|
425
|
+
replyVia?: 'note';
|
|
426
|
+
idempotency?: DispatchIdempotency;
|
|
427
|
+
acceptGuard?: (record: SessRec) => Promise<void>;
|
|
428
|
+
deferDrain?: boolean;
|
|
429
|
+
};
|
|
430
|
+
export declare function sendText(id: string, text: string, from?: string, opts?: SendTextOptions): Promise<AcceptedDispatch>;
|
|
431
|
+
export declare function drainSession(id: string): Promise<void>;
|
|
432
|
+
export declare function interruptSession(id: string): Promise<DispatchResult>;
|
|
433
|
+
export declare function rawKey(id: string, key: string | string[]): Promise<boolean>;
|