@sanqianx/project-knowledge 5.0.24 → 5.0.26

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 (401) hide show
  1. package/.agents/plugins/marketplace.json +20 -20
  2. package/.claude-plugin/marketplace.json +1 -1
  3. package/CHANGELOG.md +1361 -1353
  4. package/LICENSE +201 -201
  5. package/NOTICE +5 -5
  6. package/README.md +349 -349
  7. package/_modules/knowledge-engine/package.json +1 -1
  8. package/_modules/knowledge-engine/src/coordinator.js +48 -3
  9. package/_modules/knowledge-engine/src/runtime/automation-config.js +140 -140
  10. package/_modules/knowledge-engine/src/runtime/commit-conversation-binder.js +238 -238
  11. package/_modules/knowledge-engine/src/runtime/commit-processing-ledger.js +26 -26
  12. package/_modules/knowledge-engine/src/runtime/commit-prompt.js +193 -193
  13. package/_modules/knowledge-engine/src/runtime/commit-reconciler.js +394 -394
  14. package/_modules/knowledge-engine/src/runtime/contracts.js +282 -282
  15. package/_modules/knowledge-engine/src/runtime/conversation-store.js +389 -389
  16. package/_modules/knowledge-engine/src/runtime/evidence-bundle.js +228 -228
  17. package/_modules/knowledge-engine/src/runtime/git-runner.js +62 -62
  18. package/_modules/knowledge-engine/src/runtime/knowledge-promotion.js +505 -505
  19. package/_modules/knowledge-engine/src/runtime/knowledge-retrieval-service.js +400 -400
  20. package/_modules/knowledge-engine/src/runtime/markdown-knowledge-indexer.js +171 -171
  21. package/_modules/knowledge-engine/src/runtime/scanner.js +298 -298
  22. package/_modules/knowledge-engine/ui/app.js +23 -2
  23. package/_site/README.md +30 -30
  24. package/_site/_test/agent-capture-mcp-ui-test.js +68 -68
  25. package/_site/_test/agent-capture-ui-test.js +101 -101
  26. package/_site/_test/ai-profile-resolver-test.js +137 -137
  27. package/_site/_test/ai-profile-test.js +75 -75
  28. package/_site/_test/ai-vendor-presets-test.js +91 -91
  29. package/_site/_test/automatic-context-test.js +70 -70
  30. package/_site/_test/automation-queue-test.js +14 -14
  31. package/_site/_test/automation-ui-test.js +40 -40
  32. package/_site/_test/background-task-registry-test.js +43 -43
  33. package/_site/_test/baseline-schema-test.js +91 -91
  34. package/_site/_test/bin-cli-test.js +230 -230
  35. package/_site/_test/bridge-adapter-test.js +95 -95
  36. package/_site/_test/bridge-consumer-service-test.js +310 -310
  37. package/_site/_test/candidate-bin-content-test.js +35 -35
  38. package/_site/_test/candidate-product-assets-test.js +13 -13
  39. package/_site/_test/candidate-release-contract-test.js +14 -14
  40. package/_site/_test/capture-hook-dedup-test.js +158 -158
  41. package/_site/_test/cdp-browser-failure-test.js +103 -103
  42. package/_site/_test/chat-claudecodeui-match-test.js +92 -92
  43. package/_site/_test/claude-executable-discovery-test.js +90 -90
  44. package/_site/_test/claude-session-lifecycle-sweep-test.js +252 -252
  45. package/_site/_test/claude-workbench-test.js +174 -174
  46. package/_site/_test/cli-instance-management-test.js +62 -62
  47. package/_site/_test/client-capture-restart-e2e-test.js +189 -189
  48. package/_site/_test/codex-conversation-projection-test.js +60 -60
  49. package/_site/_test/codex-marketplace-scoped-path-test.js +186 -186
  50. package/_site/_test/codex-notify-capture-e2e-test.js +101 -101
  51. package/_site/_test/codex-notify-fanout-test.js +141 -134
  52. package/_site/_test/codex-notify-upgrade-test.js +253 -253
  53. package/_site/_test/commit-boundary-freeze-test.js +147 -147
  54. package/_site/_test/commit-conversation-binding-test.js +99 -99
  55. package/_site/_test/commit-evidence-test.js +110 -110
  56. package/_site/_test/configuration-generation-test.js +22 -22
  57. package/_site/_test/context-pack-test.js +200 -200
  58. package/_site/_test/conversation-api-test.js +119 -119
  59. package/_site/_test/conversation-origin-test.js +15 -15
  60. package/_site/_test/conversation-store-test.js +138 -138
  61. package/_site/_test/cross-repo-isolation-e2e-test.js +187 -187
  62. package/_site/_test/desktop-browser-compat-test.js +28 -28
  63. package/_site/_test/desktop-hook-runtime-regression-test.js +204 -204
  64. package/_site/_test/embedding-config-test.js +32 -32
  65. package/_site/_test/explicit-commit-processor-test.js +37 -37
  66. package/_site/_test/fixtures/fake-browser-exit.js +10 -10
  67. package/_site/_test/fixtures/fake-browser-hang.js +10 -10
  68. package/_site/_test/fixtures/integration-busy-worker.cjs +6 -6
  69. package/_site/_test/fixtures/make-git-repos.js +92 -92
  70. package/_site/_test/fixtures/retrieval-gold-queries.json +32 -32
  71. package/_site/_test/folder-picker-output-test.js +19 -19
  72. package/_site/_test/fresh-hook-reimport-test.js +53 -53
  73. package/_site/_test/fresh-product-data-test.js +56 -56
  74. package/_site/_test/full-integration-e2e-test.js +167 -167
  75. package/_site/_test/git-path-compatibility-test.js +80 -80
  76. package/_site/_test/git-validation-test.js +81 -81
  77. package/_site/_test/glm-ui-refresh-review-test.js +313 -404
  78. package/_site/_test/harness-isolation-test.js +138 -0
  79. package/_site/_test/helpers/cdp-browser.js +383 -0
  80. package/_site/_test/helpers/cdp-network-capture.js +66 -0
  81. package/_site/_test/helpers/find-chrome.js +34 -0
  82. package/_site/_test/helpers/free-port.js +8 -0
  83. package/_site/_test/helpers/logging-ui-fixture.js +131 -0
  84. package/_site/_test/helpers/module-fixture.js +282 -0
  85. package/_site/_test/helpers/parallel-engine-advanced-engine-child.js +45 -0
  86. package/_site/_test/helpers/parallel-engine-advanced-fault-writer.js +171 -0
  87. package/_site/_test/helpers/parallel-engine-advanced-harness.js +245 -0
  88. package/_site/_test/helpers/parallel-engine-advanced-standin-analyzer.js +80 -0
  89. package/_site/_test/helpers/parallel-engine-advanced-ui-host.js +177 -0
  90. package/_site/_test/helpers/parallel-engine-final-harness.js +314 -0
  91. package/_site/_test/helpers/parallel-engine-final-standin-analyzer.js +159 -0
  92. package/_site/_test/helpers/parallel-knowledge-fixture.js +255 -0
  93. package/_site/_test/helpers/parallel-logging-acceptance-fixture.js +111 -0
  94. package/_site/_test/helpers/parallel-logging-acceptance-proxy.js +106 -0
  95. package/_site/_test/helpers/parallel-logging-fix-r2-proxy.js +205 -0
  96. package/_site/_test/helpers/parallel-logging-integration-5025-env.js +432 -0
  97. package/_site/_test/helpers/parallel-memory-analyzer.js +81 -0
  98. package/_site/_test/helpers/parallel-memory-event-bridge.js +128 -0
  99. package/_site/_test/helpers/parallel-memory-shell.js +470 -0
  100. package/_site/_test/helpers/parallel-nav-isolation-env.js +389 -0
  101. package/_site/_test/helpers/parallel-nav-module-ui.js +186 -0
  102. package/_site/_test/helpers/parallel-nav-proxy.js +148 -0
  103. package/_site/_test/helpers/parallel-nav-shell.js +361 -0
  104. package/_site/_test/helpers/parallel-qa-engine-endpoint-guard.js +206 -0
  105. package/_site/_test/helpers/parallel-qa-engine-endpoint-isolate.js +257 -0
  106. package/_site/_test/helpers/parallel-retrieval-followup-corpus.js +293 -0
  107. package/_site/_test/helpers/parallel-retrieval-followup-next-session.js +70 -0
  108. package/_site/_test/helpers/parallel-retrieval-followup-r2-shell.js +737 -0
  109. package/_site/_test/helpers/parallel-retrieval-followup-r2-wb-host.js +82 -0
  110. package/_site/_test/helpers/parallel-retrieval-followup-shell.js +279 -0
  111. package/_site/_test/helpers/parallel-workbench-fixture.js +371 -0
  112. package/_site/_test/helpers/parallel-workbench-host.js +80 -0
  113. package/_site/_test/helpers/parallel-workbench-integration-5025-fixture.js +408 -0
  114. package/_site/_test/helpers/parallel-workbench-integration-5025-harness.js +593 -0
  115. package/_site/_test/helpers/parallel-workbench-integration-5025-host.js +70 -0
  116. package/_site/_test/helpers/parallel-workbench-integration-5025-launcher.js +240 -0
  117. package/_site/_test/helpers/parallel-workbench-integration-5025-runtime-harness.js +630 -0
  118. package/_site/_test/helpers/parallel-workbench-source-map.js +196 -0
  119. package/_site/_test/helpers/spawn-server.js +106 -0
  120. package/_site/_test/helpers/version-visibility-fixture.js +251 -0
  121. package/_site/_test/hook-runtime-endpoint-test.js +88 -88
  122. package/_site/_test/hook-status-repair-api-test.js +152 -152
  123. package/_site/_test/hook-trigger-test.js +85 -85
  124. package/_site/_test/hook-worktree-test.js +42 -42
  125. package/_site/_test/import-preflight-api-test.js +234 -234
  126. package/_site/_test/index-builder-test.js +41 -41
  127. package/_site/_test/index-error-display-contract-test.js +10 -10
  128. package/_site/_test/index-writer-concurrency-test.js +135 -135
  129. package/_site/_test/integration-adapters-test.js +262 -262
  130. package/_site/_test/integration-auto-repair-test.js +113 -113
  131. package/_site/_test/integration-capture-setup-test.js +118 -118
  132. package/_site/_test/integration-intent-test.js +81 -81
  133. package/_site/_test/integration-runtime-binding-a2-test.js +566 -566
  134. package/_site/_test/integration-runtime-binding-a3-test.js +227 -227
  135. package/_site/_test/integration-runtime-binding-test.js +473 -473
  136. package/_site/_test/integration-status-scan-test.js +29 -29
  137. package/_site/_test/integration-surface-coverage-test.js +164 -164
  138. package/_site/_test/kb-framework-test.js +57 -57
  139. package/_site/_test/kbpath-follow-test.js +63 -63
  140. package/_site/_test/knowledge-db-test.js +144 -144
  141. package/_site/_test/knowledge-engine-client-test.js +120 -109
  142. package/_site/_test/knowledge-language-control-test.js +170 -170
  143. package/_site/_test/knowledge-maintenance-test.js +40 -40
  144. package/_site/_test/knowledge-promotion-recovery-test.js +260 -260
  145. package/_site/_test/knowledge-query-test.js +54 -54
  146. package/_site/_test/knowledge-retrieval-service-test.js +77 -77
  147. package/_site/_test/knowledge-scopes-test.js +37 -37
  148. package/_site/_test/knowledge-storage-location-test.js +28 -28
  149. package/_site/_test/knowledge-storage-startup-test.js +52 -52
  150. package/_site/_test/knowledge-store-logs-supervision-test.js +89 -89
  151. package/_site/_test/launcher-readiness-test.js +80 -80
  152. package/_site/_test/legacy-claude-session-alias-test.js +106 -106
  153. package/_site/_test/legacy-routes-removed-test.js +47 -47
  154. package/_site/_test/legacy-workbench-exclusion-test.js +92 -92
  155. package/_site/_test/live-gateway-test.js +48 -48
  156. package/_site/_test/local-marketplace-test.js +16 -16
  157. package/_site/_test/log-redaction-test.js +58 -58
  158. package/_site/_test/logging-api-test.js +89 -89
  159. package/_site/_test/logging-sse-no-gap-test.js +88 -88
  160. package/_site/_test/logging-ui-test.js +107 -107
  161. package/_site/_test/markdown-delta-overlay-test.js +85 -85
  162. package/_site/_test/markdown-maintenance-api-test.js +75 -75
  163. package/_site/_test/markdown-maintenance-test.js +11 -11
  164. package/_site/_test/mcp-server-test.js +149 -149
  165. package/_site/_test/model-context-windows-test.js +89 -89
  166. package/_site/_test/module-agent-start-proxy-test.js +65 -65
  167. package/_site/_test/module-artifact-integrity-test.js +27 -27
  168. package/_site/_test/module-boundary-test.js +30 -30
  169. package/_site/_test/module-bridge-eventbridge-test.js +202 -202
  170. package/_site/_test/module-dynamic-port-test.js +118 -118
  171. package/_site/_test/module-index-proxy-test.js +33 -33
  172. package/_site/_test/module-model-configuration-test.js +44 -44
  173. package/_site/_test/module-process-lifecycle-test.js +35 -35
  174. package/_site/_test/module-stream-proxy-test.js +34 -34
  175. package/_site/_test/module-terminal-restart-test.js +63 -63
  176. package/_site/_test/module-wiring-unbind-race-test.js +59 -59
  177. package/_site/_test/native-context-integrations-test.js +86 -86
  178. package/_site/_test/non-release-ci-test.js +34 -34
  179. package/_site/_test/offline-boundary-isolation-test.js +32 -32
  180. package/_site/_test/orphaned-claim-recovery-test.js +80 -80
  181. package/_site/_test/package-boundary-test.js +43 -43
  182. package/_site/_test/package-startup-test.js +56 -56
  183. package/_site/_test/packaged-ui-smoke-test.js +88 -88
  184. package/_site/_test/parallel-ci-r9-posix-socket-budget-test.js +156 -0
  185. package/_site/_test/parallel-engine-advanced-eng005-test.js +136 -0
  186. package/_site/_test/parallel-engine-advanced-eng006-test.js +171 -0
  187. package/_site/_test/parallel-engine-advanced-eng007-reconcile-test.js +231 -0
  188. package/_site/_test/parallel-engine-advanced-eng009-test.js +208 -0
  189. package/_site/_test/parallel-engine-advanced-eng010-test.js +213 -0
  190. package/_site/_test/parallel-engine-advanced-eng011-ui-probe.js +459 -0
  191. package/_site/_test/parallel-engine-final-eng002-test.js +255 -0
  192. package/_site/_test/parallel-engine-final-eng007-test.js +269 -0
  193. package/_site/_test/parallel-engine-final-eng011-test.js +197 -0
  194. package/_site/_test/parallel-engine-final-eng012-test.js +354 -0
  195. package/_site/_test/parallel-knowledge-client-error-code-test.js +184 -0
  196. package/_site/_test/parallel-knowledge-engine-test.js +353 -0
  197. package/_site/_test/parallel-knowledge-retrieval-test.js +292 -0
  198. package/_site/_test/parallel-knowledge-vector-test.js +168 -0
  199. package/_site/_test/parallel-linux-ci-r7-log007-day-test.js +110 -0
  200. package/_site/_test/parallel-logging-acceptance-log003-test.js +224 -0
  201. package/_site/_test/parallel-logging-acceptance-log004-test.js +231 -0
  202. package/_site/_test/parallel-logging-acceptance-log005-test.js +208 -0
  203. package/_site/_test/parallel-logging-acceptance-log006-test.js +214 -0
  204. package/_site/_test/parallel-logging-acceptance-log007-test.js +223 -0
  205. package/_site/_test/parallel-logging-acceptance-log008-test.js +180 -0
  206. package/_site/_test/parallel-logging-fix-r2-crash-probe.js +271 -0
  207. package/_site/_test/parallel-logging-fix-r2-gap-test.js +294 -0
  208. package/_site/_test/parallel-logging-fix-r2-normalhook-test.js +330 -0
  209. package/_site/_test/parallel-logging-integration-5025-portability-test.js +554 -0
  210. package/_site/_test/parallel-memory-candidate-test.js +301 -0
  211. package/_site/_test/parallel-memory-manual-test.js +197 -0
  212. package/_site/_test/parallel-memory-scope-test.js +228 -0
  213. package/_site/_test/parallel-memory-source-test.js +227 -0
  214. package/_site/_test/parallel-memory-sync-test.js +238 -0
  215. package/_site/_test/parallel-memory-view-r8-reload-gate-test.js +123 -0
  216. package/_site/_test/parallel-nav-failure-test.js +119 -0
  217. package/_site/_test/parallel-nav-isolation-test.js +308 -0
  218. package/_site/_test/parallel-nav-isolation-vector-path-test.js +90 -0
  219. package/_site/_test/parallel-nav-offline-test.js +272 -0
  220. package/_site/_test/parallel-nav-operability-test.js +257 -0
  221. package/_site/_test/parallel-nav-switch-test.js +247 -0
  222. package/_site/_test/parallel-nav-theme-test.js +130 -0
  223. package/_site/_test/parallel-nav-viewport-test.js +310 -0
  224. package/_site/_test/parallel-qa-engine-endpoint-guard-test.js +273 -0
  225. package/_site/_test/parallel-retrieval-followup-citation-test.js +219 -0
  226. package/_site/_test/parallel-retrieval-followup-corpus-test.js +287 -0
  227. package/_site/_test/parallel-workbench-independent-host.js +262 -0
  228. package/_site/_test/parallel-workbench-integration-5025-abort-probe.js +340 -0
  229. package/_site/_test/parallel-workbench-integration-5025-drafts-probe.js +588 -0
  230. package/_site/_test/parallel-workbench-integration-5025-env-check.js +317 -0
  231. package/_site/_test/parallel-workbench-integration-5025-model-probe.js +342 -0
  232. package/_site/_test/parallel-workbench-integration-5025-ordering-probe.js +326 -0
  233. package/_site/_test/parallel-workbench-model-probe.js +336 -0
  234. package/_site/_test/parallel-workbench-offline-test.js +169 -0
  235. package/_site/_test/parallel-workbench-provenance-trace.js +134 -0
  236. package/_site/_test/parallel-workbench-source-match.js +206 -0
  237. package/_site/_test/parallel-workbench-standalone-turn.js +349 -0
  238. package/_site/_test/path-consistency-test.js +151 -151
  239. package/_site/_test/pending-sweep-test.js +9 -9
  240. package/_site/_test/post-commit-automation-test.js +87 -87
  241. package/_site/_test/pr-consumer-contract-test.js +55 -55
  242. package/_site/_test/product-brand-contract-test.js +25 -25
  243. package/_site/_test/product-diagnostics-ui-test.js +93 -93
  244. package/_site/_test/product-empty-state-test.js +148 -0
  245. package/_site/_test/product-import-ui-test.js +219 -104
  246. package/_site/_test/product-navigation-test.js +152 -0
  247. package/_site/_test/product-progress-status-test.js +84 -84
  248. package/_site/_test/project-delete-recovery-test.js +64 -64
  249. package/_site/_test/project-domain-create-test.js +91 -0
  250. package/_site/_test/project-domain-scope-retrieval-test.js +214 -0
  251. package/_site/_test/project-git-init-confirm-test.js +115 -0
  252. package/_site/_test/project-goal-editor-test.js +144 -144
  253. package/_site/_test/project-import-duplicate-alias-test.js +134 -0
  254. package/_site/_test/project-import-unicode-restart-test.js +140 -0
  255. package/_site/_test/project-lifecycle-transaction-test.js +106 -106
  256. package/_site/_test/project-module-partial-recovery-test.js +222 -0
  257. package/_site/_test/project-remove-running-guard-test.js +79 -79
  258. package/_site/_test/project-store-test.js +90 -90
  259. package/_site/_test/project-unbind-late-read-ui-test.js +250 -0
  260. package/_site/_test/project-unbind-writer-guard-test.js +231 -0
  261. package/_site/_test/prompt-settings-test.js +115 -115
  262. package/_site/_test/protected-architecture-gate-test.js +122 -122
  263. package/_site/_test/refactor-characterization-test.js +36 -36
  264. package/_site/_test/registry-events-test.js +38 -38
  265. package/_site/_test/release-version-sync-test.js +115 -115
  266. package/_site/_test/requirement-binding-test.js +113 -113
  267. package/_site/_test/requirement-recorder-test.js +173 -173
  268. package/_site/_test/run-all-tests.js +173 -161
  269. package/_site/_test/runtime-endpoint-test.js +64 -64
  270. package/_site/_test/scanner-test.js +83 -83
  271. package/_site/_test/server-security-test.js +96 -96
  272. package/_site/_test/sessions-stream-test.js +93 -93
  273. package/_site/_test/shared-contracts-test.js +58 -58
  274. package/_site/_test/shared-scope-root-binding-test.js +74 -67
  275. package/_site/_test/simple-import-test.js +98 -98
  276. package/_site/_test/startup-analysis-disabled-test.js +16 -16
  277. package/_site/_test/storage-foundation-test.js +78 -78
  278. package/_site/_test/structured-logger-test.js +101 -101
  279. package/_site/_test/t07b-cln-005-coverage-test.js +212 -0
  280. package/_site/_test/team-knowledge-store-sparse-checkout-test.js +196 -196
  281. package/_site/_test/team-knowledge-store-test.js +132 -132
  282. package/_site/_test/test-server-cleanup-test.js +35 -35
  283. package/_site/_test/test-server-module-isolation-test.js +37 -37
  284. package/_site/_test/tracking-start-test.js +144 -144
  285. package/_site/_test/vector-storage-root-test.js +75 -75
  286. package/_site/_test/version-visibility-browser-probe.js +249 -0
  287. package/_site/_test/version-visibility-test.js +92 -0
  288. package/_site/_test/workbench-context-receipts-test.js +22 -22
  289. package/_site/_test/workbench-permission-test.js +117 -117
  290. package/_site/_test/zcode-capture-integration-test.js +112 -112
  291. package/_site/lib/ai-profile-resolver.js +78 -78
  292. package/_site/lib/ai-vendor-presets.js +83 -83
  293. package/_site/lib/ai-workspace.js +104 -104
  294. package/_site/lib/atomic-file.js +204 -204
  295. package/_site/lib/automation-config.js +140 -140
  296. package/_site/lib/bridge-adapter.js +260 -260
  297. package/_site/lib/bridge-consumer-service.js +402 -402
  298. package/_site/lib/capture-hook-config.js +108 -108
  299. package/_site/lib/claude-cli-runner.js +1599 -1599
  300. package/_site/lib/cli-instances.js +43 -43
  301. package/_site/lib/codex-context-status.js +17 -17
  302. package/_site/lib/codex-notify-config.js +193 -193
  303. package/_site/lib/commit-conversation-binder.js +247 -247
  304. package/_site/lib/commit-processing-ledger.js +27 -27
  305. package/_site/lib/commit-prompt.js +202 -202
  306. package/_site/lib/commit-reconciler.js +444 -444
  307. package/_site/lib/context-pack-builder.js +299 -299
  308. package/_site/lib/contracts.js +291 -291
  309. package/_site/lib/conversation-exclusions.js +204 -204
  310. package/_site/lib/conversation-query-service.js +161 -161
  311. package/_site/lib/conversation-store.js +387 -387
  312. package/_site/lib/data-dir.js +13 -13
  313. package/_site/lib/embedding-service.js +85 -85
  314. package/_site/lib/engine-connection.js +93 -93
  315. package/_site/lib/engine-knowledge-client.js +76 -72
  316. package/_site/lib/evidence-bundle.js +228 -228
  317. package/_site/lib/folder-picker-output.js +24 -24
  318. package/_site/lib/git-path.js +14 -14
  319. package/_site/lib/git-runner.js +62 -62
  320. package/_site/lib/github-team-store.js +1175 -1175
  321. package/_site/lib/hook-manager.js +203 -203
  322. package/_site/lib/index-builder.js +157 -157
  323. package/_site/lib/index-service.js +173 -173
  324. package/_site/lib/integration-auto-repair.js +77 -77
  325. package/_site/lib/integration-installer.js +1240 -1240
  326. package/_site/lib/integration-intent.js +88 -88
  327. package/_site/lib/integration-status-scan.js +99 -99
  328. package/_site/lib/integration-status-worker.js +14 -14
  329. package/_site/lib/kb-framework.js +191 -191
  330. package/_site/lib/kb-validator.js +124 -124
  331. package/_site/lib/knowledge-db.js +363 -363
  332. package/_site/lib/knowledge-promotion.js +435 -435
  333. package/_site/lib/knowledge-retrieval-service.js +401 -401
  334. package/_site/lib/knowledge-schema.js +121 -121
  335. package/_site/lib/knowledge-tool-runtime.js +366 -366
  336. package/_site/lib/live-gateway.js +78 -78
  337. package/_site/lib/llm-client.js +173 -173
  338. package/_site/lib/markdown-knowledge-indexer.js +230 -230
  339. package/_site/lib/model-context-windows.js +82 -82
  340. package/_site/lib/module-bridge.js +874 -874
  341. package/_site/lib/module-port-resolver.js +57 -57
  342. package/_site/lib/post-commit-automation.js +141 -141
  343. package/_site/lib/product-data.js +35 -35
  344. package/_site/lib/project-lifecycle-service.js +554 -554
  345. package/_site/lib/project-registry-store.js +129 -129
  346. package/_site/lib/project-store.js +268 -268
  347. package/_site/lib/prompt-registry.js +148 -148
  348. package/_site/lib/public-version-info.js +37 -0
  349. package/_site/lib/registry-events.js +16 -16
  350. package/_site/lib/requirement-adapters.js +10 -10
  351. package/_site/lib/requirement-binder.js +112 -112
  352. package/_site/lib/requirement-recorder.js +278 -278
  353. package/_site/lib/runtime-control.js +89 -89
  354. package/_site/lib/runtime-endpoint.js +160 -160
  355. package/_site/lib/scanner.js +298 -298
  356. package/_site/lib/server-app.js +1672 -1664
  357. package/_site/lib/settings-store.js +153 -153
  358. package/_site/lib/storage-layout.js +166 -166
  359. package/_site/lib/structured-logger.js +574 -574
  360. package/_site/lib/zcode-context-integration.js +60 -60
  361. package/_site/scripts/codex-notify-fanout.cjs +95 -95
  362. package/_site/scripts/folder-picker.ps1 +156 -156
  363. package/_site/scripts/hook-trigger.js +158 -158
  364. package/_site/scripts/install-module-candidates.js +69 -69
  365. package/_site/scripts/pack-module-candidates.js +89 -89
  366. package/_site/scripts/sync-product-content.js +28 -28
  367. package/_site/scripts/sync-release-version.js +164 -164
  368. package/_site/scripts/vendor-modules.js +49 -49
  369. package/_site/scripts/verify-module-runtime.js +50 -50
  370. package/_site/scripts/verify-product-runtime.js +36 -36
  371. package/_site/scripts/verify-retrieval-gold.js +83 -83
  372. package/_site/server.js +15 -15
  373. package/_site/start.bat +26 -26
  374. package/_site/stop.bat +11 -11
  375. package/bin/project-knowledge-integrations.js +254 -254
  376. package/bin/project-knowledge-kb.js +67 -67
  377. package/bin/project-knowledge-mcp.js +201 -201
  378. package/bin/project-knowledge.js +269 -170
  379. package/claude-prompts.json +21 -21
  380. package/docs/README.zh-CN.md +207 -205
  381. package/docs/assets/architecture.svg +181 -181
  382. package/docs/assets/logo.svg +49 -49
  383. package/docs/fresh-v5-start.md +44 -44
  384. package/docs/leader-glm-workbench-playbook.md +122 -122
  385. package/docs/project-registry-schema.md +33 -33
  386. package/docs/release-5.0.16-acceptance.md +176 -176
  387. package/docs/release-5.0.17-acceptance.md +117 -117
  388. package/docs/release-5.0.19-acceptance.md +39 -39
  389. package/docs/team-knowledge-mode-a-plan.md +73 -73
  390. package/docs/testing-strategy.md +33 -33
  391. package/module-runtime-manifest.json +68 -65
  392. package/package.json +113 -110
  393. package/plugins/project-knowledge/.claude-plugin/plugin.json +1 -1
  394. package/plugins/project-knowledge/.codex-plugin/plugin.json +1 -1
  395. package/plugins/project-knowledge/.mcp.json +1 -1
  396. package/templates/change.md +30 -30
  397. package/templates/project-readme.md +52 -52
  398. package/ui/index.html +3 -2
  399. package/ui/version-info.css +44 -0
  400. package/ui/version-info.js +24 -0
  401. package/vendor-manifest.json +55 -55
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanqianx/ai-coding-knowledge-engine",
3
- "version": "0.2.7-rc.10",
3
+ "version": "0.2.7-rc.11",
4
4
  "description": "Knowledge engine module for project-knowledge: commit-boundary triggered knowledge analysis/generation (trigger plane) and retrieval for development assistants (retrieval plane).",
5
5
  "license": "Apache-2.0",
6
6
  "main": "src/server.js",
@@ -187,10 +187,34 @@ class EngineCoordinator extends EventEmitter {
187
187
  if (event.schema === 'ai-coding-event/v1' && ['user_prompt', 'assistant_response'].includes(event.eventType)) await this.conversations.appendBridgeEvent(p.projectId, { ...event, journalId: journal.journalId });
188
188
  if (event.schema === 'git-commit-boundary/v1' && /^[a-f0-9]{7,64}$/i.test(event.commitSha || '')) {
189
189
  if (!fs.existsSync(this.layout.getProjectCommitBoundaryPath(p.projectId, event.commitSha))) this.conversations.writeBoundary(p.projectId, { ...event, journalId: journal.journalId, parentShas: event.parents || [], bridgeCursorAtCommit: event.sequence, journalSequence: event.sequence, operationId: event.operationId || `bridge-${journal.journalId}-${event.sequence}`, committedAt: event.committedAt || event.capturedAt });
190
- const baseline = p.runtime.lastAnalyzedCommit || p.trackingStartCommit;
190
+ // The history floor is the tracking baseline: commits at or before it
191
+ // are pre-existing history and are never analysed. The analysed head
192
+ // is not the floor - a captured commit behind the head that was never
193
+ // completed and never attempted was MISSED (its boundary event
194
+ // arrived after the head moved past it), and dropping it would
195
+ // discard durable evidence for good. But auto-analysing it is worse:
196
+ // promotion would advance the head BACKWARDS to the old commit and
197
+ // its replace/delete operations could overwrite the newer knowledge
198
+ // the head already promoted at the same paths. Safety and existing
199
+ // commit order win: the late commit is flagged into a durable
200
+ // registry awaiting CONTROLLED handling - no run, no pointer
201
+ // movement, no fake success, no silent drop. A completed commit is
202
+ // held by the processing ledger; a previously failed or interrupted
203
+ // commit keeps its claim snapshot and is only re-run on an explicit
204
+ // user retry.
205
+ const floor = p.trackingStartCommit || null;
206
+ const head = p.runtime.lastAnalyzedCommit || null;
207
+ const isAncestorOf = async ancestor => (await execGit(p.repoPath, ['merge-base', '--is-ancestor', event.commitSha, ancestor])).ok;
208
+ const preBaseline = Boolean(floor) && (floor === event.commitSha || await isAncestorOf(floor));
209
+ const atHead = Boolean(head) && head === event.commitSha;
210
+ const behindHead = Boolean(head) && !atHead && await isAncestorOf(head);
191
211
  const completed = this.reconciler.processingLedger.read(p.projectId, event.commitSha);
192
- const historical = baseline && (baseline === event.commitSha || (await execGit(p.repoPath, ['merge-base', '--is-ancestor', event.commitSha, baseline])).ok);
193
- if (!completed && !historical && this.store.getProject(p.projectId)?.enabled) this.enqueue({ projectId: p.projectId, commitSha: event.commitSha, trigger: 'git-hook', journalId: journal.journalId, journalSequence: event.sequence });
212
+ const attempted = fs.existsSync(this.reconciler.claimStore.filePath(p.projectId, event.commitSha));
213
+ const skip = Boolean(completed) || preBaseline || atHead || (behindHead && attempted);
214
+ if (!skip && this.store.getProject(p.projectId)?.enabled) {
215
+ if (behindHead) await this.flagLateCommit(p, { commitSha: event.commitSha, journalId: journal.journalId, journalSequence: event.sequence, analysedHead: head });
216
+ else this.enqueue({ projectId: p.projectId, commitSha: event.commitSha, trigger: 'git-hook', journalId: journal.journalId, journalSequence: event.sequence });
217
+ }
194
218
  }
195
219
  }
196
220
  } catch (error) { error.journalContext = { projectId: p?.projectId, sequence: event.sequence, source: event.source }; throw error; }
@@ -200,6 +224,27 @@ class EngineCoordinator extends EventEmitter {
200
224
  if (through > cursor) this.store.setJournalCursor(journal.journalId, through);
201
225
  await this.bridge.ackConsumerCursor('knowledge-engine', through, { journalId: journal.journalId });
202
226
  }
227
+ // A late captured commit is durable evidence, but it can never be auto-healed
228
+ // here: promoting it would regress lastAnalyzedCommit and could overwrite
229
+ // newer knowledge at the same paths. It is registered (idempotently) for
230
+ // CONTROLLED handling instead - the registry is part of the project runtime,
231
+ // so it survives restarts and surfaces via /api/snapshot; the event log and
232
+ // the warn diagnostic make the out-of-order state visible without any fake
233
+ // success. Discharging a late commit is an explicit operator decision.
234
+ async flagLateCommit(project, { commitSha, journalId, journalSequence, analysedHead }) {
235
+ const runtime = this.store.readRuntime(project.projectId);
236
+ const known = (runtime.lateCommits || []).some(entry => entry.commitSha === commitSha)
237
+ || this.store.listRuns(project.projectId).some(run => run.commitSha === commitSha);
238
+ if (known) return;
239
+ await this.store.updateRuntime(project.projectId, draft => {
240
+ draft.lateCommits = draft.lateCommits || [];
241
+ if (!draft.lateCommits.some(entry => entry.commitSha === commitSha)) {
242
+ draft.lateCommits.push({ commitSha, firstSeenAt: new Date().toISOString(), journalId, journalSequence, analysedHeadAtCapture: analysedHead });
243
+ }
244
+ });
245
+ this.store.addEvent({ type: 'knowledge.journal', projectId: project.projectId, commitSha, summary: `捕获到晚到的旧提交 ${commitSha.slice(0, 12)},已登记为需受控处理,未自动分析` });
246
+ await this.diagnostics.warn('reconcile.late_commit_flagged', '晚到的旧提交已登记为待受控处理:不自动分析、不推进分析头、不修改知识树。', { projectId: project.projectId, commitSha, phase: 'consuming', context: { journalId, journalSequence, analysedHead } });
247
+ }
203
248
  pump() {
204
249
  if (this.closed || !this.executionEnabled) return;
205
250
  const queued = this.store.state.runs.filter(r => r.state === 'queued' && (!this.allowedProjects || this.allowedProjects.has(r.projectId))).sort((a, b) => a.sequence - b.sequence);
@@ -1,140 +1,140 @@
1
- const path = require('path');
2
-
3
- const PERMISSION_MODES = new Set(['plan', 'default', 'acceptEdits', 'auto', 'bypassPermissions']);
4
- const PROMPT_TEMPLATE_VERSION = 2;
5
-
6
- const DEFAULT_COMMIT_PROMPT_TEMPLATE = `你正在根据一个 Git Commit 的冻结证据维护项目知识库。
7
-
8
- 用户需求:
9
- {{userRequirement}}
10
-
11
- Commit 信息:
12
- {{commitMetadata}}
13
-
14
- Commit 实际变更文件:
15
- {{actualChanges}}
16
-
17
- Commit 实际 Patch:
18
- {{actualPatch}}
19
-
20
- 现有相关知识:
21
- {{existingKnowledge}}
22
-
23
- 请完成以下判断,并只输出符合 staging manifest 合同的知识变更:
24
- 1. 比较用户需求与实际实现是否一致;没有可靠需求时不得猜测业务目的。
25
- 2. 只记录 Commit、Patch 和现有知识能够证明的事实。
26
- 3. 明确需要新增、更新或删除哪些知识;删除必须有实际变更证据。
27
- 4. 不得修改源码、最终知识目录、其他项目或派生索引。
28
- 5. Patch 使用 chunk evidence 时,必须从只读 manifest 按序读取所需 chunk;不得从源码工作树补读或猜测。`;
29
-
30
- const READ_TOOLS = ['Read'];
31
- const WRITE_TOOLS = ['Edit', 'Write', 'MultiEdit'];
32
-
33
- function normalizePermissionMode(value) {
34
- return PERMISSION_MODES.has(value) ? value : 'default';
35
- }
36
-
37
- function normalizeAutomationConfig(input) {
38
- const source = input && typeof input === 'object' ? input : {};
39
- const explicit = typeof source.commitPromptTemplate === 'string' && source.commitPromptTemplate.trim();
40
- const legacy = typeof source.hookPromptTemplate === 'string' && source.hookPromptTemplate.trim();
41
- return {
42
- enabled: source.enabled !== false,
43
- commitPromptTemplate: explicit || legacy || DEFAULT_COMMIT_PROMPT_TEMPLATE,
44
- promptTemplateVersion: PROMPT_TEMPLATE_VERSION,
45
- legacyPromptOverride: !explicit && Boolean(legacy),
46
- };
47
- }
48
-
49
- function normalizeClaudeWorkbenchConfig(input) {
50
- const source = input && typeof input === 'object' ? input : {};
51
- return { permissionMode: normalizePermissionMode(source.permissionMode) };
52
- }
53
-
54
- function renderTemplate(template, vars) {
55
- const source = typeof template === 'string' && template.trim() ? template : DEFAULT_COMMIT_PROMPT_TEMPLATE;
56
- const safeVars = vars && typeof vars === 'object' ? vars : {};
57
- return source.replace(/\{\{\s*([A-Za-z][A-Za-z0-9_]*)\s*\}\}/g, (match, name) => {
58
- if (!Object.prototype.hasOwnProperty.call(safeVars, name)) return match;
59
- const value = safeVars[name];
60
- return value == null ? '' : String(value);
61
- });
62
- }
63
-
64
- function normalizePathForCompare(value) {
65
- if (!value || typeof value !== 'string') return '';
66
- const normalized = path.resolve(value).replace(/[\\/]+$/, '');
67
- return process.platform === 'win32' ? normalized.toLowerCase() : normalized;
68
- }
69
-
70
- function pathsReferToSameLocation(leftValue, rightValue) {
71
- const left = normalizePathForCompare(leftValue);
72
- const right = normalizePathForCompare(rightValue);
73
- return Boolean(left && right && left === right);
74
- }
75
-
76
- function isInsidePath(root, target) {
77
- if (!root || !target) return false;
78
- const rootAbs = path.resolve(root);
79
- const targetAbs = path.resolve(rootAbs, target);
80
- const relative = path.relative(rootAbs, targetAbs);
81
- return relative === '' || Boolean(relative && !relative.startsWith('..') && !path.isAbsolute(relative));
82
- }
83
-
84
- function extractToolPaths(toolName, input) {
85
- if (!input || typeof input !== 'object') return [];
86
- const candidates = [];
87
- for (const key of ['file_path', 'path', 'notebook_path']) {
88
- if (typeof input[key] === 'string') candidates.push(input[key]);
89
- }
90
- if (toolName === 'MultiEdit' && typeof input.file_path === 'string') candidates.push(input.file_path);
91
- return [...new Set(candidates)];
92
- }
93
-
94
- function buildAutomationToolPolicy(options = {}) {
95
- const stagingPath = options.stagingPath || options.kbPath || '';
96
- const evidenceRoot = options.evidenceRoot || '';
97
- return {
98
- kind: 'knowledge-staging',
99
- stagingPath,
100
- evidenceRoot,
101
- readRoots: [evidenceRoot, stagingPath].filter(Boolean),
102
- writeRoot: stagingPath,
103
- allowedTools: [...READ_TOOLS, ...WRITE_TOOLS],
104
- canWriteKb: false,
105
- canWriteStaging: true,
106
- allowReadOnlyBash: false,
107
- };
108
- }
109
-
110
- function evaluateAutomationToolUse(policy, toolName, input) {
111
- if (!policy || policy.kind !== 'knowledge-staging') return { behavior: 'ask', reason: 'no staging policy' };
112
- if (!policy.allowedTools.includes(toolName)) return { behavior: 'deny', reason: `tool is not allowed: ${toolName}` };
113
- const paths = extractToolPaths(toolName, input);
114
- if (!paths.length) return { behavior: 'deny', reason: `${toolName} has no explicit file path` };
115
- for (const filePath of paths) {
116
- if (toolName === 'Read') {
117
- if (!(policy.readRoots || []).some(root => isInsidePath(root, filePath))) {
118
- return { behavior: 'deny', reason: `path outside read-only evidence/output roots: ${filePath}` };
119
- }
120
- } else if (!isInsidePath(policy.writeRoot || policy.stagingPath, filePath)) {
121
- return { behavior: 'deny', reason: `path outside writable run output: ${filePath}` };
122
- }
123
- }
124
- return { behavior: 'allow', reason: toolName === 'Read' ? 'path is inside an isolated read root' : 'path is inside the isolated writable output root' };
125
- }
126
-
127
- module.exports = {
128
- PERMISSION_MODES,
129
- PROMPT_TEMPLATE_VERSION,
130
- DEFAULT_COMMIT_PROMPT_TEMPLATE,
131
- normalizePermissionMode,
132
- normalizeAutomationConfig,
133
- normalizeClaudeWorkbenchConfig,
134
- renderTemplate,
135
- normalizePathForCompare,
136
- pathsReferToSameLocation,
137
- isInsidePath,
138
- buildAutomationToolPolicy,
139
- evaluateAutomationToolUse,
140
- };
1
+ const path = require('path');
2
+
3
+ const PERMISSION_MODES = new Set(['plan', 'default', 'acceptEdits', 'auto', 'bypassPermissions']);
4
+ const PROMPT_TEMPLATE_VERSION = 2;
5
+
6
+ const DEFAULT_COMMIT_PROMPT_TEMPLATE = `你正在根据一个 Git Commit 的冻结证据维护项目知识库。
7
+
8
+ 用户需求:
9
+ {{userRequirement}}
10
+
11
+ Commit 信息:
12
+ {{commitMetadata}}
13
+
14
+ Commit 实际变更文件:
15
+ {{actualChanges}}
16
+
17
+ Commit 实际 Patch:
18
+ {{actualPatch}}
19
+
20
+ 现有相关知识:
21
+ {{existingKnowledge}}
22
+
23
+ 请完成以下判断,并只输出符合 staging manifest 合同的知识变更:
24
+ 1. 比较用户需求与实际实现是否一致;没有可靠需求时不得猜测业务目的。
25
+ 2. 只记录 Commit、Patch 和现有知识能够证明的事实。
26
+ 3. 明确需要新增、更新或删除哪些知识;删除必须有实际变更证据。
27
+ 4. 不得修改源码、最终知识目录、其他项目或派生索引。
28
+ 5. Patch 使用 chunk evidence 时,必须从只读 manifest 按序读取所需 chunk;不得从源码工作树补读或猜测。`;
29
+
30
+ const READ_TOOLS = ['Read'];
31
+ const WRITE_TOOLS = ['Edit', 'Write', 'MultiEdit'];
32
+
33
+ function normalizePermissionMode(value) {
34
+ return PERMISSION_MODES.has(value) ? value : 'default';
35
+ }
36
+
37
+ function normalizeAutomationConfig(input) {
38
+ const source = input && typeof input === 'object' ? input : {};
39
+ const explicit = typeof source.commitPromptTemplate === 'string' && source.commitPromptTemplate.trim();
40
+ const legacy = typeof source.hookPromptTemplate === 'string' && source.hookPromptTemplate.trim();
41
+ return {
42
+ enabled: source.enabled !== false,
43
+ commitPromptTemplate: explicit || legacy || DEFAULT_COMMIT_PROMPT_TEMPLATE,
44
+ promptTemplateVersion: PROMPT_TEMPLATE_VERSION,
45
+ legacyPromptOverride: !explicit && Boolean(legacy),
46
+ };
47
+ }
48
+
49
+ function normalizeClaudeWorkbenchConfig(input) {
50
+ const source = input && typeof input === 'object' ? input : {};
51
+ return { permissionMode: normalizePermissionMode(source.permissionMode) };
52
+ }
53
+
54
+ function renderTemplate(template, vars) {
55
+ const source = typeof template === 'string' && template.trim() ? template : DEFAULT_COMMIT_PROMPT_TEMPLATE;
56
+ const safeVars = vars && typeof vars === 'object' ? vars : {};
57
+ return source.replace(/\{\{\s*([A-Za-z][A-Za-z0-9_]*)\s*\}\}/g, (match, name) => {
58
+ if (!Object.prototype.hasOwnProperty.call(safeVars, name)) return match;
59
+ const value = safeVars[name];
60
+ return value == null ? '' : String(value);
61
+ });
62
+ }
63
+
64
+ function normalizePathForCompare(value) {
65
+ if (!value || typeof value !== 'string') return '';
66
+ const normalized = path.resolve(value).replace(/[\\/]+$/, '');
67
+ return process.platform === 'win32' ? normalized.toLowerCase() : normalized;
68
+ }
69
+
70
+ function pathsReferToSameLocation(leftValue, rightValue) {
71
+ const left = normalizePathForCompare(leftValue);
72
+ const right = normalizePathForCompare(rightValue);
73
+ return Boolean(left && right && left === right);
74
+ }
75
+
76
+ function isInsidePath(root, target) {
77
+ if (!root || !target) return false;
78
+ const rootAbs = path.resolve(root);
79
+ const targetAbs = path.resolve(rootAbs, target);
80
+ const relative = path.relative(rootAbs, targetAbs);
81
+ return relative === '' || Boolean(relative && !relative.startsWith('..') && !path.isAbsolute(relative));
82
+ }
83
+
84
+ function extractToolPaths(toolName, input) {
85
+ if (!input || typeof input !== 'object') return [];
86
+ const candidates = [];
87
+ for (const key of ['file_path', 'path', 'notebook_path']) {
88
+ if (typeof input[key] === 'string') candidates.push(input[key]);
89
+ }
90
+ if (toolName === 'MultiEdit' && typeof input.file_path === 'string') candidates.push(input.file_path);
91
+ return [...new Set(candidates)];
92
+ }
93
+
94
+ function buildAutomationToolPolicy(options = {}) {
95
+ const stagingPath = options.stagingPath || options.kbPath || '';
96
+ const evidenceRoot = options.evidenceRoot || '';
97
+ return {
98
+ kind: 'knowledge-staging',
99
+ stagingPath,
100
+ evidenceRoot,
101
+ readRoots: [evidenceRoot, stagingPath].filter(Boolean),
102
+ writeRoot: stagingPath,
103
+ allowedTools: [...READ_TOOLS, ...WRITE_TOOLS],
104
+ canWriteKb: false,
105
+ canWriteStaging: true,
106
+ allowReadOnlyBash: false,
107
+ };
108
+ }
109
+
110
+ function evaluateAutomationToolUse(policy, toolName, input) {
111
+ if (!policy || policy.kind !== 'knowledge-staging') return { behavior: 'ask', reason: 'no staging policy' };
112
+ if (!policy.allowedTools.includes(toolName)) return { behavior: 'deny', reason: `tool is not allowed: ${toolName}` };
113
+ const paths = extractToolPaths(toolName, input);
114
+ if (!paths.length) return { behavior: 'deny', reason: `${toolName} has no explicit file path` };
115
+ for (const filePath of paths) {
116
+ if (toolName === 'Read') {
117
+ if (!(policy.readRoots || []).some(root => isInsidePath(root, filePath))) {
118
+ return { behavior: 'deny', reason: `path outside read-only evidence/output roots: ${filePath}` };
119
+ }
120
+ } else if (!isInsidePath(policy.writeRoot || policy.stagingPath, filePath)) {
121
+ return { behavior: 'deny', reason: `path outside writable run output: ${filePath}` };
122
+ }
123
+ }
124
+ return { behavior: 'allow', reason: toolName === 'Read' ? 'path is inside an isolated read root' : 'path is inside the isolated writable output root' };
125
+ }
126
+
127
+ module.exports = {
128
+ PERMISSION_MODES,
129
+ PROMPT_TEMPLATE_VERSION,
130
+ DEFAULT_COMMIT_PROMPT_TEMPLATE,
131
+ normalizePermissionMode,
132
+ normalizeAutomationConfig,
133
+ normalizeClaudeWorkbenchConfig,
134
+ renderTemplate,
135
+ normalizePathForCompare,
136
+ pathsReferToSameLocation,
137
+ isInsidePath,
138
+ buildAutomationToolPolicy,
139
+ evaluateAutomationToolUse,
140
+ };