guanwei 1.1.1

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.
Files changed (157) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +202 -0
  3. package/README.md +247 -0
  4. package/dist/assets/index-CsOD5rSo.js +102 -0
  5. package/dist/assets/index-CsOD5rSo.js.map +1 -0
  6. package/dist/assets/index-DQx62TUr.css +1 -0
  7. package/dist/favicon.svg +12 -0
  8. package/dist/index.html +15 -0
  9. package/eslint.config.js +28 -0
  10. package/index.html +25 -0
  11. package/package.json +96 -0
  12. package/postcss.config.js +10 -0
  13. package/public/favicon.svg +12 -0
  14. package/scripts/guanwei +245 -0
  15. package/scripts/install.sh +79 -0
  16. package/scripts/release.sh +42 -0
  17. package/scripts/setup.bat +36 -0
  18. package/scripts/setup.sh +123 -0
  19. package/server/src/data/db.json +12059 -0
  20. package/server/src/data/guanwei.db +0 -0
  21. package/server/src/data/lifeContext.ts +423 -0
  22. package/server/src/data/spreads.ts +255 -0
  23. package/server/src/data/tarotCards.ts +2353 -0
  24. package/server/src/index.ts +71 -0
  25. package/server/src/routes/ai.ts +376 -0
  26. package/server/src/routes/divine.ts +140 -0
  27. package/server/src/routes/hour.ts +40 -0
  28. package/server/src/routes/tarot.ts +129 -0
  29. package/server/src/routes/users.ts +140 -0
  30. package/server/src/services/chartBrief.ts +131 -0
  31. package/server/src/services/divineStore.ts +188 -0
  32. package/server/src/services/hourInference.ts +150 -0
  33. package/server/src/services/llmProvider.ts +181 -0
  34. package/server/src/services/promptBuilder.ts +327 -0
  35. package/server/src/services/relativesCheck.ts +139 -0
  36. package/server/src/services/sixRelatives.ts +70 -0
  37. package/server/src/services/skills.ts +116 -0
  38. package/server/src/types/index.ts +104 -0
  39. package/server/src/utils/semanticAnalyzer.ts +555 -0
  40. package/server/src/utils/tarotEngine.ts +849 -0
  41. package/server/tsconfig.json +18 -0
  42. package/shared/core/data/classics.ts +276 -0
  43. package/shared/core/data/courses.ts +211 -0
  44. package/shared/core/data/duanyu.ts +148 -0
  45. package/shared/core/data/ganzhi.ts +53 -0
  46. package/shared/core/data/gua64.ts +93 -0
  47. package/shared/core/data/liuren.ts +18 -0
  48. package/shared/core/data/liuyao.ts +73 -0
  49. package/shared/core/data/qimen.ts +27 -0
  50. package/shared/core/data/region-full.ts +3 -0
  51. package/shared/core/data/region.ts +310 -0
  52. package/shared/core/data/tarotSpreads.ts +78 -0
  53. package/shared/core/data/xiaoliuren.ts +18 -0
  54. package/shared/core/data/ziwei.ts +97 -0
  55. package/shared/core/data/zodiac.ts +20 -0
  56. package/shared/core/engine/astrology.ts +169 -0
  57. package/shared/core/engine/bazi.ts +306 -0
  58. package/shared/core/engine/calendar.ts +127 -0
  59. package/shared/core/engine/daily.ts +133 -0
  60. package/shared/core/engine/liuren.ts +86 -0
  61. package/shared/core/engine/liuyao.ts +93 -0
  62. package/shared/core/engine/meihua.ts +87 -0
  63. package/shared/core/engine/qimen.ts +78 -0
  64. package/shared/core/engine/questionFit.ts +94 -0
  65. package/shared/core/engine/tarot.ts +69 -0
  66. package/shared/core/engine/trueSolarTime.ts +86 -0
  67. package/shared/core/engine/xiaoliuren.ts +19 -0
  68. package/shared/core/engine/ziwei.ts +217 -0
  69. package/shared/core/engine/ziweiInterpret.ts +161 -0
  70. package/shared/core/types.ts +206 -0
  71. package/src/App.tsx +69 -0
  72. package/src/arts/registry.ts +31 -0
  73. package/src/assets/react.svg +1 -0
  74. package/src/components/Backdrop.tsx +27 -0
  75. package/src/components/BambooArt.tsx +41 -0
  76. package/src/components/CalendarInput.tsx +131 -0
  77. package/src/components/DateInput.tsx +103 -0
  78. package/src/components/Disclaimer.tsx +12 -0
  79. package/src/components/Empty.tsx +8 -0
  80. package/src/components/ErrorBoundary.tsx +38 -0
  81. package/src/components/HomeSideAnchor.tsx +62 -0
  82. package/src/components/InkVein.tsx +10 -0
  83. package/src/components/LifeEventsInput.tsx +47 -0
  84. package/src/components/LocationPicker.tsx +117 -0
  85. package/src/components/Motes.tsx +65 -0
  86. package/src/components/Navigation.tsx +80 -0
  87. package/src/components/ProfileForm.tsx +40 -0
  88. package/src/components/ProfilePicker.tsx +40 -0
  89. package/src/components/QuestionFields.tsx +47 -0
  90. package/src/components/ReportView.tsx +211 -0
  91. package/src/components/ResultCard.tsx +40 -0
  92. package/src/components/SealButton.tsx +18 -0
  93. package/src/components/SiteFooter.tsx +17 -0
  94. package/src/components/SiteNav.tsx +103 -0
  95. package/src/components/SongDialog.tsx +64 -0
  96. package/src/components/SongSearchSelect.tsx +81 -0
  97. package/src/components/SongSelect.tsx +61 -0
  98. package/src/components/StarField.tsx +119 -0
  99. package/src/components/TarotCard.tsx +129 -0
  100. package/src/components/TimeShichenInput.tsx +29 -0
  101. package/src/components/arts/AstrologyArt.tsx +141 -0
  102. package/src/components/arts/BaziArt.tsx +269 -0
  103. package/src/components/arts/LiurenArt.tsx +87 -0
  104. package/src/components/arts/LiuyaoArt.tsx +111 -0
  105. package/src/components/arts/MeihuaArt.tsx +105 -0
  106. package/src/components/arts/QimenArt.tsx +86 -0
  107. package/src/components/arts/TarotArt.tsx +110 -0
  108. package/src/components/arts/XiaoliurenArt.tsx +93 -0
  109. package/src/components/arts/ZiweiArt.tsx +296 -0
  110. package/src/data/arts.ts +84 -0
  111. package/src/data/lifeContext.ts +423 -0
  112. package/src/data/sample-report.json +146 -0
  113. package/src/data/shichen.ts +21 -0
  114. package/src/data/spreads.ts +255 -0
  115. package/src/data/tarotCards.ts +2353 -0
  116. package/src/hooks/useAIInterpret.ts +76 -0
  117. package/src/hooks/useDivine.ts +39 -0
  118. package/src/hooks/useTheme.ts +29 -0
  119. package/src/index.css +190 -0
  120. package/src/lib/utils.ts +6 -0
  121. package/src/main.tsx +12 -0
  122. package/src/pages/AboutPage.tsx +25 -0
  123. package/src/pages/AcademyPage.tsx +128 -0
  124. package/src/pages/AstrologyPage.tsx +33 -0
  125. package/src/pages/AuthPage.tsx +263 -0
  126. package/src/pages/BaZiPage.tsx +33 -0
  127. package/src/pages/ClassicsPage.tsx +120 -0
  128. package/src/pages/DemoPage.tsx +161 -0
  129. package/src/pages/HistoryPage.tsx +133 -0
  130. package/src/pages/Home.tsx +179 -0
  131. package/src/pages/HomePage.tsx +174 -0
  132. package/src/pages/ModulePage.tsx +320 -0
  133. package/src/pages/SpreadEditor.tsx +230 -0
  134. package/src/pages/SpreadEditorPage.tsx +105 -0
  135. package/src/pages/SpreadLibrary.tsx +199 -0
  136. package/src/pages/SpreadLibraryPage.tsx +17 -0
  137. package/src/pages/TarotPage.tsx +738 -0
  138. package/src/pages/ZiWeiPage.tsx +33 -0
  139. package/src/services/api.ts +342 -0
  140. package/src/stores/useDivinationStore.ts +22 -0
  141. package/src/styles/song.css +1066 -0
  142. package/src/styles/tokens.css +60 -0
  143. package/src/types/index.ts +104 -0
  144. package/src/utils/astrologyCalc.ts +61 -0
  145. package/src/utils/comboEngine.ts +134 -0
  146. package/src/utils/dst.ts +24 -0
  147. package/src/utils/panTone.ts +206 -0
  148. package/src/utils/recordStore.ts +60 -0
  149. package/src/utils/semanticAnalyzer.ts +555 -0
  150. package/src/utils/spreadStorage.ts +32 -0
  151. package/src/utils/storage.ts +27 -0
  152. package/src/utils/tarotEngine.ts +849 -0
  153. package/src/utils/userStore.ts +234 -0
  154. package/src/vite-env.d.ts +1 -0
  155. package/tailwind.config.js +52 -0
  156. package/tsconfig.json +40 -0
  157. package/vite.config.ts +34 -0
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env bash
2
+ # ============================================================
3
+ # 观微 Guanwei · 一键安装脚本(备用方式)
4
+ # 用法(复制这一行到终端执行):
5
+ # curl -fsSL https://raw.githubusercontent.com/RubyCcll/guanwei/main/scripts/install.sh | bash
6
+ #
7
+ # 【推荐方式】一行命令(国内走 npmmirror,几秒装完):
8
+ # npm i -g guanwei
9
+ # guanwei setup --key 你的APIKey
10
+ # guanwei start
11
+ #
12
+ # 本脚本做什么:拉取项目 → 安装依赖 → 全局安装 guanwei 命令
13
+ # 装完:guanwei setup 配置 Key → guanwei start 启动
14
+ # 只想快速跑?装好 Docker 后(不装本脚本也行):
15
+ # docker run -d --name guanwei -p 5173:80 -e LLM_DEEPSEEK_KEY=你的Key ghcr.io/rubyccll/guanwei:latest
16
+ # ============================================================
17
+ set -euo pipefail
18
+
19
+ echo "=============================================="
20
+ echo " 观微 Guanwei · 一键安装(源码方式)"
21
+ echo "=============================================="
22
+
23
+ # 0. 优先推荐 npm 方式(国内最快)
24
+ if command -v npm >/dev/null 2>&1; then
25
+ echo ""
26
+ echo "检测到 npm——【推荐】直接用一行命令安装(几秒完成):"
27
+ echo ""
28
+ echo " npm i -g guanwei"
29
+ echo " guanwei setup --key 你的APIKey"
30
+ echo " guanwei start"
31
+ echo ""
32
+ read -r -p "是否继续源码安装?[y/N] " answer
33
+ if [[ ! "${answer:-}" =~ ^[Yy]$ ]]; then
34
+ echo "已取消。用上面 npm 三行命令即可安装 ✓"
35
+ exit 0
36
+ fi
37
+ fi
38
+
39
+ REPO="https://github.com/RubyCcll/guanwei.git"
40
+ INSTALL_DIR="${GUANWEI_DIR:-$HOME/guanwei}"
41
+ BRANCH="main"
42
+
43
+ # 1. 检查 git / node
44
+ if ! command -v git >/dev/null 2>&1; then
45
+ echo "❌ 未检测到 git——请先安装:https://git-scm.com/downloads"
46
+ echo " 或者用 npm 方式:npm i -g guanwei"
47
+ exit 1
48
+ fi
49
+
50
+ # 2. 拉取/更新项目
51
+ if [[ -d "$INSTALL_DIR/.git" ]]; then
52
+ echo "📦 检测到已有项目,更新到最新..."
53
+ git -C "$INSTALL_DIR" fetch origin >/dev/null 2>&1 || true
54
+ git -C "$INSTALL_DIR" merge --ff-only origin/$BRANCH >/dev/null 2>&1 || git -C "$INSTALL_DIR" pull --rebase origin $BRANCH >/dev/null 2>&1 || true
55
+ else
56
+ echo "📦 拉取项目到 $INSTALL_DIR ..."
57
+ git clone --depth 1 -b $BRANCH "$REPO" "$INSTALL_DIR"
58
+ fi
59
+ cd "$INSTALL_DIR"
60
+
61
+ # 3. 安装依赖
62
+ echo "📦 安装依赖(首次约 1-3 分钟)..."
63
+ npm install --no-fund --no-audit >/dev/null 2>&1 || echo " ⚠️ 前端依赖安装警告"
64
+ (cd server && npm install --no-fund --no-audit >/dev/null 2>&1) || echo " ⚠️ 后端依赖安装警告"
65
+
66
+ # 4. 全局安装 guanwei 命令
67
+ echo "🔗 安装 guanwei 全局命令..."
68
+ npm link >/dev/null 2>&1 || echo " ⚠️ npm link 失败(可手动:cd $INSTALL_DIR && npm link)"
69
+
70
+ echo "=============================================="
71
+ echo "🎉 安装完成!项目位于:$INSTALL_DIR"
72
+ echo ""
73
+ echo "下一步:"
74
+ echo " 1) 配置 API Key: guanwei setup --key 你的APIKey"
75
+ echo " 2) 启动: guanwei start(或 guanwei start --docker)"
76
+ echo " 3) 浏览器打开: http://localhost:5173"
77
+ echo ""
78
+ echo "常用命令:guanwei status / doctor / update / stop"
79
+ echo "=============================================="
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env bash
2
+ # ============================================================
3
+ # 观微发版脚本:升级版本号 → 同步 lockfile → 打 tag → 推送
4
+ # 用法:./scripts/release.sh 1.1.2 (新版本号,不带 v 前缀)
5
+ # 要求:工作区无未提交改动;CHANGELOG.md 已写好本次版本条目
6
+ # ============================================================
7
+ set -euo pipefail
8
+ cd "$(dirname "$0")/.."
9
+
10
+ NEW_VER="${1:-}"
11
+ if [[ -z "$NEW_VER" ]] || ! [[ "$NEW_VER" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
12
+ echo "用法: ./scripts/release.sh <版本号> 例如: ./scripts/release.sh 1.1.2"; exit 1
13
+ fi
14
+
15
+ if [[ -n "$(git status --porcelain)" ]]; then
16
+ echo "⚠️ 工作区有未提交改动,先提交或 stash 再发版"; exit 1
17
+ fi
18
+
19
+ echo "1️⃣ 更新 package.json / server/package.json -> ${NEW_VER}"
20
+ node -e "
21
+ const fs = require('fs');
22
+ for (const p of ['package.json', 'server/package.json', 'package-lock.json', 'server/package-lock.json']) {
23
+ const d = JSON.parse(fs.readFileSync(p, 'utf-8'));
24
+ d.version = '${NEW_VER}';
25
+ fs.writeFileSync(p, JSON.stringify(d, null, 2) + '\n');
26
+ }
27
+ "
28
+ echo " ✅ 版本号与 lockfile 已同步"
29
+
30
+ echo "2️⃣ 检查 CHANGELOG.md 是否已有 [${NEW_VER}] 条目..."
31
+ if ! grep -q "^## \[${NEW_VER}\]" CHANGELOG.md; then
32
+ echo " ⚠️ CHANGELOG.md 缺少 [${NEW_VER}] 条目——请补上后再继续(Ctrl+C 中断)"
33
+ read -rp " 已补好?回车继续: " _
34
+ fi
35
+
36
+ echo "3️⃣ 提交 + 打 tag + 推送"
37
+ git add package.json package-lock.json server/package.json server/package-lock.json CHANGELOG.md
38
+ git commit -m "chore: 版本升级 ${NEW_VER}"
39
+ git tag "v${NEW_VER}"
40
+ git push origin main
41
+ git push origin "v${NEW_VER}"
42
+ echo "🎉 v${NEW_VER} 已推送——CI / Release / 镜像 / Pages 将自动执行"
@@ -0,0 +1,36 @@
1
+ @echo off
2
+ REM 观微一键配置与启动(Windows)—— 用法:setup.bat --key sk-xxx [--docker]
3
+ setlocal
4
+ set KEY=
5
+ set MODE=local
6
+
7
+ :parse
8
+ if "%~1"=="" goto done
9
+ if "%~1"=="--key" (set KEY=%~2 & shift & shift & goto parse)
10
+ if "%~1"=="--docker" (set MODE=docker & shift & goto parse)
11
+ echo 未知参数: %~1
12
+ exit /b 1
13
+ :done
14
+
15
+ if "%KEY%"=="" (
16
+ echo 请用: setup.bat --key 你的APIKey [--docker]
17
+ echo 或先手动创建 server\.env(参考 server\.env.example)
18
+ exit /b 1
19
+ )
20
+
21
+ echo 生成 server\.env ...
22
+ > server\.env echo LLM_PROVIDER=deepseek
23
+ >> server\.env echo LLM_DEEPSEEK_KEY=%KEY%
24
+ >> server\.env echo LLM_DEEPSEEK_MODEL=deepseek-chat
25
+
26
+ if "%MODE%"=="docker" (
27
+ docker compose up -d --build
28
+ echo 已启动: http://localhost:5173
29
+ ) else (
30
+ call npm install
31
+ pushd server
32
+ call npm install
33
+ popd
34
+ start "guanwei-backend" cmd /c "cd server && npm run dev"
35
+ call npm run dev
36
+ )
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env bash
2
+ # ============================================================
3
+ # 观微 Guanwei · 一键配置与启动
4
+ # 用法:
5
+ # ./scripts/setup.sh # 交互式:选择服务商 → 输入 API Key → 自动装依赖并启动
6
+ # ./scripts/setup.sh --key sk-xxx # 非交互(默认 DeepSeek)
7
+ # ./scripts/setup.sh --provider gemini --key xxxx
8
+ # ./scripts/setup.sh --key sk-xxx --docker # 用 Docker 启动(无需本机 Node)
9
+ # ./scripts/setup.sh --link # 额外:全局安装 guanwei 命令(之后任意目录可用)
10
+ # ============================================================
11
+ set -euo pipefail
12
+ cd "$(dirname "$0")/.."
13
+
14
+ PROVIDER=""
15
+ KEY=""
16
+ MODE="local" # local | docker
17
+
18
+ LINK=""
19
+ while [[ $# -gt 0 ]]; do
20
+ case "$1" in
21
+ --provider) PROVIDER="$2"; shift 2 ;;
22
+ --key) KEY="$2"; shift 2 ;;
23
+ --docker) MODE="docker"; shift ;;
24
+ --link) LINK="1"; shift ;;
25
+ -h|--help)
26
+ sed -n '1,12p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;;
27
+ *) echo "未知参数: $1(--provider / --key / --docker / --help)"; exit 1 ;;
28
+ esac
29
+ done
30
+
31
+ # ---------- 1. 选择服务商与 Key ----------
32
+ if [[ -z "$PROVIDER" ]]; then
33
+ if [[ -n "$KEY" ]]; then
34
+ # 只给了 --key:默认 DeepSeek
35
+ PROVIDER=deepseek
36
+ else
37
+ echo "=============================================="
38
+ echo " 观微 Guanwei · 一键配置"
39
+ echo "=============================================="
40
+ echo "选择 AI 服务商:"
41
+ echo " 1) DeepSeek(推荐,性价比高)"
42
+ echo " 2) Gemini(Google)"
43
+ echo " 3) Groq(免费额度)"
44
+ echo " 4) 通义千问(阿里云)"
45
+ echo " 5) 自定义 OpenAI 兼容端点"
46
+ read -rp "请输入编号 [1]: " CHOICE
47
+ case "${CHOICE:-1}" in
48
+ 1) PROVIDER=deepseek ;;
49
+ 2) PROVIDER=gemini ;;
50
+ 3) PROVIDER=groq ;;
51
+ 4) PROVIDER=qwen ;;
52
+ 5) PROVIDER=custom ;;
53
+ *) echo "无效编号"; exit 1 ;;
54
+ esac
55
+ fi
56
+ fi
57
+ if [[ -z "$KEY" ]]; then
58
+ read -rsp "请输入你的 ${PROVIDER} API Key(输入不回显): " KEY; echo
59
+ fi
60
+ if [[ -z "$KEY" ]]; then
61
+ echo "错误:API Key 不能为空"; exit 1
62
+ fi
63
+
64
+ # ---------- 2. 生成 server/.env ----------
65
+ mkdir -p server
66
+ cat > server/.env <<EOF
67
+ # 由 scripts/setup.sh 生成($(date '+%Y-%m-%d %H:%M'))
68
+ LLM_PROVIDER=${PROVIDER}
69
+ EOF
70
+ case "$PROVIDER" in
71
+ deepseek) echo "LLM_DEEPSEEK_KEY=${KEY}" >> server/.env
72
+ echo "LLM_DEEPSEEK_MODEL=deepseek-chat" >> server/.env ;;
73
+ gemini) echo "LLM_GEMINI_KEY=${KEY}" >> server/.env ;;
74
+ groq) echo "LLM_GROQ_KEY=${KEY}" >> server/.env ;;
75
+ qwen) echo "LLM_QWEN_KEY=${KEY}" >> server/.env ;;
76
+ custom)
77
+ echo "LLM_CUSTOM_KEY=${KEY}" >> server/.env
78
+ read -rp "自定义端点 URL [https://your-endpoint/v1/chat/completions]: " EP
79
+ echo "LLM_CUSTOM_ENDPOINT=${EP:-https://your-endpoint/v1/chat/completions}" >> server/.env ;;
80
+ esac
81
+ echo "✅ server/.env 已生成(API Key 仅存本地,已 gitignore)"
82
+
83
+ # ---------- 3. 前端环境 ----------
84
+ if [[ ! -f .env.development ]] && [[ -f .env.development.example ]]; then
85
+ cp .env.development.example .env.development
86
+ echo "✅ .env.development 已就绪"
87
+ fi
88
+
89
+ # ---------- 3.5 可选:全局安装 guanwei 命令 ----------
90
+ if [[ -n "$LINK" ]]; then
91
+ echo "🔗 全局安装 guanwei 命令(npm link,之后任意目录可用)..."
92
+ npm link 2>&1 | tail -1
93
+ echo " 现在可以直接运行:guanwei status"
94
+ fi
95
+
96
+ # ---------- 4. 安装依赖并启动 ----------
97
+ if [[ "$MODE" == "docker" ]]; then
98
+ if ! command -v docker >/dev/null 2>&1; then
99
+ echo "错误:未检测到 Docker,请先安装 https://www.docker.com/"; exit 1
100
+ fi
101
+ # 兼容 docker compose 插件与独立 docker-compose
102
+ if docker compose version >/dev/null 2>&1; then
103
+ COMPOSE="docker compose"
104
+ elif command -v docker-compose >/dev/null 2>&1; then
105
+ COMPOSE="docker-compose"
106
+ else
107
+ echo "错误:未找到 docker compose 插件(docker-compose)"; exit 1
108
+ fi
109
+ echo "🐳 正在构建并启动(首次构建需几分钟)..."
110
+ $COMPOSE up -d --build
111
+ echo "✅ 已启动:前端 http://localhost:5173 · 后端 http://localhost:3018"
112
+ echo " 停止:$COMPOSE down"
113
+ else
114
+ echo "📦 安装依赖(首次较慢)..."
115
+ npm install --no-fund --no-audit
116
+ (cd server && npm install --no-fund --no-audit)
117
+ echo "🚀 启动服务..."
118
+ echo " 后端 :3018(tsx watch)"
119
+ echo " 前端 :5173(vite dev)"
120
+ echo " Ctrl+C 停止"
121
+ (cd server && npm run dev) &
122
+ npm run dev
123
+ fi