@sanqianx/project-knowledge 5.0.24 → 5.0.25

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 +66 -63
  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
@@ -0,0 +1,82 @@
1
+ 'use strict';
2
+ // Lane-owned child process that hosts the REAL claude-ai-workbench module
3
+ // (0.13.6, the copy the installed product ships) for the P-MEMORY-INJECTION-02
4
+ // lane. It speaks the module's real HTTP contract and is started by the lane
5
+ // probes.
6
+ //
7
+ // The shape of this child is a READ-ONLY SNAPSHOT of
8
+ // _site/_test/helpers/parallel-memory-injection-wb-host.js (P-MEMORY-INJECTION-02
9
+ // lane) which is itself a snapshot of _site/_test/helpers/parallel-workbench-host.js
10
+ // (Workbench provenance lane). No source file is modified or imported: this
11
+ // lane never depends on another lane's unfrozen file. The SHA-256 of every
12
+ // source is recorded in the lane report.
13
+ //
14
+ // Environment (all set by the parent):
15
+ // PK_WB_MODULE_ROOT the claude-ai-workbench package root to host
16
+ // PK_WB_HOST_PORT port to listen on (127.0.0.1)
17
+ // PK_WB_HOST_DATA_DIR isolated workbench data directory
18
+ // PK_WB_HOST_WORKSPACES JSON map of workspaceRef -> absolute directory
19
+ // PK_WB_ENGINE_URL the knowledge engine URL (a recording proxy)
20
+ // PK_WB_PROFILE_SOURCE none | real-readonly
21
+ // PK_WB_BRIDGE_URL optional event-bridge console URL (enables capture)
22
+ // PK_WB_BRIDGE_TOKEN optional event-bridge runtime token (memory only)
23
+ const path = require('node:path');
24
+ const fs = require('node:fs');
25
+
26
+ const moduleRoot = String(process.env.PK_WB_MODULE_ROOT || '').trim();
27
+ const port = Number(process.env.PK_WB_HOST_PORT || 0);
28
+ const dataDir = String(process.env.PK_WB_HOST_DATA_DIR || '').trim();
29
+ const workspaces = JSON.parse(String(process.env.PK_WB_HOST_WORKSPACES || '{}'));
30
+ const engineUrl = String(process.env.PK_WB_ENGINE_URL || '').trim();
31
+ const profileSource = String(process.env.PK_WB_PROFILE_SOURCE || 'none');
32
+ const bridgeUrl = String(process.env.PK_WB_BRIDGE_URL || '').trim();
33
+ const bridgeToken = String(process.env.PK_WB_BRIDGE_TOKEN || '').trim();
34
+
35
+ if (!moduleRoot || !port || !dataDir || !Object.keys(workspaces).length) {
36
+ console.error('parallel-retrieval-followup-r2-wb-host: PK_WB_MODULE_ROOT, PK_WB_HOST_PORT, PK_WB_HOST_DATA_DIR and PK_WB_HOST_WORKSPACES are required');
37
+ process.exit(2);
38
+ }
39
+
40
+ // Same contract as the module's own bin: the runtime resolves its data
41
+ // directory from these.
42
+ process.env.CLAUDE_AI_WORKBENCH_DATA_DIR = dataDir;
43
+ process.env.KB_DATA_DIR = dataDir;
44
+ if (engineUrl) process.env.KB_KNOWLEDGE_ENGINE_URL = engineUrl;
45
+
46
+ const { createWorkbenchServer } = require(path.join(moduleRoot, 'packages', 'server'));
47
+
48
+ function buildOptions() {
49
+ const options = { dataDir, workspaces };
50
+ if (profileSource === 'real-readonly') {
51
+ const shell = require('./parallel-retrieval-followup-r2-shell');
52
+ options.profiles = shell.createReadOnlyProfileStore(moduleRoot, { dataDir });
53
+ }
54
+ if (bridgeUrl && bridgeToken) {
55
+ // The real Workbench capture: the module records the ORIGINAL user input
56
+ // (not the augmented prompt) and flushes it to the Bridge.
57
+ const { ConversationCapture } = require(path.join(moduleRoot, 'packages', 'server', 'lib', 'conversation-capture.js'));
58
+ options.conversationCapture = new ConversationCapture({
59
+ file: path.join(dataDir, 'capture-outbox.v1.json'),
60
+ bridgeUrl,
61
+ token: bridgeToken,
62
+ });
63
+ }
64
+ return options;
65
+ }
66
+
67
+ const app = createWorkbenchServer(buildOptions());
68
+ app.server.listen(port, '127.0.0.1', () => {
69
+ process.stdout.write(`WORKBENCH_HOST_READY http://127.0.0.1:${port} engine=${engineUrl || 'none'} capture=${bridgeUrl ? 'on' : 'off'}\n`);
70
+ });
71
+
72
+ let stopping = false;
73
+ async function shutdown() {
74
+ if (stopping) return;
75
+ stopping = true;
76
+ setTimeout(() => process.exit(1), 10000).unref();
77
+ try { await app.service.destroy(); } catch { process.exitCode = 1; }
78
+ app.server.closeAllConnections?.();
79
+ app.server.close(() => process.exit(process.exitCode || 0));
80
+ }
81
+ process.on('SIGINT', shutdown);
82
+ process.on('SIGTERM', shutdown);
@@ -0,0 +1,279 @@
1
+ 'use strict';
2
+ // Lane-owned helpers for the P-RETRIEVAL-FOLLOWUP-01 batch (RET-007/RET-008).
3
+ //
4
+ // Portability contract: no developer path is hard-coded. The operator's
5
+ // Workbench profile store defaults to the real user home captured BEFORE
6
+ // fixture.isolateProcess() replaces HOME/USERPROFILE, and can be overridden
7
+ // with PK_RETRIEVAL_WORKBENCH_HOME. Secrets (the glm subscription key) are
8
+ // read in memory only: they are never printed, logged or persisted, and no
9
+ // quota/usage endpoint is ever contacted by anything in this lane.
10
+ //
11
+ // Isolation contract: same as the sibling parallel-knowledge-fixture helper —
12
+ // ambient module URLs cleared, live 5757/5790/8787/8790 endpoints refused,
13
+ // every artefact under the external temp root. The shared fixture helper is
14
+ // required read-only; this file only adds lane-specific composition.
15
+ const fs = require('node:fs');
16
+ const os = require('node:os');
17
+ const path = require('node:path');
18
+ const http = require('node:http');
19
+ const { spawn, execFileSync } = require('node:child_process');
20
+
21
+ const fixture = require('./parallel-knowledge-fixture');
22
+
23
+ // Captured before isolateProcess() rewrites the environment.
24
+ const REAL_HOME = process.env.PK_RETRIEVAL_WORKBENCH_HOME
25
+ || process.env.USERPROFILE
26
+ || process.env.HOME
27
+ || os.homedir();
28
+
29
+ const REPO_ROOT = fixture.REPO_ROOT;
30
+ const LANE_DIR = path.join(REPO_ROOT, 'qa-autopilot', 'artifacts', 'parallel-20261023', 'retrieval-followup');
31
+ const BRIDGE_BIN = path.join(REPO_ROOT, 'node_modules', '@sanqianx', 'ai-coding-event-bridge-console', 'src', 'bin.js');
32
+ const HUB_DIST = path.join(REPO_ROOT, 'node_modules', '@sanqianx', 'vector-hub', 'dist', 'cjs');
33
+ const MODEL_RELATIVE = path.join('Xenova', 'bge-small-zh-v1.5');
34
+
35
+ function workbenchProfileHome() { return path.join(REAL_HOME, '.agent-terminal'); }
36
+
37
+ // Resolve one of the operator's real subscription profiles, in memory only.
38
+ // Shape mirrors the Workbench ProfileStore runtime projection actually used
39
+ // for engine runtime-config: { apiKey, baseUrl, mainModel }.
40
+ //
41
+ // The model list is the operator's instruction order, not a filter: the
42
+ // provider is the authority on which id it accepts, so a model that the local
43
+ // catalog does not list is still attempted and the answer is recorded.
44
+ function loadRuntimeProfile(options = {}) {
45
+ const profileId = options.profileId || 'minimax';
46
+ const models = (options.models && options.models.length ? options.models : [options.model].filter(Boolean));
47
+ const home = workbenchProfileHome();
48
+ const profileFile = path.join(home, 'profiles.v2.json');
49
+ const credentialFile = path.join(home, 'credentials.v1.json');
50
+ const detail = { home, profileFile, credentialFile, profileId, models };
51
+ if (!models.length) return { ok: false, reason: 'no model requested', ...detail };
52
+ try {
53
+ const store = JSON.parse(fs.readFileSync(profileFile, 'utf8'));
54
+ const profiles = Array.isArray(store.profiles) ? store.profiles : [];
55
+ const profile = profiles.find(item => item.id === profileId);
56
+ if (!profile) return { ok: false, reason: `${profileId} profile not found`, ...detail };
57
+ if (profile.enabled === false) return { ok: false, reason: `${profileId} profile is disabled`, ...detail };
58
+ const credentials = JSON.parse(fs.readFileSync(credentialFile, 'utf8'));
59
+ const secret = credentials.credentials && credentials.credentials[profile.credentialRef];
60
+ if (typeof secret !== 'string' || !secret) return { ok: false, reason: `${profileId} credential is not configured`, ...detail };
61
+ if (!profile.baseUrl) return { ok: false, reason: `${profileId} profile has no baseUrl`, ...detail };
62
+ const listedModels = (profile.models && profile.models.list || []).map(entry => entry.id);
63
+ const mainModel = models[0];
64
+ // The secret never leaves memory; callers must not serialise this object.
65
+ return {
66
+ ok: true,
67
+ ...detail,
68
+ listedModels,
69
+ profile: { apiKey: secret, baseUrl: profile.baseUrl, mainModel },
70
+ identity: {
71
+ profileId: profile.id,
72
+ baseUrl: profile.baseUrl,
73
+ protocol: profile.protocol || null,
74
+ mainModel,
75
+ modelListedInProfile: listedModels.includes(mainModel),
76
+ credentialConfigured: true,
77
+ },
78
+ };
79
+ } catch (error) {
80
+ return { ok: false, reason: `workbench profile store unreadable: ${error.message}`, ...detail };
81
+ }
82
+ }
83
+
84
+ // The lane's offline model cache. A missing cache is a real BLOCKED, never a
85
+ // download and never the shipped mock provider.
86
+ function verifyModelCache(cacheDir) {
87
+ const modelDir = path.join(cacheDir, MODEL_RELATIVE);
88
+ const required = ['onnx' + path.sep + 'model.onnx', 'tokenizer.json'];
89
+ const missing = required.filter(relative => !fs.existsSync(path.join(modelDir, ...relative.split(/[\\/]/))));
90
+ return { cacheDir, modelDir, ok: missing.length === 0, missing };
91
+ }
92
+
93
+ // The product's own embedding service wrapped in the interface the real
94
+ // vector hub expects (same contract as the accepted parallel-knowledge-vector
95
+ // probe: batch = passage, single string = query).
96
+ function createProductEmbedder(service) {
97
+ const state = { calls: 0, dimensions: [], nonZeroVectors: 0 };
98
+ return {
99
+ kind: 'product-local-embedding-service',
100
+ model: service.modelId,
101
+ modelId: service.modelId,
102
+ maxTokens: 500,
103
+ state,
104
+ async createEmbeddings(inputs) {
105
+ const isBatch = Array.isArray(inputs);
106
+ const texts = isBatch ? inputs : [inputs];
107
+ const output = [];
108
+ for (const text of texts) {
109
+ const vector = isBatch ? await service.embedPassage(text) : await service.embedQuery(text);
110
+ state.calls += 1;
111
+ state.dimensions.push(vector.length);
112
+ if (vector.some(value => value !== 0)) state.nonZeroVectors += 1;
113
+ output.push(vector);
114
+ }
115
+ return { status: 'success', output };
116
+ },
117
+ };
118
+ }
119
+
120
+ // A real vectra index on disk: the stored vectors must be real, of the
121
+ // expected dimension and not all zero.
122
+ function inspectStoredVectors(projectDir, expectedDimensions) {
123
+ const indexFile = path.join(projectDir, 'index.json');
124
+ if (!fs.existsSync(indexFile)) {
125
+ return { inspected: false, reason: 'no index.json in the project folder', files: fs.existsSync(projectDir) ? fs.readdirSync(projectDir) : [] };
126
+ }
127
+ const raw = fs.readFileSync(indexFile, 'utf8');
128
+ let parsed = null;
129
+ try { parsed = JSON.parse(raw); } catch { parsed = null; }
130
+ if (!parsed || !Array.isArray(parsed.items)) return { inspected: false, reason: 'index.json is not a readable JSON index', bytes: raw.length };
131
+ const vectors = parsed.items.map(item => item && item.vector).filter(Array.isArray);
132
+ const dimensions = [...new Set(vectors.map(vector => vector.length))];
133
+ return {
134
+ inspected: true,
135
+ bytes: raw.length,
136
+ itemCount: parsed.items.length,
137
+ vectorCount: vectors.length,
138
+ dimensions,
139
+ expectedDimensions,
140
+ dimensionsMatch: dimensions.length === 1 && dimensions[0] === expectedDimensions,
141
+ allVectorsNonZero: vectors.length > 0 && vectors.every(vector => vector.some(value => value !== 0)),
142
+ };
143
+ }
144
+
145
+ async function httpJson(url, options = {}) {
146
+ const response = await fetch(url, { signal: AbortSignal.timeout(options.timeoutMs || 8000), ...options });
147
+ const body = await response.json().catch(() => null);
148
+ return { status: response.status, ok: response.ok, body };
149
+ }
150
+
151
+ // The real event-bridge console as its own child process on an isolated port
152
+ // and home — the production topology (hooks, console service and consumers
153
+ // are separate processes over HTTP).
154
+ async function spawnBridgeConsole({ home, port }) {
155
+ fs.mkdirSync(home, { recursive: true });
156
+ const child = spawn(process.execPath, [BRIDGE_BIN, 'serve', '--port', String(port), '--host', '127.0.0.1', '--home', home], {
157
+ env: fixture.sanitizedEnv({ BRIDGE_CONSOLE_PICK_FOLDER: '0', AI_CODING_EVENT_BRIDGE_HOME: home }),
158
+ windowsHide: true,
159
+ stdio: ['ignore', 'pipe', 'pipe'],
160
+ });
161
+ const output = { stdout: '', stderr: '' };
162
+ child.stdout.on('data', chunk => { output.stdout += chunk; });
163
+ child.stderr.on('data', chunk => { output.stderr += chunk; });
164
+ const url = `http://127.0.0.1:${port}`;
165
+ const deadline = Date.now() + 20000;
166
+ let lastError = null;
167
+ while (Date.now() < deadline) {
168
+ try {
169
+ const health = await httpJson(`${url}/api/health`, { timeoutMs: 2000 });
170
+ if (health.ok) return { child, url, home, output, stop: kill(child) };
171
+ lastError = new Error(`health HTTP ${health.status}`);
172
+ } catch (error) { lastError = error; }
173
+ if (child.exitCode !== null) throw new Error(`bridge console exited early (${child.exitCode}): ${output.stderr.slice(0, 400)}`);
174
+ await new Promise(resolve => setTimeout(resolve, 200));
175
+ }
176
+ kill(child)();
177
+ throw new Error(`bridge console did not become healthy: ${lastError && lastError.message}`);
178
+ }
179
+
180
+ function kill(child) {
181
+ return () => new Promise(resolve => {
182
+ if (child.exitCode !== null) return resolve();
183
+ child.once('close', () => resolve());
184
+ child.kill();
185
+ setTimeout(() => { if (child.exitCode === null) child.kill('SIGKILL'); resolve(); }, 3000).unref();
186
+ });
187
+ }
188
+
189
+ // The real pinned vector-hub package served over its real HTTP layer. The
190
+ // product's LocalEmbeddingService is attached through the package's supported
191
+ // hub.setEmbeddings API (the accepted probe pattern); the shell-managed
192
+ // runtime-config credential path is not applicable to the offline local model
193
+ // and is documented as the lane's injection boundary.
194
+ async function startVectorHttpServer({ root, port, embedder, hubDist = HUB_DIST }) {
195
+ const { HubManager } = require(path.join(hubDist, 'server', 'manager.js'));
196
+ const { createServer } = require(path.join(hubDist, 'server', 'server.js'));
197
+ fs.mkdirSync(root, { recursive: true });
198
+ process.env.VECTOR_HUB_DISABLE_PICKER = '1';
199
+ const manager = await HubManager.load({ rootPath: root, configPath: path.join(root, 'vector-config.json'), managed: true });
200
+ manager.hub.setEmbeddings(embedder);
201
+ const server = http.createServer(createServer(manager));
202
+ await new Promise(resolve => server.listen(port, '127.0.0.1', resolve));
203
+ return {
204
+ manager,
205
+ server,
206
+ url: `http://127.0.0.1:${server.address().port}`,
207
+ root,
208
+ async stop() {
209
+ server.closeAllConnections();
210
+ await new Promise(resolve => server.close(resolve));
211
+ await manager.dispose?.();
212
+ },
213
+ };
214
+ }
215
+
216
+ // An isolated sink for the hook trigger's best-effort site notification. The
217
+ // trigger falls back to KB_SITE_PORT (default 5757 — the developer's LIVE
218
+ // site) when no runtime endpoint file exists, so every Git child in this lane
219
+ // gets KB_SITE_PORT pointed here. Nothing may ever reach the real 5757.
220
+ async function startNotificationSink() {
221
+ const hits = [];
222
+ const server = http.createServer((req, res) => {
223
+ let body = '';
224
+ req.on('data', chunk => { body += chunk; });
225
+ req.on('end', () => {
226
+ let parsed = null;
227
+ try { parsed = JSON.parse(body); } catch { parsed = null; }
228
+ hits.push({ method: req.method, url: req.url, body: parsed });
229
+ res.writeHead(404, { 'Content-Type': 'application/json' });
230
+ res.end(JSON.stringify({ error: 'notification sink' }));
231
+ });
232
+ });
233
+ await new Promise(resolve => server.listen(0, '127.0.0.1', resolve));
234
+ return { server, hits, port: server.address().port, stop: () => new Promise(resolve => { server.closeAllConnections(); server.close(resolve); }) };
235
+ }
236
+
237
+ // Git with an explicit environment (the hook inherits it: KB_SITE_PORT sinks
238
+ // the notification, isolated vars keep the trigger away from live surfaces).
239
+ function gitIn(repoPath, args, env = {}) {
240
+ return execFileSync('git', args, { cwd: repoPath, windowsHide: true, encoding: 'utf8', env: fixture.sanitizedEnv(env) }).trim();
241
+ }
242
+
243
+ async function waitFor(predicate, timeoutMs, label, intervalMs = 500) {
244
+ const deadline = Date.now() + timeoutMs;
245
+ let last = null;
246
+ while (Date.now() < deadline) {
247
+ last = await predicate();
248
+ if (last) return last;
249
+ await new Promise(resolve => setTimeout(resolve, intervalMs));
250
+ }
251
+ throw new Error(`Timed out after ${timeoutMs}ms waiting for ${label}`);
252
+ }
253
+
254
+ function writeEvidence(name, value) {
255
+ const file = path.join(LANE_DIR, 'evidence', name);
256
+ fs.mkdirSync(path.dirname(file), { recursive: true });
257
+ fs.writeFileSync(file, JSON.stringify(value, null, 2), 'utf8');
258
+ return { file, sha256: fixture.sha256File(file) };
259
+ }
260
+
261
+ module.exports = {
262
+ REAL_HOME,
263
+ REPO_ROOT,
264
+ LANE_DIR,
265
+ HUB_DIST,
266
+ workbenchProfileHome,
267
+ loadRuntimeProfile,
268
+ verifyModelCache,
269
+ createProductEmbedder,
270
+ inspectStoredVectors,
271
+ httpJson,
272
+ spawnBridgeConsole,
273
+ startVectorHttpServer,
274
+ startNotificationSink,
275
+ gitIn,
276
+ waitFor,
277
+ writeEvidence,
278
+ ...fixture,
279
+ };