@sanqianx/project-knowledge 5.0.18-rc.1 → 5.0.18-rc.3

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.
@@ -9,7 +9,7 @@
9
9
  "plugins": [
10
10
  {
11
11
  "name": "project-knowledge",
12
- "version": "5.0.18-rc.1",
12
+ "version": "5.0.18-rc.3",
13
13
  "source": "./plugins/project-knowledge",
14
14
  "description": "Search durable project decisions and implementation history through MCP."
15
15
  }
@@ -48,6 +48,24 @@ const intentPath = dataDir => path.join(dataDir, 'integration-intent.json');
48
48
  assert.deepEqual(created, { schema: SCHEMA, clients: { codex: 'disconnected' } });
49
49
  assert.deepEqual(readIntent(fresh), created, 'bootstrap creates the file when missing');
50
50
  }
51
+ // B2 (real-env regression): a mid-flight scan must never be recorded as a
52
+ // removal decision — unsettled clients stay absent so a later settled scan
53
+ // can fill them correctly.
54
+ {
55
+ const midFlight = tmpDataDir();
56
+ const unsettled = bootstrapIntent(midFlight, [
57
+ { client: 'claude', developmentCapture: { state: 'checking', installed: undefined } },
58
+ { client: 'codex', developmentCapture: {} },
59
+ { client: 'zcode', developmentCapture: { state: 'installed', installed: true } },
60
+ ]);
61
+ assert.deepEqual(unsettled, { schema: SCHEMA, clients: { zcode: 'connected' } }, 'checking/undefined entries must stay absent');
62
+ const settled = bootstrapIntent(midFlight, [
63
+ { client: 'claude', developmentCapture: { state: 'installed', installed: true } },
64
+ { client: 'codex', developmentCapture: { state: 'not-installed', installed: false } },
65
+ ]);
66
+ assert.equal(settled.clients.claude, 'connected', 'later settled scan fills the skipped client correctly');
67
+ assert.equal(settled.clients.codex, 'disconnected');
68
+ }
51
69
  // C: summarizeClient covers all five states plus precedence rules.
52
70
  {
53
71
  const failedRepair = { claude: { state: 'failed', at: new Date().toISOString(), error: 'boom' } };
@@ -56,16 +56,19 @@ function markIntent(dataDir, client, state) {
56
56
  return writeIntent(dataDir, clients);
57
57
  }
58
58
 
59
- // Migration: fill entries only for clients the file has never seen. A client
60
- // whose hooks are already installed counts as connected (standalone install
61
- // or pre-upgrade state); absent hooks count as disconnected — the store is
62
- // never allowed to rewrite a decision the user already made.
59
+ // Migration: fill entries only for clients the file has never seen AND whose
60
+ // status scan has settled — a mid-flight scan reports installed as undefined,
61
+ // which must never be recorded as a removal decision. A client whose hooks
62
+ // are installed counts as connected (standalone install or pre-upgrade
63
+ // state); settled-but-absent hooks count as disconnected — the store is never
64
+ // allowed to rewrite a decision the user already made.
63
65
  function bootstrapIntent(dataDir, clientsStatus) {
64
66
  const current = readIntent(dataDir);
65
67
  const clients = { ...(current?.clients || {}) };
66
68
  let changed = false;
67
69
  for (const entry of clientsStatus || []) {
68
70
  if (!entry || !entry.client || entry.client in clients) continue;
71
+ if (entry.developmentCapture?.state === 'checking' || entry.developmentCapture?.installed === undefined) continue;
69
72
  clients[entry.client] = entry.developmentCapture?.installed === true ? 'connected' : 'disconnected';
70
73
  changed = true;
71
74
  }
@@ -9,16 +9,16 @@
9
9
  "plugins/project-knowledge/hooks/codex.json": "216e03c07295606ef6ebb2c4f669ad0d790b5e7c4f3f34600488033db75e4239",
10
10
  "plugins/project-knowledge/scripts/context-hook.cjs": "da666153ad5723592cce42d25337ae649f7d93e43fab76b3c6d1263933de063f",
11
11
  "plugins/project-knowledge/scripts/mcp-launcher.cjs": "7c68830b5c73eb53ef030756a4de33987f7eab6b1a6cc15602835aac3f954893",
12
- "plugins/project-knowledge/.claude-plugin/plugin.json": "951a2b8893fd7986ad780d623fd42f35a5ba8ca552d45aa6544ae4e7f73d4ab9",
13
- "plugins/project-knowledge/.codex-plugin/plugin.json": "02b20b160ea12345c3b6ea540b44d7afbd01906be7941592678a74fc197ceee6",
14
- "plugins/project-knowledge/.mcp.json": "2135acafd1ca4e62cc8aae3298f13fa23791cf054ab5e3647af69d5d5a1f7b78",
12
+ "plugins/project-knowledge/.claude-plugin/plugin.json": "e3855760567dfdc732a5870bad58f0891a69ae9af779386ab46fe319938ae62d",
13
+ "plugins/project-knowledge/.codex-plugin/plugin.json": "7f1e2d6c5394e7afea2d0dd6980bc153bc48a2aa41b694d17293017626a9bbe4",
14
+ "plugins/project-knowledge/.mcp.json": "f00694356eb9e260b10e9266316e449e0cc54f3e65352edc549113a7188d8fd7",
15
15
  "ui/live-client.js": "0d81fa894c629bb839e1931fc3c5ebad4d831aae8232d6ce8c0f542e9e3559e8"
16
16
  },
17
17
  "modules": {
18
18
  "terminal": {
19
19
  "name": "@sanqianx/claude-ai-workbench",
20
20
  "installName": "claude-ai-workbench",
21
- "version": "0.13.2-rc.18",
21
+ "version": "0.13.2-rc.19",
22
22
  "files": {
23
23
  "LICENSE": "c1b9df1275e769f3dbab000d1e457a2d4b0f28eb5da6c77e48dc37eeba202ed7",
24
24
  "README.md": "43938c8a64397d340dcf633edc40a7cea7dd8a95b5f82cf612b2c15b66c380b6",
@@ -35,20 +35,20 @@
35
35
  "apps/minimal-test-host/README.md": "fa73136f4ee3865c2d91eb97b2e8c03679aa4688e44c1e1c8ec6e27d604b0de5",
36
36
  "docs/sdk/FILE_LAYOUT.md": "17882f96505c8161bfb66876684b9d2d3f50021a111b8b844502d3cb4e97870a",
37
37
  "docs/sdk/INTEGRATION.md": "d4c0c80d2d2fc610205102d703a429bfaa20f9f3a48f1718f5bab02ee90138df",
38
- "docs/sdk/openapi.yaml": "ece89afdd4e1a58f01f7e8db6581cee91baf2c918d68208e86200ff5abe0ac9d",
38
+ "docs/sdk/openapi.yaml": "6e0ec9e8ec8cb35b7790553644480d0a91ac99e81e2a5884adf6cb1f4fc19615",
39
39
  "docs/sdk/README.md": "7ab591d39c36a3b84cfdf487ff567040ec453975f3ef0fba86dc822094667b61",
40
- "package.json": "cfa3c5e1ca1f5dd4727fd96b3639f4b989a135451549f970047a72dd588be646",
40
+ "package.json": "db642a49e9f540345e97ebe4aef6e18bcf61d5fd4f2754ed05d97f1c0c363992",
41
41
  "packages/client/index.d.ts": "587a66845052dc5cc03c4f41d678808140ea258fdf914be1c6dd2f6c07c1aff1",
42
42
  "packages/client/index.js": "6c7abce75086b68c18b9fdab372eff8b70d4bb81da6e7e0f46e4af57de0c523d",
43
- "packages/client/package.json": "eb65b7e8d9dd1fe21c86b04830e83b1d86ed4f69b3dbf04428b33efb125ab6be",
43
+ "packages/client/package.json": "12b110be9d0eda3eebe935fdf1d813c83f773853afcde87658307c48b79f2d8f",
44
44
  "packages/client/README.md": "342dff9b1dcbc85fccc9b980ed3e4e455aa71133af1d0805b8431ea2ac564ef8",
45
45
  "packages/contracts/index.d.ts": "109ed9559b23f92b3840c484b9dd7f293a46866a3937a52e631e52692bb41927",
46
46
  "packages/contracts/index.js": "5eeb195d9c4cc54dab064510684ae1350d325fbaf47ff824dad4a04a5bb67d11",
47
- "packages/contracts/package.json": "cffc5c24c523871b52e4e6b1ab0d3d7b81cfd11c3e1f53f14d681874eaee8d4b",
47
+ "packages/contracts/package.json": "3dc99c1cdcb1ee66f94a93937d34c363f08a4378afe9d7b3fc5f624ebce6f9ed",
48
48
  "packages/contracts/README.md": "44d83a3cc508cec6c5c20dfa1f2c08d5ea03e3afb2853639fdc0a9cc8eb5b9c8",
49
49
  "packages/core/index.d.ts": "c95b24a13f8aeeb128497833cf298790563baca6036ea5d29a9d8daff53199d7",
50
50
  "packages/core/index.js": "825640d0edc7dd130f22da1f580d2cda355566a40b0b36e42e5f38909605bbfa",
51
- "packages/core/package.json": "935f642db83942faecd1c9276c0f48365f968a6b17c4fd768d93272db891dbcc",
51
+ "packages/core/package.json": "f3359616ace9be2ceb9a3aba4969b989401e5deb7fdda618f5022bca0b70fed7",
52
52
  "packages/core/README.md": "e222c546104a168f1038d95c6c4efb8e5603edd6145ab2cab79cab977fb710e5",
53
53
  "packages/server/bin/agent-terminal-server.js": "043dff4d76e3fd213b666a55e581ed1e72f9e5b8de6cb798fbf42bd39ed26861",
54
54
  "packages/server/bin/claude-workbench-server.js": "b03c730b6d86faf6974afea26c74109d59b1bbc1ecc656c1d6270258708694ac",
@@ -85,7 +85,7 @@
85
85
  "packages/server/lib/system-doctor.js": "d098a046f425e90ef25209be69d78beefdfd9c2af92f08068a9bfc52053a8f7d",
86
86
  "packages/server/lib/ui-preferences-store.js": "e108cb22e7cc1f3438704913d5401e01de2c0e717eb2abd3bdc4727209393819",
87
87
  "packages/server/lib/workbench-service.js": "12477e3556b4c3d49adc3b69c0783f79335d87fbfc727ba5a19c598e2a4118d4",
88
- "packages/server/package.json": "bf4e1c055e6115c17fe5b3636ac477bd430176aa9650ce5e1013862fae6342c8",
88
+ "packages/server/package.json": "e73fe67c15ce7c7e28f4fa86213c1960415bbb77d9c53f89e510120eb044b3b6",
89
89
  "packages/server/README.md": "a34cfaa4f4e859008b44e2be8e1aafb56e97fe83e6129c968a8562945fa843f3",
90
90
  "packages/ui/ai-profile-settings.d.ts": "0551b6c6eda6d18ea89a976daddf01b2161195f4874fe2d67a57cd9ecc6ce643",
91
91
  "packages/ui/ai-profile-settings.js": "e92bbac67a1199d473e4e44b32d1cc76c5b6c79306d4fef9d9067a1bb6ec42ca",
@@ -93,7 +93,7 @@
93
93
  "packages/ui/claude-terminal.js": "96bd217a4a7e4792ae3fbaaf46249ecee13b0f4e01fc6d25a1b8b22d8f8fe00c",
94
94
  "packages/ui/index.d.ts": "e547ab39640fe7519fb367b78442dc8a2c51b2efd17b66f8b0a003b154b36ead",
95
95
  "packages/ui/index.js": "f4394aabd395938f5c3fe587e430471d4033e83945a9b9c7e0149ad4040982c9",
96
- "packages/ui/package.json": "f08f2d43068ae70dd8740744f414d45eb3968f4724668ebdbc7d4b1b672d67e2",
96
+ "packages/ui/package.json": "7b6698bbe75dc6d0c1e901febdeab686d4cf5c9fc77cb99340647034f6d29318",
97
97
  "packages/ui/README.md": "793c4a9c286fee23f39062a1976ca3afe9d2816dcdb55e156ba940e1ef514f89",
98
98
  "packages/ui/theme.css": "8f03a081272a7db11b196f7a70d0fafb1f8d954778f329f1ba53d110d9d5fd98",
99
99
  "src/assets/claude-prompts.json": "cb111f2e0a45afe8a31c251a504d1ab5375966ed61291660e61fd2efd77f6d9f",
@@ -106,7 +106,7 @@
106
106
  "src/backend/lib/ai-vendor-presets.js": "02c6de9c2e89ad0286426e8eb4900c3c6a4960ef0e8f9d27ffb5836062abfbb2",
107
107
  "src/backend/lib/ai-workspace.js": "969917f26cd0b0a272932714819d838a2bab2a5aac5c4e946647dfa3afa479bf",
108
108
  "src/backend/lib/automation-config.js": "c23b868bbcfbcece4465c9c939faccaef582667e858f3f36fc7b6d19bcd545e6",
109
- "src/backend/lib/claude-cli-runner.js": "957231165f52eea5cd3c6c557d279199fc3924933d7a280f737e211abf3b6342",
109
+ "src/backend/lib/claude-cli-runner.js": "d0951f8f40e999c9e0866b60350fddb87329a19178969120b008325da5d34fe7",
110
110
  "src/backend/lib/data-dir.js": "a62d96d1ab538e37690ad31fe4f51e84120b55b6bc767661ed98ad9242f879db",
111
111
  "src/backend/lib/llm-client.js": "76d1a73fbea445b5ac34c23d1a3b084e0884c5efed6f7d3b9ed76d406d2cd038",
112
112
  "src/backend/lib/model-context-windows.js": "f64f7c995143407b7390105087e3ebcd56a5a3ba2fd3019478a86f9e3c6b7896",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanqianx/project-knowledge",
3
- "version": "5.0.18-rc.1",
3
+ "version": "5.0.18-rc.3",
4
4
  "description": "Knowledge base manager with Git integration, AI-driven analysis, and bilingual (zh-CN/en-US) knowledge output",
5
5
  "main": "_site/server.js",
6
6
  "scripts": {
@@ -88,7 +88,7 @@
88
88
  "@sanqianx/vector-hub": "1.0.8-rc.8",
89
89
  "buffer": "^6.0.3",
90
90
  "cheerio": "^1.2.0",
91
- "claude-ai-workbench": "npm:@sanqianx/claude-ai-workbench@0.13.2-rc.18",
91
+ "claude-ai-workbench": "npm:@sanqianx/claude-ai-workbench@0.13.2-rc.19",
92
92
  "cross-spawn": "7.0.6",
93
93
  "dotenv": "^17.4.2",
94
94
  "gpt-tokenizer": "^3.4.0",
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "project-knowledge",
4
4
  "hooks": "./hooks/claude.json",
5
- "version": "5.0.18-rc.1",
5
+ "version": "5.0.18-rc.3",
6
6
  "description": "Read durable project decisions and implementation history from Project Knowledge.",
7
7
  "author": {
8
8
  "name": "SanQianX",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "project-knowledge",
3
- "version": "5.0.18-rc.1",
3
+ "version": "5.0.18-rc.3",
4
4
  "description": "Read durable project decisions and implementation history from Project Knowledge.",
5
5
  "author": {
6
6
  "name": "SanQianX",
@@ -8,7 +8,7 @@
8
8
  "const fs=require('fs'),path=require('path'),os=require('os');const PKG='@sanqianx/project-knowledge',SC='project-knowledge/integration-runtime/v1';let f='';const root=process.env.CLAUDE_PLUGIN_ROOT||process.env.PLUGIN_ROOT;if(root){f=path.join(root,'scripts','mcp-launcher.cjs');if(!fs.existsSync(f))f=''}if(!f){const dd=process.env.KB_DATA_DIR||path.join(os.homedir(),'.project-knowledge-v5');try{const bp=path.join(dd,'integration-runtime.json');const st=fs.statSync(bp);if(st.isFile()&&st.size<=32768){const b=JSON.parse(fs.readFileSync(bp,'utf8'));if(b&&b.schema===SC&&b.packageName===PKG&&typeof b.packageRoot==='string'&&path.isAbsolute(b.packageRoot)){const c=path.join(b.packageRoot,'plugins','project-knowledge','scripts','mcp-launcher.cjs');const rr=fs.realpathSync(b.packageRoot),cr=fs.realpathSync(c);const rel=path.relative(rr,cr);if(rel&&rel!=='..'&&!rel.startsWith('..'+path.sep)&&!path.isAbsolute(rel)&&fs.statSync(cr).isFile())f=cr}}}catch(e){}}if(!f){console.error('[project-knowledge-mcp] 未能通过受信任插件根或已验证的安装绑定定位启动器,已停止;不访问网络,也不加载工作目录源码。');process.exit(127)}require(f);"
9
9
  ],
10
10
  "env": {
11
- "KB_PLUGIN_VERSION": "5.0.18-rc.1"
11
+ "KB_PLUGIN_VERSION": "5.0.18-rc.3"
12
12
  }
13
13
  }
14
14
  }