@sanqianx/project-knowledge 5.0.18-rc.4 → 5.0.19
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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +9 -0
- package/_modules/knowledge-engine/src/analysis-contract.js +4 -3
- package/_modules/knowledge-engine/src/coordinator.js +1 -0
- 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/_site/_test/candidate-bin-content-test.js +35 -0
- package/_site/_test/candidate-product-assets-test.js +13 -0
- package/_site/_test/cdp-browser-failure-test.js +103 -100
- package/_site/_test/conversation-origin-test.js +15 -0
- package/_site/_test/fixtures/retrieval-gold-queries.json +32 -0
- package/_site/_test/module-index-proxy-test.js +33 -0
- package/_site/_test/module-terminal-restart-test.js +63 -0
- package/_site/_test/registry-events-test.js +38 -0
- package/_site/_test/workbench-context-receipts-test.js +22 -0
- package/_site/lib/commit-conversation-binder.js +1 -0
- package/_site/lib/conversation-store.js +2 -0
- package/_site/lib/engine-connection.js +4 -1
- package/_site/lib/live-gateway.js +3 -1
- package/_site/lib/module-bridge.js +19 -10
- package/_site/lib/registry-events.js +16 -0
- package/_site/lib/server-app.js +10 -1
- package/_site/scripts/pack-module-candidates.js +21 -4
- package/_site/scripts/verify-retrieval-gold.js +83 -0
- package/docs/leader-glm-workbench-playbook.md +4 -1
- package/docs/release-5.0.19-acceptance.md +25 -0
- package/module-runtime-manifest.json +104 -102
- package/package.json +109 -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/ui/product.js +29 -4
- package/vendor-manifest.json +9 -8
|
@@ -2,123 +2,125 @@
|
|
|
2
2
|
"schema": "project-knowledge/module-content/v1",
|
|
3
3
|
"productFiles": {
|
|
4
4
|
"ui/index.html": "737b8f5c745270797950c5975f458a13ffe1ea738f921e814bfbbe5e56813fed",
|
|
5
|
-
"ui/product.js": "
|
|
5
|
+
"ui/product.js": "855f13e63664156e55b794b0c254f7aaa45681c0a031495da2aae820db635249",
|
|
6
|
+
"ui/live-client.js": "0d81fa894c629bb839e1931fc3c5ebad4d831aae8232d6ce8c0f542e9e3559e8",
|
|
6
7
|
"ui/product.css": "4f300b08c086a939831d7ee69df01f23641457c0d606af29e9d4ce8a6d28bc9d",
|
|
7
8
|
"ui/favicon.svg": "c48be946b224112ebb0238b44263f7a61bda31e531afa895c2e9801c0ff24f32",
|
|
8
9
|
"plugins/project-knowledge/hooks/claude.json": "d61510327e3e1facbb4c645228e9f50cad05a88b33d80c4c22e5ba9f8b9f5359",
|
|
9
10
|
"plugins/project-knowledge/hooks/codex.json": "216e03c07295606ef6ebb2c4f669ad0d790b5e7c4f3f34600488033db75e4239",
|
|
10
11
|
"plugins/project-knowledge/scripts/context-hook.cjs": "da666153ad5723592cce42d25337ae649f7d93e43fab76b3c6d1263933de063f",
|
|
11
12
|
"plugins/project-knowledge/scripts/mcp-launcher.cjs": "7c68830b5c73eb53ef030756a4de33987f7eab6b1a6cc15602835aac3f954893",
|
|
12
|
-
"plugins/project-knowledge/.claude-plugin/plugin.json": "
|
|
13
|
-
"plugins/project-knowledge/.codex-plugin/plugin.json": "
|
|
14
|
-
"plugins/project-knowledge/.mcp.json": "
|
|
15
|
-
"ui/live-client.js": "0d81fa894c629bb839e1931fc3c5ebad4d831aae8232d6ce8c0f542e9e3559e8"
|
|
13
|
+
"plugins/project-knowledge/.claude-plugin/plugin.json": "71a2693a98a05bef7290c4dcc8020745057b36045cfd93540dae70e4bde0a018",
|
|
14
|
+
"plugins/project-knowledge/.codex-plugin/plugin.json": "b87bdcd44f5e3a5c7a5f44e4f4bc9c77dd28ee9080a0e54a7445316b1f0d534f",
|
|
15
|
+
"plugins/project-knowledge/.mcp.json": "0714e6a89f92eaf93508e08ad1aa3917982bf3cfea3969aabef27cf518e0a795"
|
|
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.
|
|
21
|
+
"version": "0.13.2-rc.21",
|
|
22
22
|
"files": {
|
|
23
|
-
"LICENSE": "
|
|
24
|
-
"README.md": "
|
|
25
|
-
"apps/agent-terminal/app.css": "
|
|
26
|
-
"apps/agent-terminal/app.js": "
|
|
27
|
-
"apps/agent-terminal/index.html": "
|
|
28
|
-
"apps/ai-profile-settings-host/index.html": "
|
|
29
|
-
"apps/ai-profile-settings-host/page.css": "
|
|
30
|
-
"apps/ai-profile-settings-host/page.js": "
|
|
31
|
-
"apps/minimal-test-host/host.css": "
|
|
32
|
-
"apps/minimal-test-host/host.js": "
|
|
33
|
-
"apps/minimal-test-host/index.html": "
|
|
34
|
-
"apps/minimal-test-host/optional-mock/fault-injection.js": "
|
|
35
|
-
"apps/minimal-test-host/README.md": "
|
|
36
|
-
"docs/sdk/FILE_LAYOUT.md": "
|
|
37
|
-
"docs/sdk/INTEGRATION.md": "
|
|
38
|
-
"docs/sdk/openapi.yaml": "
|
|
39
|
-
"docs/sdk/README.md": "
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"packages/client/index.
|
|
43
|
-
"packages/client/
|
|
44
|
-
"packages/client/
|
|
45
|
-
"packages/
|
|
46
|
-
"packages/contracts/index.
|
|
47
|
-
"packages/contracts/
|
|
48
|
-
"packages/contracts/
|
|
49
|
-
"packages/
|
|
50
|
-
"packages/core/index.
|
|
51
|
-
"packages/core/
|
|
52
|
-
"packages/core/
|
|
53
|
-
"packages/
|
|
54
|
-
"packages/server/bin/
|
|
55
|
-
"packages/server/bin/claude-workbench.js": "
|
|
56
|
-
"packages/server/
|
|
57
|
-
"packages/server/index.
|
|
58
|
-
"packages/server/
|
|
59
|
-
"packages/server/lib/agent-
|
|
60
|
-
"packages/server/lib/agent-
|
|
61
|
-
"packages/server/lib/
|
|
62
|
-
"packages/server/lib/
|
|
63
|
-
"packages/server/lib/bridges/
|
|
64
|
-
"packages/server/lib/
|
|
65
|
-
"packages/server/lib/
|
|
66
|
-
"packages/server/lib/
|
|
67
|
-
"packages/server/lib/
|
|
68
|
-
"packages/server/lib/
|
|
69
|
-
"packages/server/lib/
|
|
23
|
+
"LICENSE": "de260a483f1c8a229d61d833aaabad9f9a7438f3384c59abefa50182cb798199",
|
|
24
|
+
"README.md": "aac0a5a6bc9b0ec860d5273530975c0f9e0993f05424517c8edb879d02aa0db7",
|
|
25
|
+
"apps/agent-terminal/app.css": "1989662d054b31f6e3fcd16bb8eb6f842405660151551026ce95daf8927b626b",
|
|
26
|
+
"apps/agent-terminal/app.js": "9808737ab42487da0a3c5cbdf305b3a1d76de28fc76c77d05fd962ae3d09d37a",
|
|
27
|
+
"apps/agent-terminal/index.html": "5ba290f2277cb947a4599c1fdd95ccb44e3da700f077c24a7de30ffb0555de48",
|
|
28
|
+
"apps/ai-profile-settings-host/index.html": "ab98983ac6038fe169efa7430668c3c82b454f23b9964a8adbd4d82cd05d69ef",
|
|
29
|
+
"apps/ai-profile-settings-host/page.css": "fae27a697afaee7046c0e45f5c98070fd047c7d226b63e16a6bf3f2b7bb524ce",
|
|
30
|
+
"apps/ai-profile-settings-host/page.js": "986c1f4c5ed9b93d8cbdd94e5b5a6af79203e1416ca7c16508630415a8bb682c",
|
|
31
|
+
"apps/minimal-test-host/host.css": "633de38f9d054792be6cdcbcacfdf383d2f8d9f6ffb7a53dbeb1f451878411de",
|
|
32
|
+
"apps/minimal-test-host/host.js": "b24822372079a4e1b443657b4cbfa5c5a6cea63a183d418e570d600242b49c13",
|
|
33
|
+
"apps/minimal-test-host/index.html": "e301b3fe8cf041addee094e7e65939467385921e6f0f842562a5a6825cc8eff4",
|
|
34
|
+
"apps/minimal-test-host/optional-mock/fault-injection.js": "49f0a5f629e8d6e2e87eb80cad9b5f516c5e6a7794c856a15126714df9961515",
|
|
35
|
+
"apps/minimal-test-host/README.md": "8f47acf0c32ce57ba511757b783e63638959a90d6d126fd6bf5204e9c7bebc69",
|
|
36
|
+
"docs/sdk/FILE_LAYOUT.md": "0b0c6bca066b09c605f84ac3f6c4fda0a409d0a9d65093f0760eae45a26ec30c",
|
|
37
|
+
"docs/sdk/INTEGRATION.md": "aa8e6ef40af78562ad3dd73cbba1a840a6041ac7eab86b70f48e13ff9cc52663",
|
|
38
|
+
"docs/sdk/openapi.yaml": "b10e656e7f412c17ef18e2281057a2ae94f328631e9a601bbf4b9d52f1692217",
|
|
39
|
+
"docs/sdk/README.md": "3d95a0d76cc48cff47779caef2ed0d1f5b76f3591216c6ebf7a06895b7c1a964",
|
|
40
|
+
"docs/sdk/SESSION_EVENTS.md": "5e36797fbef7656b289df9369f498388b79efde31fc8b584cce871795885165f",
|
|
41
|
+
"package.json": "046e2b34bddaebaaf4bcefaa1544724094dcc3112575d36d3c900075663fe37d",
|
|
42
|
+
"packages/client/index.d.ts": "c1fdfa7c9165940381af14549a1f7f347d6912daf349d1adb5f9283b3148c9ed",
|
|
43
|
+
"packages/client/index.js": "591dac2c6a8a31dd260f682313b31dc9ffa92eb27d67b058324f5c256c82e932",
|
|
44
|
+
"packages/client/package.json": "5307c474e787070ae39aa61fa50fda32e38a2b6a2a4c2c96eaea39aeff3a99d0",
|
|
45
|
+
"packages/client/README.md": "be2c174260104b850bd7b471fdec47038dbc7b883f7aae3f561cfdcd04e6fcc8",
|
|
46
|
+
"packages/contracts/index.d.ts": "3940b3f40829084b777a505be88aac5b3151ad3740c54b9c0b8e1b278553c22a",
|
|
47
|
+
"packages/contracts/index.js": "f671aee2b088999f5f1aa721b550bc64fb8ae86d765ef7730afada7a361a655b",
|
|
48
|
+
"packages/contracts/package.json": "e1b2a1c225d9bca584f1c054b2db5caa9a719ee98f26a87110541b221ed9a1cb",
|
|
49
|
+
"packages/contracts/README.md": "b1a0a90d07e7540503d4da45026f4135c83840a73005e4f07de8b13d5b077233",
|
|
50
|
+
"packages/core/index.d.ts": "1387be7298aa2e76fca729275445de4bc813d749781f4a6ad13e07ff5567873e",
|
|
51
|
+
"packages/core/index.js": "1e56043598cc26761569a8e3d1ae502447a512b59bbaaa26d30e0413e1523ae8",
|
|
52
|
+
"packages/core/package.json": "a22268d79eea648d8a8249ef70563022c7b6b9d4297dab06df4393bc1cbe9787",
|
|
53
|
+
"packages/core/README.md": "ba3d1bde0153afcd9bcb366803e4da3627815bd641eebf60c19a64ceda7d3005",
|
|
54
|
+
"packages/server/bin/agent-terminal-server.js": "ba76c9f9ceb8ddb3736905d20afbba556370918f684181ad90610f227fd1a1eb",
|
|
55
|
+
"packages/server/bin/claude-workbench-server.js": "aa0e3d0b58201b975afcc69e4bb5d04be5c9b3e08e7a6a2575cd95a70d476bc9",
|
|
56
|
+
"packages/server/bin/claude-workbench.js": "814623a85c0edb31ae1c39073fdfcda386d32460bedd2d3e2d26cb468a0f7b35",
|
|
57
|
+
"packages/server/index.d.ts": "9b43affec378dc89b515d71414bc9f6fc26980ca7bf9b684becb96d93c70d11d",
|
|
58
|
+
"packages/server/index.js": "f199573269eb3c56f5dbdd952fed265956ddbe3027399232829cc50099200ca0",
|
|
59
|
+
"packages/server/lib/agent-discovery.js": "d279ede551f307c7d92427d64062b502335af426a0ae7404fec555311a9b2b43",
|
|
60
|
+
"packages/server/lib/agent-registry.js": "0e4a7fa4adc4ee9a1bb391663136e7d64ca94d60337fba152cd7851de3cc3661",
|
|
61
|
+
"packages/server/lib/agent-spawn-env.js": "c6d372a533adb4dc4677b46b351ffdd9cc5229dddaaed092698d0926b8d35784",
|
|
62
|
+
"packages/server/lib/attachment-store.js": "60455754d2c421233708d09610c2d899820dd8953388904395cd7ea080ac5e19",
|
|
63
|
+
"packages/server/lib/bridges/app-server-bridge.js": "6a8a725ce9b8b1f6e75c126f068df1a05fe51b37e8543897380f12d60327e712",
|
|
64
|
+
"packages/server/lib/bridges/opencode-server-bridge.js": "514d432515a1eca8dce3ab2c87a569c4a4d8a16c733a693fbbeeb7ade9f3058b",
|
|
65
|
+
"packages/server/lib/capture-settings-store.js": "1a2c84c01c577d199f723c7be1409ca6d8e013e01c089a8ec260d70423608671",
|
|
66
|
+
"packages/server/lib/claude-history-recovery.js": "0b888e57846d40753e75deafb6894459fd7a52ee2cc1286fd1b76480058387d7",
|
|
67
|
+
"packages/server/lib/cli-session-recovery.js": "9bb267bd38783731f9af9730bc13ed5b24c0f8a796e44cdd730afb63408ed39e",
|
|
68
|
+
"packages/server/lib/context-resolver.js": "c3e3a25de2a38b7b4d09f5ae384663fb671ac364af1fc884877c17f66e7fb1c2",
|
|
69
|
+
"packages/server/lib/conversation-capture.js": "a86e6254d4799d151c5c19328c7247a111736f4a27250e2baa46369aa5fad0bc",
|
|
70
|
+
"packages/server/lib/diagnostics.js": "bc29ca5cb7759465e80256802fbf34cfd527bac95a57dd1e4384a7a7d239c36c",
|
|
70
71
|
"packages/server/lib/drivers/cli-json-runner.js": "3802a9066bd78062c40441d43b23bf97333ec742f877c59f4426e4cb118e8e54",
|
|
71
|
-
"packages/server/lib/drivers/codex-driver.js": "
|
|
72
|
+
"packages/server/lib/drivers/codex-driver.js": "542be69cee306abbba72a9c3d02f98abaaafe0a74c616258ea2b84b2cf2e5935",
|
|
72
73
|
"packages/server/lib/drivers/opencode-driver.js": "b7e0a338b32c2616fa3ce1fa438be5abc9794218eb1744b3a6eac877122a8c28",
|
|
73
|
-
"packages/server/lib/drivers/zcode-driver.js": "
|
|
74
|
-
"packages/server/lib/drivers/zcode-profile-runtime.js": "
|
|
75
|
-
"packages/server/lib/event-stream.js": "
|
|
74
|
+
"packages/server/lib/drivers/zcode-driver.js": "b09246d6640d3986fc629f0861e4fc25c0ec8114109360f3cb3a8df9127182f9",
|
|
75
|
+
"packages/server/lib/drivers/zcode-profile-runtime.js": "23881a8d447f0e4803ab0d8d8963dd665993243df0a30c405e2fbab53b647777",
|
|
76
|
+
"packages/server/lib/event-stream.js": "1db039b1779c85262e4883b80201753a854e424783b4c43edbd1e2c6df862182",
|
|
76
77
|
"packages/server/lib/folder-picker.js": "70f55df999262b90433f2b4251aa69dd70a23b55a84756b5f1d24dbeacfbda31",
|
|
77
|
-
"packages/server/lib/http-handler.js": "
|
|
78
|
-
"packages/server/lib/json-file.js": "
|
|
79
|
-
"packages/server/lib/knowledge-context.js": "
|
|
80
|
-
"packages/server/lib/model-detection.js": "
|
|
81
|
-
"packages/server/lib/profile-store.js": "
|
|
82
|
-
"packages/server/lib/project-store.js": "
|
|
83
|
-
"packages/server/lib/session-archive-store.js": "
|
|
84
|
-
"packages/server/lib/session-history.js": "
|
|
85
|
-
"packages/server/lib/system-doctor.js": "
|
|
86
|
-
"packages/server/lib/ui-preferences-store.js": "
|
|
87
|
-
"packages/server/lib/workbench-service.js": "
|
|
88
|
-
"packages/server/package.json": "
|
|
89
|
-
"packages/server/README.md": "
|
|
90
|
-
"packages/ui/ai-profile-settings.d.ts": "
|
|
91
|
-
"packages/ui/ai-profile-settings.js": "
|
|
92
|
-
"packages/ui/claude-terminal.d.ts": "
|
|
93
|
-
"packages/ui/claude-terminal.js": "
|
|
94
|
-
"packages/ui/index.d.ts": "
|
|
95
|
-
"packages/ui/index.js": "
|
|
96
|
-
"packages/ui/package.json": "
|
|
97
|
-
"packages/ui/README.md": "
|
|
98
|
-
"packages/ui/theme.css": "
|
|
99
|
-
"src/assets/claude-prompts.json": "
|
|
100
|
-
"src/backend/http/ai-profile-routes.js": "
|
|
101
|
-
"src/backend/http/claude-routes.js": "
|
|
102
|
-
"src/backend/http/node-helpers.js": "
|
|
103
|
-
"src/backend/index.js": "
|
|
104
|
-
"src/backend/lib/ai-adapter.js": "
|
|
105
|
-
"src/backend/lib/ai-profile-store.js": "
|
|
106
|
-
"src/backend/lib/ai-vendor-presets.js": "
|
|
107
|
-
"src/backend/lib/ai-workspace.js": "
|
|
108
|
-
"src/backend/lib/automation-config.js": "
|
|
109
|
-
"src/backend/lib/claude-cli-runner.js": "
|
|
110
|
-
"src/backend/lib/data-dir.js": "
|
|
111
|
-
"src/backend/lib/llm-client.js": "
|
|
112
|
-
"src/backend/lib/model-context-windows.js": "
|
|
113
|
-
"src/backend/lib/prompt-registry.js": "
|
|
114
|
-
"src/backend/lib/runtime-config.js": "
|
|
115
|
-
"src/backend/lib/sdk-
|
|
116
|
-
"src/
|
|
117
|
-
"src/
|
|
118
|
-
"src/sdk-wave-
|
|
119
|
-
"src/sdk-wave-
|
|
120
|
-
"src/sdk-wave-
|
|
121
|
-
"src/sdk-wave-
|
|
78
|
+
"packages/server/lib/http-handler.js": "4d8e0afbc53decc0b05578f380e8d7ca0f1bae6a83e00ada88a7827abe1e1f6e",
|
|
79
|
+
"packages/server/lib/json-file.js": "c1034f052e3882b62d501edcda18b76e7edd485a82f0dd009efd186d7a8d533a",
|
|
80
|
+
"packages/server/lib/knowledge-context.js": "f51441942897ef437e21ca344053a657f1047d224d01b4c95c4ba4afd65e2bf7",
|
|
81
|
+
"packages/server/lib/model-detection.js": "2091ad1c426a4a7b9c7bd803febb6b1c8a944afb357570c133c58a9436164663",
|
|
82
|
+
"packages/server/lib/profile-store.js": "1120791dd2517bd249caec4c43f19df6509b07d49bbc79a3edb1197d99cdfefa",
|
|
83
|
+
"packages/server/lib/project-store.js": "736a21596d695f32d60632686406ccd137388e479b7f02b2252d71a329b02083",
|
|
84
|
+
"packages/server/lib/session-archive-store.js": "1bf2756b2fb3920639b91c6e4c45836b917fe2999731b9d77ab67d9c502acc2d",
|
|
85
|
+
"packages/server/lib/session-history.js": "84ced98a0b7a041a4dcf5e86383f6f0e3bf57bf2fbc82f6b700f0d8caf3a24a9",
|
|
86
|
+
"packages/server/lib/system-doctor.js": "af55a726220892ccb2d3d645ef1b2c2976c7712acbc3f6a3a32087d3979b89ab",
|
|
87
|
+
"packages/server/lib/ui-preferences-store.js": "55b73c53c12d8f151468607f47c84facd5970604279effb7f0386f40e91dfbd7",
|
|
88
|
+
"packages/server/lib/workbench-service.js": "099350078d9c11f7f97db5af72514f7906a834ba2b472077f33005e8f0d86a79",
|
|
89
|
+
"packages/server/package.json": "3a3e9984e73e9e93515cd100a8cf3c7911c5dc8df5bc17283fb8742d4811a1b4",
|
|
90
|
+
"packages/server/README.md": "0d78908cd40a84cb96eca01a42ee1ad2d8abc9c05b1490f5ebe2cd30d7e84e1d",
|
|
91
|
+
"packages/ui/ai-profile-settings.d.ts": "460c5d1d5ddf328dcd60a5f51485c3c700a4892922b68da4dc89424116a85dbf",
|
|
92
|
+
"packages/ui/ai-profile-settings.js": "1d95d4e18f919149871a2c9a6746db9db0e1f3600bd18b4b6e8713220feb975c",
|
|
93
|
+
"packages/ui/claude-terminal.d.ts": "8e4bfc2819ab9fde8364d5b3dd1fccef870c71f279d2bae9a161d005f9a480f6",
|
|
94
|
+
"packages/ui/claude-terminal.js": "7a8e52a9296273c2aa30aac3cfbec2541bc5e0eb57fc44666e876f8253a481a3",
|
|
95
|
+
"packages/ui/index.d.ts": "8f6c415651370d7d796de289e789eea40817ce00e56d8f7f9ca816a25c52771b",
|
|
96
|
+
"packages/ui/index.js": "f981b039a935ab1e0af9dc876701b56d8eddb459c3b5178f384f6d7e47e249f0",
|
|
97
|
+
"packages/ui/package.json": "a87fd215f68f1ab789433b977923e8520dcbac4ca3dec6fc3e47399d5028e841",
|
|
98
|
+
"packages/ui/README.md": "f831eaa4d064931fd11466d7fcd91c5481e399d63b3f03583984c3ee8aecce83",
|
|
99
|
+
"packages/ui/theme.css": "e300d5bfda335466a6fb33e4927ee5ecc738b4d07837a149aff4c4a0f3072631",
|
|
100
|
+
"src/assets/claude-prompts.json": "78369214ea6f9725f36842ce299bcb61610870770df83f63cfa54f357c8964b9",
|
|
101
|
+
"src/backend/http/ai-profile-routes.js": "a874d9f638138baab144f739163f66e8c188e95c6f2278280538e169d6a84976",
|
|
102
|
+
"src/backend/http/claude-routes.js": "8766066653bc3e1012ae062858bafd87a82a3db124e21ef33482aaec1da60adb",
|
|
103
|
+
"src/backend/http/node-helpers.js": "6029f7a017be1f52d0a8b0aca29b127df9a396df052bbadc7277a7c947959691",
|
|
104
|
+
"src/backend/index.js": "9e0376316098bc622970ef6e35cc1f2a90ad4b9df83f37e179a43cc8a4a1822e",
|
|
105
|
+
"src/backend/lib/ai-adapter.js": "287f6f4c13594621480965ab256b0ff4992417871b34e453983c9706fd8aa042",
|
|
106
|
+
"src/backend/lib/ai-profile-store.js": "1e82523616d4b23702bb70f97b7b609afa8d1ea9e5ae7e101a18971607166cb2",
|
|
107
|
+
"src/backend/lib/ai-vendor-presets.js": "298ead7ba72b1ae70ffaf13fac3dae774a8bf87ebc880b6306e29e796717cef0",
|
|
108
|
+
"src/backend/lib/ai-workspace.js": "d0f5211df8c6f63e708ecd381f6e0702bede0307d8075fb8255cde8ebffb8eda",
|
|
109
|
+
"src/backend/lib/automation-config.js": "62611e062b2673b89a58ea35596d3aae537a9187e2ea3514d9262f99020351cf",
|
|
110
|
+
"src/backend/lib/claude-cli-runner.js": "da5c3a6dee9b9b46b80c2cc48521e577e934cb13e8f44d11cc1c6a473b14e5ab",
|
|
111
|
+
"src/backend/lib/data-dir.js": "4daa0b0a71c9f2a84f931330623c5f0adb7dbee2fdeb597a23b2edd213619cc5",
|
|
112
|
+
"src/backend/lib/llm-client.js": "8c71857d072f03b53feda87751185b8bd0649e57e653c976d0f80cc3bd6e22c1",
|
|
113
|
+
"src/backend/lib/model-context-windows.js": "4612975165ee3319aba51e46566c556e18a6cfd2e5e3efd1e64077905c363373",
|
|
114
|
+
"src/backend/lib/prompt-registry.js": "88ca170f4ac04e47e7cf85816511797634cc39b97ecf095548ee0772799de5e9",
|
|
115
|
+
"src/backend/lib/runtime-config.js": "050bbfadb7bfa0f47786beb6dfd80f240ed3e64f265d7457ba85f8c31f8e458f",
|
|
116
|
+
"src/backend/lib/sdk-session-stream.js": "f00d185a374f978f2eed63990158a711ebd13a7bbb153119a47f3e0e68ab1e00",
|
|
117
|
+
"src/backend/lib/sdk-turn-stream.js": "f18301b9a660aaac4b09613750bf5645d338aa83d2001cb113a281b7c68c3b8c",
|
|
118
|
+
"src/index.js": "40801aa5fc71a239e057a735264134df8cbcb29db200322700427be9718a6312",
|
|
119
|
+
"src/sdk-wave-a.ts": "5660f617af8d64696476315299332c0f45d88f47c83305e32c698092338d5b2b",
|
|
120
|
+
"src/sdk-wave-b.ts": "de927fe52372e8454f66b764cb268d0b372d227702a1dfba60270e1bba156124",
|
|
121
|
+
"src/sdk-wave-c.ts": "d169796348a85626650eba6d3577d7251c37164210f15f1168fceddcf56b5b72",
|
|
122
|
+
"src/sdk-wave-d.ts": "7c85bad58a79e18d277def040c50f30065c193e9440ae9fbcda259c653ff4c65",
|
|
123
|
+
"src/sdk-wave-e.ts": "87269a774575c0543f632b34a4a04cf67037e4b39be09aa778d997e4ac665564"
|
|
122
124
|
}
|
|
123
125
|
},
|
|
124
126
|
"vectorHub": {
|
package/package.json
CHANGED
|
@@ -1,108 +1,109 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@sanqianx/project-knowledge",
|
|
3
|
-
"version": "5.0.
|
|
4
|
-
"description": "Knowledge base manager with Git integration, AI-driven analysis, and bilingual (zh-CN/en-US) knowledge output",
|
|
5
|
-
"main": "_site/server.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"start": "node _site/server.js",
|
|
8
|
-
"test": "node _site/_test/run-all-tests.js",
|
|
9
|
-
"release:sync": "node _site/scripts/sync-release-version.js --web-only",
|
|
10
|
-
"vendor:modules": "node _site/scripts/vendor-modules.js",
|
|
11
|
-
"runtime:verify": "node _site/scripts/verify-module-runtime.js --working-tree",
|
|
12
|
-
"release:verify": "node _site/scripts/sync-release-version.js --check --web-only && node _site/scripts/verify-module-runtime.js && node _site/scripts/verify-product-runtime.js && node _site/_test/integration-adapters-test.js",
|
|
13
|
-
"preversion": "npm run release:verify",
|
|
14
|
-
"version": "node _site/scripts/sync-release-version.js --stage --web-only",
|
|
15
|
-
"postversion": "npm run release:verify"
|
|
16
|
-
},
|
|
17
|
-
"bin": {
|
|
18
|
-
"project-knowledge": "bin/project-knowledge.js",
|
|
19
|
-
"project-knowledge-kb": "bin/project-knowledge-kb.js",
|
|
20
|
-
"project-knowledge-mcp": "bin/project-knowledge-mcp.js",
|
|
21
|
-
"project-knowledge-integrations": "bin/project-knowledge-integrations.js"
|
|
22
|
-
},
|
|
23
|
-
"engines": {
|
|
24
|
-
"node": ">=22"
|
|
25
|
-
},
|
|
26
|
-
"files": [
|
|
27
|
-
"_site/server.js",
|
|
28
|
-
"ui/index.html",
|
|
29
|
-
"ui/product.css",
|
|
30
|
-
"ui/product.js",
|
|
31
|
-
"ui/live-client.js",
|
|
32
|
-
"ui/favicon.svg",
|
|
33
|
-
"_site/lib/",
|
|
34
|
-
"_modules/knowledge-engine/",
|
|
35
|
-
"vendor-manifest.json",
|
|
36
|
-
"module-runtime-manifest.json",
|
|
37
|
-
"_site/scripts/",
|
|
38
|
-
"_site/_test/*.js",
|
|
39
|
-
"_site/_test/fixtures/",
|
|
40
|
-
"_site/start.bat",
|
|
41
|
-
"_site/stop.bat",
|
|
42
|
-
"claude-prompts.json",
|
|
43
|
-
"bin/",
|
|
44
|
-
"plugins/",
|
|
45
|
-
".claude-plugin/",
|
|
46
|
-
".agents/plugins/",
|
|
47
|
-
"templates/",
|
|
48
|
-
"docs/assets/",
|
|
49
|
-
"docs/README.zh-CN.md",
|
|
50
|
-
"docs/project-registry-schema.md",
|
|
51
|
-
"docs/team-knowledge-mode-a-plan.md",
|
|
52
|
-
"docs/testing-strategy.md",
|
|
53
|
-
"docs/leader-glm-workbench-playbook.md",
|
|
54
|
-
"docs/release-5.0.16-acceptance.md",
|
|
55
|
-
"docs/release-5.0.17-acceptance.md",
|
|
56
|
-
"docs/
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
"
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
|
|
82
|
-
"@
|
|
83
|
-
"@grpc/
|
|
84
|
-
"@
|
|
85
|
-
"@
|
|
86
|
-
"@
|
|
87
|
-
"@
|
|
88
|
-
"@sanqianx/
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
"wink-
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
-
|
|
108
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@sanqianx/project-knowledge",
|
|
3
|
+
"version": "5.0.19",
|
|
4
|
+
"description": "Knowledge base manager with Git integration, AI-driven analysis, and bilingual (zh-CN/en-US) knowledge output",
|
|
5
|
+
"main": "_site/server.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"start": "node _site/server.js",
|
|
8
|
+
"test": "node _site/_test/run-all-tests.js",
|
|
9
|
+
"release:sync": "node _site/scripts/sync-release-version.js --web-only",
|
|
10
|
+
"vendor:modules": "node _site/scripts/vendor-modules.js",
|
|
11
|
+
"runtime:verify": "node _site/scripts/verify-module-runtime.js --working-tree",
|
|
12
|
+
"release:verify": "node _site/scripts/sync-release-version.js --check --web-only && node _site/scripts/verify-module-runtime.js && node _site/scripts/verify-product-runtime.js && node _site/_test/integration-adapters-test.js",
|
|
13
|
+
"preversion": "npm run release:verify",
|
|
14
|
+
"version": "node _site/scripts/sync-release-version.js --stage --web-only",
|
|
15
|
+
"postversion": "npm run release:verify"
|
|
16
|
+
},
|
|
17
|
+
"bin": {
|
|
18
|
+
"project-knowledge": "bin/project-knowledge.js",
|
|
19
|
+
"project-knowledge-kb": "bin/project-knowledge-kb.js",
|
|
20
|
+
"project-knowledge-mcp": "bin/project-knowledge-mcp.js",
|
|
21
|
+
"project-knowledge-integrations": "bin/project-knowledge-integrations.js"
|
|
22
|
+
},
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=22"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"_site/server.js",
|
|
28
|
+
"ui/index.html",
|
|
29
|
+
"ui/product.css",
|
|
30
|
+
"ui/product.js",
|
|
31
|
+
"ui/live-client.js",
|
|
32
|
+
"ui/favicon.svg",
|
|
33
|
+
"_site/lib/",
|
|
34
|
+
"_modules/knowledge-engine/",
|
|
35
|
+
"vendor-manifest.json",
|
|
36
|
+
"module-runtime-manifest.json",
|
|
37
|
+
"_site/scripts/",
|
|
38
|
+
"_site/_test/*.js",
|
|
39
|
+
"_site/_test/fixtures/",
|
|
40
|
+
"_site/start.bat",
|
|
41
|
+
"_site/stop.bat",
|
|
42
|
+
"claude-prompts.json",
|
|
43
|
+
"bin/",
|
|
44
|
+
"plugins/",
|
|
45
|
+
".claude-plugin/",
|
|
46
|
+
".agents/plugins/",
|
|
47
|
+
"templates/",
|
|
48
|
+
"docs/assets/",
|
|
49
|
+
"docs/README.zh-CN.md",
|
|
50
|
+
"docs/project-registry-schema.md",
|
|
51
|
+
"docs/team-knowledge-mode-a-plan.md",
|
|
52
|
+
"docs/testing-strategy.md",
|
|
53
|
+
"docs/leader-glm-workbench-playbook.md",
|
|
54
|
+
"docs/release-5.0.16-acceptance.md",
|
|
55
|
+
"docs/release-5.0.17-acceptance.md",
|
|
56
|
+
"docs/release-5.0.19-acceptance.md",
|
|
57
|
+
"docs/fresh-v5-start.md",
|
|
58
|
+
"README.md",
|
|
59
|
+
"NOTICE",
|
|
60
|
+
"CHANGELOG.md"
|
|
61
|
+
],
|
|
62
|
+
"repository": {
|
|
63
|
+
"type": "git",
|
|
64
|
+
"url": "git+https://github.com/SanQianX/project-knowledge-base.git"
|
|
65
|
+
},
|
|
66
|
+
"keywords": [
|
|
67
|
+
"knowledge-base",
|
|
68
|
+
"git",
|
|
69
|
+
"ai",
|
|
70
|
+
"claude",
|
|
71
|
+
"codex",
|
|
72
|
+
"opencode",
|
|
73
|
+
"mcp",
|
|
74
|
+
"documentation",
|
|
75
|
+
"scanner",
|
|
76
|
+
"context-pack",
|
|
77
|
+
"post-commit-hook"
|
|
78
|
+
],
|
|
79
|
+
"author": "SanQianX",
|
|
80
|
+
"license": "Apache-2.0",
|
|
81
|
+
"dependencies": {
|
|
82
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.141",
|
|
83
|
+
"@grpc/grpc-js": "^1.14.5",
|
|
84
|
+
"@grpc/proto-loader": "^0.8.1",
|
|
85
|
+
"@huggingface/transformers": "3.8.1",
|
|
86
|
+
"@lancedb/lancedb": "0.31.0",
|
|
87
|
+
"@modelcontextprotocol/sdk": "1.29.0",
|
|
88
|
+
"@sanqianx/ai-coding-event-bridge-console": "0.7.2",
|
|
89
|
+
"@sanqianx/vector-hub": "1.0.8-rc.8",
|
|
90
|
+
"buffer": "^6.0.3",
|
|
91
|
+
"cheerio": "^1.2.0",
|
|
92
|
+
"claude-ai-workbench": "npm:@sanqianx/claude-ai-workbench@0.13.2-rc.21",
|
|
93
|
+
"cross-spawn": "7.0.6",
|
|
94
|
+
"dotenv": "^17.4.2",
|
|
95
|
+
"gpt-tokenizer": "^3.4.0",
|
|
96
|
+
"http-proxy-agent": "7.0.2",
|
|
97
|
+
"https-proxy-agent": "7.0.6",
|
|
98
|
+
"json-colorizer": "^3.0.1",
|
|
99
|
+
"jsonc-parser": "3.3.1",
|
|
100
|
+
"openai": "^6.49.0",
|
|
101
|
+
"socks-proxy-agent": "8.0.5",
|
|
102
|
+
"turndown": "^7.2.4",
|
|
103
|
+
"uuid": "^13.0.2",
|
|
104
|
+
"wink-bm25-text-search": "^3.1.2",
|
|
105
|
+
"wink-nlp": "^2.4.0",
|
|
106
|
+
"ws": "^8.21.0",
|
|
107
|
+
"yargs": "^18.1.0"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -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.
|
|
5
|
+
"version": "5.0.19",
|
|
6
6
|
"description": "Read durable project decisions and implementation history from Project Knowledge.",
|
|
7
7
|
"author": {
|
|
8
8
|
"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.
|
|
11
|
+
"KB_PLUGIN_VERSION": "5.0.19"
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
}
|
package/ui/product.js
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
const badge = (text, status = '') => `<span class="status ${esc(status)}">${esc(text)}</span>`;
|
|
22
22
|
let toastTimer, refreshTimer, preflightTimer, editingMemoryId, logStream, logEpoch = 0, referenceEpoch = 0, snapshotEpoch = 0, registryEpoch = 0, registryPromise = null, resumeImport = false, unbindProjectId = '', unbinding = false;
|
|
23
23
|
let captureEpoch = 0, captureBusy = false;
|
|
24
|
+
let registryStream = null, registryReceipt = null, registryRefreshTimer;
|
|
24
25
|
async function api(url, options = {}) {
|
|
25
26
|
const { allowNotReady, timeoutMs = (options.method || 'GET') === 'GET' && !url.includes('pick-folder') ? 3000 : 0, ...init } = options;
|
|
26
27
|
if (init.body && typeof init.body !== 'string') init.body = JSON.stringify(init.body);
|
|
@@ -43,8 +44,12 @@
|
|
|
43
44
|
function frameContext(key) {
|
|
44
45
|
const project = activeProject();
|
|
45
46
|
const frame = frames[key];
|
|
47
|
+
if (!frame.ready) return;
|
|
46
48
|
const ref = key === 'terminal' ? project?.modules.terminal.projectId || project?.workspacePath : key === 'eventBridge' ? project?.modules.eventBridge.projectId || project?.workspacePath : project?.projectId;
|
|
47
49
|
frame.requestId = `${state.epoch}:${key}`;
|
|
50
|
+
const signature = JSON.stringify([state.epoch, ref || '', state.scope, document.documentElement.dataset.theme, frameVisible(key)]);
|
|
51
|
+
if (frame.contextSignature === signature) return;
|
|
52
|
+
frame.contextSignature = signature;
|
|
48
53
|
post(key, { type: 'kb:theme', theme: document.documentElement.dataset.theme });
|
|
49
54
|
post(key, { type: 'kb:scope', scope: state.scope });
|
|
50
55
|
post(key, { type: 'kb:sidebar', visible: key === 'terminal' });
|
|
@@ -148,7 +153,10 @@
|
|
|
148
153
|
$('memoryText').value = memory.text; $('memoryScope').value = memory.scopeType || 'global';
|
|
149
154
|
updateMemoryTarget($('memoryScope').value, memory.scopeId || memory.brainId);
|
|
150
155
|
$('memoryOriginal').textContent = `原始总结:${memory.originalText || memory.text}`;
|
|
151
|
-
$('memoryEvidence').textContent = memory.evidence ? `${projectName(memory.evidence.projectId)} · ${memory.evidence.commitSha} / ${memory.evidence.entryId}` : '';
|
|
156
|
+
$('memoryEvidence').textContent = memory.evidence ? `${projectName(memory.evidence.projectId)} · ${memory.evidence.commitSha} / ${memory.evidence.entryId}${memory.sourceEventId || memory.evidence.sourceEventId ? ` · 用户事件 ${memory.sourceEventId || memory.evidence.sourceEventId}` : ''}` : '';
|
|
157
|
+
let eligibility = $('memoryEligibility');
|
|
158
|
+
if (!eligibility) { eligibility = document.createElement('p'); eligibility.id = 'memoryEligibility'; $('memoryEvidenceDetails').append(eligibility); }
|
|
159
|
+
eligibility.textContent = memory.eligibility ? `推荐理由:${memory.eligibility.reason || ''}\n范围依据:${memory.eligibility.scopeReason || ''}` : memory.status === 'candidate' ? '旧候选尚未按跨项目长期共识标准复核。' : '';
|
|
152
160
|
$('memoryQuote').textContent = memory.evidence?.quote || '';
|
|
153
161
|
$('memoryEvidenceDetails').hidden = memory.sourceType === 'manual'; $('manualMemoryHint').hidden = memory.sourceType !== 'manual';
|
|
154
162
|
$('memoryFeedback').hidden = true; $('saveMemoryCandidate').hidden = memory.status !== 'candidate';
|
|
@@ -239,6 +247,21 @@
|
|
|
239
247
|
stream.addEventListener('progress', () => { if (state.stream === stream) scheduleRefresh(); });
|
|
240
248
|
stream.onerror = () => { if (state.stream === stream) $('activityConnection').textContent = '连接中断,正在恢复快照'; };
|
|
241
249
|
}
|
|
250
|
+
function connectRegistryEvents() {
|
|
251
|
+
if (registryStream || !navigator.onLine) return;
|
|
252
|
+
const stream = registryStream = new ProgressSource('/api/registry/events');
|
|
253
|
+
const changed = event => {
|
|
254
|
+
if (registryStream !== stream) return;
|
|
255
|
+
let receipt; try { receipt = JSON.parse(event.data); } catch { return; }
|
|
256
|
+
const signature = `${receipt.instanceId}:${receipt.revision}`;
|
|
257
|
+
const previous = registryReceipt; registryReceipt = signature;
|
|
258
|
+
if (!previous || previous === signature) return;
|
|
259
|
+
clearTimeout(registryRefreshTimer);
|
|
260
|
+
registryRefreshTimer = setTimeout(() => { if (!document.hidden) void refreshRegistry(); }, 100);
|
|
261
|
+
};
|
|
262
|
+
stream.addEventListener('registry-snapshot', changed);
|
|
263
|
+
stream.addEventListener('registry-changed', changed);
|
|
264
|
+
}
|
|
242
265
|
function refreshRegistry(force = false) {
|
|
243
266
|
if (!navigator.onLine) return Promise.resolve();
|
|
244
267
|
if (registryPromise && !force) return registryPromise;
|
|
@@ -612,19 +635,21 @@
|
|
|
612
635
|
window.addEventListener('hashchange', () => setView(location.hash.slice(1)));
|
|
613
636
|
window.addEventListener('offline', () => {
|
|
614
637
|
snapshotEpoch++; clearTimeout(refreshTimer);
|
|
615
|
-
state.stream?.close(); state.stream = null; logStream?.close(); logStream = null; logEpoch++;
|
|
638
|
+
state.stream?.close(); state.stream = null; registryStream?.close(); registryStream = null; logStream?.close(); logStream = null; logEpoch++;
|
|
616
639
|
state.engineAvailable = false; $('activityConnection').textContent = '连接中断,恢复后自动读取快照';
|
|
617
640
|
renderSystem(); render();
|
|
618
641
|
});
|
|
619
642
|
window.addEventListener('online', () => {
|
|
643
|
+
connectRegistryEvents();
|
|
620
644
|
$('activityConnection').textContent = state.engineAvailable && state.stream?.readyState === EventSource.OPEN ? '已连接实时更新' : '正在恢复快照'; refreshRegistry();
|
|
621
645
|
if ($('logsDialog').open) loadLogs().catch(error => toast(error.message));
|
|
622
646
|
});
|
|
623
|
-
window.addEventListener('beforeunload', () => { state.stream?.close(); logStream?.close(); });
|
|
647
|
+
window.addEventListener('beforeunload', () => { state.stream?.close(); registryStream?.close(); clearTimeout(registryRefreshTimer); logStream?.close(); });
|
|
648
|
+
document.addEventListener('visibilitychange', () => { if (!document.hidden) { connectRegistryEvents(); void refreshRegistry(); } });
|
|
624
649
|
document.addEventListener('keydown', e => { if (e.key === 'Escape') closeSystem(); });
|
|
625
650
|
document.documentElement.dataset.theme = localStorage.getItem('kb.theme') === 'dark' ? 'dark' : 'light';
|
|
626
651
|
all('[data-scope]').forEach(button => button.classList.toggle('active', button.dataset.scope === state.scope));
|
|
627
652
|
state.view = titles[location.hash.slice(1)] ? location.hash.slice(1) : 'home';
|
|
628
653
|
setView(state.view); refreshRegistry();
|
|
629
|
-
|
|
654
|
+
connectRegistryEvents();
|
|
630
655
|
})();
|