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
package/spec-cli/src/sh.ts
DELETED
|
@@ -1,318 +0,0 @@
|
|
|
1
|
-
import { readFileSync, readdirSync, existsSync } from 'node:fs'
|
|
2
|
-
import { join, relative } from 'node:path'
|
|
3
|
-
import { homedir } from 'node:os'
|
|
4
|
-
import { repoRoot } from './git.js'
|
|
5
|
-
|
|
6
|
-
// the data behind the new-session input's `/` dropdown, computed the SAME way the chosen HARNESS computes
|
|
7
|
-
// its own `/` menu so the two stay in lockstep. This module is the slash surface of the [[harness-adapter]]:
|
|
8
|
-
// one menu builder per harness (`claudeSlashCommands` / `codexSlashCommands`), wired into the adapters in
|
|
9
|
-
// harness.ts. The ONLY job here: produce [{name, description, source}]. It is DECOUPLED from any execution —
|
|
10
|
-
// the dashboard merely inserts the chosen `/<name> ` text.
|
|
11
|
-
//
|
|
12
|
-
// The Claude list is the union of:
|
|
13
|
-
// · BUILT_IN - the large fixed set CC ships (seeded below from a live capture, see the comment there)
|
|
14
|
-
// · user - ~/.claude/commands/**/*.md (subdirs namespace as `a:b`)
|
|
15
|
-
// · project - <repo>/.claude/commands/**/*.md
|
|
16
|
-
// · skill - ~/.claude/skills/*/SKILL.md + <repo>/.claude/skills/*/SKILL.md (best-effort)
|
|
17
|
-
// Skills/plugins/MCP that aren't readable as files simply contribute nothing — we never guess.
|
|
18
|
-
|
|
19
|
-
export type SlashCommand = { name: string; description: string; source: 'built-in' | 'user' | 'project' | 'skill' }
|
|
20
|
-
|
|
21
|
-
// captured live from `claude --dangerously-skip-permissions` v2.1.x by typing `/` and paging the dropdown;
|
|
22
|
-
// version-specific — re-capture this block to refresh for a new CC version (the disk-discovered sources don't).
|
|
23
|
-
const BUILT_IN: ReadonlyArray<readonly [string, string]> = [
|
|
24
|
-
['add-dir', 'Add a new working directory'],
|
|
25
|
-
['advisor', 'Let Claude consult a stronger model at key moments'],
|
|
26
|
-
['agents', 'Manage agent configurations'],
|
|
27
|
-
['autofix-pr', 'Monitor and autofix any issues with the current PR'],
|
|
28
|
-
['background', 'Send this session to the background and free the terminal'],
|
|
29
|
-
['branch', 'Create a branch of the current conversation at this point'],
|
|
30
|
-
['btw', 'Ask a quick side question without interrupting the main conversation'],
|
|
31
|
-
['chrome', 'Open Claude in Chrome (beta) settings'],
|
|
32
|
-
['clear', 'Start a new session with empty context; previous session stays on disk (resumable with /resume)'],
|
|
33
|
-
['color', 'Set the prompt bar color for this session'],
|
|
34
|
-
['compact', 'Free up context by summarizing the conversation so far'],
|
|
35
|
-
['config', 'Open settings'],
|
|
36
|
-
['context', 'Visualize current context usage as a colored grid'],
|
|
37
|
-
['copy', "Copy Claude's last response to clipboard (or /copy N for the Nth-latest)"],
|
|
38
|
-
['desktop', 'Continue the current session in Claude Desktop'],
|
|
39
|
-
['diff', 'View uncommitted changes and per-turn diffs'],
|
|
40
|
-
['doctor', 'Diagnose and verify your Claude Code installation and settings'],
|
|
41
|
-
['effort', 'Set effort level for model usage'],
|
|
42
|
-
['exit', 'Exit the CLI'],
|
|
43
|
-
['export', 'Export the current conversation to a file or clipboard'],
|
|
44
|
-
['fast', 'Toggle fast mode (Opus 4.8)'],
|
|
45
|
-
['feedback', 'Submit feedback, report a bug, or share your conversation'],
|
|
46
|
-
['focus', 'Toggle focus view: just your prompt, summary, and response'],
|
|
47
|
-
['fork', 'Spawn a background agent that inherits the full conversation'],
|
|
48
|
-
['goal', 'Set a goal Claude checks before stopping'],
|
|
49
|
-
['help', 'Show help and available commands'],
|
|
50
|
-
['hooks', 'View hook configurations for tool events'],
|
|
51
|
-
['ide', 'Manage IDE integrations and show status'],
|
|
52
|
-
['install-github-app', 'Set up Claude GitHub Actions for a repository'],
|
|
53
|
-
['install-slack-app', 'Install the Claude Slack app'],
|
|
54
|
-
['keybindings', 'Open your keyboard shortcuts file'],
|
|
55
|
-
['login', 'Sign in with your Anthropic account'],
|
|
56
|
-
['logout', 'Sign out from your Anthropic account'],
|
|
57
|
-
['mcp', 'Manage MCP servers'],
|
|
58
|
-
['memory', 'Open a memory file in your editor'],
|
|
59
|
-
['mobile', 'Show QR code to download the Claude mobile app'],
|
|
60
|
-
['model', 'Set the AI model for Claude Code'],
|
|
61
|
-
['permissions', 'Manage allow and deny tool permission rules'],
|
|
62
|
-
['plan', 'Enable plan mode or view the current session plan'],
|
|
63
|
-
['plugin', 'Manage Claude Code plugins'],
|
|
64
|
-
['powerup', 'Discover Claude Code features through quick interactive lessons'],
|
|
65
|
-
['privacy-settings', 'View and update your privacy settings'],
|
|
66
|
-
['radio', 'Listen to Claude FM lo-fi radio'],
|
|
67
|
-
['recap', 'Generate a one-line session recap now'],
|
|
68
|
-
['release-notes', 'View release notes'],
|
|
69
|
-
['reload-plugins', 'Activate pending plugin changes in the current session'],
|
|
70
|
-
['reload-skills', 'Pick up skills added or changed on disk during this session'],
|
|
71
|
-
['remote-control', 'Control this session from your phone or claude.ai/code'],
|
|
72
|
-
['remote-env', 'Choose the default environment for cloud agents'],
|
|
73
|
-
['rename', 'Rename the current conversation'],
|
|
74
|
-
['resume', 'Resume a previous conversation'],
|
|
75
|
-
['rewind', 'Restore the code and/or conversation to a previous point'],
|
|
76
|
-
['sandbox', 'Configure sandbox settings'],
|
|
77
|
-
['skills', 'List available skills'],
|
|
78
|
-
['status', 'Show Claude Code status including version, model, account, API connectivity, and tool statuses'],
|
|
79
|
-
['stickers', 'Order Claude Code stickers'],
|
|
80
|
-
['tasks', 'View and manage everything running in the background'],
|
|
81
|
-
['teleport', 'Resume a Claude Code session from claude.ai'],
|
|
82
|
-
['terminal-setup', 'Install Shift+Enter key binding for newlines'],
|
|
83
|
-
['theme', 'Change the theme'],
|
|
84
|
-
['tui', 'Set the terminal UI renderer (default | fullscreen)'],
|
|
85
|
-
['ultraplan', 'Draft an editable plan in Claude Code on the web'],
|
|
86
|
-
['ultrareview', 'Start a cloud agent that finds and verifies bugs in your branch'],
|
|
87
|
-
['upgrade', 'Upgrade to Max for higher rate limits and more Opus'],
|
|
88
|
-
['usage', 'Show session cost, plan usage, and activity stats'],
|
|
89
|
-
['usage-credits', 'Configure usage credits to keep working when you hit a limit'],
|
|
90
|
-
['voice', 'Toggle voice mode'],
|
|
91
|
-
['web-setup', 'Set up Claude Code on the web with your GitHub account'],
|
|
92
|
-
['workflows', 'Browse running and completed workflows'],
|
|
93
|
-
]
|
|
94
|
-
|
|
95
|
-
// describe precedence (mirrors CC): a `description:` frontmatter line wins, else the first non-empty body
|
|
96
|
-
// line (leading `#` stripped). Frontmatter parsing is intentionally one `key: value` line.
|
|
97
|
-
function describe(src: string): string {
|
|
98
|
-
const m = src.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/)
|
|
99
|
-
const fm = m ? m[1] : ''
|
|
100
|
-
const body = m ? m[2] : src
|
|
101
|
-
for (const line of fm.split('\n')) {
|
|
102
|
-
const d = line.match(/^\s*description\s*:\s*(.+?)\s*$/)
|
|
103
|
-
if (d) return d[1].replace(/^["']|["']$/g, '')
|
|
104
|
-
}
|
|
105
|
-
for (const line of body.split('\n')) {
|
|
106
|
-
const t = line.replace(/^#+\s*/, '').trim()
|
|
107
|
-
if (t) return t
|
|
108
|
-
}
|
|
109
|
-
return ''
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// walk a commands/ dir; name = path under it minus `.md`, subdirs joined `a:b` (CC's namespace syntax).
|
|
113
|
-
function scanCommands(root: string, source: 'user' | 'project', out: SlashCommand[]) {
|
|
114
|
-
if (!existsSync(root)) return
|
|
115
|
-
const walk = (dir: string) => {
|
|
116
|
-
for (const e of readdirSync(dir, { withFileTypes: true })) {
|
|
117
|
-
const p = join(dir, e.name)
|
|
118
|
-
if (e.isDirectory()) walk(p)
|
|
119
|
-
else if (e.isFile() && e.name.endsWith('.md')) {
|
|
120
|
-
const name = relative(root, p).replace(/\.md$/, '').split('/').join(':')
|
|
121
|
-
out.push({ name, description: describe(readFileSync(p, 'utf8')), source })
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
walk(root)
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// best-effort skills: each skill is a dir with a SKILL.md whose `name:` (or dir name) is the command.
|
|
129
|
-
function scanSkills(root: string, out: SlashCommand[]) {
|
|
130
|
-
if (!existsSync(root)) return
|
|
131
|
-
for (const e of readdirSync(root, { withFileTypes: true })) {
|
|
132
|
-
const skillFile = join(root, e.name, 'SKILL.md')
|
|
133
|
-
if (e.isDirectory() && existsSync(skillFile)) {
|
|
134
|
-
const src = readFileSync(skillFile, 'utf8')
|
|
135
|
-
const nm = src.match(/^---\n[\s\S]*?\nname\s*:\s*(.+?)\s*\n[\s\S]*?\n---/m)
|
|
136
|
-
out.push({ name: (nm ? nm[1] : e.name).trim(), description: describe(src), source: 'skill' })
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// ordering mirrors CC: custom (user, then project), then built-in, then skills; alphabetical within each
|
|
142
|
-
// group. A same-named custom command shadows a built-in — dedupe keeps the higher-priority source.
|
|
143
|
-
const RANK: Record<SlashCommand['source'], number> = { user: 0, project: 1, 'built-in': 2, skill: 3 }
|
|
144
|
-
|
|
145
|
-
// dedupe by name keeping the higher-priority source, then sort by source rank then name.
|
|
146
|
-
function dedupeSort(all: SlashCommand[]): SlashCommand[] {
|
|
147
|
-
const byName = new Map<string, SlashCommand>()
|
|
148
|
-
for (const c of all) {
|
|
149
|
-
const prev = byName.get(c.name)
|
|
150
|
-
if (!prev || RANK[c.source] < RANK[prev.source]) byName.set(c.name, c)
|
|
151
|
-
}
|
|
152
|
-
return [...byName.values()].sort((a, b) => RANK[a.source] - RANK[b.source] || a.name.localeCompare(b.name))
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export function claudeSlashCommands(): SlashCommand[] {
|
|
156
|
-
const home = homedir()
|
|
157
|
-
const repo = repoRoot()
|
|
158
|
-
const all: SlashCommand[] = []
|
|
159
|
-
scanCommands(join(home, '.claude', 'commands'), 'user', all)
|
|
160
|
-
scanCommands(join(repo, '.claude', 'commands'), 'project', all)
|
|
161
|
-
for (const [name, description] of BUILT_IN) all.push({ name, description, source: 'built-in' })
|
|
162
|
-
scanSkills(join(home, '.claude', 'skills'), all)
|
|
163
|
-
scanSkills(join(repo, '.claude', 'skills'), all)
|
|
164
|
-
return dedupeSort(all)
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// @@@ CODEX_BUILT_IN seed - Codex's `/` menu, taken from the codex-rs source of the pinned version
|
|
168
|
-
// (tui/src/slash_command.rs, codex-cli 0.142.3): the `SlashCommand` enum in PRESENTATION order with each
|
|
169
|
-
// `description()`. Discovered, not guessed — the same discipline as the Claude capture; to refresh for a new
|
|
170
|
-
// codex, re-read that enum. We drop the ones codex itself hides from a normal session: the debug-only
|
|
171
|
-
// (`rollout`, `test-approval`), the explicit DO-NOT-USE (`debug-m-drop`/`debug-m-update`), and the
|
|
172
|
-
// windows-only `sandbox-add-read-dir`. Feature-gated commands are kept (best-effort: the menu is informational).
|
|
173
|
-
const CODEX_BUILT_IN: ReadonlyArray<readonly [string, string]> = [
|
|
174
|
-
['model', 'choose what model and reasoning effort to use'],
|
|
175
|
-
['ide', 'include current selection, open files, and other context from your IDE'],
|
|
176
|
-
['permissions', 'choose what Codex is allowed to do'],
|
|
177
|
-
['keymap', 'remap TUI shortcuts'],
|
|
178
|
-
['vim', 'toggle Vim mode for the composer'],
|
|
179
|
-
['setup-default-sandbox', 'set up elevated agent sandbox'],
|
|
180
|
-
['experimental', 'toggle experimental features'],
|
|
181
|
-
['approve', 'approve one retry of a recent auto-review denial'],
|
|
182
|
-
['memories', 'configure memory use and generation'],
|
|
183
|
-
['skills', 'use skills to improve how Codex performs specific tasks'],
|
|
184
|
-
['import', 'import setup, this project, and recent chats from Claude Code'],
|
|
185
|
-
['hooks', 'view and manage lifecycle hooks'],
|
|
186
|
-
['review', 'review my current changes and find issues'],
|
|
187
|
-
['rename', 'rename the current thread'],
|
|
188
|
-
['new', 'start a new chat during a conversation'],
|
|
189
|
-
['archive', 'archive this session and exit'],
|
|
190
|
-
['delete', 'permanently delete this session and exit'],
|
|
191
|
-
['resume', 'resume a saved chat'],
|
|
192
|
-
['fork', 'fork the current chat'],
|
|
193
|
-
['app', 'continue this session in Codex Desktop'],
|
|
194
|
-
['init', 'create an AGENTS.md file with instructions for Codex'],
|
|
195
|
-
['compact', 'summarize conversation to prevent hitting the context limit'],
|
|
196
|
-
['plan', 'switch to Plan mode'],
|
|
197
|
-
['goal', 'set or view the goal for a long-running task'],
|
|
198
|
-
['agent', 'switch the active agent thread'],
|
|
199
|
-
['side', 'start a side conversation in an ephemeral fork'],
|
|
200
|
-
['btw', 'start a side conversation in an ephemeral fork'],
|
|
201
|
-
['copy', 'copy last response as markdown'],
|
|
202
|
-
['raw', 'toggle raw scrollback mode for copy-friendly terminal selection'],
|
|
203
|
-
['diff', 'show git diff (including untracked files)'],
|
|
204
|
-
['mention', 'mention a file'],
|
|
205
|
-
['status', 'show current session configuration and token usage'],
|
|
206
|
-
['usage', 'view account usage or use a usage limit reset'],
|
|
207
|
-
['debug-config', 'show config layers and requirement sources for debugging'],
|
|
208
|
-
['title', 'configure which items appear in the terminal title'],
|
|
209
|
-
['statusline', 'configure which items appear in the status line'],
|
|
210
|
-
['theme', 'choose a syntax highlighting theme'],
|
|
211
|
-
['pets', 'choose or hide the terminal pet'],
|
|
212
|
-
['mcp', 'list configured MCP tools; use /mcp verbose for details'],
|
|
213
|
-
['apps', 'manage apps'],
|
|
214
|
-
['plugins', 'browse plugins'],
|
|
215
|
-
['logout', 'log out of Codex'],
|
|
216
|
-
['quit', 'exit Codex'],
|
|
217
|
-
['exit', 'exit Codex'],
|
|
218
|
-
['feedback', 'send logs to maintainers'],
|
|
219
|
-
['ps', 'list background terminals'],
|
|
220
|
-
['stop', 'stop all background terminals'],
|
|
221
|
-
['clear', 'clear the terminal and start a new chat'],
|
|
222
|
-
['personality', 'choose a communication style for Codex'],
|
|
223
|
-
['subagents', 'switch the active agent thread'],
|
|
224
|
-
]
|
|
225
|
-
|
|
226
|
-
// @@@ codexSlashCommands - Codex's `/` menu, computed the way Codex computes its own: its built-ins (above) +
|
|
227
|
-
// the user's saved prompts in `$CODEX_HOME/prompts/*.md` (each filename becomes `/<name>`, codex's custom-
|
|
228
|
-
// prompt convention). Like the Claude builder it NEVER guesses — plugin commands that aren't readable as
|
|
229
|
-
// simple files contribute nothing. Presentation order: built-ins first (codex's enum order), then prompts.
|
|
230
|
-
// @@@ PI_BUILT_IN seed - pi's `/` menu, extracted from the INSTALLED pi's own command table
|
|
231
|
-
// (dist/core/slash-commands.js, @earendil-works/pi-coding-agent 0.80.10) — discovered, not guessed, same
|
|
232
|
-
// discipline as the claude/codex captures; to refresh for a new pi, re-read that module.
|
|
233
|
-
const PI_BUILT_IN: ReadonlyArray<readonly [string, string]> = [
|
|
234
|
-
['settings', 'Open settings menu'],
|
|
235
|
-
['model', 'Select model (opens selector UI)'],
|
|
236
|
-
['scoped-models', 'Enable/disable models for Ctrl+P cycling'],
|
|
237
|
-
['export', 'Export session (HTML default, or specify path: .html/.jsonl)'],
|
|
238
|
-
['import', 'Import and resume a session from a JSONL file'],
|
|
239
|
-
['share', 'Share session as a secret GitHub gist'],
|
|
240
|
-
['copy', 'Copy last agent message to clipboard'],
|
|
241
|
-
['name', 'Set session display name'],
|
|
242
|
-
['session', 'Show session info and stats'],
|
|
243
|
-
['changelog', 'Show changelog entries'],
|
|
244
|
-
['hotkeys', 'Show all keyboard shortcuts'],
|
|
245
|
-
['fork', 'Create a new fork from a previous user message'],
|
|
246
|
-
['clone', 'Duplicate the current session at the current position'],
|
|
247
|
-
['tree', 'Navigate session tree (switch branches)'],
|
|
248
|
-
['trust', 'Save project trust decision for future sessions'],
|
|
249
|
-
['login', 'Configure provider authentication'],
|
|
250
|
-
['logout', 'Remove provider authentication'],
|
|
251
|
-
['new', 'Start a new session'],
|
|
252
|
-
['compact', 'Manually compact the session context'],
|
|
253
|
-
['resume', 'Resume a different session'],
|
|
254
|
-
['reload', 'Reload keybindings, extensions, skills, prompts, themes, and context files'],
|
|
255
|
-
]
|
|
256
|
-
|
|
257
|
-
// @@@ piSlashCommands - pi's `/` menu, computed the way pi computes its own: built-ins (above) + prompt
|
|
258
|
-
// templates (`~/.pi/agent/prompts/*.md` global, `.pi/prompts/*.md` project — each filename becomes `/<name>`)
|
|
259
|
-
// + skills (`/skill:<name>` is pi's spelling, but the bare name is what our dropdown wants). Best-effort like
|
|
260
|
-
// the codex builder: what isn't readable as simple files contributes nothing.
|
|
261
|
-
export function piSlashCommands(): SlashCommand[] {
|
|
262
|
-
const repo = repoRoot()
|
|
263
|
-
const all: SlashCommand[] = []
|
|
264
|
-
for (const [name, description] of PI_BUILT_IN) all.push({ name, description, source: 'built-in' })
|
|
265
|
-
scanCommands(join(homedir(), '.pi', 'agent', 'prompts'), 'user', all)
|
|
266
|
-
scanCommands(join(repo, '.pi', 'prompts'), 'project', all)
|
|
267
|
-
scanSkills(join(homedir(), '.pi', 'agent', 'skills'), all)
|
|
268
|
-
scanSkills(join(repo, '.pi', 'skills'), all)
|
|
269
|
-
return dedupeSort(all)
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
export function codexSlashCommands(): SlashCommand[] {
|
|
273
|
-
const all: SlashCommand[] = []
|
|
274
|
-
for (const [name, description] of CODEX_BUILT_IN) all.push({ name, description, source: 'built-in' })
|
|
275
|
-
const codexHome = process.env.CODEX_HOME || join(homedir(), '.codex')
|
|
276
|
-
scanCommands(join(codexHome, 'prompts'), 'user', all) // saved prompts → /<basename>
|
|
277
|
-
// codex built-ins keep their enum (presentation) order; user prompts sort after, alphabetical.
|
|
278
|
-
const seen = new Map<string, SlashCommand>()
|
|
279
|
-
const order: string[] = []
|
|
280
|
-
for (const c of all) { if (!seen.has(c.name)) order.push(c.name); if (!seen.has(c.name) || RANK[c.source] < RANK[seen.get(c.name)!.source]) seen.set(c.name, c) }
|
|
281
|
-
const builtins = order.filter((n) => seen.get(n)!.source === 'built-in').map((n) => seen.get(n)!)
|
|
282
|
-
const prompts = [...seen.values()].filter((c) => c.source !== 'built-in').sort((a, b) => a.name.localeCompare(b.name))
|
|
283
|
-
return [...builtins, ...prompts]
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
// opencode built-ins — a conservative pinned set (opencode 1.18.x TUI commands; its TUI registry is compiled,
|
|
287
|
-
// not file-discoverable, so like the other two capture blocks this is version-specific and re-pinned by hand).
|
|
288
|
-
const OPENCODE_BUILT_IN: ReadonlyArray<readonly [string, string]> = [
|
|
289
|
-
['compact', 'Summarize and compact the current session'],
|
|
290
|
-
['editor', 'Open the external editor for the message'],
|
|
291
|
-
['exit', 'Exit opencode'],
|
|
292
|
-
['export', 'Export the session'],
|
|
293
|
-
['help', 'Show help'],
|
|
294
|
-
['init', 'Create or update AGENTS.md'],
|
|
295
|
-
['models', 'List and switch models'],
|
|
296
|
-
['new', 'Start a new session'],
|
|
297
|
-
['redo', 'Redo a previously undone message'],
|
|
298
|
-
['sessions', 'List and switch sessions'],
|
|
299
|
-
['share', 'Share the current session'],
|
|
300
|
-
['themes', 'List and switch themes'],
|
|
301
|
-
['undo', 'Undo the last message'],
|
|
302
|
-
['unshare', 'Unshare the current session'],
|
|
303
|
-
]
|
|
304
|
-
|
|
305
|
-
// @@@ opencodeSlashCommands - opencode's `/` menu: the pinned built-ins + custom commands discovered the way
|
|
306
|
-
// opencode discovers its own — `.opencode/command(s)/**/*.md` in the project and `~/.config/opencode/command(s)`
|
|
307
|
-
// globally (both spellings are native). Like the other builders it never guesses: what isn't readable as a
|
|
308
|
-
// file contributes nothing.
|
|
309
|
-
export function opencodeSlashCommands(): SlashCommand[] {
|
|
310
|
-
const all: SlashCommand[] = []
|
|
311
|
-
const cfgHome = process.env.OPENCODE_CONFIG_DIR || join(process.env.XDG_CONFIG_HOME || join(homedir(), '.config'), 'opencode')
|
|
312
|
-
for (const d of ['command', 'commands']) scanCommands(join(cfgHome, d), 'user', all)
|
|
313
|
-
const repo = repoRoot()
|
|
314
|
-
for (const d of ['command', 'commands']) scanCommands(join(repo, '.opencode', d), 'project', all)
|
|
315
|
-
for (const [name, description] of OPENCODE_BUILT_IN) all.push({ name, description, source: 'built-in' })
|
|
316
|
-
scanSkills(join(repo, '.opencode', 'skills'), all)
|
|
317
|
-
return dedupeSort(all)
|
|
318
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { closeSync, lstatSync, openSync, readSync } from 'node:fs'
|
|
2
|
-
import { join } from 'node:path'
|
|
3
|
-
import { git } from './git.js'
|
|
4
|
-
|
|
5
|
-
export type SourcePolicy = {
|
|
6
|
-
sourceIncludeGlobs: string[] | null
|
|
7
|
-
sourceExcludeGlobs: string[]
|
|
8
|
-
testGlobs: string[]
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export const DEFAULT_TEST_GLOBS = [
|
|
12
|
-
'**/*.test.*',
|
|
13
|
-
'**/*.spec.*',
|
|
14
|
-
'**/test_*.*',
|
|
15
|
-
'**/*_test.*',
|
|
16
|
-
'**/test/**',
|
|
17
|
-
'**/tests/**',
|
|
18
|
-
'**/__tests__/**',
|
|
19
|
-
]
|
|
20
|
-
|
|
21
|
-
function globToRe(glob: string): RegExp {
|
|
22
|
-
const body = glob.split(/(\*\*\/|\*\*|\*|\?)/).map((seg) => {
|
|
23
|
-
if (seg === '**/') return '(?:.*/)?'
|
|
24
|
-
if (seg === '**') return '.*'
|
|
25
|
-
if (seg === '*') return '[^/]*'
|
|
26
|
-
if (seg === '?') return '[^/]'
|
|
27
|
-
return seg.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
28
|
-
}).join('')
|
|
29
|
-
return new RegExp(`^${body}$`)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function isSpexCodeData(path: string): boolean {
|
|
33
|
-
return path === 'spexcode.json' || path === 'spexcode.local.json'
|
|
34
|
-
|| path === '.spec' || path.startsWith('.spec/')
|
|
35
|
-
|| path === '.plugins' || path.startsWith('.plugins/')
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function isTextWorktreeFile(root: string, path: string): boolean {
|
|
39
|
-
const full = join(root, path)
|
|
40
|
-
let fd: number | null = null
|
|
41
|
-
try {
|
|
42
|
-
if (!lstatSync(full).isFile()) return false
|
|
43
|
-
fd = openSync(full, 'r')
|
|
44
|
-
const sample = Buffer.allocUnsafe(8000)
|
|
45
|
-
const bytes = readSync(fd, sample, 0, sample.length, 0)
|
|
46
|
-
return !sample.subarray(0, bytes).includes(0)
|
|
47
|
-
} catch {
|
|
48
|
-
return false
|
|
49
|
-
} finally {
|
|
50
|
-
if (fd !== null) closeSync(fd)
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Source discovery classifies tracked paths and bytes only. Language structure belongs to anchors.ts's
|
|
55
|
-
// adapter registry; adding a language must never add a branch here.
|
|
56
|
-
export function isSourceFile(root: string, path: string, policy: SourcePolicy): boolean {
|
|
57
|
-
if (!isSourcePath(path, policy)) return false
|
|
58
|
-
return isTextWorktreeFile(root, path)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function isSourcePath(path: string, policy: SourcePolicy): boolean {
|
|
62
|
-
if (isSpexCodeData(path)) return false
|
|
63
|
-
if (policy.sourceIncludeGlobs !== null && !policy.sourceIncludeGlobs.some((glob) => globToRe(glob).test(path))) return false
|
|
64
|
-
if (policy.sourceExcludeGlobs.some((glob) => globToRe(glob).test(path))) return false
|
|
65
|
-
if (policy.testGlobs.some((glob) => globToRe(glob).test(path))) return false
|
|
66
|
-
return true
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export function trackedSourceFiles(root: string, roots: string[], policy: SourcePolicy, tip = 'HEAD'): string[] {
|
|
70
|
-
if (tip !== 'HEAD') {
|
|
71
|
-
let listed = '', textOut = ''
|
|
72
|
-
try {
|
|
73
|
-
listed = git(['-C', root, '-c', 'core.quotePath=false', 'ls-tree', '-r', '-z', '-l', tip, '--', ...roots])
|
|
74
|
-
textOut = git(['-C', root, '-c', 'core.quotePath=false', 'grep', '-I', '-l', '-z', '-e', '', tip, '--', ...roots])
|
|
75
|
-
} catch { /* git grep exits 1 when the tree slice has no non-empty text */ }
|
|
76
|
-
const text = new Set(textOut.split('\0').map((entry) => {
|
|
77
|
-
const prefix = `${tip}:`
|
|
78
|
-
return entry.startsWith(prefix) ? entry.slice(prefix.length) : entry
|
|
79
|
-
}).filter(Boolean))
|
|
80
|
-
const out = new Set<string>()
|
|
81
|
-
for (const record of listed.split('\0')) {
|
|
82
|
-
if (!record) continue
|
|
83
|
-
const m = record.match(/^100\d+ blob [0-9a-f]+\s+(\d+)\t([\s\S]+)$/)
|
|
84
|
-
if (!m) continue
|
|
85
|
-
const path = m[2]
|
|
86
|
-
if (isSourcePath(path, policy) && (+m[1] === 0 || text.has(path))) out.add(path)
|
|
87
|
-
}
|
|
88
|
-
return [...out]
|
|
89
|
-
}
|
|
90
|
-
const out = new Set<string>()
|
|
91
|
-
for (const governedRoot of roots) {
|
|
92
|
-
let listed = ''
|
|
93
|
-
try { listed = git(['-C', root, 'ls-files', '-z', '--', governedRoot]) } catch { continue }
|
|
94
|
-
for (const path of listed.split('\0')) {
|
|
95
|
-
if (path && isSourceFile(root, path, policy)) out.add(path)
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return [...out]
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export function sourcePolicyDescription(policy: SourcePolicy): string {
|
|
102
|
-
const includes = policy.sourceIncludeGlobs === null ? 'ALL tracked regular text' : `[${policy.sourceIncludeGlobs.join(', ')}]`
|
|
103
|
-
return `includes ${includes}; sourceExcludeGlobs [${policy.sourceExcludeGlobs.join(', ')}]; testGlobs [${policy.testGlobs.join(', ')}] (SpexCode-owned data always excluded)`
|
|
104
|
-
}
|