@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.
- package/.agents/plugins/marketplace.json +20 -20
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +1361 -1353
- package/LICENSE +201 -201
- package/NOTICE +5 -5
- package/README.md +349 -349
- package/_modules/knowledge-engine/package.json +1 -1
- package/_modules/knowledge-engine/src/coordinator.js +48 -3
- package/_modules/knowledge-engine/src/runtime/automation-config.js +140 -140
- package/_modules/knowledge-engine/src/runtime/commit-conversation-binder.js +238 -238
- package/_modules/knowledge-engine/src/runtime/commit-processing-ledger.js +26 -26
- package/_modules/knowledge-engine/src/runtime/commit-prompt.js +193 -193
- package/_modules/knowledge-engine/src/runtime/commit-reconciler.js +394 -394
- package/_modules/knowledge-engine/src/runtime/contracts.js +282 -282
- package/_modules/knowledge-engine/src/runtime/conversation-store.js +389 -389
- package/_modules/knowledge-engine/src/runtime/evidence-bundle.js +228 -228
- package/_modules/knowledge-engine/src/runtime/git-runner.js +62 -62
- package/_modules/knowledge-engine/src/runtime/knowledge-promotion.js +505 -505
- package/_modules/knowledge-engine/src/runtime/knowledge-retrieval-service.js +400 -400
- package/_modules/knowledge-engine/src/runtime/markdown-knowledge-indexer.js +171 -171
- package/_modules/knowledge-engine/src/runtime/scanner.js +298 -298
- package/_modules/knowledge-engine/ui/app.js +23 -2
- package/_site/README.md +30 -30
- package/_site/_test/agent-capture-mcp-ui-test.js +68 -68
- package/_site/_test/agent-capture-ui-test.js +101 -101
- package/_site/_test/ai-profile-resolver-test.js +137 -137
- package/_site/_test/ai-profile-test.js +75 -75
- package/_site/_test/ai-vendor-presets-test.js +91 -91
- package/_site/_test/automatic-context-test.js +70 -70
- package/_site/_test/automation-queue-test.js +14 -14
- package/_site/_test/automation-ui-test.js +40 -40
- package/_site/_test/background-task-registry-test.js +43 -43
- package/_site/_test/baseline-schema-test.js +91 -91
- package/_site/_test/bin-cli-test.js +230 -230
- package/_site/_test/bridge-adapter-test.js +95 -95
- package/_site/_test/bridge-consumer-service-test.js +310 -310
- package/_site/_test/candidate-bin-content-test.js +35 -35
- package/_site/_test/candidate-product-assets-test.js +13 -13
- package/_site/_test/candidate-release-contract-test.js +14 -14
- package/_site/_test/capture-hook-dedup-test.js +158 -158
- package/_site/_test/cdp-browser-failure-test.js +103 -103
- package/_site/_test/chat-claudecodeui-match-test.js +92 -92
- package/_site/_test/claude-executable-discovery-test.js +90 -90
- package/_site/_test/claude-session-lifecycle-sweep-test.js +252 -252
- package/_site/_test/claude-workbench-test.js +174 -174
- package/_site/_test/cli-instance-management-test.js +62 -62
- package/_site/_test/client-capture-restart-e2e-test.js +189 -189
- package/_site/_test/codex-conversation-projection-test.js +60 -60
- package/_site/_test/codex-marketplace-scoped-path-test.js +186 -186
- package/_site/_test/codex-notify-capture-e2e-test.js +101 -101
- package/_site/_test/codex-notify-fanout-test.js +141 -134
- package/_site/_test/codex-notify-upgrade-test.js +253 -253
- package/_site/_test/commit-boundary-freeze-test.js +147 -147
- package/_site/_test/commit-conversation-binding-test.js +99 -99
- package/_site/_test/commit-evidence-test.js +110 -110
- package/_site/_test/configuration-generation-test.js +22 -22
- package/_site/_test/context-pack-test.js +200 -200
- package/_site/_test/conversation-api-test.js +119 -119
- package/_site/_test/conversation-origin-test.js +15 -15
- package/_site/_test/conversation-store-test.js +138 -138
- package/_site/_test/cross-repo-isolation-e2e-test.js +187 -187
- package/_site/_test/desktop-browser-compat-test.js +28 -28
- package/_site/_test/desktop-hook-runtime-regression-test.js +204 -204
- package/_site/_test/embedding-config-test.js +32 -32
- package/_site/_test/explicit-commit-processor-test.js +37 -37
- package/_site/_test/fixtures/fake-browser-exit.js +10 -10
- package/_site/_test/fixtures/fake-browser-hang.js +10 -10
- package/_site/_test/fixtures/integration-busy-worker.cjs +6 -6
- package/_site/_test/fixtures/make-git-repos.js +92 -92
- package/_site/_test/fixtures/retrieval-gold-queries.json +32 -32
- package/_site/_test/folder-picker-output-test.js +19 -19
- package/_site/_test/fresh-hook-reimport-test.js +53 -53
- package/_site/_test/fresh-product-data-test.js +56 -56
- package/_site/_test/full-integration-e2e-test.js +167 -167
- package/_site/_test/git-path-compatibility-test.js +80 -80
- package/_site/_test/git-validation-test.js +81 -81
- package/_site/_test/glm-ui-refresh-review-test.js +313 -404
- package/_site/_test/harness-isolation-test.js +138 -0
- package/_site/_test/helpers/cdp-browser.js +383 -0
- package/_site/_test/helpers/cdp-network-capture.js +66 -0
- package/_site/_test/helpers/find-chrome.js +34 -0
- package/_site/_test/helpers/free-port.js +8 -0
- package/_site/_test/helpers/logging-ui-fixture.js +131 -0
- package/_site/_test/helpers/module-fixture.js +282 -0
- package/_site/_test/helpers/parallel-engine-advanced-engine-child.js +45 -0
- package/_site/_test/helpers/parallel-engine-advanced-fault-writer.js +171 -0
- package/_site/_test/helpers/parallel-engine-advanced-harness.js +245 -0
- package/_site/_test/helpers/parallel-engine-advanced-standin-analyzer.js +80 -0
- package/_site/_test/helpers/parallel-engine-advanced-ui-host.js +177 -0
- package/_site/_test/helpers/parallel-engine-final-harness.js +314 -0
- package/_site/_test/helpers/parallel-engine-final-standin-analyzer.js +159 -0
- package/_site/_test/helpers/parallel-knowledge-fixture.js +255 -0
- package/_site/_test/helpers/parallel-logging-acceptance-fixture.js +111 -0
- package/_site/_test/helpers/parallel-logging-acceptance-proxy.js +106 -0
- package/_site/_test/helpers/parallel-logging-fix-r2-proxy.js +205 -0
- package/_site/_test/helpers/parallel-logging-integration-5025-env.js +432 -0
- package/_site/_test/helpers/parallel-memory-analyzer.js +81 -0
- package/_site/_test/helpers/parallel-memory-event-bridge.js +128 -0
- package/_site/_test/helpers/parallel-memory-shell.js +470 -0
- package/_site/_test/helpers/parallel-nav-isolation-env.js +389 -0
- package/_site/_test/helpers/parallel-nav-module-ui.js +186 -0
- package/_site/_test/helpers/parallel-nav-proxy.js +148 -0
- package/_site/_test/helpers/parallel-nav-shell.js +361 -0
- package/_site/_test/helpers/parallel-qa-engine-endpoint-guard.js +206 -0
- package/_site/_test/helpers/parallel-qa-engine-endpoint-isolate.js +257 -0
- package/_site/_test/helpers/parallel-retrieval-followup-corpus.js +293 -0
- package/_site/_test/helpers/parallel-retrieval-followup-next-session.js +70 -0
- package/_site/_test/helpers/parallel-retrieval-followup-r2-shell.js +737 -0
- package/_site/_test/helpers/parallel-retrieval-followup-r2-wb-host.js +82 -0
- package/_site/_test/helpers/parallel-retrieval-followup-shell.js +279 -0
- package/_site/_test/helpers/parallel-workbench-fixture.js +371 -0
- package/_site/_test/helpers/parallel-workbench-host.js +80 -0
- package/_site/_test/helpers/parallel-workbench-integration-5025-fixture.js +408 -0
- package/_site/_test/helpers/parallel-workbench-integration-5025-harness.js +593 -0
- package/_site/_test/helpers/parallel-workbench-integration-5025-host.js +70 -0
- package/_site/_test/helpers/parallel-workbench-integration-5025-launcher.js +240 -0
- package/_site/_test/helpers/parallel-workbench-integration-5025-runtime-harness.js +630 -0
- package/_site/_test/helpers/parallel-workbench-source-map.js +196 -0
- package/_site/_test/helpers/spawn-server.js +106 -0
- package/_site/_test/helpers/version-visibility-fixture.js +251 -0
- package/_site/_test/hook-runtime-endpoint-test.js +88 -88
- package/_site/_test/hook-status-repair-api-test.js +152 -152
- package/_site/_test/hook-trigger-test.js +85 -85
- package/_site/_test/hook-worktree-test.js +42 -42
- package/_site/_test/import-preflight-api-test.js +234 -234
- package/_site/_test/index-builder-test.js +41 -41
- package/_site/_test/index-error-display-contract-test.js +10 -10
- package/_site/_test/index-writer-concurrency-test.js +135 -135
- package/_site/_test/integration-adapters-test.js +262 -262
- package/_site/_test/integration-auto-repair-test.js +113 -113
- package/_site/_test/integration-capture-setup-test.js +118 -118
- package/_site/_test/integration-intent-test.js +81 -81
- package/_site/_test/integration-runtime-binding-a2-test.js +566 -566
- package/_site/_test/integration-runtime-binding-a3-test.js +227 -227
- package/_site/_test/integration-runtime-binding-test.js +473 -473
- package/_site/_test/integration-status-scan-test.js +29 -29
- package/_site/_test/integration-surface-coverage-test.js +164 -164
- package/_site/_test/kb-framework-test.js +57 -57
- package/_site/_test/kbpath-follow-test.js +63 -63
- package/_site/_test/knowledge-db-test.js +144 -144
- package/_site/_test/knowledge-engine-client-test.js +120 -109
- package/_site/_test/knowledge-language-control-test.js +170 -170
- package/_site/_test/knowledge-maintenance-test.js +40 -40
- package/_site/_test/knowledge-promotion-recovery-test.js +260 -260
- package/_site/_test/knowledge-query-test.js +54 -54
- package/_site/_test/knowledge-retrieval-service-test.js +77 -77
- package/_site/_test/knowledge-scopes-test.js +37 -37
- package/_site/_test/knowledge-storage-location-test.js +28 -28
- package/_site/_test/knowledge-storage-startup-test.js +52 -52
- package/_site/_test/knowledge-store-logs-supervision-test.js +89 -89
- package/_site/_test/launcher-readiness-test.js +80 -80
- package/_site/_test/legacy-claude-session-alias-test.js +106 -106
- package/_site/_test/legacy-routes-removed-test.js +47 -47
- package/_site/_test/legacy-workbench-exclusion-test.js +92 -92
- package/_site/_test/live-gateway-test.js +48 -48
- package/_site/_test/local-marketplace-test.js +16 -16
- package/_site/_test/log-redaction-test.js +58 -58
- package/_site/_test/logging-api-test.js +89 -89
- package/_site/_test/logging-sse-no-gap-test.js +88 -88
- package/_site/_test/logging-ui-test.js +107 -107
- package/_site/_test/markdown-delta-overlay-test.js +85 -85
- package/_site/_test/markdown-maintenance-api-test.js +75 -75
- package/_site/_test/markdown-maintenance-test.js +11 -11
- package/_site/_test/mcp-server-test.js +149 -149
- package/_site/_test/model-context-windows-test.js +89 -89
- package/_site/_test/module-agent-start-proxy-test.js +65 -65
- package/_site/_test/module-artifact-integrity-test.js +27 -27
- package/_site/_test/module-boundary-test.js +30 -30
- package/_site/_test/module-bridge-eventbridge-test.js +202 -202
- package/_site/_test/module-dynamic-port-test.js +118 -118
- package/_site/_test/module-index-proxy-test.js +33 -33
- package/_site/_test/module-model-configuration-test.js +44 -44
- package/_site/_test/module-process-lifecycle-test.js +35 -35
- package/_site/_test/module-stream-proxy-test.js +34 -34
- package/_site/_test/module-terminal-restart-test.js +63 -63
- package/_site/_test/module-wiring-unbind-race-test.js +59 -59
- package/_site/_test/native-context-integrations-test.js +86 -86
- package/_site/_test/non-release-ci-test.js +34 -34
- package/_site/_test/offline-boundary-isolation-test.js +32 -32
- package/_site/_test/orphaned-claim-recovery-test.js +80 -80
- package/_site/_test/package-boundary-test.js +43 -43
- package/_site/_test/package-startup-test.js +56 -56
- package/_site/_test/packaged-ui-smoke-test.js +88 -88
- package/_site/_test/parallel-ci-r9-posix-socket-budget-test.js +156 -0
- package/_site/_test/parallel-engine-advanced-eng005-test.js +136 -0
- package/_site/_test/parallel-engine-advanced-eng006-test.js +171 -0
- package/_site/_test/parallel-engine-advanced-eng007-reconcile-test.js +231 -0
- package/_site/_test/parallel-engine-advanced-eng009-test.js +208 -0
- package/_site/_test/parallel-engine-advanced-eng010-test.js +213 -0
- package/_site/_test/parallel-engine-advanced-eng011-ui-probe.js +459 -0
- package/_site/_test/parallel-engine-final-eng002-test.js +255 -0
- package/_site/_test/parallel-engine-final-eng007-test.js +269 -0
- package/_site/_test/parallel-engine-final-eng011-test.js +197 -0
- package/_site/_test/parallel-engine-final-eng012-test.js +354 -0
- package/_site/_test/parallel-knowledge-client-error-code-test.js +184 -0
- package/_site/_test/parallel-knowledge-engine-test.js +353 -0
- package/_site/_test/parallel-knowledge-retrieval-test.js +292 -0
- package/_site/_test/parallel-knowledge-vector-test.js +168 -0
- package/_site/_test/parallel-linux-ci-r7-log007-day-test.js +110 -0
- package/_site/_test/parallel-logging-acceptance-log003-test.js +224 -0
- package/_site/_test/parallel-logging-acceptance-log004-test.js +231 -0
- package/_site/_test/parallel-logging-acceptance-log005-test.js +208 -0
- package/_site/_test/parallel-logging-acceptance-log006-test.js +214 -0
- package/_site/_test/parallel-logging-acceptance-log007-test.js +223 -0
- package/_site/_test/parallel-logging-acceptance-log008-test.js +180 -0
- package/_site/_test/parallel-logging-fix-r2-crash-probe.js +271 -0
- package/_site/_test/parallel-logging-fix-r2-gap-test.js +294 -0
- package/_site/_test/parallel-logging-fix-r2-normalhook-test.js +330 -0
- package/_site/_test/parallel-logging-integration-5025-portability-test.js +554 -0
- package/_site/_test/parallel-memory-candidate-test.js +301 -0
- package/_site/_test/parallel-memory-manual-test.js +197 -0
- package/_site/_test/parallel-memory-scope-test.js +228 -0
- package/_site/_test/parallel-memory-source-test.js +227 -0
- package/_site/_test/parallel-memory-sync-test.js +238 -0
- package/_site/_test/parallel-memory-view-r8-reload-gate-test.js +123 -0
- package/_site/_test/parallel-nav-failure-test.js +119 -0
- package/_site/_test/parallel-nav-isolation-test.js +308 -0
- package/_site/_test/parallel-nav-isolation-vector-path-test.js +90 -0
- package/_site/_test/parallel-nav-offline-test.js +272 -0
- package/_site/_test/parallel-nav-operability-test.js +257 -0
- package/_site/_test/parallel-nav-switch-test.js +247 -0
- package/_site/_test/parallel-nav-theme-test.js +130 -0
- package/_site/_test/parallel-nav-viewport-test.js +310 -0
- package/_site/_test/parallel-qa-engine-endpoint-guard-test.js +273 -0
- package/_site/_test/parallel-retrieval-followup-citation-test.js +219 -0
- package/_site/_test/parallel-retrieval-followup-corpus-test.js +287 -0
- package/_site/_test/parallel-workbench-independent-host.js +262 -0
- package/_site/_test/parallel-workbench-integration-5025-abort-probe.js +340 -0
- package/_site/_test/parallel-workbench-integration-5025-drafts-probe.js +588 -0
- package/_site/_test/parallel-workbench-integration-5025-env-check.js +317 -0
- package/_site/_test/parallel-workbench-integration-5025-model-probe.js +342 -0
- package/_site/_test/parallel-workbench-integration-5025-ordering-probe.js +326 -0
- package/_site/_test/parallel-workbench-model-probe.js +336 -0
- package/_site/_test/parallel-workbench-offline-test.js +169 -0
- package/_site/_test/parallel-workbench-provenance-trace.js +134 -0
- package/_site/_test/parallel-workbench-source-match.js +206 -0
- package/_site/_test/parallel-workbench-standalone-turn.js +349 -0
- package/_site/_test/path-consistency-test.js +151 -151
- package/_site/_test/pending-sweep-test.js +9 -9
- package/_site/_test/post-commit-automation-test.js +87 -87
- package/_site/_test/pr-consumer-contract-test.js +55 -55
- package/_site/_test/product-brand-contract-test.js +25 -25
- package/_site/_test/product-diagnostics-ui-test.js +93 -93
- package/_site/_test/product-empty-state-test.js +148 -0
- package/_site/_test/product-import-ui-test.js +219 -104
- package/_site/_test/product-navigation-test.js +152 -0
- package/_site/_test/product-progress-status-test.js +84 -84
- package/_site/_test/project-delete-recovery-test.js +64 -64
- package/_site/_test/project-domain-create-test.js +91 -0
- package/_site/_test/project-domain-scope-retrieval-test.js +214 -0
- package/_site/_test/project-git-init-confirm-test.js +115 -0
- package/_site/_test/project-goal-editor-test.js +144 -144
- package/_site/_test/project-import-duplicate-alias-test.js +134 -0
- package/_site/_test/project-import-unicode-restart-test.js +140 -0
- package/_site/_test/project-lifecycle-transaction-test.js +106 -106
- package/_site/_test/project-module-partial-recovery-test.js +222 -0
- package/_site/_test/project-remove-running-guard-test.js +79 -79
- package/_site/_test/project-store-test.js +90 -90
- package/_site/_test/project-unbind-late-read-ui-test.js +250 -0
- package/_site/_test/project-unbind-writer-guard-test.js +231 -0
- package/_site/_test/prompt-settings-test.js +115 -115
- package/_site/_test/protected-architecture-gate-test.js +122 -122
- package/_site/_test/refactor-characterization-test.js +36 -36
- package/_site/_test/registry-events-test.js +38 -38
- package/_site/_test/release-version-sync-test.js +115 -115
- package/_site/_test/requirement-binding-test.js +113 -113
- package/_site/_test/requirement-recorder-test.js +173 -173
- package/_site/_test/run-all-tests.js +173 -161
- package/_site/_test/runtime-endpoint-test.js +64 -64
- package/_site/_test/scanner-test.js +83 -83
- package/_site/_test/server-security-test.js +96 -96
- package/_site/_test/sessions-stream-test.js +93 -93
- package/_site/_test/shared-contracts-test.js +58 -58
- package/_site/_test/shared-scope-root-binding-test.js +74 -67
- package/_site/_test/simple-import-test.js +98 -98
- package/_site/_test/startup-analysis-disabled-test.js +16 -16
- package/_site/_test/storage-foundation-test.js +78 -78
- package/_site/_test/structured-logger-test.js +101 -101
- package/_site/_test/t07b-cln-005-coverage-test.js +212 -0
- package/_site/_test/team-knowledge-store-sparse-checkout-test.js +196 -196
- package/_site/_test/team-knowledge-store-test.js +132 -132
- package/_site/_test/test-server-cleanup-test.js +35 -35
- package/_site/_test/test-server-module-isolation-test.js +37 -37
- package/_site/_test/tracking-start-test.js +144 -144
- package/_site/_test/vector-storage-root-test.js +75 -75
- package/_site/_test/version-visibility-browser-probe.js +249 -0
- package/_site/_test/version-visibility-test.js +92 -0
- package/_site/_test/workbench-context-receipts-test.js +22 -22
- package/_site/_test/workbench-permission-test.js +117 -117
- package/_site/_test/zcode-capture-integration-test.js +112 -112
- package/_site/lib/ai-profile-resolver.js +78 -78
- package/_site/lib/ai-vendor-presets.js +83 -83
- package/_site/lib/ai-workspace.js +104 -104
- package/_site/lib/atomic-file.js +204 -204
- package/_site/lib/automation-config.js +140 -140
- package/_site/lib/bridge-adapter.js +260 -260
- package/_site/lib/bridge-consumer-service.js +402 -402
- package/_site/lib/capture-hook-config.js +108 -108
- package/_site/lib/claude-cli-runner.js +1599 -1599
- package/_site/lib/cli-instances.js +43 -43
- package/_site/lib/codex-context-status.js +17 -17
- package/_site/lib/codex-notify-config.js +193 -193
- package/_site/lib/commit-conversation-binder.js +247 -247
- package/_site/lib/commit-processing-ledger.js +27 -27
- package/_site/lib/commit-prompt.js +202 -202
- package/_site/lib/commit-reconciler.js +444 -444
- package/_site/lib/context-pack-builder.js +299 -299
- package/_site/lib/contracts.js +291 -291
- package/_site/lib/conversation-exclusions.js +204 -204
- package/_site/lib/conversation-query-service.js +161 -161
- package/_site/lib/conversation-store.js +387 -387
- package/_site/lib/data-dir.js +13 -13
- package/_site/lib/embedding-service.js +85 -85
- package/_site/lib/engine-connection.js +93 -93
- package/_site/lib/engine-knowledge-client.js +76 -72
- package/_site/lib/evidence-bundle.js +228 -228
- package/_site/lib/folder-picker-output.js +24 -24
- package/_site/lib/git-path.js +14 -14
- package/_site/lib/git-runner.js +62 -62
- package/_site/lib/github-team-store.js +1175 -1175
- package/_site/lib/hook-manager.js +203 -203
- package/_site/lib/index-builder.js +157 -157
- package/_site/lib/index-service.js +173 -173
- package/_site/lib/integration-auto-repair.js +77 -77
- package/_site/lib/integration-installer.js +1240 -1240
- package/_site/lib/integration-intent.js +88 -88
- package/_site/lib/integration-status-scan.js +99 -99
- package/_site/lib/integration-status-worker.js +14 -14
- package/_site/lib/kb-framework.js +191 -191
- package/_site/lib/kb-validator.js +124 -124
- package/_site/lib/knowledge-db.js +363 -363
- package/_site/lib/knowledge-promotion.js +435 -435
- package/_site/lib/knowledge-retrieval-service.js +401 -401
- package/_site/lib/knowledge-schema.js +121 -121
- package/_site/lib/knowledge-tool-runtime.js +366 -366
- package/_site/lib/live-gateway.js +78 -78
- package/_site/lib/llm-client.js +173 -173
- package/_site/lib/markdown-knowledge-indexer.js +230 -230
- package/_site/lib/model-context-windows.js +82 -82
- package/_site/lib/module-bridge.js +874 -874
- package/_site/lib/module-port-resolver.js +57 -57
- package/_site/lib/post-commit-automation.js +141 -141
- package/_site/lib/product-data.js +35 -35
- package/_site/lib/project-lifecycle-service.js +554 -554
- package/_site/lib/project-registry-store.js +129 -129
- package/_site/lib/project-store.js +268 -268
- package/_site/lib/prompt-registry.js +148 -148
- package/_site/lib/public-version-info.js +37 -0
- package/_site/lib/registry-events.js +16 -16
- package/_site/lib/requirement-adapters.js +10 -10
- package/_site/lib/requirement-binder.js +112 -112
- package/_site/lib/requirement-recorder.js +278 -278
- package/_site/lib/runtime-control.js +89 -89
- package/_site/lib/runtime-endpoint.js +160 -160
- package/_site/lib/scanner.js +298 -298
- package/_site/lib/server-app.js +1672 -1664
- package/_site/lib/settings-store.js +153 -153
- package/_site/lib/storage-layout.js +166 -166
- package/_site/lib/structured-logger.js +574 -574
- package/_site/lib/zcode-context-integration.js +60 -60
- package/_site/scripts/codex-notify-fanout.cjs +95 -95
- package/_site/scripts/folder-picker.ps1 +156 -156
- package/_site/scripts/hook-trigger.js +158 -158
- package/_site/scripts/install-module-candidates.js +69 -69
- package/_site/scripts/pack-module-candidates.js +89 -89
- package/_site/scripts/sync-product-content.js +28 -28
- package/_site/scripts/sync-release-version.js +164 -164
- package/_site/scripts/vendor-modules.js +49 -49
- package/_site/scripts/verify-module-runtime.js +50 -50
- package/_site/scripts/verify-product-runtime.js +36 -36
- package/_site/scripts/verify-retrieval-gold.js +83 -83
- package/_site/server.js +15 -15
- package/_site/start.bat +26 -26
- package/_site/stop.bat +11 -11
- package/bin/project-knowledge-integrations.js +254 -254
- package/bin/project-knowledge-kb.js +67 -67
- package/bin/project-knowledge-mcp.js +201 -201
- package/bin/project-knowledge.js +269 -170
- package/claude-prompts.json +21 -21
- package/docs/README.zh-CN.md +207 -205
- package/docs/assets/architecture.svg +181 -181
- package/docs/assets/logo.svg +49 -49
- package/docs/fresh-v5-start.md +44 -44
- package/docs/leader-glm-workbench-playbook.md +122 -122
- package/docs/project-registry-schema.md +33 -33
- package/docs/release-5.0.16-acceptance.md +176 -176
- package/docs/release-5.0.17-acceptance.md +117 -117
- package/docs/release-5.0.19-acceptance.md +39 -39
- package/docs/team-knowledge-mode-a-plan.md +73 -73
- package/docs/testing-strategy.md +33 -33
- package/module-runtime-manifest.json +66 -63
- package/package.json +113 -110
- package/plugins/project-knowledge/.claude-plugin/plugin.json +1 -1
- package/plugins/project-knowledge/.codex-plugin/plugin.json +1 -1
- package/plugins/project-knowledge/.mcp.json +1 -1
- package/templates/change.md +30 -30
- package/templates/project-readme.md +52 -52
- package/ui/index.html +3 -2
- package/ui/version-info.css +44 -0
- package/ui/version-info.js +24 -0
- package/vendor-manifest.json +55 -55
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
// Definitions for the RET-008 retrieval-load comparison.
|
|
3
|
+
//
|
|
4
|
+
// Pure definitions only: a fixed small corpus, fixed semantic queries and
|
|
5
|
+
// the human-labelled relevant documents for each query. Nothing here talks to
|
|
6
|
+
// a model, a vector store or the network, so the same file backs both the
|
|
7
|
+
// explicit probe (real embedding model) and the offline regression (stub
|
|
8
|
+
// embedder, contract only).
|
|
9
|
+
//
|
|
10
|
+
// The corpus is written in Chinese on purpose: the offline model that the
|
|
11
|
+
// product actually uses for this lane is Xenova/bge-small-zh-v1.5, a Chinese
|
|
12
|
+
// model, and the semantic questions are phrased the way a user would ask
|
|
13
|
+
// them rather than by copying sentences out of the documents.
|
|
14
|
+
//
|
|
15
|
+
// Ground truth is human-labelled: `relevant` lists the documents that really
|
|
16
|
+
// answer the question. A document that merely shares a word with the
|
|
17
|
+
// question is deliberately NOT in the list.
|
|
18
|
+
const fs = require('node:fs');
|
|
19
|
+
const path = require('node:path');
|
|
20
|
+
|
|
21
|
+
// Fixed corpus: id -> { file, content }. The file name is the join key used
|
|
22
|
+
// to map a search result back to a corpus id.
|
|
23
|
+
const CORPUS = [
|
|
24
|
+
{
|
|
25
|
+
id: 'quota-sampling',
|
|
26
|
+
file: 'quota-sampling.md',
|
|
27
|
+
content: [
|
|
28
|
+
'# 配额采样',
|
|
29
|
+
'',
|
|
30
|
+
'配额采样必须串行执行。同一个订阅的并发采样请求会互相抢占剩余额度,',
|
|
31
|
+
'导致返回的可用额度不准确。串行执行让每一轮采样都拿到稳定的结果。',
|
|
32
|
+
'采样脚本在每轮结束后等待一个退避间隔,再开始下一轮。',
|
|
33
|
+
].join('\n'),
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: 'index-rebuild',
|
|
37
|
+
file: 'index-rebuild.md',
|
|
38
|
+
content: [
|
|
39
|
+
'# 向量索引重建',
|
|
40
|
+
'',
|
|
41
|
+
'切换索引根目录之后必须重建向量索引,否则检索会继续命中旧目录里的文档。',
|
|
42
|
+
'重建过程使用与在线检索完全相同的嵌入模型和向量维度,',
|
|
43
|
+
'保证重建前后的相似度分数可以直接比较。',
|
|
44
|
+
'重建是幂等操作,内容没有变化的文档会被哈希检查跳过。',
|
|
45
|
+
].join('\n'),
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: 'hook-install',
|
|
49
|
+
file: 'hook-install.md',
|
|
50
|
+
content: [
|
|
51
|
+
'# 提交钩子安装',
|
|
52
|
+
'',
|
|
53
|
+
'安装钩子会在目标仓库的 Git 钩子目录写入一个受管理的 post-commit 脚本。',
|
|
54
|
+
'脚本带有可识别的标记行,升级时会覆盖旧版本而不是追加。',
|
|
55
|
+
'提交完成后钩子会把提交边界事件追加到事件桥接的日志里。',
|
|
56
|
+
].join('\n'),
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 'bridge-journal',
|
|
60
|
+
file: 'bridge-journal.md',
|
|
61
|
+
content: [
|
|
62
|
+
'# 事件桥接日志',
|
|
63
|
+
'',
|
|
64
|
+
'事件桥接把提交边界写成追加式的日志事件,每个事件带有单调递增的序号。',
|
|
65
|
+
'消费端按照序号游标读取事件,因此重复消费不会产生重复的副作用。',
|
|
66
|
+
'桥接服务是一个独立进程,钩子通过 HTTP 把事件投递给它。',
|
|
67
|
+
].join('\n'),
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: 'promotion-rule',
|
|
71
|
+
file: 'promotion-rule.md',
|
|
72
|
+
content: [
|
|
73
|
+
'# 知识晋升规则',
|
|
74
|
+
'',
|
|
75
|
+
'一次提交经过分析之后,只有满足校验清单的结果才能晋升为知识文档。',
|
|
76
|
+
'校验清单要求结果里同时出现提交哈希、补丁哈希、会话哈希和检索哈希的引用。',
|
|
77
|
+
'缺少任何一项引用都会被拒绝,晋升失败不会写入知识目录。',
|
|
78
|
+
].join('\n'),
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: 'retrieval-citation',
|
|
82
|
+
file: 'retrieval-citation.md',
|
|
83
|
+
content: [
|
|
84
|
+
'# 检索引用与提交',
|
|
85
|
+
'',
|
|
86
|
+
'检索命中的知识条目会带上产生它的那次提交的完整哈希。',
|
|
87
|
+
'引用里的哈希指向知识文档本身,而不是某个临时目录中的文件名。',
|
|
88
|
+
'只有正文和引用同时命中时,这条知识才算是被检索链路真正采用了。',
|
|
89
|
+
].join('\n'),
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: 'embed-model',
|
|
93
|
+
file: 'embed-model.md',
|
|
94
|
+
content: [
|
|
95
|
+
'# 本地嵌入模型',
|
|
96
|
+
'',
|
|
97
|
+
'本地嵌入模型是一个中文向量模型,输出的向量维度是 512。',
|
|
98
|
+
'模型权重缓存在离线目录里,运行时不会联网下载。',
|
|
99
|
+
'建立索引用段落嵌入,查询用查询嵌入,两者的向量维度必须一致。',
|
|
100
|
+
].join('\n'),
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: 'session-memory',
|
|
104
|
+
file: 'session-memory.md',
|
|
105
|
+
content: [
|
|
106
|
+
'# 会话记忆',
|
|
107
|
+
'',
|
|
108
|
+
'会话记忆按会话编号保存在独立的数据目录下,每个会话一个文件。',
|
|
109
|
+
'记忆文件里记录的是上一轮对话的结论,而不是原始的提问。',
|
|
110
|
+
'删除记忆只会清理这个数据目录,不会影响知识库里的内容。',
|
|
111
|
+
].join('\n'),
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
id: 'profile-credential',
|
|
115
|
+
file: 'profile-credential.md',
|
|
116
|
+
content: [
|
|
117
|
+
'# 订阅凭据',
|
|
118
|
+
'',
|
|
119
|
+
'订阅密钥保存在本机的凭据文件里,配置文件只保存对凭据的引用名称。',
|
|
120
|
+
'读取订阅时密钥只在内存里存在,不会被打印或者写进日志。',
|
|
121
|
+
'切换订阅不会触发任何额度查询,额度状态不参与调度判断。',
|
|
122
|
+
].join('\n'),
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
id: 'isolated-port',
|
|
126
|
+
file: 'isolated-port.md',
|
|
127
|
+
content: [
|
|
128
|
+
'# 端口隔离',
|
|
129
|
+
'',
|
|
130
|
+
'测试期间所有的服务都绑定在独立的临时端口上,避免碰到正在运行的实例。',
|
|
131
|
+
'通知请求会被引导到一个隔离的接收端,真实的站点端口不会被访问。',
|
|
132
|
+
'每个用例使用独立的数据目录和独立的用户主目录。',
|
|
133
|
+
].join('\n'),
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
id: 'ledger-binding',
|
|
137
|
+
file: 'ledger-binding.md',
|
|
138
|
+
content: [
|
|
139
|
+
'# 用例绑定表',
|
|
140
|
+
'',
|
|
141
|
+
'绑定表把每个用例映射到它所验证的模块和接口。',
|
|
142
|
+
'绑定表是共享的资产,单条用例只允许提供自己的定义片段。',
|
|
143
|
+
'绑定片段必须是纯定义,不能包含执行逻辑。',
|
|
144
|
+
].join('\n'),
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: 'archive-policy',
|
|
148
|
+
file: 'archive-policy.md',
|
|
149
|
+
content: [
|
|
150
|
+
'# 归档策略',
|
|
151
|
+
'',
|
|
152
|
+
'归档只针对明确标记为归档的会话,普通会话永远不会被自动归档或者删除。',
|
|
153
|
+
'归档之后仍然保留原始文件,只是从活跃列表里移走。',
|
|
154
|
+
'恢复归档会把会话放回活跃列表,并保留原来的会话编号。',
|
|
155
|
+
].join('\n'),
|
|
156
|
+
},
|
|
157
|
+
];
|
|
158
|
+
|
|
159
|
+
// Fixed semantic queries with human-labelled relevant documents.
|
|
160
|
+
const QUERIES = [
|
|
161
|
+
{
|
|
162
|
+
id: 'q-quota-serial',
|
|
163
|
+
query: '为什么额度采样不能并发执行',
|
|
164
|
+
relevant: ['quota-sampling'],
|
|
165
|
+
note: '直接问配额采样的执行方式',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
id: 'q-index-rebuild',
|
|
169
|
+
query: '换了索引目录以后向量索引要做什么',
|
|
170
|
+
relevant: ['index-rebuild'],
|
|
171
|
+
note: '问切换索引根之后必须做的事',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
id: 'q-hook-trigger',
|
|
175
|
+
query: '提交代码之后是谁把变更交给分析流程',
|
|
176
|
+
relevant: ['hook-install', 'bridge-journal'],
|
|
177
|
+
note: '钩子与桥接两篇都参与这条链路',
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
id: 'q-promotion-accept',
|
|
181
|
+
query: '分析结果要满足什么条件才能写进知识库',
|
|
182
|
+
relevant: ['promotion-rule'],
|
|
183
|
+
note: '问晋升的校验条件',
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
id: 'q-citation-sha',
|
|
187
|
+
query: '检索出来的知识怎么追溯到是哪次提交写的',
|
|
188
|
+
relevant: ['retrieval-citation'],
|
|
189
|
+
note: '问引用与提交的关系',
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
id: 'q-model-cache',
|
|
193
|
+
query: '离线的中文向量模型放在什么地方 维度是多少',
|
|
194
|
+
relevant: ['embed-model'],
|
|
195
|
+
note: '问模型缓存位置与维度',
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
id: 'q-memory-dir',
|
|
199
|
+
query: '上一轮对话的结论存在哪个目录里',
|
|
200
|
+
relevant: ['session-memory'],
|
|
201
|
+
note: '问会话记忆的存储位置',
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
id: 'q-credential-secret',
|
|
205
|
+
query: '订阅密钥是从哪个文件读出来的',
|
|
206
|
+
relevant: ['profile-credential'],
|
|
207
|
+
note: '问凭据来源,注意 archive-policy 里有"文件"但不相关',
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
id: 'q-port-isolation',
|
|
211
|
+
query: '测试的时候怎么保证不碰到正在跑的那个服务',
|
|
212
|
+
relevant: ['isolated-port'],
|
|
213
|
+
note: '问测试期的端口隔离',
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
id: 'q-binding-fragment',
|
|
217
|
+
query: '一条用例怎么声明自己验证了哪个模块',
|
|
218
|
+
relevant: ['ledger-binding'],
|
|
219
|
+
note: '问绑定片段的产出方式',
|
|
220
|
+
},
|
|
221
|
+
];
|
|
222
|
+
|
|
223
|
+
// Materialises the corpus into `targetDir` (flat, one file per document) and
|
|
224
|
+
// returns the mapping used to translate a search result back to a corpus id.
|
|
225
|
+
function materialiseCorpus(targetDir) {
|
|
226
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
227
|
+
const byFile = new Map();
|
|
228
|
+
for (const doc of CORPUS) {
|
|
229
|
+
fs.writeFileSync(path.join(targetDir, doc.file), doc.content, 'utf8');
|
|
230
|
+
byFile.set(doc.file, doc.id);
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
dir: targetDir,
|
|
234
|
+
fileCount: CORPUS.length,
|
|
235
|
+
byFile,
|
|
236
|
+
idForFile(file) {
|
|
237
|
+
const base = path.basename(String(file || ''));
|
|
238
|
+
return byFile.get(base) || null;
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Ranking metrics over the fixed ground truth.
|
|
244
|
+
// - recallAt1 / recallAt5: share of relevant documents found in the top-k.
|
|
245
|
+
// - mrr: mean reciprocal rank of the first relevant document.
|
|
246
|
+
// - retrievedDocIds: the ordered, de-duplicated document ids of one query.
|
|
247
|
+
function evaluateRanking(rankedDocIds, relevant) {
|
|
248
|
+
const relevantSet = new Set(relevant);
|
|
249
|
+
const hits = [];
|
|
250
|
+
for (let index = 0; index < rankedDocIds.length; index += 1) {
|
|
251
|
+
if (relevantSet.has(rankedDocIds[index])) hits.push(index + 1);
|
|
252
|
+
}
|
|
253
|
+
const firstHit = hits.length ? hits[0] : null;
|
|
254
|
+
const inTop = count => hits.filter(rank => rank <= count).length;
|
|
255
|
+
return {
|
|
256
|
+
relevant: [...relevant],
|
|
257
|
+
retrievedDocIds: [...rankedDocIds],
|
|
258
|
+
firstRelevantRank: firstHit,
|
|
259
|
+
reciprocalRank: firstHit ? 1 / firstHit : 0,
|
|
260
|
+
hits,
|
|
261
|
+
recallAt1: relevant.length ? inTop(1) / relevant.length : 0,
|
|
262
|
+
recallAt5: relevant.length ? inTop(5) / relevant.length : 0,
|
|
263
|
+
hit: hits.length > 0,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
function percentile(values, fraction) {
|
|
268
|
+
const sorted = [...values].filter(value => Number.isFinite(value)).sort((a, b) => a - b);
|
|
269
|
+
if (!sorted.length) return null;
|
|
270
|
+
const position = Math.min(sorted.length - 1, Math.max(0, Math.ceil(fraction * sorted.length) - 1));
|
|
271
|
+
return sorted[position];
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function summariseLatency(values) {
|
|
275
|
+
const finite = values.filter(value => Number.isFinite(value));
|
|
276
|
+
return {
|
|
277
|
+
count: finite.length,
|
|
278
|
+
min: finite.length ? Math.min(...finite) : null,
|
|
279
|
+
p50: percentile(finite, 0.5),
|
|
280
|
+
p95: percentile(finite, 0.95),
|
|
281
|
+
max: finite.length ? Math.max(...finite) : null,
|
|
282
|
+
mean: finite.length ? finite.reduce((sum, value) => sum + value, 0) / finite.length : null,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
module.exports = {
|
|
287
|
+
CORPUS,
|
|
288
|
+
QUERIES,
|
|
289
|
+
materialiseCorpus,
|
|
290
|
+
evaluateRanking,
|
|
291
|
+
summariseLatency,
|
|
292
|
+
percentile,
|
|
293
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
// The "next session" client for RET-007. This is a FRESH process that plays
|
|
3
|
+
// the role of the next conversation: it only speaks HTTP to the knowledge
|
|
4
|
+
// engine, exactly like a real session client does. It asserts nothing — the
|
|
5
|
+
// raw responses are written to the output file so the probe evaluates them
|
|
6
|
+
// as evidence.
|
|
7
|
+
//
|
|
8
|
+
// Usage:
|
|
9
|
+
// node parallel-retrieval-followup-next-session.js \
|
|
10
|
+
// --engine-url http://127.0.0.1:<port> --project-id <id> \
|
|
11
|
+
// --context-query <q> --ask-query <q> --control-query <q> \
|
|
12
|
+
// --session-id <id> --out <file.json>
|
|
13
|
+
const fs = require('node:fs');
|
|
14
|
+
const path = require('node:path');
|
|
15
|
+
|
|
16
|
+
const args = process.argv.slice(2);
|
|
17
|
+
function arg(name, fallback = '') {
|
|
18
|
+
const index = args.indexOf(name);
|
|
19
|
+
return index >= 0 ? (args[index + 1] || fallback) : fallback;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async function call(engineUrl, route, body) {
|
|
23
|
+
const response = await fetch(`${engineUrl}${route}`, {
|
|
24
|
+
method: 'POST',
|
|
25
|
+
headers: { 'Content-Type': 'application/json' },
|
|
26
|
+
body: JSON.stringify(body),
|
|
27
|
+
signal: AbortSignal.timeout(30000),
|
|
28
|
+
});
|
|
29
|
+
return { status: response.status, ok: response.ok, body: await response.json().catch(() => null) };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
(async () => {
|
|
33
|
+
const engineUrl = arg('--engine-url');
|
|
34
|
+
const projectId = arg('--project-id');
|
|
35
|
+
const sessionId = arg('--session-id', 'ret007-next-session');
|
|
36
|
+
const outFile = path.resolve(arg('--out'));
|
|
37
|
+
if (!engineUrl || !projectId || !outFile) {
|
|
38
|
+
console.error('missing --engine-url/--project-id/--out');
|
|
39
|
+
process.exit(2);
|
|
40
|
+
}
|
|
41
|
+
const queries = {
|
|
42
|
+
context: arg('--context-query'),
|
|
43
|
+
ask: arg('--ask-query'),
|
|
44
|
+
control: arg('--control-query'),
|
|
45
|
+
};
|
|
46
|
+
const result = {
|
|
47
|
+
client: 'parallel-retrieval-followup-next-session',
|
|
48
|
+
pid: process.pid,
|
|
49
|
+
startedAt: new Date().toISOString(),
|
|
50
|
+
engineUrl,
|
|
51
|
+
projectId,
|
|
52
|
+
sessionId,
|
|
53
|
+
queries,
|
|
54
|
+
};
|
|
55
|
+
if (queries.context) {
|
|
56
|
+
result.context = await call(engineUrl, '/api/context', { query: queries.context, projectId, client: 'workbench', sessionId });
|
|
57
|
+
}
|
|
58
|
+
if (queries.ask) {
|
|
59
|
+
result.ask = await call(engineUrl, '/api/ask', { query: queries.ask, projectId, limit: 5 });
|
|
60
|
+
}
|
|
61
|
+
if (queries.control) {
|
|
62
|
+
result.control = await call(engineUrl, '/api/ask', { query: queries.control, projectId, limit: 5 });
|
|
63
|
+
}
|
|
64
|
+
result.finishedAt = new Date().toISOString();
|
|
65
|
+
fs.mkdirSync(path.dirname(outFile), { recursive: true });
|
|
66
|
+
fs.writeFileSync(outFile, JSON.stringify(result, null, 2), 'utf8');
|
|
67
|
+
const anyOk = [result.context, result.ask].some(call => call && call.ok);
|
|
68
|
+
console.log(JSON.stringify({ ok: anyOk, context: result.context && result.context.status, ask: result.ask && result.ask.status, control: result.control && result.control.status, out: outFile }));
|
|
69
|
+
process.exitCode = anyOk ? 0 : 1;
|
|
70
|
+
})().catch(error => { console.error(error); process.exit(1); });
|