@sanqianx/project-knowledge 5.0.18 → 5.0.20-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/plugins/marketplace.json +3 -3
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +14 -0
- package/LICENSE +201 -201
- package/NOTICE +5 -5
- package/README.md +349 -349
- package/_modules/knowledge-engine/README.md +4 -0
- package/_modules/knowledge-engine/src/analysis-contract.js +4 -3
- package/_modules/knowledge-engine/src/analysis-failures.js +39 -0
- package/_modules/knowledge-engine/src/analysis-worker.js +6 -2
- package/_modules/knowledge-engine/src/coordinator.js +8 -0
- package/_modules/knowledge-engine/src/headless-analyzer.js +2 -1
- package/_modules/knowledge-engine/src/memories.js +10 -5
- package/_modules/knowledge-engine/src/memory-eligibility.js +74 -0
- package/_modules/knowledge-engine/src/retrieval-ranking.js +19 -1
- package/_modules/knowledge-engine/src/runtime/commit-conversation-binder.js +1 -0
- package/_modules/knowledge-engine/src/runtime/commit-prompt.js +12 -9
- package/_modules/knowledge-engine/src/runtime/conversation-store.js +2 -0
- package/_modules/knowledge-engine/src/server.js +1 -1
- package/_site/_test/agent-capture-mcp-ui-test.js +67 -67
- 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/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 -0
- package/_site/_test/candidate-product-assets-test.js +13 -0
- package/_site/_test/candidate-release-contract-test.js +14 -14
- package/_site/_test/capture-hook-dedup-test.js +158 -158
- package/_site/_test/claude-executable-discovery-test.js +28 -28
- package/_site/_test/claude-session-lifecycle-sweep-test.js +252 -252
- 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 +134 -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 +4 -4
- 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 +10 -10
- package/_site/_test/conversation-origin-test.js +15 -0
- package/_site/_test/cross-repo-isolation-e2e-test.js +187 -187
- package/_site/_test/embedding-config-test.js +32 -32
- 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 -0
- package/_site/_test/fresh-hook-reimport-test.js +53 -53
- package/_site/_test/fresh-product-data-test.js +56 -56
- package/_site/_test/git-path-compatibility-test.js +80 -80
- package/_site/_test/git-validation-test.js +81 -81
- package/_site/_test/hook-worktree-test.js +42 -42
- package/_site/_test/index-builder-test.js +41 -41
- package/_site/_test/index-error-display-contract-test.js +10 -10
- package/_site/_test/integration-adapters-test.js +67 -67
- package/_site/_test/integration-capture-setup-test.js +118 -118
- 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/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 +109 -109
- package/_site/_test/knowledge-maintenance-test.js +40 -40
- package/_site/_test/knowledge-panel-ui-contract-test.js +112 -0
- package/_site/_test/knowledge-scopes-test.js +37 -37
- package/_site/_test/knowledge-storage-location-test.js +28 -28
- 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/markdown-maintenance-test.js +11 -11
- 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 -0
- 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 -0
- package/_site/_test/module-wiring-unbind-race-test.js +59 -59
- package/_site/_test/native-context-integrations-test.js +86 -86
- package/_site/_test/orphaned-claim-recovery-test.js +80 -80
- package/_site/_test/package-boundary-test.js +43 -42
- package/_site/_test/package-startup-test.js +56 -56
- package/_site/_test/packaged-ui-smoke-test.js +88 -88
- 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-import-ui-test.js +104 -104
- package/_site/_test/product-progress-status-test.js +12 -1
- package/_site/_test/project-remove-running-guard-test.js +79 -79
- package/_site/_test/project-store-test.js +90 -90
- package/_site/_test/registry-events-test.js +38 -0
- package/_site/_test/release-version-sync-test.js +115 -115
- package/_site/_test/requirement-binding-test.js +113 -113
- 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-scope-root-binding-test.js +67 -67
- package/_site/_test/simple-import-test.js +98 -98
- package/_site/_test/startup-analysis-disabled-test.js +6 -6
- 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 +35 -35
- package/_site/_test/workbench-context-receipts-test.js +22 -0
- package/_site/_test/workspace-ui-contract-test.js +31 -31
- package/_site/_test/zcode-capture-integration-test.js +108 -108
- package/_site/lib/ai-vendor-presets.js +83 -83
- package/_site/lib/ai-workspace.js +3 -3
- package/_site/lib/atomic-file.js +204 -204
- package/_site/lib/bridge-adapter.js +260 -260
- package/_site/lib/capture-hook-config.js +108 -108
- package/_site/lib/claude-cli-runner.js +89 -89
- 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 +13 -12
- package/_site/lib/commit-reconciler.js +38 -38
- package/_site/lib/context-pack-builder.js +299 -299
- package/_site/lib/conversation-exclusions.js +204 -204
- package/_site/lib/conversation-query-service.js +17 -17
- package/_site/lib/conversation-store.js +2 -0
- package/_site/lib/data-dir.js +13 -13
- package/_site/lib/embedding-service.js +85 -85
- package/_site/lib/engine-connection.js +93 -90
- package/_site/lib/engine-knowledge-client.js +72 -72
- package/_site/lib/folder-picker-output.js +3 -3
- package/_site/lib/git-path.js +14 -14
- package/_site/lib/github-team-store.js +3 -3
- package/_site/lib/index-builder.js +157 -157
- package/_site/lib/integration-status-scan.js +99 -99
- package/_site/lib/integration-status-worker.js +14 -14
- package/_site/lib/kb-framework.js +15 -15
- package/_site/lib/knowledge-db.js +363 -363
- package/_site/lib/knowledge-schema.js +121 -121
- package/_site/lib/live-gateway.js +78 -76
- package/_site/lib/llm-client.js +12 -12
- package/_site/lib/model-context-windows.js +82 -82
- package/_site/lib/module-bridge.js +874 -865
- package/_site/lib/module-port-resolver.js +57 -57
- package/_site/lib/post-commit-automation.js +54 -54
- package/_site/lib/product-data.js +35 -35
- package/_site/lib/project-lifecycle-service.js +14 -14
- package/_site/lib/project-registry-store.js +129 -129
- package/_site/lib/prompt-registry.js +148 -148
- package/_site/lib/registry-events.js +16 -0
- package/_site/lib/requirement-adapters.js +10 -10
- package/_site/lib/requirement-binder.js +112 -112
- package/_site/lib/runtime-control.js +89 -89
- package/_site/lib/runtime-endpoint.js +5 -5
- package/_site/lib/server-app.js +10 -1
- package/_site/lib/zcode-context-integration.js +60 -60
- package/_site/scripts/codex-notify-fanout.cjs +95 -95
- package/_site/scripts/install-module-candidates.js +69 -69
- package/_site/scripts/pack-module-candidates.js +89 -72
- 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 -0
- 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 +8 -8
- package/bin/project-knowledge.js +170 -170
- package/claude-prompts.json +21 -21
- package/docs/README.zh-CN.md +205 -205
- package/docs/assets/architecture.svg +181 -181
- package/docs/assets/logo.svg +49 -49
- package/docs/fresh-v5-start.md +42 -42
- package/docs/leader-glm-workbench-playbook.md +122 -119
- package/docs/project-registry-schema.md +11 -11
- 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 -0
- package/docs/team-knowledge-mode-a-plan.md +73 -73
- package/module-runtime-manifest.json +126 -104
- package/package.json +110 -108
- 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/plugins/project-knowledge/opencode/project-knowledge.md +3 -3
- package/plugins/project-knowledge/skills/project-knowledge/SKILL.md +28 -28
- package/templates/change.md +30 -30
- package/templates/project-readme.md +18 -18
- package/ui/index.html +1 -1
- package/ui/knowledge-panel.html +118 -0
- package/ui/product.css +8 -0
- package/ui/product.js +175 -8
- package/vendor-manifest.json +55 -53
package/README.md
CHANGED
|
@@ -1,349 +1,349 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<img src="docs/assets/logo.svg" alt="project-knowledge" width="540">
|
|
3
|
-
</p>
|
|
4
|
-
|
|
5
|
-
<p align="center">
|
|
6
|
-
<strong>Local, Git-triggered knowledge for software projects.</strong><br>
|
|
7
|
-
Markdown is the source of truth; the local vector index is always derived and rebuildable.
|
|
8
|
-
</p>
|
|
9
|
-
|
|
10
|
-
## Install
|
|
11
|
-
|
|
12
|
-
### npm
|
|
13
|
-
|
|
14
|
-
Install the web product and start the local service:
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
npm install -g @sanqianx/project-knowledge@latest
|
|
18
|
-
project-knowledge-integrations install
|
|
19
|
-
project-knowledge
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
1. `npm install -g @sanqianx/project-knowledge@latest` installs the shell,
|
|
23
|
-
three pinned module dependencies and the bundled knowledge-engine.
|
|
24
|
-
2. `project-knowledge-integrations install` is the one-time Integration Setup.
|
|
25
|
-
For every detected client (Claude Code / Codex / OpenCode) it installs two
|
|
26
|
-
independent capabilities, reported separately:
|
|
27
|
-
- **Knowledge Integration** — plugin / MCP / Skill so agents can query the
|
|
28
|
-
knowledge base;
|
|
29
|
-
- **Development Capture** — managed Bridge hooks / notify / plugin so the
|
|
30
|
-
agent conversations in real Git workspaces are captured into each
|
|
31
|
-
imported project's Development Conversation.
|
|
32
|
-
It also registers the host-level `project-knowledge` Bridge consumer.
|
|
33
|
-
ZCode is supported for Development Capture only; an unverified knowledge
|
|
34
|
-
plugin is never reported as installed. Use `install --ide zcode --capture-only`
|
|
35
|
-
or System Status → 外部 Agent 采集 in the web UI. Per-client repair/removal
|
|
36
|
-
preserves unrelated hooks and existing records. Failures include an operation
|
|
37
|
-
ID and persist to the local system diagnostic log.
|
|
38
|
-
No client UI needs to be opened; third-party hooks and configs are
|
|
39
|
-
preserved. Codex setup repairs this product's stale notify paths, keeps live
|
|
40
|
-
desktop notification wrappers and existing compatible Radar notifications,
|
|
41
|
-
and refuses to overwrite unknown third-party commands. Changed notify
|
|
42
|
-
settings are backed up beside `config.toml` without copying other settings.
|
|
43
|
-
3. `project-knowledge` starts a fresh v5 local backend. Import projects again;
|
|
44
|
-
older registries, knowledge, sessions and unfinished tasks are not migrated.
|
|
45
|
-
|
|
46
|
-
Notes:
|
|
47
|
-
|
|
48
|
-
- Restart already-running Claude Code sessions once after installing
|
|
49
|
-
Development Capture — hooks load at session start. Only conversations after
|
|
50
|
-
setup are captured; history is never backfilled.
|
|
51
|
-
- To narrow the setup: `--ide claude`, `--capture-only`, `--knowledge-only`;
|
|
52
|
-
to remove capture per client: `uninstall --capture-only`; to disable
|
|
53
|
-
capture globally (including the Bridge consumer): `disable-capture`.
|
|
54
|
-
- To repair Codex capture after an npm or Codex desktop upgrade, use System
|
|
55
|
-
Status → 外部 Agent 采集 → 接入/修复, or
|
|
56
|
-
`project-knowledge-integrations install --ide codex --capture-only`.
|
|
57
|
-
Repeating setup does not add notification wrappers. Removing capture restores
|
|
58
|
-
the preserved notification chain and leaves captured records on disk.
|
|
59
|
-
- Capture repair replaces the known old standalone Bridge entry with the
|
|
60
|
-
current product Bridge and keeps one capture hook per event. Claude Code
|
|
61
|
-
and ZCode mixed-group third-party hooks and knowledge-context hooks remain
|
|
62
|
-
intact. Duplicate or stale entries are reported as needing repair rather
|
|
63
|
-
than healthy; existing journals are not moved or deleted.
|
|
64
|
-
|
|
65
|
-
The local service listens on `127.0.0.1:5757` by default. The CLI can select a
|
|
66
|
-
nearby free port and records the active loopback endpoint so managed Git Hooks
|
|
67
|
-
do not depend on a hard-coded port.
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
project-knowledge # start in the background and open the UI
|
|
71
|
-
project-knowledge --fg # run in the foreground
|
|
72
|
-
project-knowledge status # show the active local backend
|
|
73
|
-
project-knowledge stop # stop the background backend
|
|
74
|
-
project-knowledge status --all # list verified local instances and data directories
|
|
75
|
-
project-knowledge stop --port 5804 # stop a specific verified instance
|
|
76
|
-
project-knowledge --data "D:/data/knowledge" # select an independent data directory
|
|
77
|
-
project-knowledge --port 9000
|
|
78
|
-
project-knowledge --no-open
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Requires Node.js 22 or newer and Git on `PATH`.
|
|
82
|
-
|
|
83
|
-
Commands such as `stop`, `STOP`, and `Stop` are equivalent. Unknown commands and
|
|
84
|
-
invalid arguments fail without starting a service. Default start/status/stop are
|
|
85
|
-
scoped to the selected data directory; stopping another directory requires an
|
|
86
|
-
explicit port or `--data`. The CLI uses a local control channel, not a shared PID
|
|
87
|
-
file or blind process termination. Stop succeeds only after the backend and its
|
|
88
|
-
owned modules finish shutdown; independently started modules are preserved.
|
|
89
|
-
An older or unverifiable instance is reported explicitly, never treated as safely
|
|
90
|
-
stopped. Stop the previous running version before upgrading.
|
|
91
|
-
|
|
92
|
-
### Windows desktop
|
|
93
|
-
|
|
94
|
-
Version 5.0.0 delivers the web product through npm. A new Windows installer
|
|
95
|
-
and desktop auto-update are not part of this release.
|
|
96
|
-
|
|
97
|
-
## Runtime model
|
|
98
|
-
|
|
99
|
-
The shell connects and projects; knowledge-engine owns the analysis pipeline:
|
|
100
|
-
|
|
101
|
-
```text
|
|
102
|
-
Git Hook → event-bridge journal → durable engine claim → isolated Agent
|
|
103
|
-
→ staging validation → Markdown promotion → vector-hub → retrieval
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
Import establishes a Git tracking baseline, installs and verifies the managed
|
|
107
|
-
Hook, and creates project metadata. It does not run AI, infer requirements from
|
|
108
|
-
the repository, or generate placeholder knowledge. For an empty repository,
|
|
109
|
-
the first later Commit is eligible for analysis.
|
|
110
|
-
|
|
111
|
-
The Hook writes commit evidence to the bridge journal and only notifies the
|
|
112
|
-
local service. Notifications may be lost; journal consumption and Git startup
|
|
113
|
-
reconciliation recover eligible commits. A Hook failure never blocks a commit.
|
|
114
|
-
Import does not trigger a costly historical analysis.
|
|
115
|
-
|
|
116
|
-
Within a project, Commits run oldest-first and stop at the first failure.
|
|
117
|
-
Different projects may analyze concurrently (maximum two). Duplicate events
|
|
118
|
-
do not re-analyze completed commits. Closing the browser does not stop work.
|
|
119
|
-
|
|
120
|
-
## Knowledge safety
|
|
121
|
-
|
|
122
|
-
AI receives a frozen claim containing the Commit SHA, real patch evidence,
|
|
123
|
-
bound requirement IDs, prompt hash, and fixed knowledge path. It can write only
|
|
124
|
-
to an internal per-run staging directory. A manifest must validate before any
|
|
125
|
-
file reaches the final project knowledge directory.
|
|
126
|
-
|
|
127
|
-
Promotion uses verified hashes, backups, and a durable journal. Only after
|
|
128
|
-
Markdown promotion succeeds does the analyzed-Commit pointer advance and mark
|
|
129
|
-
the index dirty. Index failure never rolls back Markdown or reruns AI; it stays
|
|
130
|
-
visible as dirty state and is retried.
|
|
131
|
-
|
|
132
|
-
vector-hub owns the derived index; the shell no longer runs a second index
|
|
133
|
-
writer. Failed indexing leaves promoted Markdown intact and repairable.
|
|
134
|
-
|
|
135
|
-
Managed vectors follow the configured knowledge root at `<knowledge>/.indexes`.
|
|
136
|
-
The system drawer displays the actual directory and pending wiring separately.
|
|
137
|
-
Root changes leave project Markdown and old indexes untouched, drain existing
|
|
138
|
-
index writes, switch subsequent writes, and rebuild registered knowledge with
|
|
139
|
-
the configured embedding model. Credentials and small runtime metadata remain
|
|
140
|
-
in the product data directory; no expensive historical Agent analysis is started.
|
|
141
|
-
|
|
142
|
-
The application does not create, edit, refresh, or delete `CLAUDE.md`.
|
|
143
|
-
|
|
144
|
-
## Requirement capture
|
|
145
|
-
|
|
146
|
-
### Automatic development context
|
|
147
|
-
|
|
148
|
-
Claude Code's bundled plugin has a synchronous `UserPromptSubmit` hook. It verifies the current local product instance and asks `/api/engine/context` for project/domain facts plus applicable confirmed project, domain and global memories before the model processes a normal request. No reminder to use MCP is required. The complete context is bounded to 8,000 characters; memories have an independent 3,000-character budget. MCP and the Skill remain available for deeper reads. Workbench uses the same engine endpoint and suppresses duplicate native injection.
|
|
149
|
-
|
|
150
|
-
Knowledge Integration, Automatic Context and Development Capture are separate capabilities in System Status. An old or disabled plugin is not automatic-context readiness: npm upgrades do not silently upgrade third-party clients, and the existing integration repair action updates stale product plugins. Reopen external sessions after updating. The native-client candidate adds Codex plugin `UserPromptSubmit` and ZCode user-configuration process hooks. Codex requires native `/hooks` review and trust of the current definition; installation never writes trust or uses a bypass flag. Hook trust is read from the native app-server and checked for the selected repository. ZCode context and conversation capture are separate entries, preserving model and third-party configuration. OpenCode keeps its existing tool integration; automatic injection is not claimed for it.
|
|
151
|
-
|
|
152
|
-
Context reading has a ten-second total client deadline and fails open with a visible warning. A vector failure is reported as file fallback, not vector success; an unknown project is ignored rather than borrowing a different project's context. `knowledge.context.prepared` and `agent.context.output` logs contain only metadata and citations, not the request or knowledge body. An output log does not itself prove model delivery; native-client acceptance must verify that separately. Internal analysis and Workbench-owned context suppress repeated client injection.
|
|
153
|
-
|
|
154
|
-
Coding-agent integrations can append the user's real request before code is
|
|
155
|
-
changed. Requirement capture writes bounded metadata to the selected project's
|
|
156
|
-
`requirements.jsonl`; it does not start analysis or write knowledge.
|
|
157
|
-
|
|
158
|
-
The MCP server exposes:
|
|
159
|
-
|
|
160
|
-
- read-only `resolve`, `search`, `ask`, `get`, and `history` tools;
|
|
161
|
-
- one write-only `record_requirement` metadata tool.
|
|
162
|
-
|
|
163
|
-
```bash
|
|
164
|
-
npx @sanqianx/project-knowledge@latest install
|
|
165
|
-
npx @sanqianx/project-knowledge@latest install --ide claude
|
|
166
|
-
npx @sanqianx/project-knowledge@latest install --ide codex
|
|
167
|
-
npx @sanqianx/project-knowledge@latest install --ide opencode
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
Read-only CLI examples:
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
project-knowledge-kb search --project <projectId> --query "refresh token policy" --json
|
|
174
|
-
project-knowledge-kb ask --project <projectId> --query "what was decided about login?"
|
|
175
|
-
project-knowledge-kb get --project <projectId> --entry modules/auth.md --json
|
|
176
|
-
project-knowledge-kb history --project <projectId> --json
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Queries never create or rewrite configuration. If the internal index is
|
|
180
|
-
unavailable, search falls back to current Markdown. Project, domain and brain
|
|
181
|
-
scopes are nested; unconfirmed memory candidates are not task preferences.
|
|
182
|
-
|
|
183
|
-
For engine-wired projects, the CLI and MCP delegate `search`, `ask`, `get` and
|
|
184
|
-
`history` to the same engine used by the web UI, including commit provenance.
|
|
185
|
-
They verify the running instance against the selected data directory; an
|
|
186
|
-
unavailable or mismatched instance is an explicit failure, not a second local
|
|
187
|
-
index with different facts. Only projects without engine wiring retain the
|
|
188
|
-
local legacy read contract. Use `--scope domain` or `--scope brain` to broaden
|
|
189
|
-
CLI searches; MCP accepts the equivalent `scope`. Shared-file reads accept
|
|
190
|
-
`--space <spaceId>` (MCP: `space` or `spaceId`).
|
|
191
|
-
|
|
192
|
-
## Storage
|
|
193
|
-
|
|
194
|
-
Version 5 is a fresh start, not a data upgrade. Stop the previous process,
|
|
195
|
-
remove any old `KB_DATA_DIR` override, configure models and import projects into
|
|
196
|
-
new empty knowledge directories. Old files remain untouched but are not read.
|
|
197
|
-
See [fresh v5 setup](docs/fresh-v5-start.md). Queued tasks can be cancelled by
|
|
198
|
-
unbinding; only an active knowledge/index writer blocks removal.
|
|
199
|
-
|
|
200
|
-
Default internal data directory: `~/.project-knowledge-v5/`
|
|
201
|
-
|
|
202
|
-
Override it with `KB_DATA_DIR`:
|
|
203
|
-
|
|
204
|
-
```powershell
|
|
205
|
-
$env:KB_DATA_DIR = 'D:\data\project-knowledge'
|
|
206
|
-
project-knowledge
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
The user selects a global knowledge root before importing projects. That root
|
|
210
|
-
chooses directories for future imports, new shared scopes, and derived vector
|
|
211
|
-
indexes (`<knowledge root>/.indexes`). Each imported project stores an
|
|
212
|
-
absolute, fixed `knowledgePath`; changing the global root does not move existing
|
|
213
|
-
projects.
|
|
214
|
-
|
|
215
|
-
Existing project and shared-knowledge directories do not move when the root
|
|
216
|
-
changes. Brain/domain directory bindings are retained in the shell settings
|
|
217
|
-
after the engine acknowledges them. Existing engine bindings are reused when
|
|
218
|
-
first recording those fields. A failed registration is shown as pending, not
|
|
219
|
-
healthy. Old index directories are retained; indexes rebuild at the new root.
|
|
220
|
-
Settings, registration metadata, caches, runtime state, logs, and recovery
|
|
221
|
-
assets remain in the internal data directory; vector payloads do not:
|
|
222
|
-
|
|
223
|
-
```text
|
|
224
|
-
~/.project-knowledge-v5/
|
|
225
|
-
├── settings.json
|
|
226
|
-
├── projects.json # minimal project ID/order index
|
|
227
|
-
├── projects/<projectId>/
|
|
228
|
-
│ ├── config.json # fixed repoPath/knowledgePath
|
|
229
|
-
│ ├── state.json # tracking, claim, index, Hook state
|
|
230
|
-
│ └── requirements.jsonl # created only when used
|
|
231
|
-
├── knowledge-engine/ # durable claims, runs and cursors
|
|
232
|
-
├── cache/ # models, exports, context packs
|
|
233
|
-
├── runtime/ # claims, staging, journals, locks
|
|
234
|
-
├── logs/
|
|
235
|
-
│ ├── app/
|
|
236
|
-
│ ├── projects/<projectId>/
|
|
237
|
-
│ └── hooks/
|
|
238
|
-
└── recovery/ # migrations, promotion/index backups
|
|
239
|
-
|
|
240
|
-
<selected knowledge root>/
|
|
241
|
-
├── .indexes/ # rebuildable vector payloads
|
|
242
|
-
├── _shared/<brain or domain ID>/ # fixed shared-knowledge bindings
|
|
243
|
-
└── <project storage name>/
|
|
244
|
-
├── README.md # when produced by verified knowledge
|
|
245
|
-
├── GOAL.md
|
|
246
|
-
├── ARCHITECTURE.md
|
|
247
|
-
├── modules/*.md
|
|
248
|
-
└── changes/*.md
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
Team knowledge is an explicit exception: an import may bind an existing
|
|
252
|
-
checked-out team-store subdirectory. Its final absolute path is still fixed in
|
|
253
|
-
the project config, must remain inside the selected store, and is treated as
|
|
254
|
-
externally owned when the project registration is deleted.
|
|
255
|
-
|
|
256
|
-
## Migration
|
|
257
|
-
|
|
258
|
-
The versioned `layout-v2` migration discovers legacy assets without modifying
|
|
259
|
-
them, creates a journal and centralized recovery backup, stages settings and
|
|
260
|
-
per-project metadata, validates preserved paths/secrets/pointers and any legacy
|
|
261
|
-
index, then activates files with the minimal registry last. The completion
|
|
262
|
-
marker is written only after the new stores reopen successfully.
|
|
263
|
-
|
|
264
|
-
Interrupted or failed migration keeps the legacy reader path available and
|
|
265
|
-
leaves source knowledge, old logs, configuration files, and backups intact for
|
|
266
|
-
retry or diagnosis.
|
|
267
|
-
|
|
268
|
-
## Product UI
|
|
269
|
-
|
|
270
|
-
The six primary pages are Brain, Start work, Knowledge search, Long-term
|
|
271
|
-
memory, Domains/projects and Activity. Start work embeds the real Workbench,
|
|
272
|
-
not a second chat implementation. Import projects from Domains/projects;
|
|
273
|
-
confirm both code and knowledge directories and retry only failed wiring.
|
|
274
|
-
|
|
275
|
-
Domain knowledge and confirmed brain memories live alongside existing project
|
|
276
|
-
knowledge. Adding a brain does not move project Markdown. Model credentials
|
|
277
|
-
are owned by Workbench; maintenance has a persisted default independent of
|
|
278
|
-
temporary chat selection. Runtime credentials never enter engine state.
|
|
279
|
-
|
|
280
|
-
System status groups four-module health, configuration and diagnostics.
|
|
281
|
-
Activity retains the structured-log capabilities:
|
|
282
|
-
|
|
283
|
-
- trace/debug/info/warn/error/fatal filtering;
|
|
284
|
-
- local-date, project, component, event, operation, Commit, and text filters;
|
|
285
|
-
- newest-first cursor pagination, pause/auto-refresh, and filtered export;
|
|
286
|
-
- operation-flow and structured error/stack details;
|
|
287
|
-
- logger health/degraded state and Hook/index/project read-only status;
|
|
288
|
-
- matching light/dark themes across the shell and native module frames.
|
|
289
|
-
|
|
290
|
-
Logs use `log/v2` JSONL, daily files and bounded segments. Retention defaults to
|
|
291
|
-
365 days; `0` disables time-based deletion. Capacity cleanup is deterministic.
|
|
292
|
-
Secrets are recursively redacted during write, query, error serialization, and
|
|
293
|
-
export. The log root is fixed under the internal data directory.
|
|
294
|
-
|
|
295
|
-
## HTTP security
|
|
296
|
-
|
|
297
|
-
The default loopback server accepts same-origin/loopback browser requests. It
|
|
298
|
-
does not use wildcard CORS. Binding to a non-loopback address requires
|
|
299
|
-
`KB_SITE_AUTH_TOKEN`, and requests must also pass Origin validation. Public AI
|
|
300
|
-
profile responses expose only masked secret metadata; generic errors return an
|
|
301
|
-
operation ID without a stack. There is no raw-file route.
|
|
302
|
-
|
|
303
|
-
## Repository layout
|
|
304
|
-
|
|
305
|
-
```text
|
|
306
|
-
_site/server.js # thin executable entry
|
|
307
|
-
_site/lib/server-app.js # HTTP/runtime composition
|
|
308
|
-
_site/lib/storage-layout.js # canonical internal paths
|
|
309
|
-
_site/lib/project-*-store.js # v2 registry/config/state stores
|
|
310
|
-
_site/lib/project-lifecycle-service.js
|
|
311
|
-
_site/lib/commit-reconciler.js
|
|
312
|
-
_site/lib/knowledge-promotion.js
|
|
313
|
-
_site/lib/index-service.js
|
|
314
|
-
_site/lib/structured-logger.js
|
|
315
|
-
_site/lib/knowledge-tool-runtime.js
|
|
316
|
-
_site/scripts/hook-trigger.js
|
|
317
|
-
ui/index.html # unified production web UI
|
|
318
|
-
ui/product.js, ui/product.css # shell navigation and state projection
|
|
319
|
-
_modules/knowledge-engine/ # verified dependency-free engine
|
|
320
|
-
bin/project-knowledge*.js # CLI and MCP entry points
|
|
321
|
-
desktop/ # Windows Electron package
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
## Testing
|
|
325
|
-
|
|
326
|
-
```bash
|
|
327
|
-
npm ci
|
|
328
|
-
npm test -- --no-report
|
|
329
|
-
npm test --prefix desktop
|
|
330
|
-
npm pack --dry-run --json
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
The automated suite includes real Git Hooks, paths with spaces/non-ASCII text,
|
|
334
|
-
online and offline Commit reconciliation, crash-lock recovery, atomic index
|
|
335
|
-
replacement, migration fault injection, packaged-startup contracts, API
|
|
336
|
-
security and log redaction/cursors. Product browser acceptance uses one
|
|
337
|
-
1920×1080 desktop viewport and controlled model/embedding doubles; real-model
|
|
338
|
-
and real-index smoke tests are reported separately. No mobile matrix or new
|
|
339
|
-
Windows installer is claimed. Full crash-stage combinations and the final
|
|
340
|
-
switch of a user's existing data require separate acceptance.
|
|
341
|
-
|
|
342
|
-
See the [Leader / GLM Workbench playbook](docs/leader-glm-workbench-playbook.md)
|
|
343
|
-
for task dispatch and independent review, and the
|
|
344
|
-
[5.0.16 acceptance record](docs/release-5.0.16-acceptance.md) for this round's
|
|
345
|
-
actual results and remaining gates. These documents are not a release approval.
|
|
346
|
-
|
|
347
|
-
## License
|
|
348
|
-
|
|
349
|
-
[Apache-2.0](LICENSE). See [NOTICE](NOTICE).
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/assets/logo.svg" alt="project-knowledge" width="540">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<strong>Local, Git-triggered knowledge for software projects.</strong><br>
|
|
7
|
+
Markdown is the source of truth; the local vector index is always derived and rebuildable.
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
### npm
|
|
13
|
+
|
|
14
|
+
Install the web product and start the local service:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install -g @sanqianx/project-knowledge@latest
|
|
18
|
+
project-knowledge-integrations install
|
|
19
|
+
project-knowledge
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
1. `npm install -g @sanqianx/project-knowledge@latest` installs the shell,
|
|
23
|
+
three pinned module dependencies and the bundled knowledge-engine.
|
|
24
|
+
2. `project-knowledge-integrations install` is the one-time Integration Setup.
|
|
25
|
+
For every detected client (Claude Code / Codex / OpenCode) it installs two
|
|
26
|
+
independent capabilities, reported separately:
|
|
27
|
+
- **Knowledge Integration** — plugin / MCP / Skill so agents can query the
|
|
28
|
+
knowledge base;
|
|
29
|
+
- **Development Capture** — managed Bridge hooks / notify / plugin so the
|
|
30
|
+
agent conversations in real Git workspaces are captured into each
|
|
31
|
+
imported project's Development Conversation.
|
|
32
|
+
It also registers the host-level `project-knowledge` Bridge consumer.
|
|
33
|
+
ZCode is supported for Development Capture only; an unverified knowledge
|
|
34
|
+
plugin is never reported as installed. Use `install --ide zcode --capture-only`
|
|
35
|
+
or System Status → 外部 Agent 采集 in the web UI. Per-client repair/removal
|
|
36
|
+
preserves unrelated hooks and existing records. Failures include an operation
|
|
37
|
+
ID and persist to the local system diagnostic log.
|
|
38
|
+
No client UI needs to be opened; third-party hooks and configs are
|
|
39
|
+
preserved. Codex setup repairs this product's stale notify paths, keeps live
|
|
40
|
+
desktop notification wrappers and existing compatible Radar notifications,
|
|
41
|
+
and refuses to overwrite unknown third-party commands. Changed notify
|
|
42
|
+
settings are backed up beside `config.toml` without copying other settings.
|
|
43
|
+
3. `project-knowledge` starts a fresh v5 local backend. Import projects again;
|
|
44
|
+
older registries, knowledge, sessions and unfinished tasks are not migrated.
|
|
45
|
+
|
|
46
|
+
Notes:
|
|
47
|
+
|
|
48
|
+
- Restart already-running Claude Code sessions once after installing
|
|
49
|
+
Development Capture — hooks load at session start. Only conversations after
|
|
50
|
+
setup are captured; history is never backfilled.
|
|
51
|
+
- To narrow the setup: `--ide claude`, `--capture-only`, `--knowledge-only`;
|
|
52
|
+
to remove capture per client: `uninstall --capture-only`; to disable
|
|
53
|
+
capture globally (including the Bridge consumer): `disable-capture`.
|
|
54
|
+
- To repair Codex capture after an npm or Codex desktop upgrade, use System
|
|
55
|
+
Status → 外部 Agent 采集 → 接入/修复, or
|
|
56
|
+
`project-knowledge-integrations install --ide codex --capture-only`.
|
|
57
|
+
Repeating setup does not add notification wrappers. Removing capture restores
|
|
58
|
+
the preserved notification chain and leaves captured records on disk.
|
|
59
|
+
- Capture repair replaces the known old standalone Bridge entry with the
|
|
60
|
+
current product Bridge and keeps one capture hook per event. Claude Code
|
|
61
|
+
and ZCode mixed-group third-party hooks and knowledge-context hooks remain
|
|
62
|
+
intact. Duplicate or stale entries are reported as needing repair rather
|
|
63
|
+
than healthy; existing journals are not moved or deleted.
|
|
64
|
+
|
|
65
|
+
The local service listens on `127.0.0.1:5757` by default. The CLI can select a
|
|
66
|
+
nearby free port and records the active loopback endpoint so managed Git Hooks
|
|
67
|
+
do not depend on a hard-coded port.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
project-knowledge # start in the background and open the UI
|
|
71
|
+
project-knowledge --fg # run in the foreground
|
|
72
|
+
project-knowledge status # show the active local backend
|
|
73
|
+
project-knowledge stop # stop the background backend
|
|
74
|
+
project-knowledge status --all # list verified local instances and data directories
|
|
75
|
+
project-knowledge stop --port 5804 # stop a specific verified instance
|
|
76
|
+
project-knowledge --data "D:/data/knowledge" # select an independent data directory
|
|
77
|
+
project-knowledge --port 9000
|
|
78
|
+
project-knowledge --no-open
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Requires Node.js 22 or newer and Git on `PATH`.
|
|
82
|
+
|
|
83
|
+
Commands such as `stop`, `STOP`, and `Stop` are equivalent. Unknown commands and
|
|
84
|
+
invalid arguments fail without starting a service. Default start/status/stop are
|
|
85
|
+
scoped to the selected data directory; stopping another directory requires an
|
|
86
|
+
explicit port or `--data`. The CLI uses a local control channel, not a shared PID
|
|
87
|
+
file or blind process termination. Stop succeeds only after the backend and its
|
|
88
|
+
owned modules finish shutdown; independently started modules are preserved.
|
|
89
|
+
An older or unverifiable instance is reported explicitly, never treated as safely
|
|
90
|
+
stopped. Stop the previous running version before upgrading.
|
|
91
|
+
|
|
92
|
+
### Windows desktop
|
|
93
|
+
|
|
94
|
+
Version 5.0.0 delivers the web product through npm. A new Windows installer
|
|
95
|
+
and desktop auto-update are not part of this release.
|
|
96
|
+
|
|
97
|
+
## Runtime model
|
|
98
|
+
|
|
99
|
+
The shell connects and projects; knowledge-engine owns the analysis pipeline:
|
|
100
|
+
|
|
101
|
+
```text
|
|
102
|
+
Git Hook → event-bridge journal → durable engine claim → isolated Agent
|
|
103
|
+
→ staging validation → Markdown promotion → vector-hub → retrieval
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Import establishes a Git tracking baseline, installs and verifies the managed
|
|
107
|
+
Hook, and creates project metadata. It does not run AI, infer requirements from
|
|
108
|
+
the repository, or generate placeholder knowledge. For an empty repository,
|
|
109
|
+
the first later Commit is eligible for analysis.
|
|
110
|
+
|
|
111
|
+
The Hook writes commit evidence to the bridge journal and only notifies the
|
|
112
|
+
local service. Notifications may be lost; journal consumption and Git startup
|
|
113
|
+
reconciliation recover eligible commits. A Hook failure never blocks a commit.
|
|
114
|
+
Import does not trigger a costly historical analysis.
|
|
115
|
+
|
|
116
|
+
Within a project, Commits run oldest-first and stop at the first failure.
|
|
117
|
+
Different projects may analyze concurrently (maximum two). Duplicate events
|
|
118
|
+
do not re-analyze completed commits. Closing the browser does not stop work.
|
|
119
|
+
|
|
120
|
+
## Knowledge safety
|
|
121
|
+
|
|
122
|
+
AI receives a frozen claim containing the Commit SHA, real patch evidence,
|
|
123
|
+
bound requirement IDs, prompt hash, and fixed knowledge path. It can write only
|
|
124
|
+
to an internal per-run staging directory. A manifest must validate before any
|
|
125
|
+
file reaches the final project knowledge directory.
|
|
126
|
+
|
|
127
|
+
Promotion uses verified hashes, backups, and a durable journal. Only after
|
|
128
|
+
Markdown promotion succeeds does the analyzed-Commit pointer advance and mark
|
|
129
|
+
the index dirty. Index failure never rolls back Markdown or reruns AI; it stays
|
|
130
|
+
visible as dirty state and is retried.
|
|
131
|
+
|
|
132
|
+
vector-hub owns the derived index; the shell no longer runs a second index
|
|
133
|
+
writer. Failed indexing leaves promoted Markdown intact and repairable.
|
|
134
|
+
|
|
135
|
+
Managed vectors follow the configured knowledge root at `<knowledge>/.indexes`.
|
|
136
|
+
The system drawer displays the actual directory and pending wiring separately.
|
|
137
|
+
Root changes leave project Markdown and old indexes untouched, drain existing
|
|
138
|
+
index writes, switch subsequent writes, and rebuild registered knowledge with
|
|
139
|
+
the configured embedding model. Credentials and small runtime metadata remain
|
|
140
|
+
in the product data directory; no expensive historical Agent analysis is started.
|
|
141
|
+
|
|
142
|
+
The application does not create, edit, refresh, or delete `CLAUDE.md`.
|
|
143
|
+
|
|
144
|
+
## Requirement capture
|
|
145
|
+
|
|
146
|
+
### Automatic development context
|
|
147
|
+
|
|
148
|
+
Claude Code's bundled plugin has a synchronous `UserPromptSubmit` hook. It verifies the current local product instance and asks `/api/engine/context` for project/domain facts plus applicable confirmed project, domain and global memories before the model processes a normal request. No reminder to use MCP is required. The complete context is bounded to 8,000 characters; memories have an independent 3,000-character budget. MCP and the Skill remain available for deeper reads. Workbench uses the same engine endpoint and suppresses duplicate native injection.
|
|
149
|
+
|
|
150
|
+
Knowledge Integration, Automatic Context and Development Capture are separate capabilities in System Status. An old or disabled plugin is not automatic-context readiness: npm upgrades do not silently upgrade third-party clients, and the existing integration repair action updates stale product plugins. Reopen external sessions after updating. The native-client candidate adds Codex plugin `UserPromptSubmit` and ZCode user-configuration process hooks. Codex requires native `/hooks` review and trust of the current definition; installation never writes trust or uses a bypass flag. Hook trust is read from the native app-server and checked for the selected repository. ZCode context and conversation capture are separate entries, preserving model and third-party configuration. OpenCode keeps its existing tool integration; automatic injection is not claimed for it.
|
|
151
|
+
|
|
152
|
+
Context reading has a ten-second total client deadline and fails open with a visible warning. A vector failure is reported as file fallback, not vector success; an unknown project is ignored rather than borrowing a different project's context. `knowledge.context.prepared` and `agent.context.output` logs contain only metadata and citations, not the request or knowledge body. An output log does not itself prove model delivery; native-client acceptance must verify that separately. Internal analysis and Workbench-owned context suppress repeated client injection.
|
|
153
|
+
|
|
154
|
+
Coding-agent integrations can append the user's real request before code is
|
|
155
|
+
changed. Requirement capture writes bounded metadata to the selected project's
|
|
156
|
+
`requirements.jsonl`; it does not start analysis or write knowledge.
|
|
157
|
+
|
|
158
|
+
The MCP server exposes:
|
|
159
|
+
|
|
160
|
+
- read-only `resolve`, `search`, `ask`, `get`, and `history` tools;
|
|
161
|
+
- one write-only `record_requirement` metadata tool.
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
npx @sanqianx/project-knowledge@latest install
|
|
165
|
+
npx @sanqianx/project-knowledge@latest install --ide claude
|
|
166
|
+
npx @sanqianx/project-knowledge@latest install --ide codex
|
|
167
|
+
npx @sanqianx/project-knowledge@latest install --ide opencode
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Read-only CLI examples:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
project-knowledge-kb search --project <projectId> --query "refresh token policy" --json
|
|
174
|
+
project-knowledge-kb ask --project <projectId> --query "what was decided about login?"
|
|
175
|
+
project-knowledge-kb get --project <projectId> --entry modules/auth.md --json
|
|
176
|
+
project-knowledge-kb history --project <projectId> --json
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Queries never create or rewrite configuration. If the internal index is
|
|
180
|
+
unavailable, search falls back to current Markdown. Project, domain and brain
|
|
181
|
+
scopes are nested; unconfirmed memory candidates are not task preferences.
|
|
182
|
+
|
|
183
|
+
For engine-wired projects, the CLI and MCP delegate `search`, `ask`, `get` and
|
|
184
|
+
`history` to the same engine used by the web UI, including commit provenance.
|
|
185
|
+
They verify the running instance against the selected data directory; an
|
|
186
|
+
unavailable or mismatched instance is an explicit failure, not a second local
|
|
187
|
+
index with different facts. Only projects without engine wiring retain the
|
|
188
|
+
local legacy read contract. Use `--scope domain` or `--scope brain` to broaden
|
|
189
|
+
CLI searches; MCP accepts the equivalent `scope`. Shared-file reads accept
|
|
190
|
+
`--space <spaceId>` (MCP: `space` or `spaceId`).
|
|
191
|
+
|
|
192
|
+
## Storage
|
|
193
|
+
|
|
194
|
+
Version 5 is a fresh start, not a data upgrade. Stop the previous process,
|
|
195
|
+
remove any old `KB_DATA_DIR` override, configure models and import projects into
|
|
196
|
+
new empty knowledge directories. Old files remain untouched but are not read.
|
|
197
|
+
See [fresh v5 setup](docs/fresh-v5-start.md). Queued tasks can be cancelled by
|
|
198
|
+
unbinding; only an active knowledge/index writer blocks removal.
|
|
199
|
+
|
|
200
|
+
Default internal data directory: `~/.project-knowledge-v5/`
|
|
201
|
+
|
|
202
|
+
Override it with `KB_DATA_DIR`:
|
|
203
|
+
|
|
204
|
+
```powershell
|
|
205
|
+
$env:KB_DATA_DIR = 'D:\data\project-knowledge'
|
|
206
|
+
project-knowledge
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
The user selects a global knowledge root before importing projects. That root
|
|
210
|
+
chooses directories for future imports, new shared scopes, and derived vector
|
|
211
|
+
indexes (`<knowledge root>/.indexes`). Each imported project stores an
|
|
212
|
+
absolute, fixed `knowledgePath`; changing the global root does not move existing
|
|
213
|
+
projects.
|
|
214
|
+
|
|
215
|
+
Existing project and shared-knowledge directories do not move when the root
|
|
216
|
+
changes. Brain/domain directory bindings are retained in the shell settings
|
|
217
|
+
after the engine acknowledges them. Existing engine bindings are reused when
|
|
218
|
+
first recording those fields. A failed registration is shown as pending, not
|
|
219
|
+
healthy. Old index directories are retained; indexes rebuild at the new root.
|
|
220
|
+
Settings, registration metadata, caches, runtime state, logs, and recovery
|
|
221
|
+
assets remain in the internal data directory; vector payloads do not:
|
|
222
|
+
|
|
223
|
+
```text
|
|
224
|
+
~/.project-knowledge-v5/
|
|
225
|
+
├── settings.json
|
|
226
|
+
├── projects.json # minimal project ID/order index
|
|
227
|
+
├── projects/<projectId>/
|
|
228
|
+
│ ├── config.json # fixed repoPath/knowledgePath
|
|
229
|
+
│ ├── state.json # tracking, claim, index, Hook state
|
|
230
|
+
│ └── requirements.jsonl # created only when used
|
|
231
|
+
├── knowledge-engine/ # durable claims, runs and cursors
|
|
232
|
+
├── cache/ # models, exports, context packs
|
|
233
|
+
├── runtime/ # claims, staging, journals, locks
|
|
234
|
+
├── logs/
|
|
235
|
+
│ ├── app/
|
|
236
|
+
│ ├── projects/<projectId>/
|
|
237
|
+
│ └── hooks/
|
|
238
|
+
└── recovery/ # migrations, promotion/index backups
|
|
239
|
+
|
|
240
|
+
<selected knowledge root>/
|
|
241
|
+
├── .indexes/ # rebuildable vector payloads
|
|
242
|
+
├── _shared/<brain or domain ID>/ # fixed shared-knowledge bindings
|
|
243
|
+
└── <project storage name>/
|
|
244
|
+
├── README.md # when produced by verified knowledge
|
|
245
|
+
├── GOAL.md
|
|
246
|
+
├── ARCHITECTURE.md
|
|
247
|
+
├── modules/*.md
|
|
248
|
+
└── changes/*.md
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Team knowledge is an explicit exception: an import may bind an existing
|
|
252
|
+
checked-out team-store subdirectory. Its final absolute path is still fixed in
|
|
253
|
+
the project config, must remain inside the selected store, and is treated as
|
|
254
|
+
externally owned when the project registration is deleted.
|
|
255
|
+
|
|
256
|
+
## Migration
|
|
257
|
+
|
|
258
|
+
The versioned `layout-v2` migration discovers legacy assets without modifying
|
|
259
|
+
them, creates a journal and centralized recovery backup, stages settings and
|
|
260
|
+
per-project metadata, validates preserved paths/secrets/pointers and any legacy
|
|
261
|
+
index, then activates files with the minimal registry last. The completion
|
|
262
|
+
marker is written only after the new stores reopen successfully.
|
|
263
|
+
|
|
264
|
+
Interrupted or failed migration keeps the legacy reader path available and
|
|
265
|
+
leaves source knowledge, old logs, configuration files, and backups intact for
|
|
266
|
+
retry or diagnosis.
|
|
267
|
+
|
|
268
|
+
## Product UI
|
|
269
|
+
|
|
270
|
+
The six primary pages are Brain, Start work, Knowledge search, Long-term
|
|
271
|
+
memory, Domains/projects and Activity. Start work embeds the real Workbench,
|
|
272
|
+
not a second chat implementation. Import projects from Domains/projects;
|
|
273
|
+
confirm both code and knowledge directories and retry only failed wiring.
|
|
274
|
+
|
|
275
|
+
Domain knowledge and confirmed brain memories live alongside existing project
|
|
276
|
+
knowledge. Adding a brain does not move project Markdown. Model credentials
|
|
277
|
+
are owned by Workbench; maintenance has a persisted default independent of
|
|
278
|
+
temporary chat selection. Runtime credentials never enter engine state.
|
|
279
|
+
|
|
280
|
+
System status groups four-module health, configuration and diagnostics.
|
|
281
|
+
Activity retains the structured-log capabilities:
|
|
282
|
+
|
|
283
|
+
- trace/debug/info/warn/error/fatal filtering;
|
|
284
|
+
- local-date, project, component, event, operation, Commit, and text filters;
|
|
285
|
+
- newest-first cursor pagination, pause/auto-refresh, and filtered export;
|
|
286
|
+
- operation-flow and structured error/stack details;
|
|
287
|
+
- logger health/degraded state and Hook/index/project read-only status;
|
|
288
|
+
- matching light/dark themes across the shell and native module frames.
|
|
289
|
+
|
|
290
|
+
Logs use `log/v2` JSONL, daily files and bounded segments. Retention defaults to
|
|
291
|
+
365 days; `0` disables time-based deletion. Capacity cleanup is deterministic.
|
|
292
|
+
Secrets are recursively redacted during write, query, error serialization, and
|
|
293
|
+
export. The log root is fixed under the internal data directory.
|
|
294
|
+
|
|
295
|
+
## HTTP security
|
|
296
|
+
|
|
297
|
+
The default loopback server accepts same-origin/loopback browser requests. It
|
|
298
|
+
does not use wildcard CORS. Binding to a non-loopback address requires
|
|
299
|
+
`KB_SITE_AUTH_TOKEN`, and requests must also pass Origin validation. Public AI
|
|
300
|
+
profile responses expose only masked secret metadata; generic errors return an
|
|
301
|
+
operation ID without a stack. There is no raw-file route.
|
|
302
|
+
|
|
303
|
+
## Repository layout
|
|
304
|
+
|
|
305
|
+
```text
|
|
306
|
+
_site/server.js # thin executable entry
|
|
307
|
+
_site/lib/server-app.js # HTTP/runtime composition
|
|
308
|
+
_site/lib/storage-layout.js # canonical internal paths
|
|
309
|
+
_site/lib/project-*-store.js # v2 registry/config/state stores
|
|
310
|
+
_site/lib/project-lifecycle-service.js
|
|
311
|
+
_site/lib/commit-reconciler.js
|
|
312
|
+
_site/lib/knowledge-promotion.js
|
|
313
|
+
_site/lib/index-service.js
|
|
314
|
+
_site/lib/structured-logger.js
|
|
315
|
+
_site/lib/knowledge-tool-runtime.js
|
|
316
|
+
_site/scripts/hook-trigger.js
|
|
317
|
+
ui/index.html # unified production web UI
|
|
318
|
+
ui/product.js, ui/product.css # shell navigation and state projection
|
|
319
|
+
_modules/knowledge-engine/ # verified dependency-free engine
|
|
320
|
+
bin/project-knowledge*.js # CLI and MCP entry points
|
|
321
|
+
desktop/ # Windows Electron package
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## Testing
|
|
325
|
+
|
|
326
|
+
```bash
|
|
327
|
+
npm ci
|
|
328
|
+
npm test -- --no-report
|
|
329
|
+
npm test --prefix desktop
|
|
330
|
+
npm pack --dry-run --json
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
The automated suite includes real Git Hooks, paths with spaces/non-ASCII text,
|
|
334
|
+
online and offline Commit reconciliation, crash-lock recovery, atomic index
|
|
335
|
+
replacement, migration fault injection, packaged-startup contracts, API
|
|
336
|
+
security and log redaction/cursors. Product browser acceptance uses one
|
|
337
|
+
1920×1080 desktop viewport and controlled model/embedding doubles; real-model
|
|
338
|
+
and real-index smoke tests are reported separately. No mobile matrix or new
|
|
339
|
+
Windows installer is claimed. Full crash-stage combinations and the final
|
|
340
|
+
switch of a user's existing data require separate acceptance.
|
|
341
|
+
|
|
342
|
+
See the [Leader / GLM Workbench playbook](docs/leader-glm-workbench-playbook.md)
|
|
343
|
+
for task dispatch and independent review, and the
|
|
344
|
+
[5.0.16 acceptance record](docs/release-5.0.16-acceptance.md) for this round's
|
|
345
|
+
actual results and remaining gates. These documents are not a release approval.
|
|
346
|
+
|
|
347
|
+
## License
|
|
348
|
+
|
|
349
|
+
[Apache-2.0](LICENSE). See [NOTICE](NOTICE).
|