speccore 8.3.223 → 8.3.224
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.
|
@@ -23,6 +23,8 @@ export interface CachedIntent {
|
|
|
23
23
|
createdAt: string;
|
|
24
24
|
/** 最后命中时间 */
|
|
25
25
|
lastUsed: string;
|
|
26
|
+
/** v8.3.224+: 创建该条目时的 CLI 版本(识别逻辑升级后旧缓存自动失效) */
|
|
27
|
+
cliVersion: string;
|
|
26
28
|
}
|
|
27
29
|
export interface IntentCache {
|
|
28
30
|
version: string;
|
|
@@ -32,10 +34,13 @@ export interface IntentCache {
|
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
36
|
* 查询缓存:精确 → 归一化语义 → 编辑距离模糊
|
|
37
|
+
* v8.3.224+: 条目级 cliVersion 校验——旧版本 CLI 产生的缓存条目不再命中,
|
|
38
|
+
* 避免识别逻辑修复后被旧错误结果固化(如「从切分功能单元到开发」被旧缓存固化为歧义)。
|
|
35
39
|
*/
|
|
36
40
|
export declare function getCachedIntent(input: string): Promise<AskResult | null>;
|
|
37
41
|
/**
|
|
38
42
|
* 写入缓存
|
|
43
|
+
* v8.3.224+: 拒绝缓存 ambiguous(歧义是中间态,固化会把旧错误结果永久锁定)
|
|
39
44
|
*/
|
|
40
45
|
export declare function cacheIntent(input: string, result: AskResult, source?: string): Promise<void>;
|
|
41
46
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent-cache.d.ts","sourceRoot":"","sources":["../../src/core/intent-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"intent-cache.d.ts","sourceRoot":"","sources":["../../src/core/intent-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,MAAM,WAAW,YAAY;IAC3B,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB;IACpB,MAAM,EAAE,SAAS,CAAC;IAClB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,+BAA+B;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAgED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAwD9E;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B7G;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAGrF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjE;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CASrG"}
|
|
@@ -16,11 +16,12 @@ exports.markSolidified = markSolidified;
|
|
|
16
16
|
exports.getCacheStats = getCacheStats;
|
|
17
17
|
const fs_extra_1 = require("fs-extra");
|
|
18
18
|
const logger_1 = require("../utils/logger");
|
|
19
|
+
const package_json_1 = require("../../package.json");
|
|
19
20
|
// ═══════════════════════════════════════════════════════════
|
|
20
21
|
// 常量
|
|
21
22
|
// ═══════════════════════════════════════════════════════════
|
|
22
23
|
const CACHE_PATH = '.speccore/local/intent-cache.json';
|
|
23
|
-
const CACHE_VERSION = '1.
|
|
24
|
+
const CACHE_VERSION = '1.2'; // 1.2: 条目级 cliVersion,识别逻辑升级后旧缓存自动失效
|
|
24
25
|
const MAX_ENTRIES = 200;
|
|
25
26
|
const FUZZY_THRESHOLD = 2; // 编辑距离阈值
|
|
26
27
|
/** 停用词表 */
|
|
@@ -71,27 +72,31 @@ async function saveCache(cache) {
|
|
|
71
72
|
// ═══════════════════════════════════════════════════════════
|
|
72
73
|
/**
|
|
73
74
|
* 查询缓存:精确 → 归一化语义 → 编辑距离模糊
|
|
75
|
+
* v8.3.224+: 条目级 cliVersion 校验——旧版本 CLI 产生的缓存条目不再命中,
|
|
76
|
+
* 避免识别逻辑修复后被旧错误结果固化(如「从切分功能单元到开发」被旧缓存固化为歧义)。
|
|
74
77
|
*/
|
|
75
78
|
async function getCachedIntent(input) {
|
|
76
79
|
const cache = await loadCache();
|
|
80
|
+
// v8.3.224+: 条目级 cliVersion 校验,旧版本 CLI 产生的条目不再命中
|
|
81
|
+
const isStale = (entry) => entry.cliVersion !== package_json_1.version;
|
|
82
|
+
const touch = async (entry, hitType, extra = '') => {
|
|
83
|
+
entry.hitCount++;
|
|
84
|
+
entry.lastUsed = new Date().toISOString();
|
|
85
|
+
await saveCache(cache);
|
|
86
|
+
logger_1.logger.info(`💾 意图缓存命中(${hitType}): "${input.slice(0, 30)}..."${extra} → ${entry.result.summary.slice(0, 30)}`);
|
|
87
|
+
};
|
|
77
88
|
// 1. 精确匹配
|
|
78
89
|
const exact = cache.entries[input];
|
|
79
|
-
if (exact) {
|
|
80
|
-
exact
|
|
81
|
-
exact.lastUsed = new Date().toISOString();
|
|
82
|
-
await saveCache(cache);
|
|
83
|
-
logger_1.logger.info(`💾 意图缓存命中(精确): "${input.slice(0, 30)}..." → ${exact.result.summary.slice(0, 30)}`);
|
|
90
|
+
if (exact && !isStale(exact)) {
|
|
91
|
+
await touch(exact, '精确');
|
|
84
92
|
return exact.result;
|
|
85
93
|
}
|
|
86
94
|
// 2. 归一化语义匹配("分析一下登录" ≈ "分析登录功能")
|
|
87
95
|
const normalized = normalizeInput(input);
|
|
88
96
|
if (normalized) {
|
|
89
97
|
for (const entry of Object.values(cache.entries)) {
|
|
90
|
-
if (entry.normalizedInput === normalized) {
|
|
91
|
-
entry.
|
|
92
|
-
entry.lastUsed = new Date().toISOString();
|
|
93
|
-
await saveCache(cache);
|
|
94
|
-
logger_1.logger.info(`💾 意图缓存命中(语义): "${input.slice(0, 30)}..." ≈ "${entry.input.slice(0, 30)}..."`);
|
|
98
|
+
if (!isStale(entry) && entry.normalizedInput === normalized) {
|
|
99
|
+
await touch(entry, '语义', ` ≈ "${entry.input.slice(0, 30)}..."`);
|
|
95
100
|
return entry.result;
|
|
96
101
|
}
|
|
97
102
|
}
|
|
@@ -99,25 +104,36 @@ async function getCachedIntent(input) {
|
|
|
99
104
|
// 3. 模糊匹配(编辑距离 ≤ 2,且长度比例合理)
|
|
100
105
|
// 防止短字符串误匹配:如"补充测试"匹配"补充分析"(编辑距离 2 但语义完全不同)
|
|
101
106
|
for (const [cachedInput, entry] of Object.entries(cache.entries)) {
|
|
107
|
+
if (isStale(entry))
|
|
108
|
+
continue;
|
|
102
109
|
const dist = levenshtein(input, cachedInput);
|
|
103
110
|
const maxLen = Math.max(input.length, cachedInput.length);
|
|
104
111
|
const minLen = Math.min(input.length, cachedInput.length);
|
|
105
112
|
// 长度比例保护:编辑距离 ≤ 2 时,要求较短串长度 ≥ 6(避免 4 字中文短句误匹配)
|
|
106
113
|
// 且编辑距离占较长串比例 ≤ 30%(避免长串被短串误匹配)
|
|
107
114
|
if (dist <= FUZZY_THRESHOLD && minLen >= 6 && dist / maxLen <= 0.3) {
|
|
108
|
-
entry.
|
|
109
|
-
entry.lastUsed = new Date().toISOString();
|
|
110
|
-
await saveCache(cache);
|
|
111
|
-
logger_1.logger.info(`💾 意图缓存命中(模糊): "${input.slice(0, 30)}..." ≈ "${cachedInput.slice(0, 30)}..."`);
|
|
115
|
+
await touch(entry, '模糊', ` ≈ "${cachedInput.slice(0, 30)}..."`);
|
|
112
116
|
return entry.result;
|
|
113
117
|
}
|
|
114
118
|
}
|
|
119
|
+
// 惰性清理:存在旧版本条目时重建缓存结构,避免旧条目无限堆积
|
|
120
|
+
if (Object.keys(cache.entries).some(k => isStale(cache.entries[k]))) {
|
|
121
|
+
const totalBefore = Object.keys(cache.entries).length;
|
|
122
|
+
cache.entries = Object.fromEntries(Object.entries(cache.entries).filter(([, e]) => !isStale(e)));
|
|
123
|
+
await saveCache(cache);
|
|
124
|
+
logger_1.logger.info(`💾 意图缓存:已清除 ${totalBefore - Object.keys(cache.entries).length} 条旧版本缓存(当前 CLI ${package_json_1.version})`);
|
|
125
|
+
}
|
|
115
126
|
return null;
|
|
116
127
|
}
|
|
117
128
|
/**
|
|
118
129
|
* 写入缓存
|
|
130
|
+
* v8.3.224+: 拒绝缓存 ambiguous(歧义是中间态,固化会把旧错误结果永久锁定)
|
|
119
131
|
*/
|
|
120
132
|
async function cacheIntent(input, result, source = 'host-ai') {
|
|
133
|
+
if (result.mode === 'ambiguous') {
|
|
134
|
+
logger_1.logger.debug(`💾 意图缓存:跳过 ambiguous 结果(歧义是中间态,不固化): "${input.slice(0, 30)}..."`);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
121
137
|
const cache = await loadCache();
|
|
122
138
|
cache.entries[input] = {
|
|
123
139
|
input,
|
|
@@ -127,6 +143,7 @@ async function cacheIntent(input, result, source = 'host-ai') {
|
|
|
127
143
|
hitCount: 1,
|
|
128
144
|
createdAt: new Date().toISOString(),
|
|
129
145
|
lastUsed: new Date().toISOString(),
|
|
146
|
+
cliVersion: package_json_1.version,
|
|
130
147
|
};
|
|
131
148
|
// 超限清理:保留最近使用的 150 条
|
|
132
149
|
const entriesList = Object.entries(cache.entries);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent-cache.js","sourceRoot":"","sources":["../../src/core/intent-cache.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;
|
|
1
|
+
{"version":3,"file":"intent-cache.js","sourceRoot":"","sources":["../../src/core/intent-cache.ts"],"names":[],"mappings":"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"}
|