chore: visionA Cloud monorepo 根目錄設定(Makefile + README + .gitignore)

- Makefile:top-level convenience targets(呼叫各子專案的 Makefile)
- README.md:擴充為 monorepo 索引(local-tool / visionA-backend /
  visionA-frontend / local-agent 各組件說明 + dev-with-mc / stage 部署 quickstart)
- .gitignore:
  - .env.dev / .env.dev.generated / .env.stage 排除(dev 與 stage 環境檔不進 git)
  - .autoflow/ 整包 ignore(個人/per-branch 工作目錄;progress.md 與 review 報告
    皆 ignored;共享產品文件已搬到 docs/ 進 git)
  - graphify-out/ 排除

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
jim800121chen 2026-05-01 11:22:57 +08:00
parent eb66a7287a
commit d9d8f03fba
3 changed files with 174 additions and 7 deletions

11
.gitignore vendored
View File

@ -48,6 +48,17 @@ local-tool/visiona-local/payload/
.env
.env.local
.env.*.local
# dev 環境docker-compose.dev.yml
.env.dev
.env.dev.generated
# stage 環境docker-compose.stage.yml— 不進 git由人工放到 stage host
.env.stage
# Claude Code 本地 session / memory不入 git
.claude/
# Autoflow Agent由 autoflow-agent init 自動產生)
# 整包 ignoreprogress.md / review 報告 / 個人筆記皆 per-branch
# 共享文件PRD / 設計 / 架構 / 交付)走 docs/ 進 git
.autoflow/
graphify-out/

110
Makefile Normal file
View File

@ -0,0 +1,110 @@
# visionA monorepo dev convenience Makefile
#
# 對應文件:
# - docs/DEV-SETUP.md完整 dev 環境流程,含 OAuth client 註冊)
# - docker-compose.dev.ymldev all-in-onepostgres + member-center + visiona-backend
# - .autoflow/04-architecture/oidc-tdd.md §12
#
# 子專案 Makefile不在這裡 wrap請進子目錄使用
# - visionA-backend/Makefile — go build / docker-compose prod / 單元測試
# - local-agent/Makefile — wails buildAgent 桌面端)
# - local-tool/ — 離線版桌面工具(獨立子專案)
#
# 設計原則:
# 1. dev 環境用 docker compose 一鍵啟動 backend + DB + Member CenterOIDC provider
# 2. frontend 仍用 host pnpm devHMR 體驗較好,不放 compose
# 3. dev-reset 是核選項,會清掉 DB volume慎用
#
# ⚠️ 此 Makefile 僅供 dev 使用production 走 visionA-backend/docker/docker-compose.yml + IaC。
COMPOSE_FILE := docker-compose.dev.yml
COMPOSE := docker compose -f $(COMPOSE_FILE)
ENV_FILE := .env.dev
ENV_EXAMPLE := .env.dev.example
FRONTEND_DIR := visionA-frontend
.DEFAULT_GOAL := help
.PHONY: help dev-up dev-down dev-logs dev-status dev-reset dev-rebuild \
frontend-dev backend-dev clean check-env
# ---------------------------------------------------------------------------
# Help
# ---------------------------------------------------------------------------
help:
@echo "visionA Dev Commands:"
@echo ""
@echo " make dev-up # 起 dev 環境postgres + member-center + visiona-backend"
@echo " make dev-down # 停 dev 環境(保留 DB volume"
@echo " make dev-reset # 停 dev 環境並清掉 DB volume從零重來慎用"
@echo " make dev-rebuild # 重 build images 並重啟(程式碼改動後用)"
@echo " make dev-logs # 跟蹤 dev 環境 logstail=50, follow"
@echo " make dev-status # 看 dev 環境 service 狀態"
@echo ""
@echo " make frontend-dev # 起 frontend dev serverpnpm devhost"
@echo ""
@echo " make clean # 清掉所有 build artifact不含 docker volumes"
@echo ""
@echo "完整流程(含 OAuth client 手動註冊)見 docs/DEV-SETUP.md"
# ---------------------------------------------------------------------------
# dev environmentdocker compose
# ---------------------------------------------------------------------------
# 確保 .env.dev 存在;不存在則從範本複製並提示使用者編輯
check-env:
@if [ ! -f $(ENV_FILE) ]; then \
echo ">>> 未找到 $(ENV_FILE),從 $(ENV_EXAMPLE) 複製一份..."; \
cp $(ENV_EXAMPLE) $(ENV_FILE); \
echo ""; \
echo " 已建立 $(ENV_FILE)(預設 VISIONA_AUTH_TYPE=static可立刻起來跑"; \
echo " 要切到 OIDC 模式:請依 docs/DEV-SETUP.md §5 註冊 OAuth client"; \
echo " 把 client_id/secret 填入 $(ENV_FILE),並改 VISIONA_AUTH_TYPE=oidc 後重啟。"; \
echo ""; \
fi
dev-up: check-env
$(COMPOSE) --env-file $(ENV_FILE) up -d
@echo ""
@echo ">>> 等 service 起動..."
@sleep 3
@$(COMPOSE) ps
@echo ""
@echo ">>> 啟動完成。下一步:"
@echo " 1. 等所有 service healthywatch -n 2 'docker compose -f $(COMPOSE_FILE) ps'"
@echo " 2. 起 frontend make frontend-dev"
@echo " 3. 開瀏覽器: http://localhost:3000"
@echo " (首次需手動註冊 OAuth client見 docs/DEV-SETUP.md §5"
dev-down:
$(COMPOSE) down
dev-reset:
@echo "⚠️ 將清掉所有 dev DB volumepgdata + api-storage無法復原。"
@printf "確定?(y/N) "; read ans; if [ "$$ans" != "y" ] && [ "$$ans" != "Y" ]; then echo "取消"; exit 1; fi
$(COMPOSE) down -v
@echo "✓ Dev 環境已清掉(含 DB volume"
dev-rebuild: check-env
$(COMPOSE) --env-file $(ENV_FILE) up -d --build
@$(COMPOSE) ps
dev-logs:
$(COMPOSE) logs -f --tail=50
dev-status:
$(COMPOSE) ps
# ---------------------------------------------------------------------------
# frontendhost不在 compose 內)
# ---------------------------------------------------------------------------
frontend-dev:
cd $(FRONTEND_DIR) && pnpm install && pnpm dev
# ---------------------------------------------------------------------------
# clean
# ---------------------------------------------------------------------------
clean:
-cd visionA-backend && $(MAKE) clean 2>/dev/null || true
-cd local-agent && $(MAKE) clean 2>/dev/null || true
-cd $(FRONTEND_DIR) && rm -rf .next out node_modules
@echo "✓ build artifact 已清除docker volumes 不受影響,請另用 make dev-reset"

View File

@ -1,15 +1,61 @@
# visionA
Innovedus visionA monorepo. Currently contains:
Innovedus visionA monorepo — Edge AI 開發平台(離線版 + 雲端版)。
## Subprojects
## 開發環境快速啟動
### `local-tool/`
**visionA-local** — local-first edge AI desktop tool, derived from edge-ai-platform.
Wails + Go + Next.js, packaged as macOS dmg / Windows exe / Linux AppImage.
```bash
make dev-up # 起 backend + Member CenterOIDC+ Postgres
make frontend-dev # 另開 terminal起 frontend dev serverpnpm dev
# 開瀏覽器 http://localhost:3000
```
See [`local-tool/README.md`](./local-tool/README.md) for details.
完整流程(含 OAuth client 手動註冊、port 對照、疑難排解)見 [`docs/DEV-SETUP.md`](./docs/DEV-SETUP.md)。
其他 target`make help`
## 子專案
| 專案 | 角色 | 狀態 |
|------|------|------|
| [`local-tool/`](./local-tool/README.md) | **離線版** 桌面工具Wails + Go + Next.js | 穩定維護 |
| [`visionA-frontend/`](./visionA-frontend/README.md) | 雲端版 web 前端Next.js | ✅ Phase 0 雛形 |
| [`visionA-backend/`](./visionA-backend/README.md) | 雲端版後端Go雙 binaryapi-server + remote-proxy | ✅ Phase 0 雛形 |
| [`local-agent/`](./local-agent/README.md) | **visionA Agent** — 雲端版 local 端代理Wails + Go + Next.js | ✅ Phase 0.5 雛形 |
## 架構關係
```
離線模式local-tool 單獨)
使用者瀏覽器 → localhost:3721 (local-tool server) → Kneron 裝置
雲端模式visionA 雲端版 + visionA Agent
使用者瀏覽器 → visionA-frontend (CDN) → visionA-backend (api-server)
↓ internal HTTP
visionA-backend (remote-proxy)
↓ WebSocket + yamux tunnel
使用者電腦上的 visionA Agent
↓ 本機 HTTP
Agent 的內部 server → Kneron 裝置
```
**兩種模式可在同一台電腦共存**local-tool 和 visionA Agent 獨立安裝、不衝突)。
## 產品線原則
1. **local-tool 不動**,需要時 fork
2. **雲端 vs 本機差異只在前端部署位置**
3. **雲端 agent 的 server ≈ local-tool 的 server**(差別在沒本機操作 UI
4. **雲端 web UI 先抄 local-tool**,之後再加新功能
## 文件
完整產品文件見 [`.autoflow/`](./.autoflow/README.md)
- 產品需求:[`.autoflow/02-prd/PRD.md`](./.autoflow/02-prd/PRD.md)
- 設計規格:[`.autoflow/03-design/design-spec.md`](./.autoflow/03-design/design-spec.md)
- 架構總覽:[`.autoflow/04-architecture/design-doc.md`](./.autoflow/04-architecture/design-doc.md)
- 交付總結:[`.autoflow/07-delivery/project-summary.md`](./.autoflow/07-delivery/project-summary.md)
## License
TBD (internal use)
TBD(內部使用)