Просмотр исходного кода

chore: CLAUDE.md 与 agents.md 不再入库

这两个是本机工作文件(项目指令与 agent 说明),按 .gitignore 排除,不入库。
文件仍保留在工作区,本地正常使用。

Co-Authored-By: Claude Code <noreply@anthropic.com>
gongtianxiao 4 дней назад
Родитель
Сommit
d8178ca69a
3 измененных файлов с 4 добавлено и 204 удалено
  1. 4 0
      .gitignore
  2. 0 151
      CLAUDE.md
  3. 0 53
      agents.md

+ 4 - 0
.gitignore

@@ -36,3 +36,7 @@ components.d.ts
 
 # 构建产物:rollup-plugin-visualizer 生成的体积报告
 stats.html
+
+# 本机工作文件:项目指令与 agent 说明,不入库
+/CLAUDE.md
+/agents.md

+ 0 - 151
CLAUDE.md

@@ -1,151 +0,0 @@
-# CLAUDE.md
-
-This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
-
-## Project Overview
-
-青浦区营商智能助手前端。Vue 3 + TypeScript + Vite,面向企业的**政策匹配与办事指引**:
-用户自然语言提问,助手检索政策知识库,以「开场概述 + 政策卡片 + 综合说明 + 参考资料」
-的形式给出有原文依据的回答;涉及具体企业时先引导用户确认公司主体,再结合工商信息作答。
-
-关键事实(避免误判):
-
-- **对话走新接口** `POST /api/chat`(SSE)。前端不直接渲染新协议,而是经适配层
-  `src/components/api-chat-coordinator.ts` 翻译成既有渲染组件可识别的内容标记。
-  详见下方「Core Systems」与根 README 的「对话接口的关键约束」。
-- **没有 3D 虚拟人渲染**。`three` 仅用于粒子背景(`business-assistant-particle.ts`);
-  `src/three-libs/asr` 用于**语音识别**;`src/three-libs/metamaker` 是一份未被引用的 SDK 包。
-- **没有状态管理库**(无 Vuex / Pinia)。对话状态在 `useBusinessAssistantChat` 内,
-  会话与消息持久化到 `localStorage`。
-- 接口契约见 `docs/reference/`(现行 `api-chat.md`;`legacy/API.md` 仅为交接快照)。
-
-## Common Commands
-
-```bash
-# Development
-npm run dev                    # Start dev server on port 8083 (HTTPS, self-signed)
-npm run preview                # Preview production build
-
-# Building
-npm run build                  # Production build
-npm run build:test             # Test environment build
-npm run build:qingpu           # Qingpu environment build
-npm run zip                    # Create ZIP for Qingpu deployment
-
-# Testing
-npm run test                   # Run Jest tests
-
-# Linting (use VSCode or external tools)
-# ESLint config at .eslintrc.js
-```
-
-## Architecture
-
-### Main Entry
-- `src/main.ts` - Application entry point, creates Vue app
-- `src/App.vue` - Root component, renders the 招商助手
-- `src/components/BusinessAssistant.vue` - 只做 PC / 移动端切换,不是主壳
-- `src/components/BusinessAssistantPC.vue` / `BusinessAssistantMobile.vue` - 真正的页面主壳
-  (输入区、消息列表、滚动与打字机联动都在这里)
-
-### Key Directories
-- `src/components/Chat/` - 消息渲染与政策卡片(BusinessRecord、PolicyMatch、QuestionCard…)
-- `src/components/Common/` - 通用 UI 组件(MediaViewer、ScrollList、Toast…)
-- `src/components/business-assistant/` - 对话编排(`useBusinessAssistantChat`、上传、滚动等)
-- `src/network/api/` - 接口封装:`chat-sessions.ts`、`enterprise.ts`、
-  `assistant-statistics.ts`、`card/`(**没有** chat / faq / finance / group / human / project 这些文件)
-- `src/types/` - TypeScript 类型定义
-- `src/utils/` - 工具(`runtime-config`、`stream-xml-filter`、`scope-record-rows`…)
-- `src/three-libs/asr/` - 语音识别(Three.js 相关代码只在这里和粒子背景中用到)
-
-> 注意:**没有 `src/hooks/` 目录。**
-
-### Core Systems
-- **对话协议适配(现行)**: `src/components/api-chat-coordinator.ts` —— 新接口 `POST /api/chat`
-  的客户端。把 SSE 事件翻译成 `<scope>` / `<!-- POLICY_TABLE -->` / `<ref_links>` /
-  `<question-cards>` 等标记,交给既有渲染组件;渲染层不感知新协议。
-- **旧协议实现(保留未用,勿改)**: `src/components/stream-message-coordinator.ts`。
-  **没有 `stream-message-coordinator-v2.ts` 这个文件。**
-- **State Management**: 无状态管理库(无 Vuex / Pinia);状态在组合式函数 + `localStorage`
-- **UI Library**: Ant Design Vue 4.x
-- **Three.js**: 0.143.0(粒子背景 + 语音识别相关,非 3D 虚拟人)
-
-### Build Configuration
-- Vite build config: `vite.config.ts`
-- Environment files: `.env.development`, `.env.production`, `.env.test`, `.env.qingpu`
-- Uses unplugin-vue-components for auto-importing Ant Design Vue components
-
-### CI/CD
-仓库内**没有** `.gitlab-ci.yml` 等流水线配置文件;构建入口就是上面的 npm scripts。
-若存在服务端流水线(GitLab / Gitea 后台配置),其规则请在服务端查看,不要以旧描述为准。
-
-### API Proxies (dev mode)
-- `/api/*` → `http://aixq.shqp.gov.cn`
-- `/chat-api/*` → `http://192.168.2.23:8000`(**新对话接口**;`rewrite` 去掉 `/chat-api` 前缀,
-  最终请求 `…/api/chat`。仅 dev server 生效,生产需 nginx 等价转发)
-- `/asr/*` → `https://human-screen-v3.metamaker.cn`
-- `/stream/*` → `https://flv-enc.metamaker.cn`
-
-## Notes
-
-- Uses `@` alias for `src/` in imports
-- Three.js has special alias to `three/build/three.cjs`
-- SCSS API set to "modern-compiler" in vite.config.ts
-- No ESLint run in CI (build only)
-
-## Harness 工作流(必须遵守)
-
-本仓库用 `harness/` 目录管理长时开发的状态。**这些文件不会自动维护——你必须按下面的要求读和写。**
-详见 `harness/README.md`。
-
-### 每轮开工时
-
-1. `pwd` 确认在仓库根目录
-2. 读取 `harness/claude-progress.md`(当前已验证状态 + 上一轮记录)
-3. 读取 `harness/feature_list.json`(功能清单与状态)
-4. `git log --oneline -5` 查看最近提交(若仓库尚无提交,跳过即可)
-5. 运行 `bash harness/init.sh`
-6. 然后**只选择一个**未完成功能,围绕它工作,直到它验证通过、或被明确记录为 `blocked`
-
-### 规则
-
-- **每次改动完成后立刻更新记录,不要攒到会话结束。** 一轮会话常含多次改动,
-  攒到最后必然漏记、并让已写下的描述过期(真实发生过:一次改动没记,
-  记录里还留着后来被推翻的旧结论)。改动完当场追加 session 记录 / 更新功能状态。
-- 同一时间只能有一个 `in_progress` 功能
-- 没有可运行证据(构建或测试的实际输出)时,不要声称完成
-- 不要通过重写功能清单来隐藏未完成的工作
-- 不要为了让状态好看而删除或削弱验证步骤
-- **仓库内文件是唯一事实来源**——不要把结论只留在聊天里
-
-### 完成门槛
-
-只有在要求的验证成功、且结果被记录进 `harness/feature_list.json` 的 `evidence`
-与 `harness/claude-progress.md` 之后,功能状态才可以切到 `passing`。
-
-### 结束前
-
-- 更新 `harness/claude-progress.md`(追加一条 session 记录)
-- 更新 `harness/feature_list.json` 的状态与证据
-- 记录仍然损坏或未验证的内容
-- 过一遍 `harness/clean-state-checklist.md`
-- 给下一轮会话留下干净的重启路径
-
-### 本项目的额外约束
-
-- **界面样式必须与原版一致。** 新协议能力通过 `src/components/api-chat-coordinator.ts`
-  翻译成既有渲染组件能识别的内容标记(`<scope>` / `<!-- POLICY_TABLE -->` /
-  `<ref_links>` / `<question-cards>`),不要新建带自有样式的 UI 组件。
-- **既有 UI 的可选项、文案、筛选逻辑不要擅自改动**——确需变更先取得确认。
-- `src/components/stream-message-coordinator.ts` 是保留的旧协议实现,当前未被使用,**不要改动**。
-- 需要确认"原来是怎么做的"时,diff 备份目录 `F:\yysk\AI_zhaoshang\备份\zhaoshang-llm`
-  (早于所有改动),不要凭记忆断言。
-
-### 接口文档在哪
-
-- **改任何聊天相关代码之前,先读 `docs/reference/api-chat.md`(现行契约)** 与
-  `docs/reference/api-chat-fields-zh.md`(字段中英对照)。索引见 `docs/reference/README.md`。
-- `docs/reference/legacy/API.md` 是**交接时根据当时的源码生成的快照**,不是规格、不会更新。
-  **不要照着它实现新功能**(现行契约看 `api-chat.md`),
-  **也不要拿它当"原来行为是什么"的判据**——它是二手整理可能失真;
-  判断原行为请直接 diff 备份目录里的源码。

+ 0 - 53
agents.md

@@ -1,53 +0,0 @@
-# Agents.md
-
-## 业务自滚动吸顶原则
-
-- 自动滚动的吸顶判断,应以“最后一条 AI 消息是否仍处于打字机动画中”为核心依据。
-- 不要仅依赖 `isGenerating` 之类的请求状态来决定是否吸顶;请求结束不等于内容展示结束。
-- 当自动滚动推进到最后一条 AI 消息顶部阈值时,应进入吸顶控制状态,避免打字机动画继续把内容顶出视口。
-- 吸顶状态应是阶段性的、可退出的;同一轮滚动中避免反复触发或抖动。
-- 用户发生手动滚动、触摸、鼠标滚轮或其他明确交互后,应重置吸顶状态,恢复默认滚动行为。
-- PC 和 Mobile 的滚动策略应保持一致,差异只应来自平台滚动容器本身,而不是业务规则分叉。
-- 调试阶段可以保留必要日志,用于判断吸顶是否触发、是否已停止自动滚动、当前滚动位置以及最后一条 AI 消息的打字状态。
-
-## 会话切换与消息状态原则
-
-- 切换会话后,新会话应自动滚动到消息列表底部,保证用户直接看到最新上下文。
-- 历史消息和实时生成消息应复用同一套消息状态判断,避免同一种业务状态在不同来源下表现不一致。
-- AI 消息内容为空、被中断、请求取消,或只残留未完成的思考/查询 `scope` 时,应明确展示“请求已取消”。
-- “请求已取消”的展示不应影响正常生成中的消息,也不应打断仍在流式追加的代码或文本内容。
-
-## Scope 动画与布局原则
-
-- `scopeContent` 的进入、退出、淡入、淡出应交给 Vue `Transition`/`TransitionGroup` 管理,避免在业务逻辑中手写动画状态。
-- `scopeContent` 退场只需要 fade,不需要 translate;退场过程中不应重置光点坐标,视觉位置应保持连续。
-- `scope` 达到最大宽度前,标题、正文行和行列表应优先使用 ellipsis 隐藏换行内容;只有达到最大宽度后才允许自然换行。
-- `scope-content-line` 与 `scope-line-list` 应遵循同一套宽度与换行规则,避免局部换行导致动画抖动。
-- 当 `scope` 准备淡出时,不应通过临时 `position: absolute` 改变布局位置;布局稳定性应由外层高度锁定或过渡结构承担。
-
-## 打字机与 Markdown 渲染原则
-
-- 文本打字机应由父级统一维护“当前可见行”和“当前正在打字的行”,避免多段文本同时竞争动画节奏。
-- 一条 AI 回复中,后段内容可以先进入数据队列,但 UI 上应按顺序释放可见文本,保证阅读节奏自然。
-- 请求流关闭不等于打字机结束;最后一个消息到达后,未完成的打字动画应继续执行直到文本全部展示完毕。
-- 打字机每 tick 应推进稳定数量的字符,避免速度忽快忽慢;当前约定以每 tick 2 个字作为基础节奏。
-- Markdown 内容在打字机过程中应尽量每 tick 实时 parse,使展示结构即时更新,减少纯文本与 Markdown 成品之间切换造成的抖动。
-- `markdown-content.block-markdown` 不应自行设置 `min-height`;高度稳定应由外层消息容器或业务记录容器维护。
-
-## 消息高度稳定原则
-
-- 最后一条 AI 消息处于打字机动画时,应在 `message-row.ai.is-last` 上维护最小高度,而不是让内部 Markdown 节点自行锁高。
-- 该最小高度在打字机过程中只增不减,用来抵消 Markdown 重排、scope 淡出和文本接续造成的高度回缩。
-- 当最后一条 AI 消息仍在视口内时,应保持最小高度;只有当 `business-record-body` 的底边已经接触滚动容器底部时,才允许释放高度锁。
-- 高度锁应服务于滚动与动画稳定,不应成为永久布局样式。
-
-## 流式分段与节奏原则
-
-- 流式解析应识别 `</scope>\n` 这样的自然边界,并在边界到达时立即 enqueue,避免 scope 结束后的正文被延迟到后续大段内容一起出现。
-- `scope` 内容、普通正文、Markdown 标题和 followup JSON 等不同片段应保持清晰边界,便于动画、取消态和最终态分别处理。
-- 流暂停输出 message 时,前端打字机仍应以自己的节奏继续推进;网络节奏不应直接决定文字动画是否流畅。
-
-## 调试入口原则
-
-- 用于测试输入和 `playMockStreamMessage` 的按钮可以保留在 PC 端调试入口中,并应放在 `actions-right` 内、发送按钮左侧。
-- 调试按钮不应影响 Mobile 端正式输入区,也不应改变用户发送消息的主流程。