Commit Graph

32 Commits

Author SHA1 Message Date
cat-shark 5497dfc290 Add Kubernetes deployment configurations
- Add deployment.yaml with imagePullSecrets and env configuration
- Add service.yaml with ClusterIP configuration
- Configure LLM API key from Secret and other env from ConfigMap
- Ensures proper image pull authentication from private registry

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 21:24:09 +08:00
cat-shark 7841bac39d feat(ci): 添加 imagePullSecret 自动创建步骤 2026-07-19 22:46:37 +08:00
cat-shark a933cf1ed2 feat(ci): 添加部署失败时的调试输出 2026-07-19 22:27:01 +08:00
cat-shark fd63ca698f feat(ci): 使用时间戳标签确保每次部署都触发更新 2026-07-19 21:57:23 +08:00
cat-shark e7bdaeb62e fix(ci): 移除手动安装 docker.io 2026-07-19 20:57:00 +08:00
cat-shark b9daf518e1 fix(ci): 使用绝对路径调用 apt-get (host 模式) 2026-07-19 20:50:14 +08:00
cat-shark 0bc46270a7 fix(ci): 使用 apt-get 替代 apk (Ubuntu runner) 2026-07-19 20:43:43 +08:00
cat-shark 8e2dd566e2 fix: 解决 deploy.yml 冲突 2026-07-19 20:12:59 +08:00
cat-shark 312048c013 fix: lowercase jobs 2026-07-19 19:20:06 +08:00
cat-shark 642472dcfe fix: use /tmp/kubeconfig (writable) 2026-07-19 19:19:52 +08:00
cat-shark 13419a8946 fix: add curl install before kubectl download 2026-07-19 19:18:24 +08:00
cat-shark 958b6b48b2 fix(ci): 修复 Gitea Actions 部署配置
- 修复变量名: github.sha → gitea.sha
- 添加 Docker Registry 认证步骤
- kubectl 版本修正为 v1.30.0
- 添加部署超时控制(5 分钟)
- 添加部署失败自动回滚机制

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 19:13:45 +08:00
cat-shark 02a51659c6 fix: add docker login before push (registry requires auth) 2026-07-19 19:11:34 +08:00
cat-shark bd6fad30ca fix: try apk instead of apt-get for docker-cli 2026-07-19 19:08:40 +08:00
cat-shark 27450de42a fix: add docker.io install for step container (no docker CLI in runner image) 2026-07-19 19:02:22 +08:00
cat-shark f59761432b ci: replace actions/checkout with git clone (no Node.js in runner) 2026-07-19 18:56:03 +08:00
cat-shark a2fa894a33 ci: use unique image tags, add kubectl setup 2026-07-19 18:54:19 +08:00
cat-shark 042b24b0ed add Dockerfile for Node.js/TS AI service 2026-07-19 18:54:03 +08:00
cat-shark 3611054587 Switch to manual trigger (workflow_dispatch) 2026-07-19 18:14:04 +08:00
cat-shark 5d4750fb2d Add CI/CD pipeline
lpt-ai Build & Deploy / build-and-deploy (push) Failing after 11s
2026-07-19 18:07:26 +08:00
developer 35b2381d1c docs: update README 2026-07-19 16:55:47 +08:00
developer 3fce54f2cf 升级 vitest 依赖至 v4.1.10 2026-07-09 00:12:33 +08:00
cat-shark 200f0881a5 feat(lpt-ai):新增 /fetch-title 网页标题抓取接口
POST /fetch-title { url } → { url, title }
- 服务端 fetch 目标页面,正则提取 <title> 标签
- 10 秒超时,抓取失败时返回 title: null
- 请求日志记录到 logStore
2026-07-04 22:34:07 +08:00
cat-shark decebd143c cleanup(lpt-ai):移除废弃的同步 API + 管理面板增加复制按钮
routes/ai.ts:
- 移除 /ai/aggregate-report、/ai/generate-mind-map、/ai/compare-recall
  三个同步端点,仅保留 /health + 异步任务路由
- 清除不再需要的 import(chat、prompts、LlmError、logStore)

admin/routes.ts:
- 日志详情增加「复制到剪贴板」按钮,一键复制完整请求/响应/
  prompt/参数文本,方便粘贴到外部工具调试
2026-07-04 17:31:50 +08:00
cat-shark 438045b57a feat(lpt-ai):异步任务队列 + 提交/轮询路由
lpt-ai 新增异步任务处理能力,LLM 调用改为后台 Worker 顺序执行:

新增 src/task-queue.ts:
- createTask(type, params) → taskId(randomUUID)
- getTask(taskId) → { status, result?, error? }
- 单线程 Worker(setImmediate 链),同一时刻只处理一个 LLM 调用
- 按类型分派到对应的 prompt 函数
- TTL 清理:5 分钟/次,移除完成超过 1 小时的记录
- 异常隔离 + logStore 集成

修改 src/routes/ai.ts:
- POST /ai/tasks:接收 { type, params },返回 201 { taskId }
- GET /ai/tasks/:taskId:返回任务状态与结果(pending/running/done/failed)
- 旧同步端点完全不动,向后兼容
2026-07-04 16:38:48 +08:00
cat-shark e549395e99 fix(lpt-ai):增加 LLM 超时到 2 分钟 + Fastify 连接超时 3 分钟
- LLM_TIMEOUT_MS 默认值 60000 → 120000
- Fastify connectionTimeout 设为 180000(3 分钟)
2026-07-04 16:16:20 +08:00
cat-shark a5a1b848d0 fix(lpt-ai):回忆对比 prompt 改为平铺匹配列表格式,树标注交 Java 端
LLM 无法可靠输出完整嵌套树 JSON(之前的 matchedTree),
实际返回格式与预期不符导致前端对比展示异常。

修复:
- prompt 要求 AI 只输出平铺列表:matches(匹配对)、missedTitles、
  extraNodes、recallRatio、evaluation,不再要求输出树结构
- matches 中的 standardTitle 明确要求与标准导图逐字一致
- 用户消息末尾追加明确提示「请输出 JSON(只包含五个字段)」
2026-07-04 16:08:45 +08:00
cat-shark 2b0bd87d79 feat(lpt-ai):新增 /ai/compare-recall — AI 语义化回忆对比
- prompts.ts:新增 compareRecallPrompt(),输出结构化 JSON
  (matchedTree/MISSED|标注 + extraNodes + recallRatio + evaluation)
- routes/ai.ts:新增 POST /ai/compare-recall,temperature 0.2
  自动清理 LLM 可能包裹的 ```json ``` 标记
- 日志记录完整请求/响应,管理员面板可回溯
2026-07-04 15:47:03 +08:00
cat-shark 3d94b45ef2 feat(admin):日志面板增加 prompt 详情 + 模型调用参数
展开日志详情后新增:
- Prompt 区域:System Prompt(蓝色背景)和 User Message(灰色背景)完整显示
- 调用参数:temperature、max_tokens 等
- 耗时:独立显示

修改:
- LogEntry 新增 messages? 和 params? 字段
- ai.ts 两个 handler 在日志中记录构造后的 messages 和调用参数
- 面板 toggleDetail 渲染 messages/params 区域
2026-07-04 12:37:35 +08:00
cat-shark 5290fa4423 feat(lpt-ai):管理员面板 —— 请求日志记录与查看
新增文件:
- src/admin/store.ts:环形缓冲区(200条),文件持久化为 data/logs.json
- src/admin/routes.ts:admin API(列表/详情/清除)+ 自包含 HTML 面板
- src/admin/index.ts:统一导出

面板功能:
- GET /admin:绿白配色自包含面板,零外部依赖
- 统计栏:总请求/成功/失败/平均耗时
- 日志表格:时间、端点、状态、错误、耗时、模型
- 点击行展开查看完整请求体/响应体
- 端点筛选下拉、一键清除
- 响应式布局

修改文件:
- src/routes/ai.ts:两个 AI handler 均注入日志记录
  (记录时间戳、端点、模型、耗时、状态码、请求体、响应体、错误)
- src/index.ts:注册 adminRoutes

验证:
- npm run typecheck 通过
- npm test 4 个测试通过
2026-07-04 12:32:07 +08:00
cat-shark 29c8b0be4d fix(lpt-ai):启动时未加载 .env 文件导致 LLM_API_KEY 始终为空
根因:项目未依赖 dotenv,启动脚本也未使用 --env-file,
process.env 中没有 LLM_API_KEY,isAvailable() 始终返回 false,
/health 端点返回 llmAvailable: false。

修复:
- index.ts 启动时手动读取 .env 并注入 process.env
  (零依赖,兼容 tsx watch dev 和 node dist 两种启动方式)
- start 脚本保留 node --env-file=.env 双保险
- .gitignore 加入 .idea/
2026-07-04 11:22:08 +08:00
cat-shark 44c07d28bd feat(AI服务):lpt-ai 独立服务初始版本
- Fastify + TypeScript,OpenAI 兼容接口对接 SiliconFlow
- POST /ai/aggregate-report:残片聚合为学习报告(支持预期对比)
- POST /ai/generate-mind-map:生成思维导图缩进大纲(与后端解析格式一致)
- Key 从环境变量读取且日志脱敏,未配置时返回 503 由调用方降级
- prompt 模板集中管理,vitest 单元测试
2026-07-03 23:48:51 +08:00