project-knowledge 0.1.0 → 1.0.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 (39) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +201 -58
  3. package/_site/_test/ai-profile-test.js +59 -1
  4. package/_site/_test/baseline-schema-test.js +4 -3
  5. package/_site/_test/claude-workbench-test.js +72 -0
  6. package/_site/_test/draft-apply-test.js +12 -6
  7. package/_site/_test/kb-v2-templates-test.js +31 -43
  8. package/_site/_test/knowledge-store-logs-supervision-test.js +143 -0
  9. package/_site/_test/package-startup-test.js +108 -0
  10. package/_site/_test/project-control-panel-task14-test.js +151 -0
  11. package/_site/_test/task15-20-integration-test.js +194 -0
  12. package/_site/_test/task15-20-ui-flow-test.js +144 -0
  13. package/_site/_test/ui-smoke-test.js +2 -2
  14. package/_site/index.html +1640 -90
  15. package/_site/lib/ai-adapter.js +3 -3
  16. package/_site/lib/ai-workspace.js +120 -0
  17. package/_site/lib/analysis-orchestrator.js +117 -32
  18. package/_site/lib/claude-cli-runner.js +862 -0
  19. package/_site/lib/context-pack-builder.js +19 -11
  20. package/_site/lib/draft-apply.js +80 -31
  21. package/_site/lib/index-builder.js +100 -0
  22. package/_site/lib/job-orchestrator.js +15 -11
  23. package/_site/lib/kb-v3.js +188 -0
  24. package/_site/lib/kb-validator.js +84 -0
  25. package/_site/lib/knowledge-store.js +141 -0
  26. package/_site/lib/llm-client.js +103 -56
  27. package/_site/lib/prompt-registry.js +102 -0
  28. package/_site/lib/structured-logger.js +120 -0
  29. package/_site/lib/supervision.js +103 -0
  30. package/_site/server.js +887 -30
  31. package/_site/vendor/tailwind-browser.js +947 -0
  32. package/_site/vendor/vue.global.prod.js +9 -0
  33. package/ai-profiles.json +13 -3
  34. package/bin/project-knowledge.js +51 -0
  35. package/docs/development-progress.md +141 -0
  36. package/package.json +11 -2
  37. package/scripts/gen-commit-doc.ps1 +1 -1
  38. package/scripts/list-features.ps1 +1 -1
  39. package/scripts/register-scheduled-task.bat +3 -1
@@ -0,0 +1,141 @@
1
+ # 开发进度总结
2
+
3
+ > 截至 2026-06-12,commit `db32274`,tag `v0.1.0`。
4
+
5
+ ## 一句话定位
6
+
7
+ `project-knowledge-base` 是 `D:\SanQian.Xu` 下多个项目的自动化知识库管理工具:
8
+ 扫描 git 仓库 → 调用 LLM 生成结构化知识草稿 → 人工审核后落地为受信任知识。
9
+ 双语(zh-CN / en-US)输出,可作为 PR 评审的外部 consumer。
10
+
11
+ ## 远程与发布
12
+
13
+ - 仓库:`https://github.com/SanQianX/project-knowledge-base.git`
14
+ - 主分支:`main`,最新 commit:`db32274`
15
+ - 首发 tag:`v0.1.0`(已推上 origin)
16
+ - npm 包:`project-knowledge@0.1.0`(由 tag push 触发 GitHub Actions 自动发布)
17
+ - Workflow:`.github/workflows/publish.yml`,监听 `v*` tag
18
+ - Secret:`secrets.NPM_TOKEN`(用户已在 Repository secrets 配置)
19
+ - Tarball:109.2 kB / 81 个文件(unpacked 425 kB)
20
+
21
+ ## 11 个任务分组的状态
22
+
23
+ | 任务 | 主题 | 状态 |
24
+ |------|------|------|
25
+ | TASK-001~003 | 项目骨架 / 项目注册表 / 模板系统 | ✅ |
26
+ | TASK-004 | Git scanner(commit 枚举、repo 状态校验) | ✅ |
27
+ | TASK-005 | AI profile adapter(mock + 真实 LLM 双实现) | ✅ |
28
+ | TASK-006 | Context pack builder(按 commit 汇总上下文) | ✅ |
29
+ | TASK-007 | 初始项目分析(建仓后第一轮 goal + analysis) | ✅ |
30
+ | TASK-008 | 增量 commit 分析(lastAnalyzedCommit..HEAD) | ✅ |
31
+ | TASK-009 | 草稿审核 / apply(人类确认后才写入 trusted KB) | ✅ |
32
+ | TASK-010 | 调度器 / 回归门禁 | ✅ |
33
+ | TASK-011 | PR consumer contract(KB 校验 + pr-context API) | ✅ |
34
+
35
+ 合计 125 个子任务,全部完成。
36
+
37
+ ## 代码地图
38
+
39
+ ### 后端(`_site/`)
40
+
41
+ | 文件 | 职责 |
42
+ |------|------|
43
+ | `server.js` | HTTP API + 静态文件服务,端口 7777 |
44
+ | `lib/scanner.js` | 读取 git 状态、枚举 commit、校验仓库 |
45
+ | `lib/context-pack-builder.js` | 构造 LLM 用的上下文包(top N entries) |
46
+ | `lib/ai-adapter.js` | 适配器接口 + `mock-agent` + `claude-code-agent` |
47
+ | `lib/llm-client.js` | Anthropic Messages API 客户端(零依赖、支持任意 baseUrl) |
48
+ | `lib/analysis-orchestrator.js` | 调度初始分析 / commit 分析 / 草稿生成 |
49
+ | `lib/draft-apply.js` | 草稿 → 正式 KB 文件的写入 |
50
+ | `lib/job-orchestrator.js` | 后台 job 队列、并发控制、超时 |
51
+ | `lib/hook-manager.js` | git hook 安装/卸载/读取(含 KB 标记) |
52
+ | `lib/kb-validator.js` | KB 完整性校验(健康/缺 goal/草稿泄漏 三种 fixture) |
53
+ | `lib/git-runner.js` | git 命令封装 |
54
+ | `scripts/hook-trigger.js` | post-commit 钩子脚本(2s 超时,静默失败) |
55
+ | `scripts/safe-runner.js` | KB 写入的安全网(不直接由 orchestrator 写) |
56
+
57
+ ### 前端
58
+
59
+ - `index.html`:Vue 3 单文件,**Control Center / 控制中心** UI
60
+ - Tab:Dashboard / Import / AI Profiles / Runs · Drafts / Schedule / Logs
61
+ - 中英双语
62
+ - 浅色主题(sidebar 非纯白)
63
+
64
+ ## AI 集成
65
+
66
+ - **mock-agent**:确定性输出,用于回归测试和离线开发
67
+ - **claude-code-agent**:真实 LLM,Anthropic Messages API 兼容(实测 MiniMax-M3 走 `api.minimaxi.com/anthropic` 跑通)
68
+ - 配置靠 env vars:`ANTHROPIC_BASE_URL`、`ANTHROPIC_AUTH_TOKEN`、`ANTHROPIC_MODEL`
69
+ - 选哪个 profile 在 `ai-profiles.json`(默认 `mock-agent`),项目侧在 `projects.json` 的 `aiProfileId` 覆盖
70
+ - 严格 JSON 输出,要求 LLM 复制**完整 40 字符 commit hash**(曾因 LLM 返回 short hash 导致 drafts 落空,已修复)
71
+ - 双语输出:每个项目在 `projects.json` 设 `knowledgeLanguage: "zh-CN" | "en-US"`,prompt 强制同语言
72
+
73
+ ## Post-commit hook
74
+
75
+ - 每个项目独立安装(在项目的 `Install hook` 按钮触发)
76
+ - 安装位置:`<gitDir>/hooks/post-commit`
77
+ - 行为:commit 完成后异步 POST `/api/jobs/run`(safe-mode 扫描)
78
+ - 2 秒超时;不阻塞 commit
79
+ - 失败:写 `<kbRoot>/.hook-trigger-errors.log`,不弹错
80
+ - 不会泄露到远端:hook 装在本地 `.git/hooks/`,不在仓库里
81
+
82
+ ## 测试覆盖
83
+
84
+ 15 个 `*test.js`,由 `node _site/_test/run-all-tests.js` 一键跑:
85
+
86
+ ```
87
+ ai-profile-test.js baseline-schema-test.js
88
+ commit-analysis-test.js context-pack-test.js
89
+ draft-apply-test.js git-validation-test.js
90
+ hook-trigger-test.js initial-analysis-test.js
91
+ job-orchestrator-test.js kb-v2-templates-test.js
92
+ pr-consumer-contract-test.js scanner-test.js
93
+ ```
94
+
95
+ 加 `ui-smoke-test.js`(headless Chrome via CDP,端到端验证 Control Center 渲染 + 5 个 tab 切换 + 无 console 错误 + 提交 hash 渲染)。需 `node ui-smoke-test.js` 显式触发或 `--include-ui` 包含进回归套件。
96
+
97
+ 测试 fixture 包含三个 KB 状态:健康 / 缺 goal / 草稿泄漏,专门验证 `kb-validator` 不放行半成品进 PR context。
98
+
99
+ ## PR Consumer Contract(TASK-011 引入)
100
+
101
+ 外部 PR 评审系统通过两个端点消费 KB:
102
+
103
+ - `POST /api/projects/:slug/validate-kb` — 校验 KB 是否可信(无草稿泄漏、goal 完整)
104
+ - `GET /api/projects/:slug/pr-context` — 拉取结构化 PR 上下文(已合入 trusted KB 的内容)
105
+
106
+ 契约文档:`docs/pr-consumer-contract.md`。
107
+ 关键不变量:**草稿(drafts)绝不能出现在 pr-context 里**——这是 12 个测试用例专门守的门。
108
+
109
+ ## 当前未提交的开发态
110
+
111
+ - `projects.json` 有未提交的修改(只是 LLM 扫描多发现一个 commit 后的 `headCommit` / `lastSeenCommit` / `lastScanAt` 字段更新)
112
+ - `projects/token-consumption-leaderboard/_ai/` 下有未跟踪的分析产物(context-packs、runs)
113
+
114
+ 是否清理取决于团队约定;如果要长期忽略,建议把 `_ai/` 模式加进 `.gitignore`。
115
+
116
+ ## 已知待办
117
+
118
+ 1. publish workflow 当前不带测试门禁。`ui-smoke-test.js` 用了 Windows 硬编码 Chrome 路径(`C:\Users\SanQian\AppData\Local\ms-playwright\...`),在 ubuntu runner 上会挂;如果要 `tag → test → publish`,得加 Linux 兼容的 headless 浏览器或加 `--include-ui` 排除
119
+ 2. `package.json` 没有 `bin` 入口;如果希望 `npx project-knowledge start` 直接启动服务,需要给 `server.js` 加 shebang 并在 `bin` 注册一个 CLI 名
120
+ 3. KB 模板(TASK-006 / TASK-007 引入的 `kb-manifest/v1`)和 v1 旧模板的迁移路径没有自动工具,老项目要手动重跑 `initial` 扫描
121
+ 4. 没有针对 LLM 调用做重试 / 限流;网络抖动会让一次 commit-batch 整个失败
122
+
123
+ ## 怎么继续
124
+
125
+ ```bash
126
+ # 本地开发
127
+ cd _site
128
+ node server.js # 端口 7777
129
+
130
+ # 跑回归
131
+ node _site/_test/run-all-tests.js
132
+
133
+ # 装到本地项目(UI 上点 Install hook 也行)
134
+ node _site/scripts/safe-runner.js install-hook --project=<slug>
135
+
136
+ # 发新版
137
+ # 1. 改 package.json 的 version
138
+ # 2. git add && git commit
139
+ # 3. git tag v0.1.x && git push origin v0.1.x
140
+ # → GitHub Actions 自动 publish
141
+ ```
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "project-knowledge",
3
- "version": "0.1.0",
3
+ "version": "1.0.1",
4
4
  "description": "Knowledge base manager with Git integration, AI-driven analysis, and bilingual (zh-CN/en-US) knowledge output",
5
5
  "main": "_site/server.js",
6
6
  "scripts": {
7
7
  "start": "node _site/server.js",
8
8
  "test": "node _site/_test/run-all-tests.js"
9
9
  },
10
+ "bin": {
11
+ "project-knowledge": "bin/project-knowledge.js"
12
+ },
10
13
  "engines": {
11
14
  "node": ">=18"
12
15
  },
@@ -15,10 +18,12 @@
15
18
  "_site/index.html",
16
19
  "_site/lib/",
17
20
  "_site/scripts/",
21
+ "_site/vendor/",
18
22
  "_site/_test/*.js",
19
23
  "_site/_test/fixtures/",
20
24
  "_site/start.bat",
21
25
  "_site/stop.bat",
26
+ "bin/",
22
27
  "templates/",
23
28
  "scripts/",
24
29
  "ai-profiles.json",
@@ -43,5 +48,9 @@
43
48
  "post-commit-hook"
44
49
  ],
45
50
  "author": "SanQianX",
46
- "license": "UNLICENSED"
51
+ "license": "UNLICENSED",
52
+ "dependencies": {
53
+ "@anthropic-ai/claude-agent-sdk": "^0.2.141",
54
+ "ws": "^8.21.0"
55
+ }
47
56
  }
@@ -5,7 +5,7 @@
5
5
  param(
6
6
  [Parameter(Mandatory = $true)]
7
7
  [string] $ProjectSlug,
8
- [string] $KbRoot = "D:\SanQian.Xu\project-knowledge-base",
8
+ [string] $KbRoot = (Split-Path -Parent $PSScriptRoot),
9
9
  [int] $MaxCommits = 0
10
10
  )
11
11
 
@@ -7,7 +7,7 @@ param(
7
7
  [string] $ProjectSlug,
8
8
  [ValidateSet("time", "count")]
9
9
  [string] $SortBy = "time",
10
- [string] $KbRoot = "D:\SanQian.Xu\project-knowledge-base"
10
+ [string] $KbRoot = (Split-Path -Parent $PSScriptRoot)
11
11
  )
12
12
 
13
13
  $commitsDir = Join-Path $KbRoot "projects\$ProjectSlug\commits"
@@ -1,5 +1,7 @@
1
1
  @echo off
2
- schtasks /create /tn KB-GitCommits-Daily /tr "powershell -ExecutionPolicy Bypass -File D:\SanQian.Xu\project-knowledge-base\scripts\gen-commit-doc.ps1 -ProjectSlug ALL" /sc daily /st 08:00 /f
2
+ @echo off
3
+ set "KB_ROOT=%~dp0.."
4
+ schtasks /create /tn KB-GitCommits-Daily /tr "powershell -ExecutionPolicy Bypass -File \"%KB_ROOT%\scripts\gen-commit-doc.ps1\" -ProjectSlug ALL" /sc daily /st 08:00 /f
3
5
  echo Done.
4
6
  schtasks /query /tn KB-GitCommits-Daily
5
7
  pause