2026-08-03 22:18:02 +08:00
#!/usr/bin/env bash
# 标准启动与验证入口(Unix shell 版),与 init.ps1 等价,二选一:
# - WSL / Git Bash / macOS / Linux:用本文件 ./init.sh
# - Windows 原生 PowerShell:用 ./init.ps1
# 一条命令完成:依赖安装 -> 基础验证 -> 打印启动命令。
# 复制到新项目后,必须先替换下面三个变量,让每轮会话用同一条路径启动,不靠记忆。
# 本文件不绑定任何技术栈;换技术栈时只替换这三个变量,脚本结构不用动。
set -euo pipefail
ROOT_DIR = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd ) "
cd " $ROOT_DIR "
2026-08-04 15:45:50 +08:00
# Sense 使用锁定 Go toolchain/module;生成漂移、测试、vet 与构建均进入标准门禁。
INSTALL_CMD =( go -C Sense mod download)
2026-08-07 20:54:41 +08:00
VERIFY_CMD =( bash -lc "python3 scripts/validate_agent_context.py && python3 -m unittest discover -s tests -p 'test_*.py' && python3 scripts/validate_harness_governance.py && go -C Sense generate ./internal/mtx ./internal/controlapi && git diff --exit-code -- Sense/internal/mtx/generated/client.gen.go Sense/internal/controlapi/generated.gen.go && go -C Sense test ./... && go -C Sense vet ./... && go -C Sense build ./..." )
2026-08-04 15:45:50 +08:00
START_CMD =( go -C Sense run ./cmd/sense-api)
2026-08-03 22:18:02 +08:00
ensure_configured() {
local name = " $1 "
local first = " $2 "
if [[ " $first " == __REPLACE_* ]] ; then
echo "ERROR: 请先在 init.sh 中替换 ${ name } 。"
echo " 同步更新 docs/03-tech-stack.md、docs/00-ai-start-here.md 和 docs/current-state.md 中的命令。"
exit 2
fi
}
ensure_configured "INSTALL_CMD" " ${ INSTALL_CMD [0] } "
ensure_configured "VERIFY_CMD" " ${ VERIFY_CMD [0] } "
ensure_configured "START_CMD" " ${ START_CMD [0] } "
echo "==> 当前目录: $PWD "
echo "==> 同步依赖"
" ${ INSTALL_CMD [@] } "
echo "==> 运行基础验证"
" ${ VERIFY_CMD [@] } "
echo "==> 启动命令"
printf ' %q' " ${ START_CMD [@] } "
printf '\n'
if [ " ${ RUN_START_COMMAND :- 0 } " = "1" ] ; then
echo "==> 启动应用"
exec " ${ START_CMD [@] } "
fi
echo "如果希望 init.sh 直接启动应用,请设置 RUN_START_COMMAND=1。"
echo "如果基础验证失败,先修复基线状态,不要在坏的起点上继续叠新功能。"