feat: add production Core runtime modes

This commit is contained in:
thanhnv
2026-07-24 12:16:11 +07:00
parent e359989a74
commit eb3525456f
13 changed files with 659 additions and 397 deletions
+35 -4
View File
@@ -8,13 +8,44 @@ set -uo pipefail
# --- locate the harness root (dir containing scripts/bash/casan-harness.sh) ----
_self="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
_find_project_root() {
local d="${CASAN_APP_ROOT:-$PWD}"
while [[ "$d" != "/" && -n "$d" ]]; do
[[ -f "$d/.casan/config.json" ]] && { echo "$d"; return 0; }
d="$(dirname "$d")"
done
return 1
}
PROJECT_ROOT="$(_find_project_root || true)"
PROJECT_RUNTIME_MODE="managed"
if [[ -n "$PROJECT_ROOT" ]]; then
PROJECT_RUNTIME_MODE="$(python3 -c \
'import json,sys; print(json.load(open(sys.argv[1], encoding="utf-8")).get("runtime_mode", "managed"))' \
"$PROJECT_ROOT/.casan/config.json" 2>/dev/null || echo managed)"
fi
PROJECT_VENDORED_HARNESS="${PROJECT_ROOT:+$PROJECT_ROOT/.casan/runtime/casan-core/packages/casan-harness}"
if [[ "$PROJECT_RUNTIME_MODE" == "vendored" &&
! -f "$PROJECT_VENDORED_HARNESS/scripts/bash/casan-harness.sh" ]]; then
echo "casan: project is pinned to vendored Core but runtime is missing: $PROJECT_VENDORED_HARNESS" >&2
echo "casan: restore it with 'casan init --runtime vendored' from an approved DevKit install" >&2
exit 1
fi
_find_harness() {
# 1) sibling packages/casan-harness (source hub or bundle root layout)
# 1) project-vendored Core, when explicitly present.
local c
if [[ "$PROJECT_RUNTIME_MODE" == "vendored" ]]; then
c="$PROJECT_VENDORED_HARNESS"
[[ -f "$c/scripts/bash/casan-harness.sh" ]] && { (cd "$c" && pwd); return 0; }
fi
# 2) managed/global Core passed by the launcher.
c="${CASAN_GLOBAL_HARNESS_ROOT:-}"
[[ -n "$c" && -f "$c/scripts/bash/casan-harness.sh" ]] && { (cd "$c" && pwd); return 0; }
# 3) sibling packages/casan-harness (source hub or bundle root layout).
for c in "$_self/../packages/casan-harness" "$_self/../casan-harness" "$_self/packages/casan-harness"; do
[[ -f "$c/scripts/bash/casan-harness.sh" ]] && { (cd "$c" && pwd); return 0; }
done
# 2) walk up looking for it
# 4) walk up looking for it.
local d="$_self"
while [[ "$d" != "/" ]]; do
[[ -f "$d/packages/casan-harness/scripts/bash/casan-harness.sh" ]] && { echo "$d/packages/casan-harness"; return 0; }
@@ -28,7 +59,7 @@ if [[ -z "${HARNESS:-}" || ! -d "$HARNESS" ]]; then
exit 1
fi
BASH_DIR="$HARNESS/scripts/bash"
CASAN_APP_ROOT="${CASAN_APP_ROOT:-$(cd "$HARNESS/../.." && pwd)}"
CASAN_APP_ROOT="${CASAN_APP_ROOT:-${PROJECT_ROOT:-$(cd "$HARNESS/../.." && pwd)}}"
VERSION_FILE="$_self/../VERSION"
[[ -f "$VERSION_FILE" ]] || VERSION_FILE="$HARNESS/../../VERSION"
@@ -41,7 +72,7 @@ casan — CASAN governance harness CLI ($(version))
Usage: casan <command> [args]
Commands:
init [--level core|devkit] [...] Adopt CASAN (project default: core)
init [--runtime managed|vendored] Adopt CASAN Core into this project
uninstall [--purge] Remove CASAN from this project (preserves user config)
doctor [--client ...] Verify configured hooks, pin, adapters, and VS Code route
level <show|set 1..4> Show / change the project's packaging level