feat: support Codex and Claude local surfaces

This commit is contained in:
thanhnv
2026-07-24 16:33:21 +07:00
parent 34a6b013c0
commit cc666db9de
9 changed files with 119 additions and 26 deletions
@@ -151,6 +151,23 @@ PROJ="$WORK/proj/my-app"; mkdir -p "$PROJ"; echo '{"name":"x"}' > "$PROJ/package
for f in .casan/config.json .casan/version.lock .casan/agentic.env .casan/casan-hook.py .claude/settings.json .codex/hooks.json .vscode/extensions.json .specify/.gitignore; do
[[ -f "$PROJ/$f" ]] && pass "init wrote $f" || fail "init missing $f"
done
python3 - "$PROJ/.casan/config.json" <<'PY' \
&& pass "config declares supported and excluded client surfaces" \
|| fail "config client surface contract is incomplete"
import json
import sys
d = json.load(open(sys.argv[1], encoding="utf-8"))
assert d["schema_version"] == "21.2"
assert d["client_surfaces"]["claude"]["supported_local"] == [
"claude-code-cli", "claude-code-vscode", "claude-code-jetbrains",
]
assert d["client_surfaces"]["codex"]["supported_local"] == [
"codex-desktop-local", "codex-cli", "codex-ide-extension-local",
]
assert "claude-desktop" in d["client_surfaces"]["claude"]["not_covered"]
assert "codex-cloud" in d["client_surfaces"]["codex"]["not_covered"]
PY
if [[ -d "$PROJ/packages/casan-harness" ]]; then fail "harness was copied into the repo (should not be)"; else pass "harness NOT copied into repo (hybrid model)"; fi
if grep -R -q 'packages/casan-harness/adapters' "$PROJ/.claude/settings.json" "$PROJ/.codex/hooks.json"; then fail "generated hooks still target a repo-local harness"; else pass "generated hooks target the stable project bootstrap"; fi