@sanqianx/project-knowledge 5.0.9-rc.10 → 5.0.9-rc.12

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.9-rc.10",
12
+ "version": "5.0.9-rc.12",
13
13
  "source": "./plugins/project-knowledge",
14
14
  "description": "Search durable project decisions and implementation history through MCP."
15
15
  }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.0.9-rc.12] - 2026-10-11
4
+
5
+ - Vendor engine 0.2.3-rc.6 to address the Windows transient state-file rename
6
+ failure exposed by installed rc.11 fault acceptance. Use exclusive random
7
+ temporary files and bounded sharing retries, retain durable state on failure,
8
+ and never unlink live state to force replacement.
9
+ - Add deterministic sharing-violation, permanent-lock, foreign-temp and
10
+ disk-full regressions; all 39 engine tests pass on Node 22 and Node 24.
11
+ - Preserve the rc.11 failure and require new installed acceptance before any
12
+ existing-user upgrade or stable latest promotion.
13
+
14
+ ## [5.0.9-rc.11] - 2026-10-11
15
+
16
+ - Pin vector-hub 1.0.8-rc.3 and vendor engine 0.2.3-rc.5. Raw commit
17
+ conversations and internal backups are analysis evidence, not knowledge.
18
+ Exclude them from managed indexes, search and get; retain source evidence.
19
+ - Prune stale derived records during sync and rebuild once on source-policy
20
+ upgrade, without repeating paid whole-index work on ordinary restarts.
21
+ - Keep standalone vector-hub general document support unchanged.
22
+ - Record both original failing regressions and successful Node 22/24 reruns;
23
+ installed, real model and existing-v5 gates still precede latest promotion.
24
+
3
25
  ## [5.0.9-rc.10] - 2026-10-11
4
26
 
5
27
  - Preserve acknowledged brain/domain knowledge-directory bindings when changing
@@ -1,5 +1,7 @@
1
1
  # knowledge-engine
2
2
 
3
+ 正式知识检索(包括 `get`)排除 `dev-conversations`、内部会话、备份与隐藏目录。提交会话只作为分析证据,不直接充当已晋升知识;原始证据仍由事件模块保留。
4
+
3
5
  > 开发前读 [AGENTS.md](AGENTS.md)。该指南中的脚手架状态是历史背景;当前运行契约及实现状态以本 README 为准。
4
6
 
5
7
  `project-knowledge` 模块家族的第四块:**知识引擎**。owns 两个职责面,shell 只负责连接与投影("The shell owns no features"):
@@ -82,6 +84,7 @@ node src/bin.js serve [--port 5790] [--host 127.0.0.1] [--data DIR]
82
84
  - 已晋升提交的 SHA 或短 SHA 在自然语言查询中仍作为标识符匹配,只返回当前文件的晋升依据;仅在原始会话中提到相同 SHA 不构成知识晋升引用。多个提交标识符可以一起查询。
83
85
  - 候选必须有已晋升文件中的引用依据,未确认候选不能进入任务。确认记录原子持久化后写共享记忆文件,派生索引异步更新,索引失败不会撤销有效记忆。
84
86
  - 旧格式不读取、不自动迁移。损坏的正式状态不覆盖、不清空。
87
+ - 引擎状态复用受控原子写入:独占随机临时文件、文件同步、Windows 短暂共享冲突有界重试;永久失败保留原状态并清理本次临时文件,绝不先删正式状态。
85
88
 
86
89
  ## 验证与尚未验收项
87
90
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanqianx/ai-coding-knowledge-engine",
3
- "version": "0.2.3-rc.4",
3
+ "version": "0.2.3-rc.6",
4
4
  "description": "Knowledge engine module for project-knowledge: commit-boundary triggered knowledge analysis/generation (trigger plane) and retrieval for development assistants (retrieval plane).",
5
5
  "license": "Apache-2.0",
6
6
  "main": "src/server.js",
@@ -2,7 +2,7 @@
2
2
  const fs = require('node:fs');
3
3
  const path = require('node:path');
4
4
  const { KnowledgeRetrievalService } = require('./runtime/knowledge-retrieval-service');
5
- const { listMarkdownFiles } = require('./runtime/markdown-knowledge-indexer');
5
+ const { listMarkdownFiles, isExcludedKnowledgePath } = require('./runtime/markdown-knowledge-indexer');
6
6
  const { DomainError } = require('./runtime/contracts');
7
7
 
8
8
  class EngineRetrieval extends KnowledgeRetrievalService {
@@ -116,6 +116,7 @@ class EngineRetrieval extends KnowledgeRetrievalService {
116
116
  if (input.spaceId && !scope && input.spaceId !== `project:${registration.projectId}`) throw new DomainError('PROJECT_NOT_FOUND', '知识范围与项目归属不匹配。', { status: 404 });
117
117
  const project = scope ? { projectId: scope.id, knowledgePath: scope.knowledgePath } : registration;
118
118
  const entryId = String(input.entryId || input.entry || '').replace(/\\/g, '/');
119
+ if (isExcludedKnowledgePath(entryId)) throw new DomainError('PATH_OUTSIDE_ROOT', '会话证据与内部数据不能作为正式知识读取。', { status: 403 });
119
120
  const target = path.resolve(project.knowledgePath, entryId);
120
121
  if (!entryId || !/\.md$/i.test(target) || !this.layout.isPathInside(project.knowledgePath, target, { realpath: true })) throw new DomainError('PATH_OUTSIDE_ROOT', '知识文件越界。', { status: 403 });
121
122
  if (!fs.existsSync(target) || !fs.statSync(target).isFile() || fs.lstatSync(target).isSymbolicLink()) throw new DomainError('PROJECT_NOT_FOUND', '知识文件不存在。', { status: 404 });
@@ -5,13 +5,17 @@ const { sha256 } = require('./content-hash');
5
5
  const CHUNKER_VERSION = 1;
6
6
  const DEFAULT_MAX_CHARS = 1200;
7
7
  const DEFAULT_OVERLAP_CHARS = 120;
8
- const EXCLUDED_DIRS = new Set(['.git', '_ai', '_backup', 'node_modules']);
8
+ const EXCLUDED_DIRS = new Set(['.git', '_ai', '_backup', 'node_modules', 'dev-conversations']);
9
9
  const DERIVED_INDEX_FILENAME = '00-index.md';
10
10
 
11
11
  function normalizeRel(value) {
12
12
  return String(value || '').replace(/\\/g, '/').replace(/^\.\//, '');
13
13
  }
14
14
 
15
+ function isExcludedKnowledgePath(value) {
16
+ return normalizeRel(value).split('/').some(segment => segment.startsWith('.') || EXCLUDED_DIRS.has(segment.toLowerCase()));
17
+ }
18
+
15
19
  function stripFrontmatter(markdown) {
16
20
  return String(markdown || '').replace(/^---\s*\r?\n[\s\S]*?\r?\n---\s*\r?\n?/, '');
17
21
  }
@@ -112,7 +116,7 @@ function listMarkdownFiles(root, options = {}) {
112
116
  const files = [];
113
117
  const walk = (dir) => {
114
118
  for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
115
- if (entry.name.startsWith('.') || EXCLUDED_DIRS.has(entry.name)) continue;
119
+ if (entry.name.startsWith('.') || EXCLUDED_DIRS.has(entry.name.toLowerCase())) continue;
116
120
  const abs = path.join(dir, entry.name);
117
121
  if (entry.isDirectory()) walk(abs);
118
122
  else if (entry.isFile() && /\.md$/i.test(entry.name) && (includeDerived || !isDerivedIndex(entry.name))) files.push(abs);
@@ -224,6 +228,7 @@ module.exports = {
224
228
  CHUNKER_VERSION,
225
229
  chunkMarkdown,
226
230
  listMarkdownFiles,
231
+ isExcludedKnowledgePath,
227
232
  isDerivedIndex,
228
233
  inferEntryType,
229
234
  parseKnowledgeMetadata,
@@ -5,6 +5,7 @@ const path = require('path');
5
5
  const crypto = require('crypto');
6
6
  const { validateProjectId } = require('./runtime/contracts');
7
7
  const { RuntimeLayout } = require('./runtime/layout');
8
+ const AtomicFile = require('./runtime/atomic-file');
8
9
 
9
10
  /**
10
11
  * 单文件 JSON 状态层(<data>/engine-state.json):注册项目、分析运行、事件流。
@@ -56,12 +57,9 @@ class EngineStore {
56
57
  }
57
58
 
58
59
  save() {
59
- fs.mkdirSync(this.dataDir, { recursive: true });
60
- const tmp = this.file + '.tmp';
61
- const fd = fs.openSync(tmp, 'w', 0o600);
62
- try { fs.writeFileSync(fd, JSON.stringify(this.state, null, 2), 'utf8'); fs.fsyncSync(fd); }
63
- finally { fs.closeSync(fd); }
64
- fs.renameSync(tmp, this.file);
60
+ // Windows scanners/readers may briefly hold the destination; never unlink
61
+ // durable state to force a replace, or share a fixed temp name with writers.
62
+ AtomicFile.writeJsonAtomic(this.file, this.state);
65
63
  }
66
64
 
67
65
  listProjects() {
@@ -112,9 +112,9 @@
112
112
  "vectorHub": {
113
113
  "name": "@sanqianx/vector-hub",
114
114
  "installName": "@sanqianx/vector-hub",
115
- "version": "1.0.8-rc.2",
115
+ "version": "1.0.8-rc.3",
116
116
  "files": {
117
- "README.md": "b0d0fd647aef14c803ac4573f58bd2d425c2dc9bc736187a4684d7caba473184",
117
+ "README.md": "da267117f2f3cf61bc865a6fa3a2097dcb999f7f7e50eb7add0b74494a9f982e",
118
118
  "dist/cjs/bin.d.ts": "43e818adf60173644896298637f47b01d5819b17eda46eaa32d0c7d64724d012",
119
119
  "dist/cjs/bin.js": "8d0317ce087d22074b4ad350d63bf39cd6d218da565496621cd0daf4245cbdc4",
120
120
  "dist/cjs/bin.js.map": "818e872380d9c7ba045238ba65ce77111ba822b356be26327ed05936e5667e5e",
@@ -122,12 +122,12 @@
122
122
  "dist/cjs/core/embeddings.js": "5e199fd6e0de174aad1ba5440dd6358d9b180d4f82d62c7d8cd1fb8a17efb2d7",
123
123
  "dist/cjs/core/embeddings.js.map": "f1b9ec78274cdd7359a59e8a47af7c376de61587bc4b9fc78df970734169ee38",
124
124
  "dist/cjs/core/hub.d.ts": "5173ac7396ffdce780fa0b93428a330142a1a2edf378527b6291036edc9a0d7d",
125
- "dist/cjs/core/hub.js": "c84ddbcde8468ec81dcd07149bfdcc748c650c43d3dc0f35a7f495ccfdb35f97",
126
- "dist/cjs/core/hub.js.map": "9b424cefdc5046c29b0e4aa71e7881bf8499fbf968a2f8591615b9de497e49fc",
127
- "dist/cjs/core/kb-sync.d.ts": "9b0538911c52ac47ae4784a7856aa7d7e15f6b09887a6b3db8aaa12046179d30",
128
- "dist/cjs/core/kb-sync.js": "a03da0f0d5844380a5cbb3307f92472a8ef0cd5185a8b062b4e54c56dfac4032",
129
- "dist/cjs/core/kb-sync.js.map": "fbd2ae982a20b2f7977438eeb71d86a23f25c49f8e5c4d4a6abde2bd46c51065",
130
- "dist/cjs/core/types.d.ts": "293e642a88a592c2f105ac31cbaa800697c357b3d6a039ec68763c028cf70643",
125
+ "dist/cjs/core/hub.js": "f90ee514c0cf9ac67d7aae728d7af2606d7404ab84436fbdc066663006cb67e2",
126
+ "dist/cjs/core/hub.js.map": "10d5d99d4ca8edb6af289b9da28eb63037ffa6762f382434040292d517d887fa",
127
+ "dist/cjs/core/kb-sync.d.ts": "8290ae4c5840dcf98769cfec1734d5ebeb102020b348da2a8382b1cad057da1b",
128
+ "dist/cjs/core/kb-sync.js": "b6bc7f11d3e63894fe8633151ac38c853f30d8675a15e57605bd8ff68bffd4b5",
129
+ "dist/cjs/core/kb-sync.js.map": "687ce74cdf668c1b99809a23c078861e66dacd0050056ff0231d69c3d6e6b85a",
130
+ "dist/cjs/core/types.d.ts": "b54fd90a3aaef7b90fe106857de350b2300b7eaa46a5bfb6b4959bfe09faa554",
131
131
  "dist/cjs/core/types.js": "b0d2bc4142d0c62d43f996aaeb64f22c4889ac853f8a3765758b505d972d0149",
132
132
  "dist/cjs/core/types.js.map": "9c8da204af4d662188e539b27e61f9ee44ecbe68da4211676ebdda14303e6f3b",
133
133
  "dist/cjs/index.d.ts": "96aa5a8b9c843a85c7cdc00901e0e95ecae6f01655e7de2d965f96b1d19181a0",
@@ -136,12 +136,12 @@
136
136
  "dist/cjs/server/folder-picker.d.ts": "b9c59dbc834fff668b1894f516450c2edc985c7bfac31edf9b7b4e766474b32b",
137
137
  "dist/cjs/server/folder-picker.js": "053121152a210c899e8593d60670a2a510b435c3b479300c572aa4bc8443e58e",
138
138
  "dist/cjs/server/folder-picker.js.map": "dce1ad1b03c8a6a4fba7b3cacec5b65e55c1dfd1886c5e70df384efd1a5c68a6",
139
- "dist/cjs/server/manager.d.ts": "d23ee9c3f9b72ff89c511f81f5cfb6e2b62d4ba4963099c3c9f5a65531216097",
140
- "dist/cjs/server/manager.js": "aea5c81a048cf2bd7736c289dbee9cf2d0bea4caf7093a1d8f8179d6fcea48a3",
141
- "dist/cjs/server/manager.js.map": "594ac93b2986160e47f927683f2f5feee84054dbf7255d965ada9dea561845b8",
139
+ "dist/cjs/server/manager.d.ts": "06c0e5c05ad47b3ab0a826303703d1b38d68e45f3686e687d832470dac56a05b",
140
+ "dist/cjs/server/manager.js": "947aba093ae79b294a67d8ebd10ceedcc5ff92a3298dfffbc09681f66eed4448",
141
+ "dist/cjs/server/manager.js.map": "d5236999f576019189c8464c4a9aaf1776902da2c5c09d962b557210cc3d8427",
142
142
  "dist/cjs/server/server.d.ts": "13288ace9aa6ec016a2b06dc036868324ac6c23c7e73771e95d120be778f238a",
143
- "dist/cjs/server/server.js": "43d6e18a1a36fd1af6179ff98d356efaee1da9464c85d76e9bf057b71741534e",
144
- "dist/cjs/server/server.js.map": "d599dbfbe0f98abaf103849eafee70b407d332ff0d767c1d95f54c80e85bf2bb",
143
+ "dist/cjs/server/server.js": "18cb8c4ada3a7b4c8fa20a2bdfcee2d7bff440ab1d0caabf7c6eaed2b5178bed",
144
+ "dist/cjs/server/server.js.map": "e7a4689fdaedcea9644c0c1a3065cce71017af9aa13be6cb4a90889eae0e7885",
145
145
  "dist/esm/bin.d.ts": "43e818adf60173644896298637f47b01d5819b17eda46eaa32d0c7d64724d012",
146
146
  "dist/esm/bin.js": "69f6059ce2336eb7f0d9503f86c83da787aaf74a8bfd804c694ba5b2e1728be0",
147
147
  "dist/esm/bin.js.map": "fc174c2b5c66c20ff88184ddeb00577406185945ccadb0bddbb2014909339e9e",
@@ -149,12 +149,12 @@
149
149
  "dist/esm/core/embeddings.js": "b19e0cf42ca03e50644e39e39da4c003b9e273213c4532bd443c77085d2db521",
150
150
  "dist/esm/core/embeddings.js.map": "043aa6822e6b4a692be025d89efb5d7d44f4b6b39ce36bcfad2e64dde45589bb",
151
151
  "dist/esm/core/hub.d.ts": "5173ac7396ffdce780fa0b93428a330142a1a2edf378527b6291036edc9a0d7d",
152
- "dist/esm/core/hub.js": "1c4c0230ad4e9c51670a9148fd9b2464fec260b449c1a37eda94fe377b1292a8",
153
- "dist/esm/core/hub.js.map": "74beda8c34a6891b60548d84f3d8c5e6a9f5ec1055549674ee51ea6f9c4f40c6",
154
- "dist/esm/core/kb-sync.d.ts": "9b0538911c52ac47ae4784a7856aa7d7e15f6b09887a6b3db8aaa12046179d30",
155
- "dist/esm/core/kb-sync.js": "5b1df6a4d3f2a80d3c59e276590346d81d3f558c01ebb87410ebddc70f50adaa",
156
- "dist/esm/core/kb-sync.js.map": "5b959d1d3da3534c0913b72d2e9160d9e05ed2a3474c8ab8c4d50adbad2ee181",
157
- "dist/esm/core/types.d.ts": "293e642a88a592c2f105ac31cbaa800697c357b3d6a039ec68763c028cf70643",
152
+ "dist/esm/core/hub.js": "ea14e891ce2b1861b2a2a1cc9acf0d4249fab2b3354694cfbe519a26f4199453",
153
+ "dist/esm/core/hub.js.map": "a02798e02a9b4a4c41e7496c23d12c12bee25b3ed6adccb0fde91a5b757f70a6",
154
+ "dist/esm/core/kb-sync.d.ts": "8290ae4c5840dcf98769cfec1734d5ebeb102020b348da2a8382b1cad057da1b",
155
+ "dist/esm/core/kb-sync.js": "cbdfab9fecbdd2d6996744ad0bf88f446012d5616f57fdc60f5a8e8d8c462c5f",
156
+ "dist/esm/core/kb-sync.js.map": "e14d56e04a08642f6fb917310cf296ab2cf05c6a2fc6a2cab8ab929f50300843",
157
+ "dist/esm/core/types.d.ts": "b54fd90a3aaef7b90fe106857de350b2300b7eaa46a5bfb6b4959bfe09faa554",
158
158
  "dist/esm/core/types.js": "01ae2a5b120382f9a648ced7ee8507493a134f216d100fc61600c6c9738235d2",
159
159
  "dist/esm/core/types.js.map": "9c8da204af4d662188e539b27e61f9ee44ecbe68da4211676ebdda14303e6f3b",
160
160
  "dist/esm/index.d.ts": "96aa5a8b9c843a85c7cdc00901e0e95ecae6f01655e7de2d965f96b1d19181a0",
@@ -164,13 +164,13 @@
164
164
  "dist/esm/server/folder-picker.d.ts": "b9c59dbc834fff668b1894f516450c2edc985c7bfac31edf9b7b4e766474b32b",
165
165
  "dist/esm/server/folder-picker.js": "6c8247e431b7181c45fb169b29e5825a0b3589f44e1625b3a5a291d7b8358042",
166
166
  "dist/esm/server/folder-picker.js.map": "f70723213f032a0f10f538289a176a50fc8f02c200b0194479ffc139b5fbb13b",
167
- "dist/esm/server/manager.d.ts": "d23ee9c3f9b72ff89c511f81f5cfb6e2b62d4ba4963099c3c9f5a65531216097",
168
- "dist/esm/server/manager.js": "2f1772ce5885128694e8cd9c89ca7ae74694a1f85758fc8e17b577b7ab54c2e4",
169
- "dist/esm/server/manager.js.map": "f68a87c9763e8c4e3ddfc98e981ada4ea83922793035f19051b88dc3e7f47bc0",
167
+ "dist/esm/server/manager.d.ts": "06c0e5c05ad47b3ab0a826303703d1b38d68e45f3686e687d832470dac56a05b",
168
+ "dist/esm/server/manager.js": "96e1262505a02299e3d6ae5dc1c7ba3a3f69c694f57d89d97e3e4c163b40523e",
169
+ "dist/esm/server/manager.js.map": "10bb43dec7cdf07d1e6260552f40ca347a6eb491ba8bbe81b6ce2a41157a9a87",
170
170
  "dist/esm/server/server.d.ts": "13288ace9aa6ec016a2b06dc036868324ac6c23c7e73771e95d120be778f238a",
171
- "dist/esm/server/server.js": "df4caa8a596a9724c526dab5395e5018f63164ef0d10522d75ca4c44d62c1ee3",
172
- "dist/esm/server/server.js.map": "3743325b664476176931989f2d762d53b48c5eb4bcbf3d81ab222c4231d026be",
173
- "package.json": "812251c1b6f091da2f7ab06c93446e5f7c19bf4715074919e38e956e0eca373b",
171
+ "dist/esm/server/server.js": "fcf74d2d6ddc19be2ceab561efc904a2b703507901a6a35c3646c4032cac56d6",
172
+ "dist/esm/server/server.js.map": "6c19f311146c60a1ccea89ac223a16ca44e690ac5ac4d8408cd19edc7066f83e",
173
+ "package.json": "5010182529b9f1d4624ff4abd02b8eb48dbbeb4ddf92ef4bc45dd6b332aed100",
174
174
  "ui/index.html": "7301a595d625dadcd424069e7bb978004bfb6118eddef7a223bd25449ca6e0eb",
175
175
  "ui/vendor/marked.min.js": "c68075672d976e4777390560baa112194855bd4404b13647da4855aae1f9360c"
176
176
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanqianx/project-knowledge",
3
- "version": "5.0.9-rc.10",
3
+ "version": "5.0.9-rc.12",
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": {
@@ -81,7 +81,7 @@
81
81
  "@lancedb/lancedb": "0.31.0",
82
82
  "@modelcontextprotocol/sdk": "1.29.0",
83
83
  "@sanqianx/ai-coding-event-bridge-console": "0.7.2",
84
- "@sanqianx/vector-hub": "1.0.8-rc.2",
84
+ "@sanqianx/vector-hub": "1.0.8-rc.3",
85
85
  "buffer": "^6.0.3",
86
86
  "cheerio": "^1.2.0",
87
87
  "claude-ai-workbench": "npm:@sanqianx/claude-ai-workbench@0.13.2-rc.4",
@@ -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.10",
4
+ "version": "5.0.9-rc.12",
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.10",
3
+ "version": "5.0.9-rc.12",
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.10",
9
+ "@sanqianx/project-knowledge@5.0.9-rc.12",
10
10
  "project-knowledge-mcp"
11
11
  ]
12
12
  }
@@ -3,11 +3,11 @@
3
3
  "modules": {
4
4
  "knowledge-engine": {
5
5
  "name": "@sanqianx/ai-coding-knowledge-engine",
6
- "version": "0.2.3-rc.4",
6
+ "version": "0.2.3-rc.6",
7
7
  "root": "_modules/knowledge-engine",
8
8
  "files": {
9
- "README.md": "df15aafdfe833186c1f655a1847171435214b96ad168c5eb44774fec82d28cf6",
10
- "package.json": "61e95ac2871a4e4e8964851161aac3c7fe4ef5015c8d03ec6ff1e9e53bbaa43f",
9
+ "README.md": "efcef635df01736a8672219642a76175f3059d23b466f529140d791ec75000d5",
10
+ "package.json": "09e32aacd4ec5c3b596e60f3210f62515c625844e31866261c5596937195db30",
11
11
  "src/analysis-contract.js": "fee063967d32eefc955cf0729f7dc8cb31bd690b85e22471c9059494a599c77a",
12
12
  "src/analysis-output.js": "95a3c19dcc9ab85d1dba7fee5b9aec80f9c000dfba89da3fd0be25a81e2fb680",
13
13
  "src/analysis-worker.js": "a105cabe6e1573b2d986b1e7a5aaf615e2fb53524156fc8e4e2c0a71f2c97e55",
@@ -19,7 +19,7 @@
19
19
  "src/index-request.js": "78f26b872299005499fff4f2d1f9e8f986784f2ff36a5cf2be2b1e7b7c7d9378",
20
20
  "src/knowledge-targets.js": "aa44ec285d16d7b1c0b63bf084058a1d6f867fa9929c753b6b0cbb24f7b20ee2",
21
21
  "src/memories.js": "0a8667e6daba99fa5022393951a28e96cdadf98af85b6af9a6be96c7f4e896fc",
22
- "src/retrieval.js": "bbb09cefc3c6ed692a51edfeecf6ac50619b8a2afbdf2034e0fdb5e00f4cfa68",
22
+ "src/retrieval.js": "4cfc2a6d11fcd480ac4e87818729e475b0c24917082e460594e62af0509afdd4",
23
23
  "src/runtime/README.md": "9be676eca76a7857b34d7357194e6f0ee733c22e61d962d53984715dbec7f673",
24
24
  "src/runtime/atomic-file.js": "9846b4b69db5ded811acf19a1181ef93615d93efaa542b858e552a7f3124ad23",
25
25
  "src/runtime/automation-config.js": "6498c5397be12b155829740595a1553d4dcd6eaa7db6ced3ef88fdc60218f00e",
@@ -36,10 +36,10 @@
36
36
  "src/runtime/knowledge-promotion.js": "c24aba505caf11cdc8faba763beffc65956c1330ef28ed5fbd6ae16eac640fa6",
37
37
  "src/runtime/knowledge-retrieval-service.js": "75444f495a9ad0720af0e57b8d27d7ac1325c78a768f4f68ebd86ebc2524945e",
38
38
  "src/runtime/layout.js": "c48fa1db62e5df1edefe13218e470c5ceea4ef2781293512c2c18e5c2ba0c7e9",
39
- "src/runtime/markdown-knowledge-indexer.js": "44a76a9adefad07e78f77b1106b10d6c1cc7873d76362df4c546892b21f3939c",
39
+ "src/runtime/markdown-knowledge-indexer.js": "4d6b5b955849d274ca0614ef030c94526da7c39ab0874f02c168d0681f5b1406",
40
40
  "src/runtime/scanner.js": "d99fa8d74a6fbbaae75ca49f62127e14cf9e48b1404e4b4d597ef39df5441410",
41
41
  "src/server.js": "7deff466d28b94ec8975cd87ebd55c59d0aa6b49a8dfa447b552b1d32aa9c4b7",
42
- "src/store.js": "71f0417c2c1e42b89429e3dee1adff7b2c09e86682cb3f4843ce6d9e5aafd7ec",
42
+ "src/store.js": "7dd1a60fd5338cf91ff8836c0c18f29b101dcaf17d4b9f07d07716799543f577",
43
43
  "ui/app.css": "7ad370c269e60a7b5ec907d81a607b2d16bd07b2d7c22a81f102dab51eeb2889",
44
44
  "ui/app.js": "33a2ba38f0dafbbb2e30a1eb3fc93476bfcaf528e124e1a9b2edd2fb69221e9e",
45
45
  "ui/index.html": "ce3565cfefd4838b11d37a91a906ef26ca5a1834844fe3f7c897b56851a3c418"