@sanqianx/project-knowledge 5.0.9-rc.8 → 5.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +140 -0
  3. package/README.md +11 -4
  4. package/_modules/knowledge-engine/README.md +7 -0
  5. package/_modules/knowledge-engine/package.json +1 -1
  6. package/_modules/knowledge-engine/src/coordinator.js +1 -1
  7. package/_modules/knowledge-engine/src/headless-analyzer.js +4 -1
  8. package/_modules/knowledge-engine/src/knowledge-targets.js +46 -0
  9. package/_modules/knowledge-engine/src/retrieval.js +2 -1
  10. package/_modules/knowledge-engine/src/runtime/knowledge-promotion.js +6 -2
  11. package/_modules/knowledge-engine/src/runtime/markdown-knowledge-indexer.js +7 -2
  12. package/_modules/knowledge-engine/src/store.js +4 -6
  13. package/_site/_test/bin-cli-test.js +15 -2
  14. package/_site/_test/mcp-server-test.js +1 -1
  15. package/_site/_test/module-agent-start-proxy-test.js +65 -0
  16. package/_site/_test/module-bridge-eventbridge-test.js +1 -1
  17. package/_site/_test/module-wiring-unbind-race-test.js +59 -0
  18. package/_site/_test/path-consistency-test.js +1 -1
  19. package/_site/_test/product-diagnostics-ui-test.js +5 -1
  20. package/_site/_test/product-progress-status-test.js +70 -0
  21. package/_site/_test/shared-scope-root-binding-test.js +67 -0
  22. package/_site/_test/test-server-cleanup-test.js +5 -1
  23. package/_site/_test/vector-storage-root-test.js +16 -0
  24. package/_site/lib/engine-connection.js +4 -1
  25. package/_site/lib/knowledge-tool-runtime.js +1 -1
  26. package/_site/lib/module-bridge.js +65 -8
  27. package/_site/lib/server-app.js +4 -2
  28. package/_site/lib/settings-store.js +20 -0
  29. package/module-runtime-manifest.json +40 -40
  30. package/package.json +3 -3
  31. package/plugins/project-knowledge/.claude-plugin/plugin.json +1 -1
  32. package/plugins/project-knowledge/.codex-plugin/plugin.json +1 -1
  33. package/plugins/project-knowledge/.mcp.json +1 -1
  34. package/ui/product.css +1 -0
  35. package/ui/product.js +4 -2
  36. package/vendor-manifest.json +10 -9
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "project-knowledge",
4
- "version": "5.0.9-rc.8",
4
+ "version": "5.0.9",
5
5
  "description": "Read durable project decisions and implementation history from Project Knowledge.",
6
6
  "author": {
7
7
  "name": "SanQianX",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "project-knowledge",
3
- "version": "5.0.9-rc.8",
3
+ "version": "5.0.9",
4
4
  "description": "Read durable project decisions and implementation history from Project Knowledge.",
5
5
  "author": {
6
6
  "name": "SanQianX",
@@ -6,7 +6,7 @@
6
6
  "args": [
7
7
  "-y",
8
8
  "--package",
9
- "@sanqianx/project-knowledge@5.0.9-rc.8",
9
+ "@sanqianx/project-knowledge@5.0.9",
10
10
  "project-knowledge-mcp"
11
11
  ]
12
12
  }
package/ui/product.css CHANGED
@@ -1,4 +1,5 @@
1
1
  :root{--page:#f3f5f7;--surface:#fff;--surface2:#f8f9fb;--surface3:#edf1f4;--line:#dce2e8;--text:#202733;--muted:#687587;--faint:#8e99a7;--nav:#eef1f4;--accent:#516f89;--accent-soft:#e6edf3;--good:#397761;--bad:#a05252;--bad-soft:#fbeeee;color-scheme:light}
2
+ label>.detail-path{display:block;width:100%;margin:8px 0 0;color:var(--text)}
2
3
  .agent-capture-row{display:flex;align-items:center;gap:16px;padding:16px 0;border-bottom:1px solid var(--line)}.agent-capture-row>div:first-child{flex:1;min-width:0}.agent-capture-row small{display:block;color:var(--muted);margin-top:8px;overflow-wrap:anywhere}.agent-capture-row .actions{flex-shrink:0}#agentCaptureFeedback{white-space:pre-wrap}
3
4
  #logsDialog{display:flex;flex-direction:column;overflow:hidden}#logsDialog:not([open]){display:none}#logsContent{overflow:auto;min-height:0;flex:1;margin-top:16px}#logsContent .row{align-items:flex-start;cursor:pointer}#logsContent pre{flex:1;min-width:0;margin:0}#logsContent .log-entry{border-bottom:1px solid var(--line)}#logsContent .log-detail{padding:16px;background:var(--surface2);max-height:320px;overflow:auto}#logsContent [data-level=warn],#logsContent [data-level=error],#logsContent [data-level=fatal]{color:var(--bad)}#logsContent .row time,#logsContent .row pre{color:inherit}
4
5
  @media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation:none!important;transition:none!important}}
package/ui/product.js CHANGED
@@ -160,6 +160,7 @@
160
160
  if (epoch !== registryEpoch) return;
161
161
  state.brain = brain.brain; state.root = brain.knowledgeRoot; state.projects = projects.projects; state.health = health.modules; state.ownership = health.ownership;
162
162
  state.indexStorage = { path: brain.indexStoragePath, ...brain.configuration?.indexStorage };
163
+ state.scopeStatus = brain.configuration?.scopeStatus;
163
164
  if (!activeProject()) { state.projectId = state.projects[0]?.projectId || ''; state.epoch++; Object.keys(frames).forEach(frameContext); }
164
165
  renderProjectOptions(); renderSystem(); connectProgress(); await refreshSnapshot(); setView(state.view);
165
166
  } catch (error) { toast(error.message); }
@@ -177,6 +178,7 @@
177
178
  $('systemTitle').textContent = pending ? '知识引擎连接待恢复' : down.length ? '部分服务需要处理' : '系统连接正常';
178
179
  $('systemDetail').textContent = pending ? `${state.ownership.message || '服务恢复后自动重试。'}${state.ownership.error ? ` · ${state.ownership.error.step} (${state.ownership.error.code})` : ''}` : down.length ? down.map(k => modules[k]).join('、') : '本机知识服务已连接';
179
180
  if (storagePending && !pending && !down.length) { $('systemDot').className = 'dot issue'; $('systemTitle').textContent = '索引目录接线待恢复'; $('systemDetail').textContent = `目标目录:${state.indexStorage.expectedPath}。请在系统状态中修复接线。`; }
181
+ if (state.root && state.scopeStatus?.status === 'pending' && !pending && !down.length) { $('systemDot').className = 'dot issue'; $('systemTitle').textContent = '共享知识接线待恢复'; $('systemDetail').textContent = '已有知识与长期记忆保留,请在系统状态中修复接线。'; }
180
182
  $('moduleHealth').innerHTML = Object.entries(modules).map(([key, name]) => `<div class="row"><div><b>${esc(name)}</b><small>${esc(state.health[key]?.url || '')}</small></div>${badge(state.health[key]?.up ? '在线' : '离线', state.health[key]?.up ? 'up' : 'issue')}</div>`).join('');
181
183
  if (!navigator.onLine) {
182
184
  $('systemDot').className = 'dot issue'; $('systemTitle').textContent = '网页连接中断';
@@ -385,7 +387,7 @@
385
387
  on('embeddingForm', 'submit', async event => { event.preventDefault(); await saveEmbedding(); });
386
388
  on('disableEmbedding', 'click', () => saveEmbedding(false));
387
389
  on('embeddingDialog', 'close', () => { $('embeddingSecret').value = ''; });
388
- on('saveBrainSettings', 'click', async () => { await api('/api/brain', { method: 'PATCH', body: { name: $('brainName').value } }); const saved = await api('/api/settings', { method: 'PATCH', body: { knowledge: { rootPath: $('knowledgeRoot').value } } }); toast(saved.configuration?.indexStorage?.status === 'ready' ? '设置已保存,索引目录已生效;已有知识未移动。' : '设置已保存,索引目录接线待恢复;已有知识保留。'); await refreshRegistry(true); if (resumeImport) closeSystem(); });
390
+ on('saveBrainSettings', 'click', async () => { await api('/api/brain', { method: 'PATCH', body: { name: $('brainName').value } }); const saved = await api('/api/settings', { method: 'PATCH', body: { knowledge: { rootPath: $('knowledgeRoot').value } } }); toast(saved.configuration?.scopeStatus?.status === 'pending' ? '设置已保存,共享知识接线待恢复;已有知识保留。' : saved.configuration?.indexStorage?.status === 'ready' ? '设置已保存,索引目录已生效;已有知识未移动。' : '设置已保存,索引目录接线待恢复;已有知识保留。'); await refreshRegistry(true); if (resumeImport) closeSystem(); });
389
391
  on('setupImportRoot', 'click', async () => { $('importDialog').close(); resumeImport = true; await openSystem(); $('knowledgeRoot').focus(); });
390
392
  on('pickRoot', 'click', () => pick('knowledgeRoot')); on('pickCode', 'click', () => pick('importCode')); on('pickKnowledge', 'click', () => pick('importKnowledge'));
391
393
  on('openEngine', 'click', () => { closeSystem(); initializeFrame('engine'); $('engineDialog').showModal(); post('engine', { type: 'kb:visibility', visible: true }); });
@@ -449,7 +451,7 @@
449
451
  renderSystem(); render();
450
452
  });
451
453
  window.addEventListener('online', () => {
452
- $('activityConnection').textContent = '正在恢复快照'; refreshRegistry();
454
+ $('activityConnection').textContent = state.engineAvailable && state.stream?.readyState === EventSource.OPEN ? '已连接实时更新' : '正在恢复快照'; refreshRegistry();
453
455
  if ($('logsDialog').open) loadLogs().catch(error => toast(error.message));
454
456
  });
455
457
  window.addEventListener('beforeunload', () => { state.stream?.close(); logStream?.close(); });
@@ -3,22 +3,23 @@
3
3
  "modules": {
4
4
  "knowledge-engine": {
5
5
  "name": "@sanqianx/ai-coding-knowledge-engine",
6
- "version": "0.2.3-rc.3",
6
+ "version": "0.2.3-rc.7",
7
7
  "root": "_modules/knowledge-engine",
8
8
  "files": {
9
- "README.md": "c367f328a0770bf0c53e80e4cfb7b3f7815589312e793755ec00b677b84e601c",
10
- "package.json": "6f0dc1fecb5d3bd0da4c1714977cf2e5f767fb49cb54ec92caff08fff1ebec6d",
9
+ "README.md": "351d971a522253c5dceb424b9f1a9c2d9427cd01c2b76d0c37fbc17b76f71ba3",
10
+ "package.json": "2da4b42d29e6742ea4ac8f285ffc49da66e0ed44d1d0d136cfab1e1b485093b4",
11
11
  "src/analysis-contract.js": "fee063967d32eefc955cf0729f7dc8cb31bd690b85e22471c9059494a599c77a",
12
12
  "src/analysis-output.js": "95a3c19dcc9ab85d1dba7fee5b9aec80f9c000dfba89da3fd0be25a81e2fb680",
13
13
  "src/analysis-worker.js": "a105cabe6e1573b2d986b1e7a5aaf615e2fb53524156fc8e4e2c0a71f2c97e55",
14
14
  "src/bin.js": "22208907431d0f3a971a669c7e5eb44b3b7af9bbb36fd7ba17c3b90c4288bd70",
15
15
  "src/bridge-client.js": "ae0dba21e4286694bcd9e064ca36564ec997969ae1eb1ce4f8a6665e447cbffe",
16
- "src/coordinator.js": "1df096060faa83245c49b65a861f32cdaeeb7a190b94abf2ad6477151d7ca2ff",
16
+ "src/coordinator.js": "1d515d891a781fbad3ce7df39fa083dda2663a8bcd5610ff52dc8c307e2c5fbd",
17
17
  "src/diagnostics.js": "f7b516ace61a1e9faaa6876930b9e2e258499a25857d1203f4e53d28bfd0fa1a",
18
- "src/headless-analyzer.js": "cfe54b392b2aff6e2c5157481dfeb5ccebc4ce83d1d74aa44f28cf2eb923b013",
18
+ "src/headless-analyzer.js": "d181d50cd7756d217d7d66c4a4c4e528453c8527dc6fe413a19788a47ccbf323",
19
19
  "src/index-request.js": "78f26b872299005499fff4f2d1f9e8f986784f2ff36a5cf2be2b1e7b7c7d9378",
20
+ "src/knowledge-targets.js": "aa44ec285d16d7b1c0b63bf084058a1d6f867fa9929c753b6b0cbb24f7b20ee2",
20
21
  "src/memories.js": "0a8667e6daba99fa5022393951a28e96cdadf98af85b6af9a6be96c7f4e896fc",
21
- "src/retrieval.js": "bbb09cefc3c6ed692a51edfeecf6ac50619b8a2afbdf2034e0fdb5e00f4cfa68",
22
+ "src/retrieval.js": "4cfc2a6d11fcd480ac4e87818729e475b0c24917082e460594e62af0509afdd4",
22
23
  "src/runtime/README.md": "9be676eca76a7857b34d7357194e6f0ee733c22e61d962d53984715dbec7f673",
23
24
  "src/runtime/atomic-file.js": "9846b4b69db5ded811acf19a1181ef93615d93efaa542b858e552a7f3124ad23",
24
25
  "src/runtime/automation-config.js": "6498c5397be12b155829740595a1553d4dcd6eaa7db6ced3ef88fdc60218f00e",
@@ -32,13 +33,13 @@
32
33
  "src/runtime/conversation-store.js": "644318f9c04376a3317ced240dd94afa99a79631f0ecc394c5aa298ae2bc0474",
33
34
  "src/runtime/evidence-bundle.js": "33d4614849d5e1d69aba8b75c3a43c18b7b6f94e5c78654c82ef631331cc94cc",
34
35
  "src/runtime/git-runner.js": "b74fe197bd4dcf3e70635ef7b1f2615edf965c1d9a3ffe5406aabd41b76d74a9",
35
- "src/runtime/knowledge-promotion.js": "c24aba505caf11cdc8faba763beffc65956c1330ef28ed5fbd6ae16eac640fa6",
36
+ "src/runtime/knowledge-promotion.js": "892a227921ca399e80ea7b3991bfd13de0ffc221c7a0562393f1e5d33c2d00fa",
36
37
  "src/runtime/knowledge-retrieval-service.js": "75444f495a9ad0720af0e57b8d27d7ac1325c78a768f4f68ebd86ebc2524945e",
37
38
  "src/runtime/layout.js": "c48fa1db62e5df1edefe13218e470c5ceea4ef2781293512c2c18e5c2ba0c7e9",
38
- "src/runtime/markdown-knowledge-indexer.js": "44a76a9adefad07e78f77b1106b10d6c1cc7873d76362df4c546892b21f3939c",
39
+ "src/runtime/markdown-knowledge-indexer.js": "4d6b5b955849d274ca0614ef030c94526da7c39ab0874f02c168d0681f5b1406",
39
40
  "src/runtime/scanner.js": "d99fa8d74a6fbbaae75ca49f62127e14cf9e48b1404e4b4d597ef39df5441410",
40
41
  "src/server.js": "7deff466d28b94ec8975cd87ebd55c59d0aa6b49a8dfa447b552b1d32aa9c4b7",
41
- "src/store.js": "71f0417c2c1e42b89429e3dee1adff7b2c09e86682cb3f4843ce6d9e5aafd7ec",
42
+ "src/store.js": "7dd1a60fd5338cf91ff8836c0c18f29b101dcaf17d4b9f07d07716799543f577",
42
43
  "ui/app.css": "7ad370c269e60a7b5ec907d81a607b2d16bd07b2d7c22a81f102dab51eeb2889",
43
44
  "ui/app.js": "33a2ba38f0dafbbb2e30a1eb3fc93476bfcaf528e124e1a9b2edd2fb69221e9e",
44
45
  "ui/index.html": "ce3565cfefd4838b11d37a91a906ef26ca5a1834844fe3f7c897b56851a3c418"